# HG changeset patch # User Mads Kiilerich # Date 1528328762 -7200 # Node ID b3289fef0daa78f37bd14fbe70f668a8edbf8eb9 # Parent 57a733313e4f5cc48bf4b0d7dab96e652d7dcf49# Parent 42788d5f5967f7fd22dadc99c3f8ebbf66885660 Merge stable diff -r 42788d5f5967 -r b3289fef0daa .coveragerc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.coveragerc Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,19 @@ +[run] +omit = + # the bin scripts are not part of the Kallithea web app + kallithea/bin/* + # we ship with no active extensions + kallithea/config/rcextensions/* + # dbmigrate and paster_commands are not part of the Kallithea web app + kallithea/lib/dbmigrate/* + kallithea/lib/paster_commands/* + # the tests themselves should not be part of the coverage report + kallithea/tests/* + # the scm hooks are not run in the kallithea process + kallithea/config/post_receive_tmpl.py + kallithea/config/pre_receive_tmpl.py + +[paths] +source = + kallithea/ + **/workspace/*/kallithea diff -r 42788d5f5967 -r b3289fef0daa .hgignore --- a/.hgignore Wed Jun 06 21:37:21 2018 +0200 +++ b/.hgignore Thu Jun 07 01:46:02 2018 +0200 @@ -8,6 +8,7 @@ *.mo .eggs/ tarballcache/ +node_modules/ syntax: regexp ^rcextensions @@ -16,12 +17,13 @@ ^docs/build/ ^docs/_build/ ^data$ -^kallithea/tests/data$ ^sql_dumps/ ^\.settings$ ^\.project$ ^\.pydevproject$ ^\.coverage$ +^kallithea/public/css/style\.css(\.map)?$ +^theme\.less$ ^kallithea\.db$ ^test\.db$ ^Kallithea\.egg-info$ @@ -29,3 +31,4 @@ ^fabfile.py ^\.idea$ ^\.cache$ +/__pycache__$ diff -r 42788d5f5967 -r b3289fef0daa .travis.yml --- a/.travis.yml Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -language: python -python: - - "2.6" - - "2.7" - -env: - - TEST_DB=sqlite:////tmp/kallithea_test.sqlite - - TEST_DB=mysql://root@127.0.0.1/kallithea_test - - TEST_DB=postgresql://postgres@127.0.0.1/kallithea_test - -services: - - mysql - - postgresql - -# command to install dependencies -before_script: - - mysql -e 'create database kallithea_test;' - - psql -c 'create database kallithea_test;' -U postgres - - git --version - -before_install: - - sudo apt-get remove git - - sudo add-apt-repository ppa:pdoes/ppa -y - - sudo apt-get update -y - - sudo apt-get install git -y - -install: - - pip install mysql-python psycopg2 mock unittest2 - - pip install . --use-mirrors - -# command to run tests -script: nosetests - -notifications: - email: - - ci@kallithea-scm.org - irc: "irc.freenode.org#kallithea" - -branches: - only: - - master diff -r 42788d5f5967 -r b3289fef0daa CONTRIBUTORS --- a/CONTRIBUTORS Wed Jun 06 21:37:21 2018 +0200 +++ b/CONTRIBUTORS Thu Jun 07 01:46:02 2018 +0200 @@ -1,23 +1,41 @@ List of contributors to Kallithea project: + Dominik Ruf 2012 2014-2018 Thomas De Schampheleire 2014-2018 Branko Majic 2015 2018 Mads Kiilerich 2016-2018 + Chris Rule 2018 + Patrick Vane 2018 Mads Kiilerich 2012-2017 Unity Technologies 2012-2017 Andrew Shadura 2012 2014-2017 - Dominik Ruf 2012 2014 2016-2017 - Étienne Gilli 2015 2017 + Étienne Gilli 2015-2017 + Søren Løvborg 2015-2017 Sam Jaques 2015 2017 + Asterios Dimitriou 2016-2017 + Alessandro Molina 2017 + Anton Schur 2017 Ching-Chen Mao 2017 + Eivind Tagseth 2017 FUJIWARA Katsunori 2017 + Holger Schramm 2017 + Karl Goetz 2017 + Lars Kruse 2017 + Marko Semet 2017 Viktar Vauchkevich 2017 Takumi IINO 2012-2016 - Søren Løvborg 2015-2016 + Jan Heylen 2015-2016 + Robert Martinez 2015-2016 + Robert Rauch 2015-2016 + Angel Ezquerra 2016 Anton Shestakov 2016 Brandon Jones 2016 + Kateryna Musina 2016 Konstantin Veretennicov 2016 + Oscar Curero 2016 Robert James Dennington 2016 + timeless@gmail.com 2016 + YFdyh000 2016 Aras Pranckevičius 2012-2013 2015 Sean Farley 2013-2015 Christian Oyarzun 2014-2015 @@ -33,7 +51,7 @@ duanhongyi 2015 EriCSN Chang 2015 Grzegorz Krason 2015 - Jan Heylen 2015 + Jiří Suchan 2015 Kazunari Kobayashi 2015 Kevin Bullock 2015 kobanari 2015 @@ -46,11 +64,10 @@ Nick High 2015 Niemand Jedermann 2015 Peter Vitt 2015 - Robert Martinez 2015 - Robert Rauch 2015 Ronny Pfannschmidt 2015 Tuux 2015 Viktar Palstsiuk 2015 + Ante Ilic 2014 Bradley M. Kuhn 2014 Calinou 2014 Daniel Anderson 2014 diff -r 42788d5f5967 -r b3289fef0daa Jenkinsfile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Jenkinsfile Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,212 @@ +def createvirtualenv = '' +def activatevirtualenv = '' + +node { + properties([[$class: 'BuildDiscarderProperty', + strategy: [$class: 'LogRotator', + artifactDaysToKeepStr: '', + artifactNumToKeepStr: '10', + daysToKeepStr: '', + numToKeepStr: '']]]); + if (isUnix()) { + createvirtualenv = 'rm -r $JENKINS_HOME/venv/$JOB_NAME || true && virtualenv $JENKINS_HOME/venv/$JOB_NAME' + activatevirtualenv = '. $JENKINS_HOME/venv/$JOB_NAME/bin/activate' + } else { + createvirtualenv = 'rmdir /s /q %JENKINS_HOME%\\venv\\%JOB_NAME% || true && virtualenv %JENKINS_HOME%\\venv\\%JOB_NAME%' + activatevirtualenv = 'call %JENKINS_HOME%\\venv\\%JOB_NAME%\\Scripts\\activate.bat' + } + + stage('checkout') { + checkout scm + if (isUnix()) { + sh 'hg --config extensions.purge= purge --all' + } else { + bat 'hg --config extensions.purge= purge --all' + } + } + stage('virtual env') { + def virtualenvscript = """$createvirtualenv + $activatevirtualenv + python -m pip install --upgrade pip + pip install --upgrade setuptools + pip install --upgrade pylint + pip install --upgrade pytest-cov + """ + if (isUnix()) { + virtualenvscript += """ + pip install --upgrade python-ldap + pip install --upgrade python-pam + """ + sh virtualenvscript + } else { + bat virtualenvscript + } + } + stage('setup') { + def virtualenvscript = """$activatevirtualenv + pip install --upgrade -e . + pip install -r dev_requirements.txt + python setup.py compile_catalog + """ + if (isUnix()) { + sh virtualenvscript + } else { + bat virtualenvscript + } + stash name: 'kallithea', useDefaultExcludes: false + } + stage('pylint') { + sh script: """$activatevirtualenv + pylint -j 0 --disable=C -f parseable kallithea > pylint.out + """, returnStatus: true + archiveArtifacts 'pylint.out' + try { + step([$class: 'WarningsPublisher', canComputeNew: false, canResolveRelativePaths: false, defaultEncoding: '', excludePattern: '', healthy: '', includePattern: '', messagesPattern: '', parserConfigurations: [[parserName: 'PyLint', pattern: 'pylint.out']], unHealthy: '']) + } catch (java.lang.IllegalArgumentException exc) { + echo "You need to install the 'Warnings Plug-in' to display the pylint report." + currentBuild.result = 'UNSTABLE' + echo "Caught: ${exc}" + } + } +} + +def pytests = [:] +pytests['sqlite'] = { + node { + ws { + deleteDir() + unstash name: 'kallithea' + if (isUnix()) { + sh script: """$activatevirtualenv + py.test -p no:sugar --cov-config .coveragerc --junit-xml=pytest_sqlite.xml --cov=kallithea + """, returnStatus: true + } else { + bat script: """$activatevirtualenv + py.test -p no:sugar --cov-config .coveragerc --junit-xml=pytest_sqlite.xml --cov=kallithea + """, returnStatus: true + } + sh 'sed --in-place "s/\\(classname=[\'\\"]\\)/\\1SQLITE./g" pytest_sqlite.xml' + archiveArtifacts 'pytest_sqlite.xml' + junit 'pytest_sqlite.xml' + writeFile(file: '.coverage.sqlite', text: readFile('.coverage')) + stash name: 'coverage.sqlite', includes: '.coverage.sqlite' + } + } +} + +pytests['de'] = { + node { + if (isUnix()) { + ws { + deleteDir() + unstash name: 'kallithea' + withEnv(['LANG=de_DE.UTF-8', + 'LANGUAGE=de', + 'LC_ADDRESS=de_DE.UTF-8', + 'LC_IDENTIFICATION=de_DE.UTF-8', + 'LC_MEASUREMENT=de_DE.UTF-8', + 'LC_MONETARY=de_DE.UTF-8', + 'LC_NAME=de_DE.UTF-8', + 'LC_NUMERIC=de_DE.UTF-8', + 'LC_PAPER=de_DE.UTF-8', + 'LC_TELEPHONE=de_DE.UTF-8', + 'LC_TIME=de_DE.UTF-8', + ]) { + sh script: """$activatevirtualenv + py.test -p no:sugar --cov-config .coveragerc --junit-xml=pytest_de.xml --cov=kallithea + """, returnStatus: true + } + sh 'sed --in-place "s/\\(classname=[\'\\"]\\)/\\1DE./g" pytest_de.xml' + archiveArtifacts 'pytest_de.xml' + junit 'pytest_de.xml' + writeFile(file: '.coverage.de', text: readFile('.coverage')) + stash name: 'coverage.de', includes: '.coverage.de' + } + } + } +} +pytests['mysql'] = { + node { + if (isUnix()) { + ws { + deleteDir() + unstash name: 'kallithea' + sh """$activatevirtualenv + pip install --upgrade MySQL-python + """ + withEnv(['TEST_DB=mysql://kallithea:kallithea@jenkins_mysql/kallithea_test?charset=utf8']) { + if (isUnix()) { + sh script: """$activatevirtualenv + py.test -p no:sugar --cov-config .coveragerc --junit-xml=pytest_mysql.xml --cov=kallithea + """, returnStatus: true + } else { + bat script: """$activatevirtualenv + py.test -p no:sugar --cov-config .coveragerc --junit-xml=pytest_mysql.xml --cov=kallithea + """, returnStatus: true + } + } + sh 'sed --in-place "s/\\(classname=[\'\\"]\\)/\\1MYSQL./g" pytest_mysql.xml' + archiveArtifacts 'pytest_mysql.xml' + junit 'pytest_mysql.xml' + writeFile(file: '.coverage.mysql', text: readFile('.coverage')) + stash name: 'coverage.mysql', includes: '.coverage.mysql' + } + } + } +} +pytests['postgresql'] = { + node { + if (isUnix()) { + ws { + deleteDir() + unstash name: 'kallithea' + sh """$activatevirtualenv + pip install --upgrade psycopg2 + """ + withEnv(['TEST_DB=postgresql://kallithea:kallithea@jenkins_postgresql/kallithea_test']) { + if (isUnix()) { + sh script: """$activatevirtualenv + py.test -p no:sugar --cov-config .coveragerc --junit-xml=pytest_postgresql.xml --cov=kallithea + """, returnStatus: true + } else { + bat script: """$activatevirtualenv + py.test -p no:sugar --cov-config .coveragerc --junit-xml=pytest_postgresql.xml --cov=kallithea + """, returnStatus: true + } + } + sh 'sed --in-place "s/\\(classname=[\'\\"]\\)/\\1POSTGRES./g" pytest_postgresql.xml' + archiveArtifacts 'pytest_postgresql.xml' + junit 'pytest_postgresql.xml' + writeFile(file: '.coverage.postgresql', text: readFile('.coverage')) + stash name: 'coverage.postgresql', includes: '.coverage.postgresql' + } + } + } +} +stage('Tests') { + parallel pytests + node { + unstash 'coverage.sqlite' + unstash 'coverage.de' + unstash 'coverage.mysql' + unstash 'coverage.postgresql' + if (isUnix()) { + sh script: """$activatevirtualenv + coverage combine .coverage.sqlite .coverage.de .coverage.mysql .coverage.postgresql + coverage xml + """, returnStatus: true + } else { + bat script: """$activatevirtualenv + coverage combine .coverage.sqlite .coverage.de .coverage.mysql .coverage.postgresql + coverage xml + """, returnStatus: true + } + try { + step([$class: 'CoberturaPublisher', autoUpdateHealth: false, autoUpdateStability: false, coberturaReportFile: 'coverage.xml', failNoReports: false, failUnhealthy: false, failUnstable: false, maxNumberOfBuilds: 0, onlyStable: false, zoomCoverageChart: false]) + } catch (java.lang.IllegalArgumentException exc) { + echo "You need to install the pipeline compatible 'CoberturaPublisher Plug-in' to display the coverage report." + currentBuild.result = 'UNSTABLE' + echo "Caught: ${exc}" + } + } +} diff -r 42788d5f5967 -r b3289fef0daa LICENSE.md --- a/LICENSE.md Wed Jun 06 21:37:21 2018 +0200 +++ b/LICENSE.md Thu Jun 07 01:46:02 2018 +0200 @@ -22,20 +22,32 @@ of Kallithea. +Alembic +------- + +Kallithea incorporates an [Alembic](http://alembic.zzzcomputing.com/en/latest/) +"migration environment" in `kallithea/alembic`, portions of which is: + +Copyright © 2009-2016 by Michael Bayer. +Alembic is a trademark of Michael Bayer. + +and licensed under the MIT-permissive license, which is +[included in this distribution](MIT-Permissive-License.txt). + Bootstrap --------- -Kallithea incorporates parts of the Javascript system called +Kallithea incorporates the web framework called [Bootstrap](http://getbootstrap.com/), which is: -Copyright © 2012 Twitter, Inc. +Copyright © 2011-2016 Twitter, Inc. -and licensed under -[the Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html). - -A copy of the Apache License 2.0 is also included in this distribution in its -entirety in the file Apache-License-2.0.txt +and licensed under the MIT-permissive license, which is +[included in this distribution](MIT-Permissive-License.txt), +which can be found together with its Corresponding Source in +https://github.com/twbs/bootstrap at tag v3.3.7 (mirrored at +https://kallithea-scm.org/repos/mirror/bootstrap/ ). @@ -62,29 +74,27 @@ ------ Kallithea incorporates the Javascript system called -[jQuery](http://jquery.org/), -[herein](kallithea/public/js/jquery-1.11.1.min.js), and the Corresponding -Source can be found in https://github.com/jquery/jquery at tag 1.11.1 -(mirrored at https://kallithea-scm.org/repos/mirror/jquery/files/1.11.1/ ). +[jQuery](http://jquery.org/), [herein](kallithea/public/js/jquery.min.js), +which can be found together with its Corresponding Source in +https://github.com/jquery/jquery at tag 1.12.3 (mirrored at +https://kallithea-scm.org/repos/mirror/jquery/files/1.12.3/ ). It is Copyright 2013 jQuery Foundation and other contributors http://jquery.com/ and is under an [MIT-permissive license](MIT-Permissive-License.txt). -Mousetrap ---------- - -Kallithea incorporates parts of the Javascript system called -[Mousetrap](http://craig.is/killing/mice/), which is: +DataTables +---------- - Copyright 2013 Craig Campbell +Kallithea incorporates the Javascript system called +[DataTables](http://www.datatables.net/) +which can be found together with their Corresponding Source in +https://github.com/DataTables/DataTables at tag 1.10.13 (mirrored at +https://kallithea-scm.org/repos/mirror/DataTables/files/1.10.13/ ). -and licensed under -[the Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html). - -A [copy of the Apache License 2.0](Apache-License-2.0.txt) is also included -in this distribution. +It is Copyright 2008-2015 SpryMedia Ltd. and is under an +[MIT-permissive license](MIT-Permissive-License.txt). @@ -213,9 +223,9 @@ git checkout hudson-yui2-2800 ln -sf JumpToPageDropDown.js src/paginator/js/JumpToPageDropdown.js # work around inconsistent casing rm -f tmp.js - for m in yahoo event dom connection animation dragdrop element datasource autocomplete container event-delegate json datatable paginator; do - rm -f build/\$m/\$m.js - ( cd src/\$m && ant build deploybuild ) && sed -e 's,@VERSION@,2.9.0,g' -e 's,@BUILD@,2800,g' build/\$m/\$m.js >> tmp.js + for m in yahoo event dom animation datasource autocomplete event-delegate; do + rm -f build/$m/$m.js + ( cd src/$m && ant build deploybuild ) && sed -e 's,@VERSION@,2.9.0,g' -e 's,@BUILD@,2800,g' build/$m/$m.js >> tmp.js done java -jar ../builder/componentbuild/lib/yuicompressor/yuicompressor-2.4.4.jar tmp.js -o yui.2.9.js @@ -225,8 +235,8 @@ -Flot ----- +YUI Flot +-------- Kallithea incorporates some CSS from a system called [Flot](http://code.google.com/p/flot/), which is: @@ -241,17 +251,35 @@ -Migrate -------- +Flot +---- + +Kallithea incorporates some parts of a Javascript system called +[Flot](http://www.flotcharts.org/), which is: + +Copyright (c) 2007-2014 IOLA and Ole Laursen -Kallithea incorporates in kallithea/lib/dbmigrate/migrate parts of the Python -system called [Migrate or sqlalchemy-migrate](https://github.com/stackforge/sqlalchemy-migrate), -which is: +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: -Copyright (c) 2009 Evan Rosson, Jan Dittberner, Domen Kožar +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -and licensed under the MIT-permissive license, which is -[included in this distribution](MIT-Permissive-License.txt). +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + Icon fonts @@ -261,7 +289,7 @@ [Font Awesome](http://fontawesome.io) and [GitHub Octicons](https://octicons.github.com) for icons. Font Awesome is: -Copyright (c) 2012, Dave Gandy +Copyright (c) 2016, Dave Gandy Octicons is: diff -r 42788d5f5967 -r b3289fef0daa MANIFEST.in --- a/MANIFEST.in Wed Jun 06 21:37:21 2018 +0200 +++ b/MANIFEST.in Thu Jun 07 01:46:02 2018 +0200 @@ -1,21 +1,30 @@ +include .coveragerc include Apache-License-2.0.txt include CONTRIBUTORS include COPYING +include Jenkinsfile include LICENSE-MERGELY.html include LICENSE.md include MIT-Permissive-License.txt include README.rst +include dev_requirements.txt include development.ini +include pytest.ini +include requirements.txt +include tox.ini +include package.json recursive-include docs * recursive-include init.d * +recursive-include kallithea/alembic * include kallithea/bin/ldap_sync.conf -include kallithea/bin/template.ini.mako -include kallithea/config/deployment.ini_tmpl +include kallithea/lib/paster_commands/template.ini.mako recursive-include kallithea/i18n * -recursive-include kallithea/lib/dbmigrate *.py_tmpl README migrate.cfg recursive-include kallithea/public * +recursive-include node_modules/bootstrap * recursive-include kallithea/templates * recursive-include kallithea/tests/fixtures * recursive-include kallithea/tests/scripts * -include kallithea/tests/test.ini +include kallithea/tests/models/test_dump_html_mails.ref.html +include kallithea/tests/performance/test_vcs.py include kallithea/tests/vcs/aconfig +recursive-include scripts * diff -r 42788d5f5967 -r b3289fef0daa README.rst --- a/README.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/README.rst Thu Jun 07 01:46:02 2018 +0200 @@ -162,76 +162,14 @@ install it via the command: ``pip install sphinx`` . -Converting from RhodeCode -------------------------- - -Currently, you have two options for working with an existing RhodeCode -database: - -- keep the database unconverted (intended for testing and evaluation) -- convert the database in a one-time step - -Maintaining interoperability -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Interoperability with RhodeCode 2.2.X installations is provided so you don't -have to immediately commit to switching to Kallithea. This option will most -likely go away once the two projects have diverged significantly. - -To run Kallithea on a RhodeCode database, run:: - - echo "BRAND = 'rhodecode'" > kallithea/brand.py - -This location will depend on where you installed Kallithea. If you installed -via:: - - python2 setup.py install - -then you will find this location at -``$VIRTUAL_ENV/lib/python2.7/site-packages/Kallithea-0.1-py2.7.egg/kallithea``. - -One-time conversion -~~~~~~~~~~~~~~~~~~~ +Migrating from RhodeCode +------------------------ -Alternatively, if you would like to convert the database for good, you can use -a helper script provided by Kallithea. This script will operate directly on the -database, using the database string you can find in your ``production.ini`` (or -``development.ini``) file. For example, if using SQLite:: - - cd /path/to/kallithea - cp /path/to/rhodecode/rhodecode.db kallithea.db - pip install sqlalchemy-migrate - python2 kallithea/bin/rebranddb.py sqlite:///kallithea.db - -.. Note:: - - If you started out using the branding interoperability approach mentioned - above, watch out for stray brand.pyc after removing brand.py. - -Git hooks -~~~~~~~~~ - -After switching to Kallithea, it will be necessary to update the Git_ hooks in -your repositories. If not, the Git_ hooks from RhodeCode will still be called, -which will cause ``git push`` to fail every time. - -If you do not have any custom Git_ hooks deployed, perform the following steps -(this may take some time depending on the number and size of repositories you -have): - -1. Log-in as an administrator. - -2. Open page *Admin > Settings > Remap and Rescan*. - -3. Turn on the option **Install Git Hooks**. - -4. Turn on the option **Overwrite existing Git hooks**. - -5. Click on the button **Rescan Repositories**. - -If you do have custom hooks, you will need to merge those changes manually. In -order to get sample hooks from Kallithea, the easiest way is to create a new Git_ -repository, and have a look at the hooks deployed there. +Kallithea 0.3.2 and earlier supports migrating from an existing RhodeCode +installation. To migrate, install Kallithea 0.3.2 and follow the +instructions in the 0.3.2 README to perform a one-time conversion of the +database from RhodeCode to Kallithea, before upgrading to this version +of Kallithea. .. _virtualenv: http://pypi.python.org/pypi/virtualenv diff -r 42788d5f5967 -r b3289fef0daa dev_requirements.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dev_requirements.txt Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,10 @@ +babel >= 0.9.6, < 2.4 +waitress >= 0.8.8, < 1.0 +pytest ~= 3.0, >= 3.3.0 +pytest-runner +pytest-sugar>=0.7.0 +pytest-benchmark +pytest-localserver +mock +sphinx +webtest < 3 diff -r 42788d5f5967 -r b3289fef0daa development.ini --- a/development.ini Wed Jun 06 21:37:21 2018 +0200 +++ b/development.ini Thu Jun 07 01:46:02 2018 +0200 @@ -1,19 +1,12 @@ ################################################################################ ################################################################################ -# Kallithea - Development config: # -# listening on *:5000 # -# sqlite and kallithea.db # -# initial_repo_scan = true # -# set debug = true # -# verbose and colorful logging # +# Kallithea - config file generated with kallithea-config # # # # The %(here)s variable will be replaced with the parent directory of this file# ################################################################################ ################################################################################ [DEFAULT] -debug = true -pdebug = false ################################################################################ ## Email settings ## @@ -39,43 +32,39 @@ #email_prefix = [Kallithea] ## Recipients for error emails and fallback recipients of application mails. -## Multiple addresses can be specified, space-separated. +## Multiple addresses can be specified, comma-separated. ## Only addresses are allowed, do not add any name part. ## Default: #email_to = ## Examples: #email_to = admin@example.com -#email_to = admin@example.com another_admin@example.com +#email_to = admin@example.com,another_admin@example.com +email_to = ## 'From' header for error emails. You can optionally add a name. -## Default: -#error_email_from = pylons@yourapp.com +## Default: (none) ## Examples: #error_email_from = Kallithea Errors -#error_email_from = paste_error@example.com +#error_email_from = kallithea_errors@example.com +error_email_from = ## SMTP server settings -## Only smtp_server is mandatory. All other settings take the specified default -## values. -#smtp_server = smtp.example.com +## If specifying credentials, make sure to use secure connections. +## Default: Send unencrypted unauthenticated mails to the specified smtp_server. +## For "SSL", use smtp_use_ssl = true and smtp_port = 465. +## For "STARTTLS", use smtp_use_tls = true and smtp_port = 587. +smtp_server = #smtp_username = #smtp_password = -#smtp_port = 25 -#smtp_use_tls = false +smtp_port = #smtp_use_ssl = false -## SMTP authentication parameters to use (e.g. LOGIN PLAIN CRAM-MD5, etc.). -## If empty, use any of the authentication parameters supported by the server. -#smtp_auth = +#smtp_use_tls = false +## Entry point for 'gearbox serve' [server:main] -## PASTE ## -#use = egg:Paste#http -## nr of worker threads to spawn -#threadpool_workers = 1 -## max request before thread respawn -#threadpool_max_requests = 100 -## option to use threads of process -#use_threadpool = true +#host = 127.0.0.1 +host = 0.0.0.0 +port = 5000 ## WAITRESS ## use = egg:waitress#main @@ -87,85 +76,6 @@ ## windows systems. #asyncore_use_poll = True -## GUNICORN ## -#use = egg:gunicorn#main -## number of process workers. You must set `instance_id = *` when this option -## is set to more than one worker -#workers = 1 -## process name -#proc_name = kallithea -## type of worker class, one of sync, eventlet, gevent, tornado -## recommended for bigger setup is using of of other than sync one -#worker_class = sync -#max_requests = 1000 -## ammount of time a worker can handle request before it gets killed and -## restarted -#timeout = 3600 - -## UWSGI ## -## run with uwsgi --ini-paste-logged -#[uwsgi] -#socket = /tmp/uwsgi.sock -#master = true -#http = 127.0.0.1:5000 - -## set as deamon and redirect all output to file -#daemonize = ./uwsgi_kallithea.log - -## master process PID -#pidfile = ./uwsgi_kallithea.pid - -## stats server with workers statistics, use uwsgitop -## for monitoring, `uwsgitop 127.0.0.1:1717` -#stats = 127.0.0.1:1717 -#memory-report = true - -## log 5XX errors -#log-5xx = true - -## Set the socket listen queue size. -#listen = 256 - -## Gracefully Reload workers after the specified amount of managed requests -## (avoid memory leaks). -#max-requests = 1000 - -## enable large buffers -#buffer-size = 65535 - -## socket and http timeouts ## -#http-timeout = 3600 -#socket-timeout = 3600 - -## Log requests slower than the specified number of milliseconds. -#log-slow = 10 - -## Exit if no app can be loaded. -#need-app = true - -## Set lazy mode (load apps in workers instead of master). -#lazy = true - -## scaling ## -## set cheaper algorithm to use, if not set default will be used -#cheaper-algo = spare - -## minimum number of workers to keep at all times -#cheaper = 1 - -## number of workers to spawn at startup -#cheaper-initial = 1 - -## maximum number of workers that can be spawned -#workers = 4 - -## how many workers should be spawned at a time -#cheaper-step = 1 - -## COMMON ## -host = 0.0.0.0 -port = 5000 - ## middleware for hosting the WSGI application under a URL prefix #[filter:proxy-prefix] #use = egg:PasteDeploy#prefix @@ -178,29 +88,26 @@ full_stack = true static_files = true -## Available Languages: -## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW -lang = + +## Internationalization (see setup documentation for details) +## By default, the language requested by the browser is used if available. +#i18n.enable = false +## Fallback language, empty for English (valid values are the names of subdirectories in kallithea/i18n): +i18n.lang = + cache_dir = %(here)s/data index_dir = %(here)s/data/index -## perform a full repository scan on each server start, this should be -## set to false after first startup, to allow faster server restarts. -#initial_repo_scan = false -initial_repo_scan = true - ## uncomment and set this path to use archive download cache archive_cache_dir = %(here)s/tarballcache ## change this to unique ID for security +#app_instance_uuid = VERY-SECRET app_instance_uuid = development-not-secret ## cut off limit for large diffs (size in bytes) cut_off_limit = 256000 -## use cache version of scm repo everywhere -vcs_full_cache = true - ## force https in Kallithea, fixes https redirects, assumes it's always https force_https = false @@ -226,6 +133,11 @@ show_sha_length = 12 show_revision_number = false +## Canonical URL to use when creating full URLs in UI and texts. +## Useful when the site is available under different names or protocols. +## Defaults to what is provided in the WSGI environment. +#canonical_url = https://kallithea.example.com/repos + ## gist URL alias, used to create nicer urls for gist. This should be an ## url that does rewrites to _admin/gists/. ## example: http://gist.example.com/{gistid}. Empty means use the internal @@ -245,46 +157,50 @@ # FilesController:archivefile ## default encoding used to convert from and to unicode -## can be also a comma seperated list of encoding in case of mixed encodings +## can be also a comma separated list of encoding in case of mixed encodings default_encoding = utf8 ## issue tracker for Kallithea (leave blank to disable, absent for default) #bugtracker = https://bitbucket.org/conservancy/kallithea/issues -## issue tracking mapping for commits messages -## comment out issue_pat, issue_server, issue_prefix to enable +## issue tracking mapping for commit messages, comments, PR descriptions, ... +## Refer to the documentation ("Integration with issue trackers") for more details. -## pattern to get the issues from commit messages -## default one used here is # with a regex passive group for `#` -## {id} will be all groups matched from this pattern +## regular expression to match issue references +## This pattern may/should contain parenthesized groups, that can +## be referred to in issue_server_link or issue_sub using Python backreferences +## (e.g. \1, \2, ...). You can also create named groups with '(?P)'. +## To require mandatory whitespace before the issue pattern, use: +## (?:^|(?<=\s)) before the actual pattern, and for mandatory whitespace +## behind the issue pattern, use (?:$|(?=\s)) after the actual pattern. -issue_pat = (?:\s*#)(\d+) +issue_pat = #(\d+) -## server url to the issue, each {id} will be replaced with match -## fetched from the regex and {repo} is replaced with full repository name -## including groups {repo_name} is replaced with just name of repo - -issue_server_link = https://issues.example.com/{repo}/issue/{id} +## server url to the issue +## This pattern may/should contain backreferences to parenthesized groups in issue_pat. +## A backreference can be \1, \2, ... or \g if you specified a named group +## called 'groupname' in issue_pat. +## The special token {repo} is replaced with the full repository name +## including repository groups, while {repo_name} is replaced with just +## the name of the repository. -## prefix to add to link to indicate it's an url -## #314 will be replaced by +issue_server_link = https://issues.example.com/{repo}/issue/\1 -issue_prefix = # +## substitution pattern to use as the link text +## If issue_sub is empty, the text matched by issue_pat is retained verbatim +## for the link text. Otherwise, the link text is that of issue_sub, with any +## backreferences to groups in issue_pat replaced. -## issue_pat, issue_server_link, issue_prefix can have suffixes to specify +issue_sub = + +## issue_pat, issue_server_link and issue_sub can have suffixes to specify ## multiple patterns, to other issues server, wiki or others ## below an example how to create a wiki pattern # wiki-some-id -> https://wiki.example.com/some-id -#issue_pat_wiki = (?:wiki-)(.+) -#issue_server_link_wiki = https://wiki.example.com/{id} -#issue_prefix_wiki = WIKI- - -## instance-id prefix -## a prefix key for this instance used for cache invalidation when running -## multiple instances of kallithea, make sure it's globally unique for -## all running kallithea instances. Leave empty if you don't use it -instance_id = +#issue_pat_wiki = wiki-(\S+) +#issue_server_link_wiki = https://wiki.example.com/\1 +#issue_sub_wiki = WIKI-\1 ## alternative return HTTP header for failed authentication. Default HTTP ## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with @@ -301,19 +217,29 @@ ## allows to setup custom hooks in settings page allow_custom_hooks_settings = True +## extra extensions for indexing, space separated and without the leading '.'. +# index.extensions = +# gemfile +# lock + +## extra filenames for indexing, space separated +# index.filenames = +# .dockerignore +# .editorconfig +# INSTALL +# CHANGELOG + #################################### ### CELERY CONFIG #### #################################### use_celery = false -broker.host = localhost -broker.vhost = rabbitmqhost -broker.port = 5672 -broker.user = rabbitmq -broker.password = qweqwe + +## Example: connect to the virtual host 'rabbitmqhost' on localhost as rabbitmq: +broker.url = amqp://rabbitmq:qewqew@localhost:5672/rabbitmqhost celery.imports = kallithea.lib.celerylib.tasks - +celery.accept.content = pickle celery.result.backend = amqp celery.result.dburi = amqp:// celery.result.serialier = json @@ -322,11 +248,9 @@ #celery.amqp.task.result.expires = 18000 celeryd.concurrency = 2 -#celeryd.log.file = celeryd.log -celeryd.log.level = DEBUG celeryd.max.tasks.per.child = 1 -## tasks will never be sent to the queue, but executed locally instead. +## If true, tasks will never be sent to the queue, but executed locally instead. celery.always.eager = false #################################### @@ -363,6 +287,7 @@ beaker.session.timeout = 2592000 ## Server secret used with HMAC to ensure integrity of cookies. +#beaker.session.secret = VERY-SECRET beaker.session.secret = development-not-secret ## Further, encrypt the data with AES. #beaker.session.encrypt_key = @@ -382,90 +307,13 @@ #beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea #beaker.session.table_name = db_session -############################ -## ERROR HANDLING SYSTEMS ## -############################ - -#################### -### [appenlight] ### -#################### - -## AppEnlight is tailored to work with Kallithea, see -## http://appenlight.com for details how to obtain an account -## you must install python package `appenlight_client` to make it work - -## appenlight enabled -appenlight = false - -appenlight.server_url = https://api.appenlight.com -appenlight.api_key = YOUR_API_KEY - -## TWEAK AMOUNT OF INFO SENT HERE - -## enables 404 error logging (default False) -appenlight.report_404 = false - -## time in seconds after request is considered being slow (default 1) -appenlight.slow_request_time = 1 - -## record slow requests in application -## (needs to be enabled for slow datastore recording and time tracking) -appenlight.slow_requests = true - -## enable hooking to application loggers -#appenlight.logging = true - -## minimum log level for log capture -#appenlight.logging.level = WARNING - -## send logs only from erroneous/slow requests -## (saves API quota for intensive logging) -appenlight.logging_on_error = false - -## list of additonal keywords that should be grabbed from environ object -## can be string with comma separated list of words in lowercase -## (by default client will always send following info: -## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that -## start with HTTP* this list be extended with additional keywords here -appenlight.environ_keys_whitelist = - -## list of keywords that should be blanked from request object -## can be string with comma separated list of words in lowercase -## (by default client will always blank keys that contain following words -## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' -## this list be extended with additional keywords set here -appenlight.request_keys_blacklist = - -## list of namespaces that should be ignores when gathering log entries -## can be string with comma separated list of namespaces -## (by default the client ignores own entries: appenlight_client.client) -appenlight.log_namespace_blacklist = - -################ -### [sentry] ### -################ - -## sentry is a alternative open source error aggregator -## you must install python packages `sentry` and `raven` to enable - -sentry.dsn = YOUR_DNS -sentry.servers = -sentry.name = -sentry.key = -sentry.public_key = -sentry.secret_key = -sentry.project = -sentry.site = -sentry.include_paths = -sentry.exclude_paths = - ################################################################################ -## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ## +## WARNING: *DEBUG MODE MUST BE OFF IN A PRODUCTION ENVIRONMENT* ## ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ## ## execute malicious code after an exception is raised. ## ################################################################################ -#set debug = false -set debug = true +#debug = false +debug = true ################################## ### LOGVIEW CONFIG ### @@ -480,26 +328,25 @@ ######################################################### # SQLITE [default] -sqlalchemy.db1.url = sqlite:///%(here)s/kallithea.db?timeout=60 - -# POSTGRESQL -#sqlalchemy.db1.url = postgresql://user:pass@localhost/kallithea - -# MySQL -#sqlalchemy.db1.url = mysql://user:pass@localhost/kallithea +sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60 # see sqlalchemy docs for others -sqlalchemy.db1.echo = false -sqlalchemy.db1.pool_recycle = 3600 -sqlalchemy.db1.convert_unicode = true +sqlalchemy.pool_recycle = 3600 + +################################ +### ALEMBIC CONFIGURATION #### +################################ + +[alembic] +script_location = kallithea:alembic ################################ ### LOGGING CONFIGURATION #### ################################ [loggers] -keys = root, routes, kallithea, sqlalchemy, beaker, templates, whoosh_indexer +keys = root, routes, kallithea, sqlalchemy, tg, gearbox, beaker, templates, whoosh_indexer, werkzeug, backlash [handlers] keys = console, console_sql @@ -516,6 +363,7 @@ handlers = console [logger_routes] +#level = WARN level = DEBUG handlers = qualname = routes.middleware @@ -523,35 +371,65 @@ propagate = 1 [logger_beaker] +#level = WARN level = DEBUG handlers = qualname = beaker.container propagate = 1 [logger_templates] +#level = WARN level = INFO handlers = qualname = pylons.templating propagate = 1 [logger_kallithea] +#level = WARN level = DEBUG handlers = qualname = kallithea propagate = 1 +[logger_tg] +#level = WARN +level = DEBUG +handlers = +qualname = tg +propagate = 1 + +[logger_gearbox] +#level = WARN +level = DEBUG +handlers = +qualname = gearbox +propagate = 1 + [logger_sqlalchemy] -level = INFO +level = WARN handlers = console_sql qualname = sqlalchemy.engine propagate = 0 [logger_whoosh_indexer] +#level = WARN level = DEBUG handlers = qualname = whoosh_indexer propagate = 1 +[logger_werkzeug] +level = WARN +handlers = +qualname = werkzeug +propagate = 1 + +[logger_backlash] +level = WARN +handlers = +qualname = backlash +propagate = 1 + ############## ## HANDLERS ## ############## @@ -559,17 +437,13 @@ [handler_console] class = StreamHandler args = (sys.stderr,) -#level = INFO #formatter = generic -level = DEBUG formatter = color_formatter [handler_console_sql] class = StreamHandler args = (sys.stderr,) -#level = WARN #formatter = generic -level = DEBUG formatter = color_formatter_sql ################ diff -r 42788d5f5967 -r b3289fef0daa docs/api/api.rst --- a/docs/api/api.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/api/api.rst Thu Jun 07 01:46:02 2018 +0200 @@ -9,34 +9,16 @@ ``/_admin/api``. -API access for web views -++++++++++++++++++++++++ - -API access can also be turned on for each web view in Kallithea that is -decorated with the ``@LoginRequired`` decorator. Some views use -``@LoginRequired(api_access=True)`` and are always available. By default only -RSS/Atom feed views are enabled. Other views are -only available if they have been whitelisted. Edit the -``api_access_controllers_whitelist`` option in your .ini file and define views -that should have API access enabled. +API keys +-------- -For example, to enable API access to patch/diff, raw file and archive:: - - api_access_controllers_whitelist = - ChangesetController:changeset_patch, - ChangesetController:changeset_raw, - FilesController:raw, - FilesController:archivefile - -After this change, a Kallithea view can be accessed without login by adding a -GET parameter ``?api_key=`` to the URL. - -Exposing raw diffs is a good way to integrate with -third-party services like code review, or build farms that can download archives. +Every Kallithea user automatically receives an API key, which they can +view under "My Account". On this page, API keys can also be revoked, and +additional API keys can be generated. API access -++++++++++ +---------- Clients must send JSON encoded JSON-RPC requests:: @@ -76,7 +58,7 @@ API client -++++++++++ +---------- Kallithea comes with a ``kallithea-api`` command line tool, providing a convenient way to call the JSON-RPC API. @@ -110,11 +92,11 @@ API methods -+++++++++++ +----------- pull ----- +^^^^ Pull the given repo from remote location. Can be used to automatically keep remote repos up to date. @@ -136,7 +118,7 @@ error : null rescan_repos ------------- +^^^^^^^^^^^^ Rescan repositories. If ``remove_obsolete`` is set, Kallithea will delete repos that are in the database but not in the filesystem. @@ -159,7 +141,7 @@ error : null invalidate_cache ----------------- +^^^^^^^^^^^^^^^^ Invalidate the cache for a repository. This command can only be executed using the api_key of a user with admin rights, @@ -181,7 +163,7 @@ error : null lock ----- +^^^^ Set the locking state on the given repository by the given user. If the param ``userid`` is skipped, it is set to the ID of the user who is calling this method. @@ -212,7 +194,7 @@ error : null get_ip ------- +^^^^^^ Return IP address as seen from Kallithea server, together with all defined IP addresses for given user. @@ -244,12 +226,12 @@ error : null get_user --------- +^^^^^^^^ Get a user by username or userid. The result is empty if user can't be found. If userid param is skipped, it is set to id of user who is calling this method. Any userid can be specified when the command is executed using the api_key of a user with admin rights. -Regular users can only speicy their own userid. +Regular users can only specify their own userid. INPUT:: @@ -288,7 +270,7 @@ error: null get_users ---------- +^^^^^^^^^ List all existing users. This command can only be executed using the api_key of a user with admin rights. @@ -325,7 +307,7 @@ .. _create-user: create_user ------------ +^^^^^^^^^^^ Create new user. This command can only be executed using the api_key of a user with admin rights. @@ -371,7 +353,7 @@ kallithea-api create_user username:bent email:bent@example.com firstname:Bent lastname:Bentsen extern_type:ldap extern_name:uid=bent,dc=example,dc=com update_user ------------ +^^^^^^^^^^^ Update the given user if such user exists. This command can only be executed using the api_key of a user with admin rights. @@ -415,7 +397,7 @@ error: null delete_user ------------ +^^^^^^^^^^^ Delete the given user if such a user exists. This command can only be executed using the api_key of a user with admin rights. @@ -439,7 +421,7 @@ error: null get_user_group --------------- +^^^^^^^^^^^^^^ Get an existing user group. This command can only be executed using the api_key of a user with admin rights. @@ -481,7 +463,7 @@ error : null get_user_groups ---------------- +^^^^^^^^^^^^^^^ List all existing user groups. This command can only be executed using the api_key of a user with admin rights. @@ -507,7 +489,7 @@ error : null create_user_group ------------------ +^^^^^^^^^^^^^^^^^ Create a new user group. This command can only be executed using the api_key of a user with admin rights. @@ -537,7 +519,7 @@ error: null add_user_to_user_group ----------------------- +^^^^^^^^^^^^^^^^^^^^^^ Adds a user to a user group. If the user already is in that group, success will be ``false``. @@ -564,7 +546,7 @@ error: null remove_user_from_user_group ---------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^ Remove a user from a user group. If the user isn't in the given group, success will be ``false``. @@ -591,7 +573,7 @@ error: null get_repo --------- +^^^^^^^^ Get an existing repository by its name or repository_id. Members will contain either users_group or users associated to that repository. @@ -604,7 +586,9 @@ api_key : "" method : "get_repo" args: { - "repoid" : "" + "repoid" : "", + "with_revision_names": " = Optional(False)", + "with_pullrequests": " = Optional(False)", } OUTPUT:: @@ -630,7 +614,7 @@ "raw_id": "", "revision": "", "short_id": "" - } + }, "owner": "", "fork_of": "", "members" : [ @@ -658,7 +642,7 @@ "permission" : "repository.(read|write|admin)" }, … - ] + ], "followers": [ { "user_id" : "", @@ -675,12 +659,74 @@ "last_login": "", }, … - ] + ], + + "tags": { + "": "", + ... + }, + "branches": { + "": "", + ... + }, + "bookmarks": { + "": "", + ... + }, + + "pull_requests": [ + { + "status": "", + "pull_request_id": , + "description": "", + "title": "", + "url": "", + "reviewers": [ + { + "username": "", + }, + ... + ], + "org_repo_url": "", + "org_ref_parts": [ + "", + "", + "" + ], + "other_ref_parts": [ + "", + "", + "" + ], + "comments": [ + { + "username": "", + "text": "", + "comment_id": "", + }, + ... + ], + "owner": "", + "statuses": [ + { + "status": "", # "under_review", "approved" or "rejected" + "reviewer": "", + "modified_at": "" # iso 8601 date, server's timezone + }, + ... + ], + "revisions": [ + "", + ... + ] + }, + ... + ] } error: null get_repos ---------- +^^^^^^^^^ List all existing repositories. This command can only be executed using the api_key of a user with admin rights, @@ -717,7 +763,7 @@ error: null get_repo_nodes --------------- +^^^^^^^^^^^^^^ Return a list of files and directories for a given path at the given revision. It is possible to specify ret_type to show only ``files`` or ``dirs``. @@ -748,7 +794,7 @@ error: null create_repo ------------ +^^^^^^^^^^^ Create a repository. If the repository name contains "/", the repository will be created in the repository group indicated by that path. Any such repository @@ -802,7 +848,7 @@ error: null update_repo ------------ +^^^^^^^^^^^ Update a repository. This command can only be executed using the api_key of a user with admin rights, @@ -862,7 +908,7 @@ error: null fork_repo ---------- +^^^^^^^^^ Create a fork of the given repo. If using Celery, this will return success message immediately and a fork will be created @@ -898,7 +944,7 @@ error: null delete_repo ------------ +^^^^^^^^^^^ Delete a repository. This command can only be executed using the api_key of a user with admin rights, @@ -925,7 +971,7 @@ error: null grant_user_permission ---------------------- +^^^^^^^^^^^^^^^^^^^^^ Grant permission for a user on the given repository, or update the existing one if found. This command can only be executed using the api_key of a user with admin rights. @@ -951,7 +997,7 @@ error: null revoke_user_permission ----------------------- +^^^^^^^^^^^^^^^^^^^^^^ Revoke permission for a user on the given repository. This command can only be executed using the api_key of a user with admin rights. @@ -976,7 +1022,7 @@ error: null grant_user_group_permission ---------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^ Grant permission for a user group on the given repository, or update the existing one if found. @@ -1003,7 +1049,7 @@ error: null revoke_user_group_permission ----------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Revoke permission for a user group on the given repository. This command can only be executed using the api_key of a user with admin rights. @@ -1026,3 +1072,235 @@ "success": true } error: null + +get_changesets +^^^^^^^^^^^^^^ + +Get changesets of a given repository. This command can only be executed using the api_key +of a user with read permissions to the repository. + +INPUT:: + + id : + api_key : "" + method : "get_changesets" + args: { + "repoid" : "", + "start": " = Optional(None)", + "end": " = Optional(None)", + "start_date": " = Optional(None)", # in "%Y-%m-%dT%H:%M:%S" format + "end_date": " = Optional(None)", # in "%Y-%m-%dT%H:%M:%S" format + "branch_name": " = Optional(None)", + "reverse": " = Optional(False)", + "with_file_list": " = Optional(False)" + } + +OUTPUT:: + + id : + result: [ + { + "raw_id": "", + "short_id": "short_id": "", + "author": "", + "date": "", + "message": "", + "revision": "", + + "added": [], + "changed": [], + "removed": [] + }, + ... + ] + error: null + +get_changeset +^^^^^^^^^^^^^ + +Get information and review status for a given changeset. This command can only +be executed using the api_key of a user with read permissions to the +repository. + +INPUT:: + + id : + api_key : "" + method : "get_changeset" + args: { + "repoid" : "", + "raw_id" : "", + "with_reviews": " = Optional(False)" + } + +OUTPUT:: + + id : + result: { + "author": "", + "date": "", + "message": "", + "raw_id": "", + "revision": "", + "short_id": "", + "reviews": [{ + "reviewer": "", + "modified_at": "", # iso 8601 date, server's timezone + "status": "", # "under_review", "approved" or "rejected" + }, + ... + ] + } + error: null + +Example output:: + + { + "id" : 1, + "error" : null, + "result" : { + "author" : { + "email" : "user@example.com", + "name" : "Kallithea Admin" + }, + "changed" : [], + "short_id" : "e1022d3d28df", + "date" : "2017-03-28T09:09:03", + "added" : [ + "README.rst" + ], + "removed" : [], + "revision" : 0, + "raw_id" : "e1022d3d28dfba02f626cde65dbe08f4ceb0e4e7", + "message" : "Added file via Kallithea", + "id" : "e1022d3d28dfba02f626cde65dbe08f4ceb0e4e7", + "reviews" : [ + { + "status" : "under_review", + "modified_at" : "2017-03-28T09:17:08.618", + "reviewer" : "user" + } + ] + } + } + +get_pullrequest +^^^^^^^^^^^^^^^ + +Get information and review status for a given pull request. This command can only be executed +using the api_key of a user with read permissions to the original repository. + +INPUT:: + + id : + api_key : "" + method : "get_pullrequest" + args: { + "pullrequest_id" : "", + } + +OUTPUT:: + + id : + result: { + "status": "", + "pull_request_id": , + "description": "", + "title": "", + "url": "", + "reviewers": [ + { + "username": "", + }, + ... + ], + "org_repo_url": "", + "org_ref_parts": [ + "", + "", + "" + ], + "other_ref_parts": [ + "", + "", + "" + ], + "comments": [ + { + "username": "", + "text": "", + "comment_id": "", + }, + ... + ], + "owner": "", + "statuses": [ + { + "status": "", # "under_review", "approved" or "rejected" + "reviewer": "", + "modified_at": "" # iso 8601 date, server's timezone + }, + ... + ], + "revisions": [ + "", + ... + ] + }, + error: null + +comment_pullrequest +^^^^^^^^^^^^^^^^^^^ + +Add comment, change status or close a given pull request. This command can only be executed +using the api_key of a user with read permissions to the original repository. + +INPUT:: + + id : + api_key : "" + method : "comment_pullrequest" + args: { + "pull_request_id": "", + "comment_msg": Optional(''), + "status": Optional(None), # "under_review", "approved" or "rejected" + "close_pr": Optional(False)", + } + +OUTPUT:: + + id : + result: True + error: null + + +API access for web views +------------------------ + +API access can also be turned on for each web view in Kallithea that is +decorated with the ``@LoginRequired`` decorator. Some views use +``@LoginRequired(api_access=True)`` and are always available. By default only +RSS/Atom feed views are enabled. Other views are +only available if they have been whitelisted. Edit the +``api_access_controllers_whitelist`` option in your .ini file and define views +that should have API access enabled. + +For example, to enable API access to patch/diff, raw file and archive:: + + api_access_controllers_whitelist = + ChangesetController:changeset_patch, + ChangesetController:changeset_raw, + FilesController:raw, + FilesController:archivefile + +After this change, a Kallithea view can be accessed without login using +bearer authentication, by including this header with the request:: + + Authentication: Bearer + +Alternatively, the API key can be passed in the URL query string using +``?api_key=``, though this is not recommended due to the increased +risk of API key leaks, and support will likely be removed in the future. + +Exposing raw diffs is a good way to integrate with +third-party services like code review, or build farms that can download archives. diff -r 42788d5f5967 -r b3289fef0daa docs/changelog.rst --- a/docs/changelog.rst Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -.. _changelog: - -========= -Changelog -========= - -Kallithea project doesn't keep its changelog here. We refer you to our `Mercurial logs`__. - - -.. __: https://kallithea-scm.org/repos/kallithea/changelog diff -r 42788d5f5967 -r b3289fef0daa docs/contributing.rst --- a/docs/contributing.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/contributing.rst Thu Jun 07 01:46:02 2018 +0200 @@ -28,29 +28,76 @@ Getting started --------------- -To get started with development:: +To get started with Kallithea development:: hg clone https://kallithea-scm.org/repos/kallithea cd kallithea virtualenv ../kallithea-venv source ../kallithea-venv/bin/activate - pip install --upgrade pip "setuptools<34" - pip install -e . - paster make-config Kallithea my.ini - paster setup-db my.ini --user=user --email=user@example.com --password=password --repos=/tmp - paster serve my.ini --reload & + pip install --upgrade pip setuptools + pip install --upgrade -e . + pip install --upgrade -r dev_requirements.txt + npm install # install dependencies - both tools and data + npm run less # for generating css from less + gearbox make-config my.ini + gearbox setup-db -c my.ini --user=user --email=user@example.com --password=password --repos=/tmp + gearbox serve -c my.ini --reload & firefox http://127.0.0.1:5000/ -You can also start out by forking https://bitbucket.org/conservancy/kallithea -on Bitbucket_ and create a local clone of your own fork. +If you plan to use Bitbucket_ for sending contributions, you can also fork +Kallithea on Bitbucket_ first (https://bitbucket.org/conservancy/kallithea) and +then replace the clone step above by a clone of your fork. In this case, please +see :ref:`contributing-guidelines` below for configuring your fork correctly. + + +Contribution flow +----------------- + +Starting from an existing Kallithea clone, make sure it is up to date with the +latest upstream changes:: + + hg pull + hg update + +Review the :ref:`contributing-guidelines` and :ref:`coding-guidelines`. + +If you are new to Mercurial, refer to Mercurial `Quick Start`_ and `Beginners +Guide`_ on the Mercurial wiki. + +Now, make some changes and test them (see :ref:`contributing-tests`). Don't +forget to add new tests to cover new functionality or bug fixes. + +For documentation changes, run ``make html`` from the ``docs`` directory to +generate the HTML result, then review them in your browser. + +Before submitting any changes, run the cleanup script:: + + ./scripts/run-all-cleanup + +When you are completely ready, you can send your changes to the community for +review and inclusion. Most commonly used methods are sending patches to the +mailing list (via ``hg email``) or by creating a pull request on Bitbucket_. + +.. _contributing-tests: Running tests ------------- -After finishing your changes make sure all tests pass cleanly. You can run -the testsuite running ``nosetests`` from the project root, or if you use tox -run ``tox`` for Python 2.6--2.7 with multiple database test. +After finishing your changes make sure all tests pass cleanly. Run the testsuite +by invoking ``py.test`` from the project root:: + + py.test + +Note that testing on Python 2.6 also requires ``unittest2``. + +Note that on unix systems, the temporary directory (``/tmp`` or where +``$TMPDIR`` points) must allow executable files; Git hooks must be executable, +and the test suite creates repositories in the temporary directory. Linux +systems with /tmp mounted noexec will thus fail. + +You can also use ``tox`` to run the tests with all supported Python versions +(currently Python 2.6--2.7). When running tests, Kallithea uses `kallithea/tests/test.ini` and populates the SQLite database specified there. @@ -58,32 +105,102 @@ It is possible to avoid recreating the full test database on each invocation of the tests, thus eliminating the initial delay. To achieve this, run the tests as:: - paster serve kallithea/tests/test.ini --pid-file=test.pid --daemon - KALLITHEA_WHOOSH_TEST_DISABLE=1 KALLITHEA_NO_TMP_PATH=1 nosetests + gearbox serve -c kallithea/tests/test.ini --pid-file=test.pid --daemon + KALLITHEA_WHOOSH_TEST_DISABLE=1 KALLITHEA_NO_TMP_PATH=1 py.test kill -9 $(cat test.pid) -You can run individual tests by specifying their path as argument to nosetests. -nosetests also has many more options, see `nosetests -h`. Some useful options +In these commands, the following variables are used:: + + KALLITHEA_WHOOSH_TEST_DISABLE=1 - skip whoosh index building and tests + KALLITHEA_NO_TMP_PATH=1 - disable new temp path for tests, used mostly for testing_vcs_operations + +You can run individual tests by specifying their path as argument to py.test. +py.test also has many more options, see `py.test -h`. Some useful options are:: - -x, --stop Stop running tests after the first error or failure - -s, --nocapture Don't capture stdout (any stdout output will be - printed immediately) [NOSE_NOCAPTURE] - --failed Run the tests that failed in the last test run. + -k EXPRESSION only run tests which match the given substring + expression. An expression is a python evaluable + expression where all names are substring-matched + against test names and their parent classes. Example: + -x, --exitfirst exit instantly on first error or failed test. + --lf rerun only the tests that failed at the last run (or + all if none failed) + --ff run all tests but run the last failures first. This + may re-order tests and thus lead to repeated fixture + setup/teardown + --pdb start the interactive Python debugger on errors. + -s, --capture=no don't capture stdout (any stdout output will be + printed immediately) + +Performance tests +^^^^^^^^^^^^^^^^^ + +A number of performance tests are present in the test suite, but they are +not run in a standard test run. These tests are useful to +evaluate the impact of certain code changes with respect to performance. + +To run these tests:: + + env TEST_PERFORMANCE=1 py.test kallithea/tests/performance + +To analyze performance, you could install pytest-profiling_, which enables the +--profile and --profile-svg options to py.test. + +.. _pytest-profiling: https://github.com/manahl/pytest-plugins/tree/master/pytest-profiling + +.. _contributing-guidelines: -Coding/contribution guidelines ------------------------------- +Contribution guidelines +----------------------- Kallithea is GPLv3 and we assume all contributions are made by the committer/contributor and under GPLv3 unless explicitly stated. We do care a lot about preservation of copyright and license information for existing code that is brought into the project. +Contributions will be accepted in most formats -- such as pull requests on +Bitbucket, something hosted on your own Kallithea instance, or patches sent by +email to the `kallithea-general`_ mailing list. + +When contributing via Bitbucket, please make your fork of +https://bitbucket.org/conservancy/kallithea/ `non-publishing`_ -- it is one of +the settings on "Repository details" page. This ensures your commits are in +"draft" phase and makes it easier for you to address feedback and for project +maintainers to integrate your changes. + +.. _non-publishing: https://www.mercurial-scm.org/wiki/Phases#Publishing_Repository + +Make sure to test your changes both manually and with the automatic tests +before posting. + +We care about quality and review and keeping a clean repository history. We +might give feedback that requests polishing contributions until they are +"perfect". We might also rebase and collapse and make minor adjustments to your +changes when we apply them. + +We try to make sure we have consensus on the direction the project is taking. +Everything non-sensitive should be discussed in public -- preferably on the +mailing list. We aim at having all non-trivial changes reviewed by at least +one other core developer before pushing. Obvious non-controversial changes will +be handled more casually. + +There is a main development branch ("default") which is generally stable so that +it can be (and is) used in production. There is also a "stable" branch that is +almost exclusively reserved for bug fixes or trivial changes. Experimental +changes should live elsewhere (for example in a pull request) until they are +ready. + +.. _coding-guidelines: + + +Coding guidelines +----------------- + We don't have a formal coding/formatting standard. We are currently using a mix of Mercurial's (https://www.mercurial-scm.org/wiki/CodingStyle), pep8, and -consistency with existing code. Run whitespacecleanup.sh to avoid stupid -whitespace noise in your patches. +consistency with existing code. Run ``scripts/run-all-cleanup`` before +committing to ensure some basic code formatting consistency. We support both Python 2.6.x and 2.7.x and nothing else. For now we don't care about Python 3 compatibility. @@ -112,30 +229,66 @@ .. _English title case: https://en.wikipedia.org/wiki/Capitalization#Title_case -Contributions will be accepted in most formats -- such as pull requests on -bitbucket, something hosted on your own Kallithea instance, or patches sent by -email to the `kallithea-general`_ mailing list. +Template helpers (that is, everything in ``kallithea.lib.helpers``) +should only be referenced from templates. If you need to call a +helper from the Python code, consider moving the function somewhere +else (e.g. to the model). + +Notes on the SQLAlchemy session +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Each HTTP request runs inside an independent SQLAlchemy session (as well +as in an independent database transaction). ``Session`` is the session manager +and factory. ``Session()`` will create a new session on-demand or return the +current session for the active thread. Many database operations are methods on +such session instances - only ``Session.remove()`` should be called directly on +the manager. -Make sure to test your changes both manually and with the automatic tests -before posting. +Database model objects +(almost) always belong to a particular SQLAlchemy session, which means +that SQLAlchemy will ensure that they're kept in sync with the database +(but also means that they cannot be shared across requests). -We care about quality and review and keeping a clean repository history. We -might give feedback that requests polishing contributions until they are -"perfect". We might also rebase and collapse and make minor adjustments to your -changes when we apply them. +Objects can be added to the session using ``Session().add``, but this is +rarely needed: + +* When creating a database object by calling the constructor directly, + it must explicitly be added to the session. + +* When creating an object using a factory function (like + ``create_repo``), the returned object has already (by convention) + been added to the session, and should not be added again. -We try to make sure we have consensus on the direction the project is taking. -Everything non-sensitive should be discussed in public -- preferably on the -mailing list. We aim at having all non-trivial changes reviewed by at least -one other core developer before pushing. Obvious non-controversial changes will -be handled more casually. +* When getting an object from the session (via ``Session().query`` or + any of the utility functions that look up objects in the database), + it's already part of the session, and should not be added again. + SQLAlchemy monitors attribute modifications automatically for all + objects it knows about and syncs them to the database. + +SQLAlchemy also flushes changes to the database automatically; manually +calling ``Session().flush`` is usually only necessary when the Python +code needs the database to assign an "auto-increment" primary key ID to +a freshly created model object (before flushing, the ID attribute will +be ``None``). + +TurboGears2 DebugBar +^^^^^^^^^^^^^^^^^^^^ -For now we just have one official branch ("default") and will keep it so stable -that it can be (and is) used in production. Experimental changes should live -elsewhere (for example in a pull request) until they are ready. +It is possible to enable the TurboGears2-provided DebugBar_, a toolbar overlayed +over the Kallithea web interface, allowing you to see: + +* timing information of the current request, including profiling information +* request data, including GET data, POST data, cookies, headers and environment + variables +* a list of executed database queries, including timing and result values -.. _translations: -.. include:: ./../kallithea/i18n/how_to +DebugBar is only activated when ``debug = true`` is set in the configuration +file. This is important, because the DebugBar toolbar will be visible for all +users, and allow them to see information they should not be allowed to see. Like +is anyway the case for ``debug = true``, do not use this in production! + +To enable DebugBar, install ``tgext.debugbar`` and ``kajiki`` (typically via +``pip``) and restart Kallithea (in debug mode). "Roadmap" @@ -158,3 +311,6 @@ .. _kallithea-general: http://lists.sfconservancy.org/mailman/listinfo/kallithea-general .. _Hosted Weblate: https://hosted.weblate.org/projects/kallithea/kallithea/ .. _wiki: https://bitbucket.org/conservancy/kallithea/wiki/Home +.. _DebugBar: https://github.com/TurboGears/tgext.debugbar +.. _Quick Start: https://www.mercurial-scm.org/wiki/QuickStart +.. _Beginners Guide: https://www.mercurial-scm.org/wiki/BeginnersGuides diff -r 42788d5f5967 -r b3289fef0daa docs/dev/dbmigrations.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/dev/dbmigrations.rst Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,74 @@ +======================= +Database schema changes +======================= + +Kallithea uses Alembic for :ref:`database migrations ` +(upgrades and downgrades). + +If you are developing a Kallithea feature that requires database schema +changes, you should make a matching Alembic database migration script: + +1. :ref:`Create a Kallithea configuration and database ` for testing + the migration script, or use existing ``development.ini`` setup. + + Ensure that this database is up to date with the latest database + schema *before* the changes you're currently developing. (Do not + create the database while your new schema changes are applied.) + +2. Create a separate throwaway configuration for iterating on the actual + database changes:: + + gearbox make-config temp.ini + + Edit the file to change database settings. SQLite is typically fine, + but make sure to change the path to e.g. ``temp.db``, to avoid + clobbering any existing database file. + +3. Make your code changes (including database schema changes in ``db.py``). + +4. After every database schema change, recreate the throwaway database + to test the changes:: + + rm temp.db + gearbox setup-db -c temp.ini --repos=/var/repos --user=doe --email doe@example.com --password=123456 --no-public-access --force-yes + gearbox repo-scan -c temp.ini + +5. Once satisfied with the schema changes, auto-generate a draft Alembic + script using the development database that has *not* been upgraded. + (The generated script will upgrade the database to match the code.) + + :: + + alembic -c development.ini revision -m "area: add cool feature" --autogenerate + +6. Edit the script to clean it up and fix any problems. + + Note that for changes that simply add columns, it may be appropriate + to not remove them in the downgrade script (and instead do nothing), + to avoid the loss of data. Unknown columns will simply be ignored by + Kallithea versions predating your changes. + +7. Run ``alembic -c development.ini upgrade head`` to apply changes to + the (non-throwaway) database, and test the upgrade script. Also test + downgrades. + + The included ``development.ini`` has full SQL logging enabled. If + you're using another configuration file, you may want to enable it + by setting ``level = DEBUG`` in section ``[handler_console_sql]``. + +The Alembic migration script should be committed in the same revision as +the database schema (``db.py``) changes. + +See the `Alembic documentation`__ for more information, in particular +the tutorial and the section about auto-generating migration scripts. + +.. __: http://alembic.zzzcomputing.com/en/latest/ + + +Troubleshooting +--------------- + +* If ``alembic --autogenerate`` responds "Target database is not up to + date", you need to either first use Alembic to upgrade the database + to the most recent version (before your changes), or recreate the + database from scratch (without your schema changes applied). diff -r 42788d5f5967 -r b3289fef0daa docs/dev/translation.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/dev/translation.rst Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,2 @@ +.. _translations: +.. include:: ./../../kallithea/i18n/how_to diff -r 42788d5f5967 -r b3289fef0daa docs/images/.img diff -r 42788d5f5967 -r b3289fef0daa docs/index.rst --- a/docs/index.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/index.rst Thu Jun 07 01:46:02 2018 +0200 @@ -23,6 +23,7 @@ installation_iis setup installation_puppet + upgrade **Usage** @@ -44,6 +45,7 @@ usage/backup usage/debugging usage/troubleshooting + usage/customization **Development** @@ -51,7 +53,8 @@ :maxdepth: 1 contributing - changelog + dev/translation + dev/dbmigrations **API** @@ -59,11 +62,10 @@ :maxdepth: 1 api/api - api/models Other topics ------------- +************ * :ref:`genindex` * :ref:`search` diff -r 42788d5f5967 -r b3289fef0daa docs/installation.rst --- a/docs/installation.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/installation.rst Thu Jun 07 01:46:02 2018 +0200 @@ -26,6 +26,22 @@ have to remove its dependencies manually and make sure that they are not needed by other packages. +Regardless of the installation method you may need to make sure you have +appropriate development packages installed, as installation of some of the +Kallithea dependencies requires a working C compiler and libffi library +headers. Depending on your configuration, you may also need to install +Git and development packages for the database of your choice. + +For Debian and Ubuntu, the following command will ensure that a reasonable +set of dependencies is installed:: + + sudo apt-get install build-essential git python-pip python-virtualenv libffi-dev python-dev + +For Fedora and RHEL-derivatives, the following command will ensure that a +reasonable set of dependencies is installed:: + + sudo yum install gcc git python-pip python-virtualenv libffi-devel python-devel + .. _installation-source: @@ -38,16 +54,13 @@ hg clone https://kallithea-scm.org/repos/kallithea -u stable cd kallithea virtualenv ../kallithea-venv - source ../kallithea-venv/bin/activate - pip install --upgrade pip "setuptools<34" - pip install -e . + . ../kallithea-venv/bin/activate + pip install --upgrade pip setuptools + pip install --upgrade -e . python2 setup.py compile_catalog # for translation of the UI You can now proceed to :ref:`setup`. -To upgrade, simply update the repository with ``hg pull -u`` and restart the -server. - .. _installation-virtualenv: @@ -68,8 +81,8 @@ - Activate the virtualenv_ in your current shell session and make sure the basic requirements are up-to-date by running:: - source /srv/kallithea/venv/bin/activate - pip install --upgrade pip "setuptools<34" + . /srv/kallithea/venv/bin/activate + pip install --upgrade pip setuptools .. note:: You can't use UNIX ``sudo`` to source the ``virtualenv`` script; it will "activate" a shell that terminates immediately. It is also perfectly @@ -78,8 +91,8 @@ .. note:: Some dependencies are optional. If you need them, install them in the virtualenv too:: - pip install psycopg2 - pip install python-ldap + pip install --upgrade psycopg2 + pip install --upgrade python-ldap This might require installation of development packages using your distribution's package manager. @@ -91,15 +104,15 @@ - Go into the created directory and run this command to install Kallithea:: - pip install kallithea + pip install --upgrade kallithea Alternatively, download a .tar.gz from http://pypi.python.org/pypi/Kallithea, extract it and run:: - pip install . + pip install --upgrade . -- This will install Kallithea together with pylons_ and all other required - python libraries into the activated virtualenv. +- This will install Kallithea together with all other required + Python libraries into the activated virtualenv. You can now proceed to :ref:`setup`. @@ -123,90 +136,4 @@ You can now proceed to :ref:`setup`. -Upgrading Kallithea from Python Package Index (PyPI) ----------------------------------------------------- - -.. note:: - It is strongly recommended that you **always** perform a database and - configuration backup before doing an upgrade. - - These directions will use '{version}' to note that this is the version of - Kallithea that these files were used with. If backing up your Kallithea - instance from version 0.1 to 0.2, the ``my.ini`` file could be - backed up to ``my.ini.0-1``. - -If using a SQLite database, stop the Kallithea process/daemon/service, and -then make a copy of the database file:: - - service kallithea stop - cp kallithea.db kallithea.db.{version} - -Back up your configuration file:: - - cp my.ini my.ini.{version} - -Ensure that you are using the Python virtual environment that you originally -installed Kallithea in by running:: - - pip freeze - -This will list all packages installed in the current environment. If -Kallithea isn't listed, activate the correct virtual environment:: - - source /srv/kallithea/venv/bin/activate - -Once you have verified the environment you can upgrade Kallithea with:: - - pip install --upgrade kallithea - -Then run the following command from the installation directory:: - - paster make-config Kallithea my.ini - -This will display any changes made by the new version of Kallithea to your -current configuration. It will try to perform an automerge. It is recommended -that you recheck the content after the automerge. - -.. note:: - Please always make sure your .ini files are up to date. Errors can - often be caused by missing parameters added in new versions. - -It is also recommended that you rebuild the whoosh index after upgrading since -the new whoosh version could introduce some incompatible index changes. Please -read the changelog to see if there were any changes to whoosh. - -The final step is to upgrade the database. To do this simply run:: - - paster upgrade-db my.ini - -This will upgrade the schema and update some of the defaults in the database, -and will always recheck the settings of the application, if there are no new -options that need to be set. - -.. note:: - The DB schema upgrade library has some limitations and can sometimes fail if you try to - upgrade from older major releases. In such a case simply run upgrades sequentially, e.g., - upgrading from 0.1.X to 0.3.X should be done like this: 0.1.X. > 0.2.X > 0.3.X - You can always specify what version of Kallithea you want to install for example in pip - `pip install Kallithea==0.2` - -You may find it helpful to clear out your log file so that new errors are -readily apparent:: - - echo > kallithea.log - -Once that is complete, you may now start your upgraded Kallithea Instance:: - - service kallithea start - -Or:: - - paster serve /srv/kallithea/my.ini - -.. note:: - If you're using Celery, make sure you restart all instances of it after - upgrade. - - .. _virtualenv: http://pypi.python.org/pypi/virtualenv -.. _pylons: http://www.pylonsproject.org/ diff -r 42788d5f5967 -r b3289fef0daa docs/installation_iis.rst --- a/docs/installation_iis.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/installation_iis.rst Thu Jun 07 01:46:02 2018 +0200 @@ -39,7 +39,7 @@ own virtual folder will be noted where appropriate. Application pool -................ +^^^^^^^^^^^^^^^^ Make sure that there is a unique application pool for the Kallithea application with an identity that has read access to the Kallithea distribution. @@ -55,11 +55,11 @@ as long as the Kallithea requirements are met by the existing pool. ISAPI handler -............. +^^^^^^^^^^^^^ The ISAPI handler can be generated using:: - paster install-iis my.ini --virtualdir=/ + gearbox install-iis -c my.ini --virtualdir=/ This will generate a ``dispatch.py`` file in the current directory that contains the necessary components to finalize an installation into IIS. Once this file @@ -74,12 +74,12 @@ The ISAPI handler is registered to all file extensions, so it will automatically be the one handling all requests to the specified virtual directory. When the website starts -the ISAPI handler, it will start a thread pool managed wrapper around the paster +the ISAPI handler, it will start a thread pool managed wrapper around the middleware WSGI handler that Kallithea runs within and each HTTP request to the site will be processed through this logic henceforth. Authentication with Kallithea using IIS authentication modules -.............................................................. +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The recommended way to handle authentication with Kallithea using IIS is to let IIS handle all the authentication and just pass it to Kallithea. @@ -111,7 +111,7 @@ --------------- Typically, any issues in this setup will either be entirely in IIS or entirely -in Kallithea (or Kallithea's WSGI/paster middleware). Consequently, two +in Kallithea (or Kallithea's WSGI middleware). Consequently, two different options for finding issues exist: IIS' failed request tracking which is great at finding issues until they exist inside Kallithea, at which point the ISAPI-WSGI wrapper above uses ``win32traceutil``, which is part of ``pywin32``. diff -r 42788d5f5967 -r b3289fef0daa docs/installation_puppet.rst --- a/docs/installation_puppet.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/installation_puppet.rst Thu Jun 07 01:46:02 2018 +0200 @@ -90,7 +90,7 @@ parameter in the :ref:`example above `, but there are more. For example, you can specify the installation directory, the name of the user under which Kallithea gets installed, the initial admin password, etc. -Notably, you can provide arbitrary modifications to Kallitheas configuration +Notably, you can provide arbitrary modifications to Kallithea's configuration file by means of the ``config_hash`` parameter. Parameters, which have not been set explicitly, will be set to default values, diff -r 42788d5f5967 -r b3289fef0daa docs/installation_win.rst --- a/docs/installation_win.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/installation_win.rst Thu Jun 07 01:46:02 2018 +0200 @@ -1,12 +1,12 @@ .. _installation_win: -================================================================ -Installation and upgrade on Windows (7/Server 2008 R2 and newer) -================================================================ +==================================================== +Installation on Windows (7/Server 2008 R2 and newer) +==================================================== First time install -:::::::::::::::::: +------------------ Target OS: Windows 7 and newer or Windows Server 2008 R2 and newer @@ -15,7 +15,7 @@ To install on an older version of Windows, see ``_ Step 1 -- Install Python ------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^ Install Python 2.x.y (x = 6 or 7). Latest version is recommended. If you need another version, they can run side by side. @@ -31,7 +31,7 @@ be needed in the next step. In this case, it is "2.7". Step 2 -- Python BIN --------------------- +^^^^^^^^^^^^^^^^^^^^ Add Python BIN folder to the path. This can be done manually (editing "PATH" environment variable) or by using Windows Support Tools that @@ -45,7 +45,7 @@ path. Typically this is ``C:\\Python27``. Step 3 -- Install pywin32 extensions ------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Download pywin32 from: http://sourceforge.net/projects/pywin32/files/ @@ -61,7 +61,7 @@ (Win32) Step 4 -- Install pip ---------------------- +^^^^^^^^^^^^^^^^^^^^^ pip is a package management system for Python. You will need it to install Kallithea and its dependencies. @@ -85,7 +85,7 @@ SETX PATH "%PATH%;[your-python-path]\Scripts" /M Step 5 -- Kallithea folder structure ------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Create a Kallithea folder structure. @@ -102,7 +102,7 @@ C:\Kallithea\Repos Step 6 -- Install virtualenv ----------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. note:: A python virtual environment will allow for isolation between the Python packages of your system and those used for Kallithea. @@ -119,7 +119,7 @@ virtualenv C:\Kallithea\Env Step 7 -- Install Kallithea ---------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^ In order to install Kallithea, you need to be able to run "pip install kallithea". It will use pip to install the Kallithea Python package and its dependencies. Some Python packages use managed code and need to be compiled. @@ -134,7 +134,7 @@ cd C:\Kallithea\Env\Scripts activate - pip install --upgrade pip "setuptools<34" + pip install --upgrade pip setuptools The prompt will change into "(Env) C:\\Kallithea\\Env\\Scripts" or similar (depending of your folder structure). Then type:: @@ -145,17 +145,19 @@ complete. Some warnings will appear. Don't worry, they are normal. -Step 8 -- Install git (optional) --------------------------------- +Step 8 -- Install Git (optional) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Mercurial being a python package, was installed automatically when doing ``pip install kallithea``. -Mercurial being a python package, it was installed automatically when doing "pip install kallithea". - -You need to install git manually if you want Kallithea to be able to host git repositories. - +You need to install Git manually if you want Kallithea to be able to host Git repositories. See http://git-scm.com/book/en/v2/Getting-Started-Installing-Git#Installing-on-Windows for instructions. +The location of the Git binaries (like ``c:\path\to\git\bin``) must be +added to the ``PATH`` environment variable so ``git.exe`` and other tools like +``gzip.exe`` are available. Step 9 -- Configuring Kallithea -------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Steps taken from ``_ @@ -164,7 +166,7 @@ one). When ready, type:: cd C:\Kallithea\Bin - paster make-config Kallithea production.ini + gearbox make-config production.ini Then you must edit production.ini to fit your needs (IP address, IP port, mail settings, database, etc.). `NotePad++`__ or a similar text @@ -175,11 +177,11 @@ For the sake of simplicity, run it with the default settings. After your edits (if any) in the previous command prompt, type:: - paster setup-db production.ini + gearbox setup-db -c production.ini .. warning:: This time a *new* database will be installed. You must - follow a different step to later *upgrade* to a newer - Kallithea version) + follow a different process to later :ref:`upgrade ` + to a newer Kallithea version. The script will ask you for confirmation about creating a new database, answer yes (y) @@ -191,14 +193,14 @@ If you make a mistake and the script doesn't end, don't worry: start it again. -If you decided not to install git, you will get errors about it that you can ignore. +If you decided not to install Git, you will get errors about it that you can ignore. Step 10 -- Running Kallithea ----------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In the previous command prompt, being in the C:\\Kallithea\\Bin folder, type:: - paster serve production.ini + gearbox serve -c production.ini Open your web server, and go to http://127.0.0.1:5000 @@ -219,27 +221,3 @@ - Using Apache. You can investigate here: - https://groups.google.com/group/rhodecode/msg/c433074e813ffdc4 - - -Upgrading -::::::::: - -Stop running Kallithea -Open a CommandPrompt like in Step 7 (cd to C:\Kallithea\Env\Scripts and activate) and type:: - - pip install kallithea --upgrade - cd \Kallithea\Bin - -Backup your production.ini file now. - -Then run:: - - paster make-config Kallithea production.ini - -Look for changes and update your production.ini accordingly. - -Next, update the database:: - - paster upgrade-db production.ini - -More details can be found in ``_. diff -r 42788d5f5967 -r b3289fef0daa docs/installation_win_old.rst --- a/docs/installation_win_old.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/installation_win_old.rst Thu Jun 07 01:46:02 2018 +0200 @@ -1,12 +1,12 @@ .. _installation_win_old: -====================================================================== -Installation and upgrade on Windows (XP/Vista/Server 2003/Server 2008) -====================================================================== +========================================================== +Installation on Windows (XP/Vista/Server 2003/Server 2008) +========================================================== First-time install -:::::::::::::::::: +------------------ Target OS: Windows XP SP3 32-bit English (Clean installation) + All Windows Updates until 24-may-2012 @@ -24,7 +24,7 @@ - http://bugs.python.org/issue7511 Step 1 -- Install Visual Studio 2008 Express --------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Optional: You can also install MinGW, but VS2008 installation is easier. @@ -58,7 +58,7 @@ Copy C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat to C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat Step 2 -- Install Python ------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^ Install Python 2.x.y (x = 6 or 7) x86 version (32-bit). DO NOT USE A 3.x version. Download Python 2.x.y from: @@ -74,7 +74,7 @@ 64-bit: Just download and install the 64-bit version of python. Step 3 -- Install Win32py extensions ------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Download pywin32 from: http://sourceforge.net/projects/pywin32/files/ @@ -93,7 +93,7 @@ http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win-amd64-py2.7.exe/download Step 4 -- Python BIN --------------------- +^^^^^^^^^^^^^^^^^^^^ Add Python BIN folder to the path @@ -120,7 +120,7 @@ Typically: C:\\Python27 Step 5 -- Kallithea folder structure ------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Create a Kallithea folder structure @@ -137,7 +137,7 @@ C:\Kallithea\Repos Step 6 -- Install virtualenv ----------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Install Virtual Env for Python @@ -157,7 +157,7 @@ to include it) Step 7 -- Install Kallithea ---------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^ Finally, install Kallithea @@ -183,7 +183,7 @@ cd C:\Kallithea\Env\Scripts (or similar) activate - pip install --upgrade pip "setuptools<34" + pip install --upgrade pip setuptools The prompt will change into "(Env) C:\\Kallithea\\Env\\Scripts" or similar (depending of your folder structure). Then type:: @@ -195,7 +195,7 @@ Some warnings will appear, don't worry as they are normal. Step 8 -- Configuring Kallithea -------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ steps taken from http://packages.python.org/Kallithea/setup.html @@ -204,7 +204,7 @@ "activate" one). When ready, just type:: cd C:\Kallithea\Bin - paster make-config Kallithea production.ini + gearbox make-config production.ini Then, you must edit production.ini to fit your needs (network address and port, mail settings, database, whatever). I recommend using NotePad++ @@ -215,10 +215,11 @@ For the sake of simplicity lets run it with the default settings. After your edits (if any), in the previous Command Prompt, type:: - paster setup-db production.ini + gearbox setup-db -c production.ini -(this time a NEW database will be installed, you must follow a different -step to later UPGRADE to a newer Kallithea version) +.. warning:: This time a *new* database will be installed. You must + follow a different process to later :ref:`upgrade ` + to a newer Kallithea version. The script will ask you for confirmation about creating a NEW database, answer yes (y) @@ -233,12 +234,12 @@ it again. Step 9 -- Running Kallithea ---------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^ In the previous command prompt, being in the C:\\Kallithea\\Bin folder, just type:: - paster serve production.ini + gearbox serve -c production.ini Open yout web server, and go to http://127.0.0.1:5000 @@ -260,23 +261,3 @@ - Using Apache. You can investigate here: - https://groups.google.com/group/rhodecode/msg/c433074e813ffdc4 - - -Upgrading -::::::::: - -Stop running Kallithea -Open a CommandPrompt like in Step7 (VS2008 path + activate) and type:: - - easy_install -U kallithea - cd \Kallithea\Bin - -{ backup your production.ini file now} :: - - paster make-config Kallithea production.ini - -(check changes and update your production.ini accordingly) :: - - paster upgrade-db production.ini (update database) - -Full steps in http://packages.python.org/Kallithea/upgrade.html diff -r 42788d5f5967 -r b3289fef0daa docs/make.bat --- a/docs/make.bat Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/make.bat Thu Jun 07 01:46:02 2018 +0200 @@ -3,153 +3,153 @@ REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build + set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end ) if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end ) if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end ) if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end ) if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end ) if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - echo. - echo.Build finished; now you can process the pickle files. - goto end + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + echo. + echo.Build finished; now you can process the pickle files. + goto end ) if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - echo. - echo.Build finished; now you can process the JSON files. - goto end + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + echo. + echo.Build finished; now you can process the JSON files. + goto end ) if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. - goto end + goto end ) if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Kallithea.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Kallithea.ghc - goto end + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Kallithea.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Kallithea.ghc + goto end ) if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - echo. - echo.Build finished. - goto end + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + echo. + echo.Build finished. + goto end ) if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end ) if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end ) if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end ) if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end ) if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end ) if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - echo. - echo.Link check complete; look for any errors in the above output ^ + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + echo. + echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. - goto end + goto end ) if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - echo. - echo.Testing of doctests in the sources finished, look at the ^ + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + echo. + echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. - goto end + goto end ) :end diff -r 42788d5f5967 -r b3289fef0daa docs/overview.rst --- a/docs/overview.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/overview.rst Thu Jun 07 01:46:02 2018 +0200 @@ -69,6 +69,12 @@ (``pip install kallithea`` from a source tree will do pretty much the same but build the Kallithea package itself locally instead of downloading it.) +.. note:: The front-end code is built with Node. Currently, it must be built + locally after installing Kallithea. Assuming Node and the Node + Package Manager is available, other tools and source code will be + downloaded and installed. The front-end code can then be built from + source locally. + Web server ---------- @@ -84,17 +90,17 @@ There are several web server options: -- Kallithea uses the Paste_ tool as command line interface. Paste provides - ``paster serve`` as a convenient way to launch a Python WSGI / web server +- Kallithea uses the Gearbox_ tool as command line interface. Gearbox provides + ``gearbox serve`` as a convenient way to launch a Python WSGI / web server from the command line. That is perfect for development and evaluation. Actual use in production might have different requirements and need extra work to make it manageable as a scalable system service. - Paste comes with its own built-in web server but Kallithea defaults to use + Gearbox comes with its own built-in web server but Kallithea defaults to use Waitress_. Gunicorn_ is also an option. These web servers have different limited feature sets. - The web server used by ``paster`` is configured in the ``.ini`` file passed + The web server used by ``gearbox`` is configured in the ``.ini`` file passed to it. The entry point for the WSGI application is configured in ``setup.py`` as ``kallithea.config.middleware:make_app``. @@ -113,7 +119,7 @@ encryption or special authentication or for other security reasons, to provide caching of static files, or to provide load balancing or fail-over. Nginx_, Varnish_ and HAProxy_ are often used for this purpose, often in front - of a ``paster`` server that somehow is wrapped as a service. + of a ``gearbox serve`` that somehow is wrapped as a service. The best option depends on what you are familiar with and the requirements for performance and stability. Also, keep in mind that Kallithea mainly is serving @@ -126,7 +132,7 @@ .. _Gunicorn: http://gunicorn.org/ .. _Waitress: http://waitress.readthedocs.org/en/latest/ .. _virtualenv: http://pypi.python.org/pypi/virtualenv -.. _Paste: http://pythonpaste.org/ +.. _Gearbox: http://turbogears.readthedocs.io/en/latest/turbogears/gearbox.html .. _PyPI: https://pypi.python.org/pypi .. _Apache httpd: http://httpd.apache.org/ .. _mod_wsgi: https://code.google.com/p/modwsgi/ @@ -136,6 +142,5 @@ .. _iis: http://en.wikipedia.org/wiki/Internet_Information_Services .. _pip: http://en.wikipedia.org/wiki/Pip_%28package_manager%29 .. _WSGI: http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface -.. _pylons: http://www.pylonsproject.org/ .. _HAProxy: http://www.haproxy.org/ .. _Varnish: https://www.varnish-cache.org/ diff -r 42788d5f5967 -r b3289fef0daa docs/setup.rst --- a/docs/setup.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/setup.rst Thu Jun 07 01:46:02 2018 +0200 @@ -5,18 +5,36 @@ ===== +Preparing front-end +------------------- + +Temporarily, in the current Kallithea version, some extra steps are required to +build front-end files: + +Find the right ``kallithea/public/less`` path with:: + + python -c "import os, kallithea; print os.path.join(os.path.dirname(os.path.abspath(kallithea.__file__)), 'public', 'less')" + +Then run:: + + npm install + npm run less + + Setting up Kallithea -------------------- First, you will need to create a Kallithea configuration file. Run the following command to do so:: - paster make-config Kallithea my.ini + gearbox make-config my.ini This will create the file ``my.ini`` in the current directory. This configuration file contains the various settings for Kallithea, e.g. proxy port, email settings, usage of static files, cache, Celery -settings, and logging. +settings, and logging. Extra settings can be specified like:: + + gearbox make-config my.ini host=8.8.8.8 "[handler_console]" formatter=color_formatter Next, you need to create the databases used by Kallithea. It is recommended to use PostgreSQL or SQLite (default). If you choose a database other than the @@ -25,7 +43,7 @@ PostgreSQL, SQLite and MySQL databases. Create the database by running the following command:: - paster setup-db my.ini + gearbox setup-db -c my.ini This will prompt you for a "root" path. This "root" path is the location where Kallithea will store all of its repositories on the current machine. After @@ -36,7 +54,7 @@ The ``setup-db`` values can also be given on the command line. Example:: - paster setup-db my.ini --user=nn --password=secret --email=nn@example.com --repos=/srv/repos + gearbox setup-db -c my.ini --user=nn --password=secret --email=nn@example.com --repos=/srv/repos The ``setup-db`` command will create all needed tables and an admin account. When choosing a root path you can either use a new @@ -54,7 +72,7 @@ You are now ready to use Kallithea. To run it simply execute:: - paster serve my.ini + gearbox serve -c my.ini - This command runs the Kallithea server. The web app should be available at http://127.0.0.1:5000. The IP address and port is configurable via the @@ -67,22 +85,20 @@ repositories. -Extensions ----------- - -Optionally one can create an ``rcextensions`` package that extends Kallithea -functionality. -To generate a skeleton extensions package, run:: +Internationalization (i18n support) +----------------------------------- - paster make-rcext my.ini +The Kallithea web interface is automatically displayed in the user's preferred +language, as indicated by the browser. Thus, different users may see the +application in different languages. If the requested language is not available +(because the translation file for that language does not yet exist or is +incomplete), the language specified in setting ``i18n.lang`` in the Kallithea +configuration file is used as fallback. If no fallback language is explicitly +specified, English is used. -This will create an ``rcextensions`` package next to the specified ``ini`` file. -With ``rcextensions`` it's possible to add additional mapping for whoosh, -stats and add additional code into the push/pull/create/delete repo hooks, -for example for sending signals to build-bots such as Jenkins. - -See the ``__init__.py`` file inside the generated ``rcextensions`` package -for more details. +If you want to disable automatic language detection and instead configure a +fixed language regardless of user preference, set ``i18n.enabled = false`` and +set ``i18n.lang`` to the desired language (or leave empty for English). Using Kallithea with SSH @@ -129,23 +145,23 @@ For an incremental index build, run:: - paster make-index my.ini + gearbox make-index -c my.ini For a full index rebuild, run:: - paster make-index my.ini -f + gearbox make-index -c my.ini -f -The ``--repo-location`` option allows the location of the repositories to be overriden; +The ``--repo-location`` option allows the location of the repositories to be overridden; usually, the location is retrieved from the Kallithea database. The ``--index-only`` option can be used to limit the indexed repositories to a comma-separated list:: - paster make-index my.ini --index-only=vcs,kallithea + gearbox make-index -c my.ini --index-only=vcs,kallithea To keep your index up-to-date it is necessary to do periodic index builds; for this, it is recommended to use a crontab entry. Example:: - 0 3 * * * /path/to/virtualenv/bin/paster make-index /path/to/kallithea/my.ini + 0 3 * * * /path/to/virtualenv/bin/gearbox make-index -c /path/to/kallithea/my.ini When using incremental mode (the default), Whoosh will check the last modification date of each file and add it to be reindexed if a newer file is @@ -157,6 +173,7 @@ .. _ldap-setup: + Setting up LDAP support ----------------------- @@ -178,10 +195,9 @@ Connection settings Enable LDAP = checked Host = host.example.com - Port = 389 Account = Password = - Connection Security = LDAPS connection + Connection Security = LDAPS Certificate Checks = DEMAND Search settings @@ -215,8 +231,9 @@ .. _Port: -Port : required - 389 for un-encrypted LDAP, 636 for SSL-encrypted LDAP. +Port : optional + Defaults to 389 for PLAIN un-encrypted LDAP and START_TLS. + Defaults to 636 for LDAPS. .. _ldap_account: @@ -236,26 +253,27 @@ Connection Security : required Defines the connection to LDAP server - No encryption - Plain non encrypted connection + PLAIN + Plain unencrypted LDAP connection. + This will by default use `Port`_ 389. - LDAPS connection - Enable LDAPS connections. It will likely require `Port`_ to be set to - a different value (standard LDAPS port is 636). When LDAPS is enabled - then `Certificate Checks`_ is required. + LDAPS + Use secure LDAPS connections according to `Certificate + Checks`_ configuration. + This will by default use `Port`_ 636. - START_TLS on LDAP connection - START TLS connection + START_TLS + Use START TLS according to `Certificate Checks`_ configuration on an + apparently "plain" LDAP connection. + This will by default use `Port`_ 389. .. _Certificate Checks: Certificate Checks : optional How SSL certificates verification is handled -- this is only useful when `Enable LDAPS`_ is enabled. Only DEMAND or HARD offer full SSL security - while the other options are susceptible to man-in-the-middle attacks. SSL - certificates can be installed to /etc/openldap/cacerts so that the - DEMAND or HARD options can be used with self-signed certificates or - certificates that do not have traceable certificates of authority. + with mandatory certificate validation, while the other options are + susceptible to man-in-the-middle attacks. NEVER A serve certificate will never be requested or checked. @@ -277,6 +295,16 @@ HARD The same as DEMAND. +.. _Custom CA Certificates: + +Custom CA Certificates : optional + Directory used by OpenSSL to find CAs for validating the LDAP server certificate. + Python 2.7.10 and later default to using the system certificate store, and + this should thus not be necessary when using certificates signed by a CA + trusted by the system. + It can be set to something like `/etc/openldap/cacerts` on older systems or + if using self-signed certificates. + .. _Base DN: Base DN : required @@ -347,7 +375,7 @@ will be saved there. Active Directory -'''''''''''''''' +^^^^^^^^^^^^^^^^ Kallithea can use Microsoft Active Directory for user authentication. This is done through an LDAP or LDAPS connection to Active Directory. The @@ -384,7 +412,7 @@ permissions before the user logs in for the first time, using the :ref:`create-user` API. Container-based authentication -'''''''''''''''''''''''''''''' +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In a container-based authentication setup, Kallithea reads the user name from the ``REMOTE_USER`` server variable provided by the WSGI container. @@ -394,7 +422,7 @@ Kallithea. Proxy pass-through authentication -''''''''''''''''''''''''''''''''' +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In a proxy pass-through authentication setup, Kallithea reads the user name from the ``X-Forwarded-User`` request header, which should be configured to be @@ -428,6 +456,73 @@ RequestHeader set X-Forwarded-User %{RU}e +Setting metadata in container/reverse-proxy +""""""""""""""""""""""""""""""""""""""""""" +When a new user account is created on the first login, Kallithea has no information about +the user's email and full name. So you can set some additional request headers like in the +example below. In this example the user is authenticated via Kerberos and an Apache +mod_python fixup handler is used to get the user information from a LDAP server. But you +could set the request headers however you want. + +.. code-block:: apache + + + ProxyPass http://127.0.0.1:5000/someprefix + ProxyPassReverse http://127.0.0.1:5000/someprefix + SetEnvIf X-Url-Scheme https HTTPS=1 + + AuthName "Kerberos Login" + AuthType Kerberos + Krb5Keytab /etc/apache2/http.keytab + KrbMethodK5Passwd off + KrbVerifyKDC on + Require valid-user + + PythonFixupHandler ldapmetadata + + RequestHeader set X_REMOTE_USER %{X_REMOTE_USER}e + RequestHeader set X_REMOTE_EMAIL %{X_REMOTE_EMAIL}e + RequestHeader set X_REMOTE_FIRSTNAME %{X_REMOTE_FIRSTNAME}e + RequestHeader set X_REMOTE_LASTNAME %{X_REMOTE_LASTNAME}e + + +.. code-block:: python + + from mod_python import apache + import ldap + + LDAP_SERVER = "ldaps://server.mydomain.com:636" + LDAP_USER = "" + LDAP_PASS = "" + LDAP_ROOT = "dc=mydomain,dc=com" + LDAP_FILTER = "sAMAccountName=%s" + LDAP_ATTR_LIST = ['sAMAccountName','givenname','sn','mail'] + + def fixuphandler(req): + if req.user is None: + # no user to search for + return apache.OK + else: + try: + if('\\' in req.user): + username = req.user.split('\\')[1] + elif('@' in req.user): + username = req.user.split('@')[0] + else: + username = req.user + l = ldap.initialize(LDAP_SERVER) + l.simple_bind_s(LDAP_USER, LDAP_PASS) + r = l.search_s(LDAP_ROOT, ldap.SCOPE_SUBTREE, LDAP_FILTER % username, attrlist=LDAP_ATTR_LIST) + + req.subprocess_env['X_REMOTE_USER'] = username + req.subprocess_env['X_REMOTE_EMAIL'] = r[0][1]['mail'][0].lower() + req.subprocess_env['X_REMOTE_FIRSTNAME'] = "%s" % r[0][1]['givenname'][0] + req.subprocess_env['X_REMOTE_LASTNAME'] = "%s" % r[0][1]['sn'][0] + except Exception, e: + apache.log_error("error getting data from ldap %s" % str(e), apache.APLOG_ERR) + + return apache.OK + .. note:: If you enable proxy pass-through authentication, make sure your server is only accessible through the proxy. Otherwise, any client would be able to @@ -440,36 +535,69 @@ Kallithea provides a simple integration with issue trackers. It's possible to define a regular expression that will match an issue ID in commit messages, -and have that replaced with a URL to the issue. To enable this simply -uncomment the following variables in the ini file:: +and have that replaced with a URL to the issue. + +This is achieved with following three variables in the ini file:: - issue_pat = (?:^#|\s#)(\w+) - issue_server_link = https://issues.example.com/{repo}/issue/{id} - issue_prefix = # + issue_pat = #(\d+) + issue_server_link = https://issues.example.com/{repo}/issue/\1 + issue_sub = ``issue_pat`` is the regular expression describing which strings in -commit messages will be treated as issue references. A match group in -parentheses should be used to specify the actual issue id. +commit messages will be treated as issue references. The expression can/should +have one or more parenthesized groups that can later be referred to in +``issue_server_link`` and ``issue_sub`` (see below). If you prefer, named groups +can be used instead of simple parenthesized groups. -The default expression matches issues in the format ``#``, e.g., ``#300``. +If the pattern should only match if it is preceded by whitespace, add the +following string before the actual pattern: ``(?:^|(?<=\s))``. +If the pattern should only match if it is followed by whitespace, add the +following string after the actual pattern: ``(?:$|(?=\s))``. +These expressions use lookbehind and lookahead assertions of the Python regular +expression module to avoid the whitespace to be part of the actual pattern, +otherwise the link text will also contain that whitespace. Matched issue references are replaced with the link specified in -``issue_server_link``. ``{id}`` is replaced with the issue ID, and -``{repo}`` with the repository name. Since the # is stripped away, -``issue_prefix`` is prepended to the link text. ``issue_prefix`` doesn't -necessarily need to be ``#``: if you set issue prefix to ``ISSUE-`` this will -generate a URL in the format: +``issue_server_link``, in which any backreferences are resolved. Backreferences +can be ``\1``, ``\2``, ... or for named groups ``\g``. +The special token ``{repo}`` is replaced with the full repository path +(including repository groups), while token ``{repo_name}`` is replaced with the +repository name (without repository groups). + +The link text is determined by ``issue_sub``, which can be a string containing +backreferences to the groups specified in ``issue_pat``. If ``issue_sub`` is +empty, then the text matched by ``issue_pat`` is used verbatim. + +The example settings shown above match issues in the format ``#``. +This will cause the text ``#300`` to be transformed into a link: .. code-block:: html - ISSUE-300 + #300 + +The following example transforms a text starting with either of 'pullrequest', +'pull request' or 'PR', followed by an optional space, then a pound character +(#) and one or more digits, into a link with the text 'PR #' followed by the +digits:: + + issue_pat = (pullrequest|pull request|PR) ?#(\d+) + issue_server_link = https://issues.example.com/\2 + issue_sub = PR #\2 + +The following example demonstrates how to require whitespace before the issue +reference in order for it to be recognized, such that the text ``issue#123`` will +not cause a match, but ``issue #123`` will:: + + issue_pat = (?:^|(?<=\s))#(\d+) + issue_server_link = https://issues.example.com/\1 + issue_sub = If needed, more than one pattern can be specified by appending a unique suffix to -the variables. For example:: +the variables. For example, also demonstrating the use of named groups:: - issue_pat_wiki = (?:wiki-)(.+) - issue_server_link_wiki = https://wiki.example.com/{id} - issue_prefix_wiki = WIKI- + issue_pat_wiki = wiki-(?P\S+) + issue_server_link_wiki = https://wiki.example.com/\g + issue_sub_wiki = WIKI-\g With these settings, wiki pages can be referenced as wiki-some-id, and every such reference will be transformed into: @@ -478,6 +606,9 @@ WIKI-some-id +Refer to the `Python regular expression documentation`_ for more details about +the supported syntax in ``issue_pat``, ``issue_server_link`` and ``issue_sub``. + Hook management --------------- @@ -531,7 +662,10 @@ To start the Celery process, run:: - paster celeryd + gearbox celeryd -c + +Extra options to the Celery worker can be passed after ``--`` - see ``-- -h`` +for more info. .. note:: Make sure you run this command from the same virtualenv, and with the same @@ -606,7 +740,7 @@ ## uncomment root directive if you want to serve static files by nginx ## requires static_files = false in .ini file - #root /path/to/installation/kallithea/public; + #root /srv/kallithea/kallithea/kallithea/public; include /etc/nginx/proxy.conf; location / { try_files $uri @kallithea; @@ -661,7 +795,7 @@ #important ! - #Directive to properly generate url (clone url) for pylons + #Directive to properly generate url (clone url) for Kallithea ProxyPreserveHost On #kallithea instance @@ -683,9 +817,9 @@ .. code-block:: apache - > - ProxyPass http://127.0.0.1:5000/ - ProxyPassReverse http://127.0.0.1:5000/ + + ProxyPass http://127.0.0.1:5000/PREFIX + ProxyPassReverse http://127.0.0.1:5000/PREFIX SetEnvIf X-Url-Scheme https HTTPS=1 @@ -698,9 +832,9 @@ [filter:proxy-prefix] use = egg:PasteDeploy#prefix - prefix = / + prefix = /PREFIX -then change ```` into your chosen prefix +then change ``PREFIX`` into your chosen prefix Apache with mod_wsgi @@ -755,11 +889,6 @@ directory owned by a different user, use the user and group options to WSGIDaemonProcess to set the name of the user and group. -.. note:: - If running Kallithea in multiprocess mode, - make sure you set ``instance_id = *`` in the configuration so each process - gets it's own cache invalidation key. - Example WSGI dispatch script: .. code-block:: python @@ -768,7 +897,7 @@ os.environ["HGENCODING"] = "UTF-8" os.environ['PYTHON_EGG_CACHE'] = '/srv/kallithea/.egg-cache' - # sometimes it's needed to set the curent dir + # sometimes it's needed to set the current dir os.chdir('/srv/kallithea/') import site @@ -808,6 +937,7 @@ .. _virtualenv: http://pypi.python.org/pypi/virtualenv .. _python: http://www.python.org/ +.. _Python regular expression documentation: https://docs.python.org/2/library/re.html .. _Mercurial: https://www.mercurial-scm.org/ .. _Celery: http://celeryproject.org/ .. _Celery documentation: http://docs.celeryproject.org/en/latest/getting-started/index.html diff -r 42788d5f5967 -r b3289fef0daa docs/theme/nature/static/nature.css_t --- a/docs/theme/nature/static/nature.css_t Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/theme/nature/static/nature.css_t Thu Jun 07 01:46:02 2018 +0200 @@ -2,11 +2,11 @@ * Sphinx stylesheet -- default theme * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - + @import url("basic.css"); - + /* -- page layout ----------------------------------------------------------- */ - + body { font-family: Arial, sans-serif; font-size: 100%; @@ -28,18 +28,18 @@ hr{ border: 1px solid #B1B4B6; } - + div.document { background-color: #eee; } - + div.body { background-color: #ffffff; color: #3E4349; padding: 0 30px 30px 30px; font-size: 0.8em; } - + div.footer { color: #555; width: 100%; @@ -47,12 +47,12 @@ text-align: center; font-size: 75%; } - + div.footer a { color: #444; text-decoration: underline; } - + div.related { background-color: #577632; line-height: 32px; @@ -60,11 +60,11 @@ text-shadow: 0px 1px 0 #444; font-size: 0.80em; } - + div.related a { color: #E2F3CC; } - + div.sphinxsidebar { font-size: 0.75em; line-height: 1.5em; @@ -73,7 +73,7 @@ div.sphinxsidebarwrapper{ padding: 20px 0; } - + div.sphinxsidebar h3, div.sphinxsidebar h4 { font-family: Arial, sans-serif; @@ -89,30 +89,29 @@ div.sphinxsidebar h4{ font-size: 1.1em; } - + div.sphinxsidebar h3 a { color: #444; } - - + div.sphinxsidebar p { color: #888; padding: 5px 20px; } - + div.sphinxsidebar p.topless { } - + div.sphinxsidebar ul { margin: 10px 20px; padding: 0; color: #000; } - + div.sphinxsidebar a { color: #444; } - + div.sphinxsidebar input { border: 1px solid #ccc; font-family: sans-serif; @@ -126,19 +125,19 @@ div.sphinxsidebar input[type=image] { border: 0; } - + /* -- body styles ----------------------------------------------------------- */ - + a { color: #005B81; text-decoration: none; } - + a:hover { color: #E32E00; text-decoration: underline; } - + div.body h1, div.body h2, div.body h3, @@ -153,30 +152,30 @@ padding: 5px 0 5px 10px; text-shadow: 0px 1px 0 white } - + div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; } div.body h2 { font-size: 150%; background-color: #C8D5E3; } div.body h3 { font-size: 120%; background-color: #D8DEE3; } div.body h4 { font-size: 110%; background-color: #D8DEE3; } div.body h5 { font-size: 100%; background-color: #D8DEE3; } div.body h6 { font-size: 100%; background-color: #D8DEE3; } - + a.headerlink { color: #c60f0f; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; } - + a.headerlink:hover { background-color: #c60f0f; color: white; } - + div.body p, div.body dd, div.body li { line-height: 1.5em; } - + div.admonition p.admonition-title + p { display: inline; } @@ -189,29 +188,29 @@ background-color: #eee; border: 1px solid #ccc; } - + div.seealso { background-color: #ffc; border: 1px solid #ff6; } - + div.topic { background-color: #eee; } - + div.warning { background-color: #ffe4e4; border: 1px solid #f66; } - + p.admonition-title { display: inline; } - + p.admonition-title:after { content: ":"; } - + pre { padding: 10px; background-color: White; @@ -222,7 +221,7 @@ margin: 1.5em 0 1.5em 0; box-shadow: 1px 1px 1px #d8d8d8; } - + tt { background-color: #ecf0f3; color: #222; diff -r 42788d5f5967 -r b3289fef0daa docs/upgrade.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/upgrade.rst Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,197 @@ +.. _upgrade: + +=================== +Upgrading Kallithea +=================== + +This describes the process for upgrading Kallithea, independently of the +Kallithea installation method. + +.. note:: + If you are upgrading from a RhodeCode installation, you must first + install Kallithea 0.3.2 and follow the instructions in the 0.3.2 + README to perform a one-time conversion of the database from + RhodeCode to Kallithea, before upgrading to the latest version + of Kallithea. + + +1. Stop the Kallithea web application +------------------------------------- + +This step depends entirely on the web server software used to serve +Kallithea, but in any case, Kallithea should not be running during +the upgrade. + +.. note:: + If you're using Celery, make sure you stop all instances during the + upgrade. + + +2. Create a backup of both database and configuration +----------------------------------------------------- + +You are of course strongly recommended to make backups regularly, but it +is *especially* important to make a full database and configuration +backup before performing a Kallithea upgrade. + +Back up your configuration +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Make a copy of your Kallithea configuration (``.ini``) file. + +If you are using :ref:`rcextensions `, you should also +make a copy of the entire ``rcextensions`` directory. + +Back up your database +^^^^^^^^^^^^^^^^^^^^^ + +If using SQLite, simply make a copy of the Kallithea database (``.db``) +file. + +If using PostgreSQL, please consult the documentation for the ``pg_dump`` +utility. + +If using MySQL, please consult the documentation for the ``mysqldump`` +utility. + +Look for ``sqlalchemy.url`` in your configuration file to determine +database type, settings, location, etc. + + +3. Activate the Kallithea virtual environment (if any) +------------------------------------------------------ + +Verify that you are using the Python environment that you originally +installed Kallithea in by running:: + + pip freeze + +This will list all packages installed in the current environment. If +Kallithea isn't listed, activate the correct virtual environment. +See the appropriate installation page for details. + + +4. Install new version of Kallithea +----------------------------------- + +Please refer to the instructions for the installation method you +originally used to install Kallithea. + +If you originally installed using pip, it is as simple as:: + + pip install --upgrade kallithea + +If you originally installed from version control, it is as simple as:: + + cd my-kallithea-clone + hg pull -u + pip install --upgrade -e . + +Temporarily, in the current version, an extra step is required to build +front-end files: + +Find the right ``kallithea/public/less`` path with:: + + python -c "import os, kallithea; print os.path.join(os.path.dirname(os.path.abspath(kallithea.__file__)), 'public', 'less')" + +Then run:: + + npm install + npm run less + + +5. Upgrade your configuration +----------------------------- + +Run the following command to create a new configuration (``.ini``) file:: + + gearbox make-config new.ini + +Then compare it with your old config file and see what changed. + +.. note:: + Please always make sure your ``.ini`` files are up to date. Errors + can often be caused by missing parameters added in new versions. + +.. _upgrade_db: + + +6. Upgrade your database +------------------------ + +.. note:: + If you are *downgrading* Kallithea, you should perform the database + migration step *before* installing the older version. (That is, + always perform migrations using the most recent of the two versions + you're migrating between.) + +First, run the following command to see your current database version:: + + alembic -c my.ini current + +Typical output will be something like "9358dc3d6828 (head)", which is +the current Alembic database "revision ID". Write down the entire output +for troubleshooting purposes. + +The output will be empty if you're upgrading from Kallithea 0.3.x or +older. That's expected. If you get an error that the config file was not +found or has no ``[alembic]`` section, see the next section. + +Next, if you are performing an *upgrade*: Run the following command to +upgrade your database to the current Kallithea version:: + + alembic -c my.ini upgrade head + +If you are performing a *downgrade*: Run the following command to +downgrade your database to the given version:: + + alembic -c my.ini downgrade 0.4 + +Alembic will show the necessary migrations (if any) as it executes them. +If no "ERROR" is displayed, the command was successful. + +Should an error occur, the database may be "stranded" half-way +through the migration, and you should restore it from backup. + +Enabling old Kallithea config files for Alembic use +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Kallithea configuration files created before the introduction of Alembic +(i.e. predating Kallithea 0.4) need to be updated for use with Alembic. +Without this, Alembic will fail with an error like this:: + + FAILED: No config file 'my.ini' found, or file has no '[alembic]' section + +If Alembic complains specifically about a missing ``alembic.ini``, it is +likely because you did not specify a config file using the ``-c`` option. +On the other hand, if the mentioned config file actually exists, you +need to append the following lines to it:: + + [alembic] + script_location = kallithea:alembic + +Your config file should now work with Alembic. + + +7. Rebuild the Whoosh full-text index +------------------------------------- + +It is recommended that you rebuild the Whoosh index after upgrading since +new Whoosh versions can introduce incompatible index changes. + + +8. Start the Kallithea web application +-------------------------------------- + +This step once again depends entirely on the web server software used to +serve Kallithea. + +Before starting the new version of Kallithea, you may find it helpful to +clear out your log file so that new errors are readily apparent. + +.. note:: + If you're using Celery, make sure you restart all instances of it after + upgrade. + + +.. _virtualenv: http://pypi.python.org/pypi/virtualenv diff -r 42788d5f5967 -r b3289fef0daa docs/usage/customization.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/usage/customization.rst Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,73 @@ +.. _customization: + +============= +Customization +============= + +There are several ways to customize Kallithea to your needs depending on what +you want to achieve. + + +HTML/JavaScript/CSS customization +--------------------------------- + +To customize the look-and-feel of the web interface (for example to add a +company banner or some JavaScript widget or to tweak the CSS style definitions) +you can enter HTML code (possibly with JavaScript and/or CSS) directly via the +*Admin > Settings > Global > HTML/JavaScript customization +block*. + + +Style sheet customization with Less +----------------------------------- + +Kallithea uses `Bootstrap 3`_ and Less_ for its style definitions. If you want +to make some customizations, we recommend to do so by creating a ``theme.less`` +file. When you create a file named ``theme.less`` in the Kallithea root +directory, you can use this file to override the default style. For example, +you can use this to override ``@kallithea-theme-main-color``, +``@kallithea-logo-url`` or other `Bootstrap variables`_. + +After creating the ``theme.less`` file, you need to regenerate the CSS files. +Install npm for your platform and run:: + + npm install + npm run less + +in the Kallithea root directory. + +.. _bootstrap 3: https://getbootstrap.com/docs/3.3/ +.. _bootstrap variables: https://getbootstrap.com/docs/3.3/customize/#less-variables +.. _less: http://lesscss.org/ + + +Behavioral customization: rcextensions +-------------------------------------- + +Some behavioral customization can be done in Python using ``rcextensions``, a +custom Python package that can extend Kallithea functionality. + +With ``rcextensions`` it's possible to add additional mappings for Whoosh +indexing and statistics, to add additional code into the push/pull/create/delete +repository hooks (for example to send signals to build bots such as Jenkins) and +even to monkey-patch certain parts of the Kallithea source code (for example +overwrite an entire function, change a global variable, ...). + +To generate a skeleton extensions package, run:: + + gearbox make-rcext -c my.ini + +This will create an ``rcextensions`` package next to the specified ``ini`` file. +See the ``__init__.py`` file inside the generated ``rcextensions`` package +for more details. + + +Behavioral customization: code changes +-------------------------------------- + +As Kallithea is open-source software, you can make any changes you like directly +in the source code. + +We encourage you to send generic improvements back to the +community so that Kallithea can become better. See :ref:`contributing` for more +details. diff -r 42788d5f5967 -r b3289fef0daa docs/usage/debugging.rst --- a/docs/usage/debugging.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/usage/debugging.rst Thu Jun 07 01:46:02 2018 +0200 @@ -25,7 +25,7 @@ To enable interactive debug mode simply comment out ``set debug = false`` in the .ini file. This will trigger an interactive debugger each time -there is an error in the browser, or send a http link if an error occured in the backend. This +there is an error in the browser, or send a http link if an error occurred in the backend. This is a great tool for fast debugging as you get a handy Python console right in the web view. diff -r 42788d5f5967 -r b3289fef0daa docs/usage/email.rst --- a/docs/usage/email.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/usage/email.rst Thu Jun 07 01:46:02 2018 +0200 @@ -12,8 +12,17 @@ Before any email can be sent, an SMTP server has to be configured using the configuration file setting ``smtp_server``. If required for that server, specify a username (``smtp_username``) and password (``smtp_password``), a non-standard -port (``smtp_port``), encryption settings (``smtp_use_tls`` or ``smtp_use_ssl``) -and/or specific authentication parameters (``smtp_auth``). +port (``smtp_port``), whether to use "SSL" when connecting (``smtp_use_ssl``) +or use STARTTLS (``smtp_use_tls``), and/or specify special ESMTP "auth" features +(``smtp_auth``). + +For example, for sending through gmail, use:: + + smtp_server = smtp.gmail.com + smtp_username = username + smtp_password = password + smtp_port = 465 + smtp_use_ssl = true Application emails @@ -67,9 +76,8 @@ When an exception occurs in Kallithea -- and unless interactive debugging is enabled using ``set debug = true`` in the ``[app:main]`` section of the -configuration file -- an email with exception details is sent by WebError_'s -``ErrorMiddleware`` to the addresses specified in ``email_to`` in the -configuration file. +configuration file -- an email with exception details is sent by backlash_ +to the addresses specified in ``email_to`` in the configuration file. Recipients will see these emails originating from the sender specified in the ``error_email_from`` setting in the configuration file. This setting can either @@ -77,10 +85,6 @@ a name and an address in the following format: `Kallithea Errors `. -*Note:* The WebError_ package does not respect ``smtp_port`` and assumes the -standard SMTP port (25). If you have a remote SMTP server with a different port, -you could set up a local forwarding SMTP server on port 25. - References ---------- @@ -89,4 +93,4 @@ - `ErrorHandler (Pylons modules documentation) `_ -.. _WebError: https://pypi.python.org/pypi/WebError +.. _backlash: https://github.com/TurboGears/backlash diff -r 42788d5f5967 -r b3289fef0daa docs/usage/general.rst --- a/docs/usage/general.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/usage/general.rst Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ There is a special command for cleaning up such archived repositories:: - paster cleanup-repos --older-than=30d my.ini + gearbox cleanup-repos --older-than=30d -c my.ini This command scans for archived repositories that are older than 30 days, displays them, and asks if you want to delete them (unless given @@ -151,7 +151,7 @@ features that merit further explanation. Repository extra fields -~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^ In the *Visual* tab, there is an option "Use repository extra fields", which allows to set custom fields for each repository in the system. @@ -165,7 +165,7 @@ Newly created fields are accessible via the API. Meta tagging -~~~~~~~~~~~~ +^^^^^^^^^^^^ In the *Visual* tab, option "Stylify recognised meta tags" will cause Kallithea to turn certain text fragments in repository and repository group diff -r 42788d5f5967 -r b3289fef0daa docs/usage/performance.rst --- a/docs/usage/performance.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/usage/performance.rst Thu Jun 07 01:46:02 2018 +0200 @@ -4,59 +4,65 @@ Optimizing Kallithea performance ================================ -When serving a large amount of big repositories, Kallithea can start -performing slower than expected. Because of the demanding nature of handling large -amounts of data from version control systems, here are some tips on how to get -the best performance. +When serving a large amount of big repositories, Kallithea can start performing +slower than expected. Because of the demanding nature of handling large amounts +of data from version control systems, here are some tips on how to get the best +performance. + -* Kallithea is often I/O bound, and hence a fast disk (SSD/SAN) is - usually more important than a fast CPU. +Fast storage +------------ -* Sluggish loading of the front page can easily be fixed by grouping repositories or by - increasing cache size (see below). This includes using the lightweight dashboard - option and ``vcs_full_cache`` setting in .ini file. +Kallithea is often I/O bound, and hence a fast disk (SSD/SAN) and plenty of RAM +is usually more important than a fast CPU. + -Follow these few steps to improve performance of Kallithea system. +Caching +------- -1. Increase cache +Tweak beaker cache settings in the ini file. The actual effect of that is +questionable. - Tweak beaker cache settings in the ini file. The actual effect of that - is questionable. -2. Switch from SQLite to PostgreSQL or MySQL +Database +-------- - SQLite is a good option when having a small load on the system. But due to - locking issues with SQLite, it is not recommended to use it for larger - deployments. Switching to MySQL or PostgreSQL will result in an immediate - performance increase. A tool like SQLAlchemyGrate_ can be used for - migrating to another database platform. +SQLite is a good option when having a small load on the system. But due to +locking issues with SQLite, it is not recommended to use it for larger +deployments. -3. Scale Kallithea horizontally +Switching to MySQL or PostgreSQL will result in an immediate performance +increase. A tool like SQLAlchemyGrate_ can be used for migrating to another +database platform. + - Scaling horizontally can give huge performance benefits when dealing with - large amounts of traffic (many users, CI servers, etc.). Kallithea can be - scaled horizontally on one (recommended) or multiple machines. +Horizontal scaling +------------------ - It is generally possible to run WSGI applications multithreaded, so that - several HTTP requests are served from the same Python process at once. That - can in principle give better utilization of internal caches and less - process overhead. +Scaling horizontally means running several Kallithea instances and let them +share the load. That can give huge performance benefits when dealing with large +amounts of traffic (many users, CI servers, etc.). Kallithea can be scaled +horizontally on one (recommended) or multiple machines. - One danger of running multithreaded is that program execution becomes much - more complex; programs must be written to consider all combinations of - events and problems might depend on timing and be impossible to reproduce. +It is generally possible to run WSGI applications multithreaded, so that +several HTTP requests are served from the same Python process at once. That can +in principle give better utilization of internal caches and less process +overhead. - Kallithea can't promise to be thread-safe, just like the embedded Mercurial - backend doesn't make any strong promises when used as Kallithea uses it. - Instead, we recommend scaling by using multiple server processes. +One danger of running multithreaded is that program execution becomes much more +complex; programs must be written to consider all combinations of events and +problems might depend on timing and be impossible to reproduce. - Web servers with multiple worker processes (such as ``mod_wsgi`` with the - ``WSGIDaemonProcess`` ``processes`` parameter) will work out of the box. +Kallithea can't promise to be thread-safe, just like the embedded Mercurial +backend doesn't make any strong promises when used as Kallithea uses it. +Instead, we recommend scaling by using multiple server processes. - In order to scale horizontally on multiple machines, you need to do the - following: +Web servers with multiple worker processes (such as ``mod_wsgi`` with the +``WSGIDaemonProcess`` ``processes`` parameter) will work out of the box. - - Each instance needs its own .ini file and unique ``instance_id`` set. +In order to scale horizontally on multiple machines, you need to do the +following: + - Each instance's ``data`` storage needs to be configured to be stored on a shared disk storage, preferably together with repositories. This ``data`` dir contains template caches, sessions, whoosh index and is used for @@ -71,4 +77,42 @@ servers or build bots. +Serve static files directly from the web server +----------------------------------------------- + +With the default ``static_files`` ini setting, the Kallithea WSGI application +will take care of serving the static files from ``kallithea/public/`` at the +root of the application URL. + +The actual serving of the static files is very fast and unlikely to be a +problem in a Kallithea setup - the responses generated by Kallithea from +database and repository content will take significantly more time and +resources. + +To serve static files from the web server, use something like this Apache config +snippet:: + + Alias /images/ /srv/kallithea/kallithea/kallithea/public/images/ + Alias /css/ /srv/kallithea/kallithea/kallithea/public/css/ + Alias /js/ /srv/kallithea/kallithea/kallithea/public/js/ + Alias /codemirror/ /srv/kallithea/kallithea/kallithea/public/codemirror/ + Alias /fontello/ /srv/kallithea/kallithea/kallithea/public/fontello/ + +Then disable serving of static files in the ``.ini`` ``app:main`` section:: + + static_files = false + +If using Kallithea installed as a package, you should be able to find the files +under ``site-packages/kallithea``, either in your Python installation or in your +virtualenv. When upgrading, make sure to update the web server configuration +too if necessary. + +It might also be possible to improve performance by configuring the web server +to compress responses (served from static files or generated by Kallithea) when +serving them. That might also imply buffering of responses - that is more +likely to be a problem; large responses (clones or pulls) will have to be fully +processed and spooled to disk or memory before the client will see any +response. See the documentation for your web server. + + .. _SQLAlchemyGrate: https://github.com/shazow/sqlalchemygrate diff -r 42788d5f5967 -r b3289fef0daa docs/usage/troubleshooting.rst --- a/docs/usage/troubleshooting.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/usage/troubleshooting.rst Thu Jun 07 01:46:02 2018 +0200 @@ -63,7 +63,7 @@ | :Q: **Requests hanging on Windows** -:A: Please try out with disabled Antivirus software, there are some known problems with Eset Anitivirus. Make sure +:A: Please try out with disabled Antivirus software, there are some known problems with Eset Antivirus. Make sure you have installed the latest Windows patches (especially KB2789397). diff -r 42788d5f5967 -r b3289fef0daa docs/usage/vcs_support.rst --- a/docs/usage/vcs_support.rst Wed Jun 06 21:37:21 2018 +0200 +++ b/docs/usage/vcs_support.rst Thu Jun 07 01:46:02 2018 +0200 @@ -23,15 +23,15 @@ Web server with chunked encoding -```````````````````````````````` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Large Git pushes require an HTTP server with support for chunked encoding for POST. The Python web servers waitress_ and gunicorn_ (Linux only) can be used. By default, Kallithea uses -waitress_ for `paster serve` instead of the built-in `paste` WSGI +waitress_ for `gearbox serve` instead of the built-in `paste` WSGI server. -The paster server is controlled in the .ini file:: +The web server used by gearbox is controlled in the .ini file:: use = egg:waitress#main @@ -51,7 +51,7 @@ Working with Mercurial subrepositories -`````````````````````````````````````` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This section explains how to use Mercurial subrepositories_ in Kallithea. @@ -81,6 +81,70 @@ Next we can edit the subrepository data, and push back to Kallithea. This will update both repositories. +.. _importing: + + +Importing existing repositories +------------------------------- + +There are two main methods to import repositories in Kallithea: via the web +interface or via the filesystem. If you have a large number of repositories to +import, importing them via the filesystem is more convenient. + +Importing via web interface +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For a small number of repositories, it may be easier to create the target +repositories through the Kallithea web interface, via *Admin > Repositories* or +via the *Add Repository* button on the entry page of the web interface. + +Repositories can be nested in repository groups by first creating the group (via +*Admin > Repository Groups* or via the *Add Repository Group* button on the +entry page of the web interface) and then selecting the appropriate group when +adding the repository. + +After creation of the (empty) repository, push the existing commits to the +*Clone URL* displayed on the repository summary page. For Git repositories, +first add the *Clone URL* as remote, then push the commits to that remote. The +specific commands to execute are shown under the *Existing repository?* section +of the new repository's summary page. + +A benefit of this method particular for Git repositories, is that the +Kallithea-specific Git hooks are installed automatically. For Mercurial, no +hooks are required anyway. + +Importing via the filesystem +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The alternative method of importing repositories consists of creating the +repositories in the desired hierarchy on the filesystem and letting Kallithea +scan that location. + +All repositories are stored in a central location on the filesystem. This +location is specified during installation (via ``setup-db``) and can be reviewed +at *Admin > Settings > VCS > Location of repositories*. Repository groups +(defined in *Admin > Repository Groups*) are represented by a directory in that +repository location. Repositories of the repository group are nested under that +directory. + +To import a set of repositories and organize them in a certain repository group +structure, first place clones in the desired hierarchy at the configured +repository location. +These clones should be created without working directory. For Mercurial, this is +done with ``hg clone -U``, for Git with ``git clone --bare``. + +When the repositories are added correctly on the filesystem: + +* go to *Admin > Settings > Remap and Rescan* in the Kallithea web interface +* select the *Install Git hooks* checkbox when importing Git repositories +* click *Rescan Repositories* + +This step will scan the filesystem and create the appropriate repository groups +and repositories in Kallithea. + +*Note*: Once repository groups have been created this way, manage their access +permissions through the Kallithea web interface. + .. _waitress: http://pypi.python.org/pypi/waitress .. _gunicorn: http://pypi.python.org/pypi/gunicorn diff -r 42788d5f5967 -r b3289fef0daa init.d/celeryd-upstart.conf --- a/init.d/celeryd-upstart.conf Wed Jun 06 21:37:21 2018 +0200 +++ b/init.d/celeryd-upstart.conf Thu Jun 07 01:46:02 2018 +0200 @@ -2,8 +2,8 @@ # Change variables/paths as necessary and place file /etc/init/celeryd.conf # start/stop/restart as normal upstart job (ie: $ start celeryd) -description "Celery for Kallithea Mercurial Server" -author "Matt Zuba /dev/null + [ -n "$PID" ] && kill $PID &>/dev/null if [ $? = 0 ]; then rm_daemon $DAEMON stat_done @@ -67,4 +67,4 @@ ;; *) echo "usage: $0 {start|stop|restart|status}" -esac \ No newline at end of file +esac diff -r 42788d5f5967 -r b3289fef0daa init.d/kallithea-daemon-debian --- a/init.d/kallithea-daemon-debian Wed Jun 06 21:37:21 2018 +0200 +++ b/init.d/kallithea-daemon-debian Thu Jun 07 01:46:02 2018 +0200 @@ -2,9 +2,9 @@ ######################################## #### THIS IS A DEBIAN INIT.D SCRIPT #### ######################################## - + ### BEGIN INIT INFO -# Provides: kallithea +# Provides: kallithea # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 @@ -12,29 +12,29 @@ # Short-Description: starts instance of kallithea # Description: starts instance of kallithea using start-stop-daemon ### END INIT INFO - + APP_NAME="kallithea" APP_HOMEDIR="opt" APP_PATH="/$APP_HOMEDIR/$APP_NAME" - + CONF_NAME="production.ini" - + PID_PATH="$APP_PATH/$APP_NAME.pid" LOG_PATH="$APP_PATH/$APP_NAME.log" - + PYTHON_PATH="/$APP_HOMEDIR/$APP_NAME-venv" - + RUN_AS="root" - -DAEMON="$PYTHON_PATH/bin/paster" - + +DAEMON="$PYTHON_PATH/bin/gearbox" + DAEMON_OPTS="serve --daemon \ --user=$RUN_AS \ --group=$RUN_AS \ --pid-file=$PID_PATH \ - --log-file=$LOG_PATH $APP_PATH/$CONF_NAME" - - + --log-file=$LOG_PATH -c $APP_PATH/$CONF_NAME" + + start() { echo "Starting $APP_NAME" PYTHON_EGG_CACHE="/tmp" start-stop-daemon -d $APP_PATH \ @@ -43,18 +43,18 @@ --user $RUN_AS \ --exec $DAEMON -- $DAEMON_OPTS } - + stop() { echo "Stopping $APP_NAME" start-stop-daemon -d $APP_PATH \ --stop --quiet \ --pidfile $PID_PATH || echo "$APP_NAME - Not running!" - + if [ -f $PID_PATH ]; then rm $PID_PATH fi } - + status() { echo -n "Checking status of $APP_NAME ... " pid=`cat $PID_PATH` @@ -65,7 +65,7 @@ echo "NOT running" fi } - + case "$1" in status) status @@ -87,4 +87,4 @@ *) echo "Usage: $0 {start|stop|restart}" exit 1 -esac \ No newline at end of file +esac diff -r 42788d5f5967 -r b3289fef0daa init.d/kallithea-daemon-gentoo --- a/init.d/kallithea-daemon-gentoo Wed Jun 06 21:37:21 2018 +0200 +++ b/init.d/kallithea-daemon-gentoo Thu Jun 07 01:46:02 2018 +0200 @@ -16,13 +16,13 @@ RUN_AS="username" -DAEMON="$PYTHON_PATH/bin/paster" +DAEMON="$PYTHON_PATH/bin/gearbox" DAEMON_OPTS="serve --daemon \ --user=$RUN_AS \ --group=$RUN_AS \ --pid-file=$PID_PATH \ ---log-file=$LOG_PATH $APP_PATH/$CONF_NAME" +--log-file=$LOG_PATH -c $APP_PATH/$CONF_NAME" #extra options opts="${opts} restartdelay" @@ -56,6 +56,6 @@ #stop() echo "sleep3" sleep 3 - + #start() } diff -r 42788d5f5967 -r b3289fef0daa init.d/kallithea-daemon-redhat --- a/init.d/kallithea-daemon-redhat Wed Jun 06 21:37:21 2018 +0200 +++ b/init.d/kallithea-daemon-redhat Thu Jun 07 01:46:02 2018 +0200 @@ -20,7 +20,7 @@ CONF_NAME="production.ini" # write to wherever the PID should be stored, just ensure -# that the user you run paster as has the appropriate permissions +# that the user you run gearbox as has the appropriate permissions # same goes for the log file PID_PATH="/var/run/kallithea/pid" LOG_PATH="/var/log/kallithea/kallithea.log" @@ -31,13 +31,13 @@ RUN_AS="kallithea" -DAEMON="$PYTHON_PATH/bin/paster" +DAEMON="$PYTHON_PATH/bin/gearbox" DAEMON_OPTS="serve --daemon \ --user=$RUN_AS \ --group=$RUN_AS \ --pid-file=$PID_PATH \ - --log-file=$LOG_PATH $APP_PATH/$CONF_NAME" + --log-file=$LOG_PATH -c $APP_PATH/$CONF_NAME" DESC="kallithea-server" LOCK_FILE="/var/lock/subsys/$APP_NAME" @@ -129,4 +129,4 @@ ;; esac -exit $RETVAL \ No newline at end of file +exit $RETVAL diff -r 42788d5f5967 -r b3289fef0daa init.d/kallithea-upstart.conf --- a/init.d/kallithea-upstart.conf Wed Jun 06 21:37:21 2018 +0200 +++ b/init.d/kallithea-upstart.conf Thu Jun 07 01:46:02 2018 +0200 @@ -2,8 +2,8 @@ # Change variables/paths as necessary and place file /etc/init/kallithea.conf # start/stop/restart as normal upstart job (ie: $ start kallithea) -description "Kallithea Mercurial Server" -author "Matt Zuba kallithea/brand.py - -BRAND = "kallithea" try: - from kallithea.brand import BRAND + import kallithea.brand except ImportError: pass - -# Prefix for the ui and settings table names -DB_PREFIX = (BRAND + "_") if BRAND != "kallithea" else "" - -# Users.extern_type and .extern_name value for local users -EXTERN_TYPE_INTERNAL = BRAND if BRAND != 'kallithea' else 'internal' - -# db_migrate_version.repository_id value, same as kallithea/lib/dbmigrate/migrate.cfg -DB_MIGRATIONS = BRAND + "_db_migrations" +else: + assert False, 'Database rebranding is no longer supported; see README.' -try: - from kallithea.lib import get_current_revision - _rev = get_current_revision(quiet=True) - if _rev and len(VERSION) > 3: - VERSION += (_rev[0],) -except ImportError: - pass -__version__ = ('.'.join((str(each) for each in VERSION[:3]))) -__dbversion__ = 31 # defines current db version for migrations +__version__ = '.'.join(str(each) for each in VERSION) __platform__ = platform.system() __license__ = 'GPLv3' __py_version__ = sys.version_info @@ -85,17 +61,3 @@ is_windows = __platform__ in ['Windows'] is_unix = not is_windows - -if len(VERSION) > 3: - __version__ += '.'+VERSION[3] - - if len(VERSION) > 4: - __version__ += VERSION[4] - else: - __version__ += '0' - -# Hack for making the celery dependency kombu==1.5.1 compatible with Python -# 2.7.11 which has https://hg.python.org/releases/2.7.11/rev/24bdc4940e81 -import uuid -if not hasattr(uuid, '_uuid_generate_random'): - uuid._uuid_generate_random = None diff -r 42788d5f5967 -r b3289fef0daa kallithea/alembic/env.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/alembic/env.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Alembic migration environment (configuration). + +import logging +from logging.config import fileConfig + +from alembic import context +from sqlalchemy import engine_from_config, pool + +from kallithea.model import db + + +# The alembic.config.Config object, which wraps the current .ini file. +config = context.config + +# Default to use the main Kallithea database string in [app:main]. +# For advanced uses, this can be overridden by specifying an explicit +# [alembic] sqlalchemy.url. +database_url = ( + config.get_main_option('sqlalchemy.url') or + config.get_section_option('app:main', 'sqlalchemy.url') +) + +# Configure default logging for Alembic. (This can be overriden by the +# config file, but usually isn't.) +logging.getLogger('alembic').setLevel(logging.INFO) + +# Setup Python loggers based on the config file provided to the alembic +# command. If we're being invoked via the Alembic API (presumably for +# stamping during "gearbox setup-db"), config_file_name is not available, +# and loggers are assumed to already have been configured. +if config.config_file_name: + fileConfig(config.config_file_name, disable_existing_loggers=False) + + +def include_in_autogeneration(object, name, type, reflected, compare_to): + """Filter changes subject to autogeneration of migrations. """ + + # Don't include changes to sqlite_sequence. + if type == 'table' and name == 'sqlite_sequence': + return False + + return True + + +def run_migrations_offline(): + """Run migrations in 'offline' (--sql) mode. + + This produces an SQL script instead of directly applying the changes. + Some migrations may not run in offline mode. + """ + context.configure( + url=database_url, + literal_binds=True, + ) + + with context.begin_transaction(): + context.run_migrations() + + +def run_migrations_online(): + """Run migrations in 'online' mode. + + Connects to the database and directly applies the necessary + migrations. + """ + cfg = config.get_section(config.config_ini_section) + cfg['sqlalchemy.url'] = database_url + connectable = engine_from_config( + cfg, + prefix='sqlalchemy.', + poolclass=pool.NullPool) + + with connectable.connect() as connection: + context.configure( + connection=connection, + + # Support autogeneration of migration scripts based on "diff" between + # current database schema and kallithea.model.db schema. + target_metadata=db.Base.metadata, + include_object=include_in_autogeneration, + render_as_batch=True, # batch mode is needed for SQLite support + ) + + with context.begin_transaction(): + context.run_migrations() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff -r 42788d5f5967 -r b3289fef0daa kallithea/alembic/script.py.mako --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/alembic/script.py.mako Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## Template for creating new Alembic migration scripts. +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" + +# The following opaque hexadecimal identifiers ("revisions") are used +# by Alembic to track this migration script and its relations to others. +revision = ${repr(up_revision)} +down_revision = ${repr(down_revision)} +branch_labels = ${repr(branch_labels)} +depends_on = ${repr(depends_on)} + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +def upgrade(): + ${upgrades if upgrades else "pass"} + + +def downgrade(): + ${downgrades if downgrades else "pass"} diff -r 42788d5f5967 -r b3289fef0daa kallithea/alembic/versions/9358dc3d6828_drop_sqlalchemy_migrate_support.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/alembic/versions/9358dc3d6828_drop_sqlalchemy_migrate_support.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,37 @@ +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +"""Drop SQLAlchemy Migrate support + +Revision ID: 9358dc3d6828 +Revises: +Create Date: 2016-03-01 15:21:30.896585 + +""" + +# The following opaque hexadecimal identifiers ("revisions") are used +# by Alembic to track this migration script and its relations to others. +revision = '9358dc3d6828' +down_revision = None +branch_labels = None +depends_on = None + +from alembic import op + + +def upgrade(): + op.drop_table('db_migrate_version') + + +def downgrade(): + raise NotImplementedError('cannot revert to SQLAlchemy Migrate') diff -r 42788d5f5967 -r b3289fef0daa kallithea/alembic/versions/a020f7044fd6_rename_hooks.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/alembic/versions/a020f7044fd6_rename_hooks.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,61 @@ +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +"""rename hooks + +Revision ID: a020f7044fd6 +Revises: 9358dc3d6828 +Create Date: 2017-11-24 13:35:14.374000 + +""" + +# The following opaque hexadecimal identifiers ("revisions") are used +# by Alembic to track this migration script and its relations to others. +revision = 'a020f7044fd6' +down_revision = '9358dc3d6828' +branch_labels = None +depends_on = None + +from alembic import op +from kallithea.model.db import Ui +from sqlalchemy import Table, MetaData + +meta = MetaData() + + +def upgrade(): + meta.bind = op.get_bind() + ui = Table(Ui.__tablename__, meta, autoload=True) + + ui.update(values={ + 'ui_key': 'prechangegroup.push_lock_handling', + 'ui_value': 'python:kallithea.lib.hooks.push_lock_handling', + }).where(ui.c.ui_key == 'prechangegroup.pre_push').execute() + ui.update(values={ + 'ui_key': 'preoutgoing.pull_lock_handling', + 'ui_value': 'python:kallithea.lib.hooks.pull_lock_handling', + }).where(ui.c.ui_key == 'preoutgoing.pre_pull').execute() + + +def downgrade(): + meta.bind = op.get_bind() + ui = Table(Ui.__tablename__, meta, autoload=True) + + ui.update(values={ + 'ui_key': 'prechangegroup.pre_push', + 'ui_value': 'python:kallithea.lib.hooks.pre_push', + }).where(ui.c.ui_key == 'prechangegroup.push_lock_handling').execute() + ui.update(values={ + 'ui_key': 'preoutgoing.pre_pull', + 'ui_value': 'python:kallithea.lib.hooks.pre_pull', + }).where(ui.c.ui_key == 'preoutgoing.pull_lock_handling').execute() diff -r 42788d5f5967 -r b3289fef0daa kallithea/bin/base.py --- a/kallithea/bin/base.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/bin/base.py Thu Jun 07 01:46:02 2018 +0200 @@ -111,8 +111,8 @@ return True return False - def __eq__(self): - return self._conf.__eq__() + def __eq__(self, other): + return self._conf.__eq__(other) def __repr__(self): return 'RcConf<%s>' % self._conf.__repr__() @@ -158,7 +158,7 @@ """ try: with open(self._conf_name, 'rb') as conf: - return json.load(conf) + return json.load(conf) except IOError as e: #sys.stderr.write(str(e) + '\n') pass diff -r 42788d5f5967 -r b3289fef0daa kallithea/bin/kallithea_api.py --- a/kallithea/bin/kallithea_api.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/bin/kallithea_api.py Thu Jun 07 01:46:02 2018 +0200 @@ -121,5 +121,6 @@ ) return 0 + if __name__ == '__main__': sys.exit(main(sys.argv)) diff -r 42788d5f5967 -r b3289fef0daa kallithea/bin/kallithea_backup.py --- a/kallithea/bin/kallithea_backup.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/bin/kallithea_backup.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,11 +28,11 @@ import os import sys - import logging import tarfile import datetime import subprocess +import tempfile logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(levelname)-5.5s %(message)s") @@ -47,7 +47,7 @@ self.repos_path = self.get_repos_path(repos_location) self.backup_server = backup_server - self.backup_file_path = '/tmp' + self.backup_file_path = tempfile.gettempdir() logging.info('starting backup for %s', self.repos_path) logging.info('backup target %s', self.backup_file_path) @@ -86,12 +86,13 @@ '%(backup_server)s' % params] subprocess.call(cmd) - logging.info('Transfered file %s to %s', self.backup_file_name, cmd[4]) + logging.info('Transferred file %s to %s', self.backup_file_name, cmd[4]) def rm_file(self): logging.info('Removing file %s', self.backup_file_name) os.remove(os.path.join(self.backup_file_path, self.backup_file_name)) + if __name__ == "__main__": repo_location = '/home/repo_path' diff -r 42788d5f5967 -r b3289fef0daa kallithea/bin/kallithea_config.py --- a/kallithea/bin/kallithea_config.py Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,160 +0,0 @@ -#!/usr/bin/env python2 - -# -*- coding: utf-8 -*- -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -""" -kallithea.bin.kallithea_config -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -configuration generator for Kallithea - -This file was forked by the Kallithea project in July 2014. -Original author and date, and relevant copyright and licensing information is below: -:created_on: Jun 18, 2013 -:author: marcink -:copyright: (c) 2013 RhodeCode GmbH, and others. -:license: GPLv3, see LICENSE.md for more details. -""" - - -import os -import sys -import uuid -import argparse -from mako.template import Template -TMPL = 'template.ini.mako' -here = os.path.dirname(os.path.abspath(__file__)) - -def argparser(argv): - usage = ( - "kallithea-config [-h] [--filename=FILENAME] [--template=TEMPLATE] \n" - "VARS optional specify extra template variable that will be available in " - "template. Use comma separated key=val format eg.\n" - "key1=val1,port=5000,host=127.0.0.1,elements='a\,b\,c'\n" - ) - - parser = argparse.ArgumentParser( - description='Kallithea CONFIG generator with variable replacement', - usage=usage - ) - - ## config - group = parser.add_argument_group('CONFIG') - group.add_argument('--filename', help='Output ini filename.') - group.add_argument('--template', help='Mako template file to use instead of ' - 'the default builtin template') - group.add_argument('--raw', help='Store given mako template as raw without ' - 'parsing. Use this to create custom template ' - 'initially', action='store_true') - group.add_argument('--show-defaults', help='Show all default variables for ' - 'builtin template', action='store_true') - args, other = parser.parse_known_args() - return parser, args, other - - -def _escape_split(text, sep): - """ - Allows for escaping of the separator: e.g. arg='foo\, bar' - - It should be noted that the way bash et. al. do command line parsing, those - single quotes are required. a shameless ripoff from fabric project. - - """ - escaped_sep = r'\%s' % sep - - if escaped_sep not in text: - return text.split(sep) - - before, _, after = text.partition(escaped_sep) - startlist = before.split(sep) # a regular split is fine here - unfinished = startlist[-1] - startlist = startlist[:-1] - - # recurse because there may be more escaped separators - endlist = _escape_split(after, sep) - - # finish building the escaped value. we use endlist[0] becaue the first - # part of the string sent in recursion is the rest of the escaped value. - unfinished += sep + endlist[0] - - return startlist + [unfinished] + endlist[1:] # put together all the parts - -def _run(argv): - parser, args, other = argparser(argv) - if not len(sys.argv) > 1: - print parser.print_help() - sys.exit(0) - # defaults that can be overwritten by arguments - tmpl_stored_args = { - 'http_server': 'waitress', - 'lang': 'en', - 'database_engine': 'sqlite', - 'host': '127.0.0.1', - 'port': 5000, - 'error_aggregation_service': None, - } - if other: - # parse arguments, we assume only first is correct - kwargs = {} - for el in _escape_split(other[0], ','): - kv = _escape_split(el, '=') - if len(kv) == 2: - k, v = kv - kwargs[k] = v - # update our template stored args - tmpl_stored_args.update(kwargs) - - # use default that cannot be replaced - tmpl_stored_args.update({ - 'uuid': lambda: uuid.uuid4().hex, - 'here': os.path.abspath(os.curdir), - }) - if args.show_defaults: - for k,v in tmpl_stored_args.iteritems(): - print '%s=%s' % (k, v) - sys.exit(0) - try: - # built in template - tmpl_file = os.path.join(here, TMPL) - if args.template: - tmpl_file = args.template - - with open(tmpl_file, 'rb') as f: - tmpl_data = f.read().decode('utf-8') - if args.raw: - tmpl = tmpl_data - else: - tmpl = Template(tmpl_data).render(**tmpl_stored_args) - with open(args.filename, 'wb') as f: - f.write(tmpl.encode('utf-8')) - print 'Wrote new config file in %s' % (os.path.abspath(args.filename)) - - except Exception: - from mako import exceptions - print exceptions.text_error_template().render() - -def main(argv=None): - """ - Main execution function for cli - - :param argv: - """ - if argv is None: - argv = sys.argv - - return _run(argv) - - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff -r 42788d5f5967 -r b3289fef0daa kallithea/bin/ldap_sync.conf --- a/kallithea/bin/ldap_sync.conf Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/bin/ldap_sync.conf Thu Jun 07 01:46:02 2018 +0200 @@ -3,9 +3,9 @@ api_user = admin api_key = XXXXXXXXXXXX -ldap_uri = ldap://ldap.example.com:389 +ldap_uri = ldaps://ldap.example.com:636 ldap_user = cn=kallithea,dc=example,dc=com ldap_key = XXXXXXXXX base_dn = dc=example,dc=com -sync_users = True \ No newline at end of file +sync_users = True diff -r 42788d5f5967 -r b3289fef0daa kallithea/bin/ldap_sync.py --- a/kallithea/bin/ldap_sync.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/bin/ldap_sync.py Thu Jun 07 01:46:02 2018 +0200 @@ -207,7 +207,7 @@ groups = self.ldap_client.get_groups() for group in groups: try: - self.kallithea_api.create_repo_group(group) + self.kallithea_api.create_group(group) added += 1 except Exception: existing += 1 diff -r 42788d5f5967 -r b3289fef0daa kallithea/bin/rebranddb.py --- a/kallithea/bin/rebranddb.py Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -#!/usr/bin/env python2 - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -""" -Script for rebranding of database to and from what Kallithea expects - -Works on databases from v1.7.2 to v2.2.5 -""" - -import sys -from sqlalchemy import * -import sqlalchemy.orm -import sqlalchemy.ext.declarative -import migrate.changeset # a part of sqlalchemy-migrate which is available on pypi - -def do_migrate(db, old, new): - print 'Migrating %s from %s to %s' % (db, old or '?', new) - metadata = MetaData() - metadata.bind = create_engine(db) - metadata.reflect() - assert metadata.tables, 'Cannot reflect table names from db' - - if not old: - assert 'db_migrate_version' in metadata.tables, 'Cannot reflect db_migrate_version from db' - t = metadata.tables['db_migrate_version'] - l = t.select().where(t.c.repository_path == 'versions').execute().fetchall() - assert len(l) == 1, 'Cannot find a single versions entry in db_migrate_version' - assert l[0].repository_id.endswith('_db_migrations') - old = l[0].repository_id[:-len('_db_migrations')] - print 'Detected migration from old name %s' % old - if new != old: - assert not t.select().where(t.c.repository_id == new + '_db_migrations').execute().fetchall(), 'db_migrate_version has entries for both old and new name' - - def tablename(brand, s): - return s if brand == 'kallithea' else (brand + '_' + s) - new_ui_name = tablename(new, 'ui') - old_ui_name = tablename(old, 'ui') - new_settings_name = tablename(new, 'settings') - old_settings_name = tablename(old, 'settings') - - # Table renames using sqlalchemy-migrate (available on pypi) - if new_ui_name == old_ui_name: - print 'No renaming of %s' % new_ui_name - else: - try: - t = metadata.tables[old_ui_name] - print 'Renaming', t, 'to', new_ui_name - migrate.changeset.rename_table(t, new_ui_name) - except KeyError as e: - print 'Not renaming ui:', e - - if new_settings_name == old_settings_name: - print 'No renaming of %s' % new_settings_name - else: - try: - t = metadata.tables[old_settings_name] - print 'Renaming', t, 'to', new_settings_name - migrate.changeset.rename_table(t, new_settings_name) - except KeyError as e: - print 'Not renaming settings:', e - - old_auth_name = 'internal' if old == 'kallithea' else old - new_auth_name = 'internal' if new == 'kallithea' else new - - # using this API because ... dunno ... it is simple and works - conn = metadata.bind.connect() - trans = conn.begin() - t = metadata.tables['users'] - - print 'Bulk fixing of User extern_name' - try: - t.c.extern_name - except AttributeError: - print 'No extern_name to rename' - else: - t.update().where(t.c.extern_name == old_auth_name).values(extern_name=new_auth_name).execute() - - print 'Bulk fixing of User extern_type' - try: - t.c.extern_type - except AttributeError: - print 'No extern_type to rename' - else: - t.update().where(t.c.extern_type == old_auth_name).values(extern_type=new_auth_name).execute() - - trans.commit() - - # For the following conversions, use ORM ... and create stub models that works for that purpose - Base = sqlalchemy.ext.declarative.declarative_base() - - class Ui(Base): - __tablename__ = new_ui_name - ui_id = Column("ui_id", Integer(), primary_key=True) - ui_section = Column("ui_section", String()) - ui_key = Column("ui_key", String()) - ui_value = Column("ui_value", String()) - ui_active = Column("ui_active", Boolean()) - - class Setting(Base): - __tablename__ = new_settings_name - app_settings_id = Column("app_settings_id", Integer(), primary_key=True) - app_settings_name = Column("app_settings_name", String()) - app_settings_value = Column("app_settings_value", String()) - #app_settings_type = Column("app_settings_type", String()) # not present in v1.7.2 - - class DbMigrateVersion(Base): - __tablename__ = 'db_migrate_version' - repository_id = Column('repository_id', String(), primary_key=True) - repository_path = Column('repository_path', Text) - version = Column('version', Integer) - - Session = sqlalchemy.orm.sessionmaker(bind=metadata.bind) - session = Session() - - print 'Fixing hook names' - - oldhooks = u'python:%s.lib.hooks.' % old - newhooks = u'python:%s.lib.hooks.' % new - for u in session.query(Ui).filter(Ui.ui_section == 'hooks').all(): - if u.ui_value.startswith(oldhooks): - print '- fixing %s' % u.ui_key - u.ui_value = newhooks + u.ui_value[len(oldhooks):] - session.add(u) - session.commit() - - print 'Fixing auth module names' - for s in session.query(Setting).filter(Setting.app_settings_name == 'auth_plugins').all(): - print '- fixing %s' % s.app_settings_name - s.app_settings_value = (s.app_settings_value - .replace(old + '.lib.auth_modules.auth_', new + '.lib.auth_modules.auth_') - .replace('.auth_modules.auth_' + old_auth_name, '.auth_modules.auth_' + new_auth_name)) - session.add(s) - for s in session.query(Setting).filter(Setting.app_settings_name == 'auth_' + old_auth_name + '_enabled').all(): - print '- fixing %s' % s.app_settings_name - s.app_settings_name = 'auth_' + new_auth_name + '_enabled' - session.add(s) - session.commit() - - print 'Fixing db migration version number' - for s in session.query(DbMigrateVersion).filter(DbMigrateVersion.repository_id == old + '_db_migrations', DbMigrateVersion.repository_path == 'versions').all(): - print '- fixing %s' % s.repository_id - s.repository_id = new + '_db_migrations' - session.commit() - - print 'Done' - -def main(argv): - if len(argv) < 2 or argv[1] in ['-h', '--help']: - print 'usage: kallithea/bin/rebranddb.py DBSTRING [NEW] [OLD]' - print ' where DBSTRING is the value of sqlalchemy.db1.url from the .ini,' - print ' NEW defaults to "kallithea", OLD is by default detected from the db"' - raise SystemExit(0) - new = 'kallithea' - if len(argv) > 2: - new = argv[2] - old = None - if len(argv) > 3: - old = argv[3] - do_migrate(argv[1], old, new) - -if __name__ == '__main__': - main(sys.argv) diff -r 42788d5f5967 -r b3289fef0daa kallithea/bin/template.ini.mako --- a/kallithea/bin/template.ini.mako Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,591 +0,0 @@ -## -*- coding: utf-8 -*- -<%text>################################################################################ -<%text>################################################################################ -# Kallithea - config file generated with kallithea-config # -<%text>################################################################################ -<%text>################################################################################ - -[DEFAULT] -debug = true -pdebug = false - -<%text>################################################################################ -<%text>## Email settings ## -<%text>## ## -<%text>## Refer to the documentation ("Email settings") for more details. ## -<%text>## ## -<%text>## It is recommended to use a valid sender address that passes access ## -<%text>## validation and spam filtering in mail servers. ## -<%text>################################################################################ - -<%text>## 'From' header for application emails. You can optionally add a name. -<%text>## Default: -#app_email_from = Kallithea -<%text>## Examples: -#app_email_from = Kallithea -#app_email_from = kallithea-noreply@example.com - -<%text>## Subject prefix for application emails. -<%text>## A space between this prefix and the real subject is automatically added. -<%text>## Default: -#email_prefix = -<%text>## Example: -#email_prefix = [Kallithea] - -<%text>## Recipients for error emails and fallback recipients of application mails. -<%text>## Multiple addresses can be specified, space-separated. -<%text>## Only addresses are allowed, do not add any name part. -<%text>## Default: -#email_to = -<%text>## Examples: -#email_to = admin@example.com -#email_to = admin@example.com another_admin@example.com - -<%text>## 'From' header for error emails. You can optionally add a name. -<%text>## Default: -#error_email_from = pylons@yourapp.com -<%text>## Examples: -#error_email_from = Kallithea Errors -#error_email_from = paste_error@example.com - -<%text>## SMTP server settings -<%text>## Only smtp_server is mandatory. All other settings take the specified default -<%text>## values. -#smtp_server = smtp.example.com -#smtp_username = -#smtp_password = -#smtp_port = 25 -#smtp_use_tls = false -#smtp_use_ssl = false -<%text>## SMTP authentication parameters to use (e.g. LOGIN PLAIN CRAM-MD5, etc.). -<%text>## If empty, use any of the authentication parameters supported by the server. -#smtp_auth = - -[server:main] -%if http_server == 'paste': -<%text>## PASTE ## -use = egg:Paste#http -<%text>## nr of worker threads to spawn -threadpool_workers = 1 -<%text>## max request before thread respawn -threadpool_max_requests = 100 -<%text>## option to use threads of process -use_threadpool = true - -%elif http_server == 'waitress': -<%text>## WAITRESS ## -use = egg:waitress#main -<%text>## number of worker threads -threads = 1 -<%text>## MAX BODY SIZE 100GB -max_request_body_size = 107374182400 -<%text>## use poll instead of select, fixes fd limits, may not work on old -<%text>## windows systems. -#asyncore_use_poll = True - -%elif http_server == 'gunicorn': -<%text>## GUNICORN ## -use = egg:gunicorn#main -<%text>## number of process workers. You must set `instance_id = *` when this option -<%text>## is set to more than one worker -workers = 1 -<%text>## process name -proc_name = kallithea -<%text>## type of worker class, one of sync, eventlet, gevent, tornado -<%text>## recommended for bigger setup is using of of other than sync one -worker_class = sync -max_requests = 1000 -<%text>## ammount of time a worker can handle request before it gets killed and -<%text>## restarted -timeout = 3600 - -%elif http_server == 'uwsgi': -<%text>## UWSGI ## -<%text>## run with uwsgi --ini-paste-logged -[uwsgi] -socket = /tmp/uwsgi.sock -master = true -http = 127.0.0.1:5000 - -<%text>## set as deamon and redirect all output to file -#daemonize = ./uwsgi_kallithea.log - -<%text>## master process PID -pidfile = ./uwsgi_kallithea.pid - -<%text>## stats server with workers statistics, use uwsgitop -<%text>## for monitoring, `uwsgitop 127.0.0.1:1717` -stats = 127.0.0.1:1717 -memory-report = true - -<%text>## log 5XX errors -log-5xx = true - -<%text>## Set the socket listen queue size. -listen = 256 - -<%text>## Gracefully Reload workers after the specified amount of managed requests -<%text>## (avoid memory leaks). -max-requests = 1000 - -<%text>## enable large buffers -buffer-size = 65535 - -<%text>## socket and http timeouts ## -http-timeout = 3600 -socket-timeout = 3600 - -<%text>## Log requests slower than the specified number of milliseconds. -log-slow = 10 - -<%text>## Exit if no app can be loaded. -need-app = true - -<%text>## Set lazy mode (load apps in workers instead of master). -lazy = true - -<%text>## scaling ## -<%text>## set cheaper algorithm to use, if not set default will be used -cheaper-algo = spare - -<%text>## minimum number of workers to keep at all times -cheaper = 1 - -<%text>## number of workers to spawn at startup -cheaper-initial = 1 - -<%text>## maximum number of workers that can be spawned -workers = 4 - -<%text>## how many workers should be spawned at a time -cheaper-step = 1 - -%endif -<%text>## COMMON ## -host = ${host} -port = ${port} - -<%text>## middleware for hosting the WSGI application under a URL prefix -#[filter:proxy-prefix] -#use = egg:PasteDeploy#prefix -#prefix = / - -[app:main] -use = egg:kallithea -<%text>## enable proxy prefix middleware -#filter-with = proxy-prefix - -full_stack = true -static_files = true -<%text>## Available Languages: -<%text>## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW -lang = -cache_dir = ${here}/data -index_dir = ${here}/data/index - -<%text>## perform a full repository scan on each server start, this should be -<%text>## set to false after first startup, to allow faster server restarts. -initial_repo_scan = false - -<%text>## uncomment and set this path to use archive download cache -archive_cache_dir = ${here}/tarballcache - -<%text>## change this to unique ID for security -app_instance_uuid = ${uuid()} - -<%text>## cut off limit for large diffs (size in bytes) -cut_off_limit = 256000 - -<%text>## use cache version of scm repo everywhere -vcs_full_cache = true - -<%text>## force https in Kallithea, fixes https redirects, assumes it's always https -force_https = false - -<%text>## use Strict-Transport-Security headers -use_htsts = false - -<%text>## number of commits stats will parse on each iteration -commit_parse_limit = 25 - -<%text>## path to git executable -git_path = git - -<%text>## git rev filter option, --all is the default filter, if you need to -<%text>## hide all refs in changelog switch this to --branches --tags -#git_rev_filter = --branches --tags - -<%text>## RSS feed options -rss_cut_off_limit = 256000 -rss_items_per_page = 10 -rss_include_diff = false - -<%text>## options for showing and identifying changesets -show_sha_length = 12 -show_revision_number = false - -<%text>## gist URL alias, used to create nicer urls for gist. This should be an -<%text>## url that does rewrites to _admin/gists/. -<%text>## example: http://gist.example.com/{gistid}. Empty means use the internal -<%text>## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/ -gist_alias_url = - -<%text>## white list of API enabled controllers. This allows to add list of -<%text>## controllers to which access will be enabled by api_key. eg: to enable -<%text>## api access to raw_files put `FilesController:raw`, to enable access to patches -<%text>## add `ChangesetController:changeset_patch`. This list should be "," separated -<%text>## Syntax is :. Check debug logs for generated names -<%text>## Recommended settings below are commented out: -api_access_controllers_whitelist = -# ChangesetController:changeset_patch, -# ChangesetController:changeset_raw, -# FilesController:raw, -# FilesController:archivefile - -<%text>## default encoding used to convert from and to unicode -<%text>## can be also a comma seperated list of encoding in case of mixed encodings -default_encoding = utf8 - -<%text>## issue tracker for Kallithea (leave blank to disable, absent for default) -#bugtracker = https://bitbucket.org/conservancy/kallithea/issues - -<%text>## issue tracking mapping for commits messages -<%text>## comment out issue_pat, issue_server, issue_prefix to enable - -<%text>## pattern to get the issues from commit messages -<%text>## default one used here is # with a regex passive group for `#` -<%text>## {id} will be all groups matched from this pattern - -issue_pat = (?:\s*#)(\d+) - -<%text>## server url to the issue, each {id} will be replaced with match -<%text>## fetched from the regex and {repo} is replaced with full repository name -<%text>## including groups {repo_name} is replaced with just name of repo - -issue_server_link = https://issues.example.com/{repo}/issue/{id} - -<%text>## prefix to add to link to indicate it's an url -<%text>## #314 will be replaced by - -issue_prefix = # - -<%text>## issue_pat, issue_server_link, issue_prefix can have suffixes to specify -<%text>## multiple patterns, to other issues server, wiki or others -<%text>## below an example how to create a wiki pattern -# wiki-some-id -> https://wiki.example.com/some-id - -#issue_pat_wiki = (?:wiki-)(.+) -#issue_server_link_wiki = https://wiki.example.com/{id} -#issue_prefix_wiki = WIKI- - -<%text>## instance-id prefix -<%text>## a prefix key for this instance used for cache invalidation when running -<%text>## multiple instances of kallithea, make sure it's globally unique for -<%text>## all running kallithea instances. Leave empty if you don't use it -instance_id = - -<%text>## alternative return HTTP header for failed authentication. Default HTTP -<%text>## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with -<%text>## handling that. Set this variable to 403 to return HTTPForbidden -auth_ret_code = - -<%text>## locking return code. When repository is locked return this HTTP code. 2XX -<%text>## codes don't break the transactions while 4XX codes do -lock_ret_code = 423 - -<%text>## allows to change the repository location in settings page -allow_repo_location_change = True - -<%text>## allows to setup custom hooks in settings page -allow_custom_hooks_settings = True - -<%text>#################################### -<%text>### CELERY CONFIG #### -<%text>#################################### - -use_celery = false -broker.host = localhost -broker.vhost = rabbitmqhost -broker.port = 5672 -broker.user = rabbitmq -broker.password = qweqwe - -celery.imports = kallithea.lib.celerylib.tasks - -celery.result.backend = amqp -celery.result.dburi = amqp:// -celery.result.serialier = json - -#celery.send.task.error.emails = true -#celery.amqp.task.result.expires = 18000 - -celeryd.concurrency = 2 -#celeryd.log.file = celeryd.log -celeryd.log.level = DEBUG -celeryd.max.tasks.per.child = 1 - -<%text>## tasks will never be sent to the queue, but executed locally instead. -celery.always.eager = false - -<%text>#################################### -<%text>### BEAKER CACHE #### -<%text>#################################### - -beaker.cache.data_dir = ${here}/data/cache/data -beaker.cache.lock_dir = ${here}/data/cache/lock - -beaker.cache.regions = short_term,long_term,sql_cache_short - -beaker.cache.short_term.type = memory -beaker.cache.short_term.expire = 60 -beaker.cache.short_term.key_length = 256 - -beaker.cache.long_term.type = memory -beaker.cache.long_term.expire = 36000 -beaker.cache.long_term.key_length = 256 - -beaker.cache.sql_cache_short.type = memory -beaker.cache.sql_cache_short.expire = 10 -beaker.cache.sql_cache_short.key_length = 256 - -<%text>#################################### -<%text>### BEAKER SESSION #### -<%text>#################################### - -<%text>## Name of session cookie. Should be unique for a given host and path, even when running -<%text>## on different ports. Otherwise, cookie sessions will be shared and messed up. -beaker.session.key = kallithea -<%text>## Sessions should always only be accessible by the browser, not directly by JavaScript. -beaker.session.httponly = true -<%text>## Session lifetime. 2592000 seconds is 30 days. -beaker.session.timeout = 2592000 - -<%text>## Server secret used with HMAC to ensure integrity of cookies. -beaker.session.secret = ${uuid()} -<%text>## Further, encrypt the data with AES. -#beaker.session.encrypt_key = -#beaker.session.validate_key = - -<%text>## Type of storage used for the session, current types are -<%text>## dbm, file, memcached, database, and memory. - -<%text>## File system storage of session data. (default) -#beaker.session.type = file - -<%text>## Cookie only, store all session data inside the cookie. Requires secure secrets. -#beaker.session.type = cookie - -<%text>## Database storage of session data. -#beaker.session.type = ext:database -#beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea -#beaker.session.table_name = db_session - -%if error_aggregation_service == 'appenlight': -<%text>############################ -<%text>## ERROR HANDLING SYSTEMS ## -<%text>############################ - -<%text>#################### -<%text>### [appenlight] ### -<%text>#################### - -<%text>## AppEnlight is tailored to work with Kallithea, see -<%text>## http://appenlight.com for details how to obtain an account -<%text>## you must install python package `appenlight_client` to make it work - -<%text>## appenlight enabled -appenlight = false - -appenlight.server_url = https://api.appenlight.com -appenlight.api_key = YOUR_API_KEY - -<%text>## TWEAK AMOUNT OF INFO SENT HERE - -<%text>## enables 404 error logging (default False) -appenlight.report_404 = false - -<%text>## time in seconds after request is considered being slow (default 1) -appenlight.slow_request_time = 1 - -<%text>## record slow requests in application -<%text>## (needs to be enabled for slow datastore recording and time tracking) -appenlight.slow_requests = true - -<%text>## enable hooking to application loggers -#appenlight.logging = true - -<%text>## minimum log level for log capture -#appenlight.logging.level = WARNING - -<%text>## send logs only from erroneous/slow requests -<%text>## (saves API quota for intensive logging) -appenlight.logging_on_error = false - -<%text>## list of additonal keywords that should be grabbed from environ object -<%text>## can be string with comma separated list of words in lowercase -<%text>## (by default client will always send following info: -<%text>## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that -<%text>## start with HTTP* this list be extended with additional keywords here -appenlight.environ_keys_whitelist = - -<%text>## list of keywords that should be blanked from request object -<%text>## can be string with comma separated list of words in lowercase -<%text>## (by default client will always blank keys that contain following words -<%text>## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' -<%text>## this list be extended with additional keywords set here -appenlight.request_keys_blacklist = - -<%text>## list of namespaces that should be ignores when gathering log entries -<%text>## can be string with comma separated list of namespaces -<%text>## (by default the client ignores own entries: appenlight_client.client) -appenlight.log_namespace_blacklist = - -%elif error_aggregation_service == 'sentry': -<%text>################ -<%text>### [sentry] ### -<%text>################ - -<%text>## sentry is a alternative open source error aggregator -<%text>## you must install python packages `sentry` and `raven` to enable - -sentry.dsn = YOUR_DNS -sentry.servers = -sentry.name = -sentry.key = -sentry.public_key = -sentry.secret_key = -sentry.project = -sentry.site = -sentry.include_paths = -sentry.exclude_paths = - -%endif -<%text>################################################################################ -<%text>## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ## -<%text>## Debug mode will enable the interactive debugging tool, allowing ANYONE to ## -<%text>## execute malicious code after an exception is raised. ## -<%text>################################################################################ -set debug = false - -<%text>################################## -<%text>### LOGVIEW CONFIG ### -<%text>################################## - -logview.sqlalchemy = #faa -logview.pylons.templating = #bfb -logview.pylons.util = #eee - -<%text>######################################################### -<%text>### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### -<%text>######################################################### - -%if database_engine == 'sqlite': -# SQLITE [default] -sqlalchemy.db1.url = sqlite:///${here}/kallithea.db?timeout=60 - -%elif database_engine == 'postgres': -# POSTGRESQL -sqlalchemy.db1.url = postgresql://user:pass@localhost/kallithea - -%elif database_engine == 'mysql': -# MySQL -sqlalchemy.db1.url = mysql://user:pass@localhost/kallithea - -%endif -# see sqlalchemy docs for others - -sqlalchemy.db1.echo = false -sqlalchemy.db1.pool_recycle = 3600 -sqlalchemy.db1.convert_unicode = true - -<%text>################################ -<%text>### LOGGING CONFIGURATION #### -<%text>################################ - -[loggers] -keys = root, routes, kallithea, sqlalchemy, beaker, templates, whoosh_indexer - -[handlers] -keys = console, console_sql - -[formatters] -keys = generic, color_formatter, color_formatter_sql - -<%text>############# -<%text>## LOGGERS ## -<%text>############# - -[logger_root] -level = NOTSET -handlers = console - -[logger_routes] -level = DEBUG -handlers = -qualname = routes.middleware -<%text>## "level = DEBUG" logs the route matched and routing variables. -propagate = 1 - -[logger_beaker] -level = DEBUG -handlers = -qualname = beaker.container -propagate = 1 - -[logger_templates] -level = INFO -handlers = -qualname = pylons.templating -propagate = 1 - -[logger_kallithea] -level = DEBUG -handlers = -qualname = kallithea -propagate = 1 - -[logger_sqlalchemy] -level = INFO -handlers = console_sql -qualname = sqlalchemy.engine -propagate = 0 - -[logger_whoosh_indexer] -level = DEBUG -handlers = -qualname = whoosh_indexer -propagate = 1 - -<%text>############## -<%text>## HANDLERS ## -<%text>############## - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = INFO -formatter = generic - -[handler_console_sql] -class = StreamHandler -args = (sys.stderr,) -level = WARN -formatter = generic - -<%text>################ -<%text>## FORMATTERS ## -<%text>################ - -[formatter_generic] -format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S - -[formatter_color_formatter] -class = kallithea.lib.colored_formatter.ColorFormatter -format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S - -[formatter_color_formatter_sql] -class = kallithea.lib.colored_formatter.ColorFormatterSql -format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S diff -r 42788d5f5967 -r b3289fef0daa kallithea/config/app_cfg.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/config/app_cfg.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,192 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +Global configuration file for TurboGears2 specific settings in Kallithea. + +This file complements the .ini file. +""" + +import platform +import os, sys, logging + +import tg +from tg import hooks +from tg.configuration import AppConfig +from tg.support.converters import asbool +import alembic.config +from alembic.script.base import ScriptDirectory +from alembic.migration import MigrationContext +from sqlalchemy import create_engine + +from kallithea.lib.middleware.https_fixup import HttpsFixup +from kallithea.lib.middleware.simplegit import SimpleGit +from kallithea.lib.middleware.simplehg import SimpleHg +from kallithea.lib.auth import set_available_permissions +from kallithea.lib.utils import load_rcextensions, make_ui, set_app_settings, set_vcs_config, \ + set_indexer_config, check_git_version, repo2db_mapper +from kallithea.lib.utils2 import str2bool +import kallithea.model.base +from kallithea.model.scm import ScmModel + +import formencode + +log = logging.getLogger(__name__) + + +class KallitheaAppConfig(AppConfig): + # Note: AppConfig has a misleading name, as it's not the application + # configuration, but the application configurator. The AppConfig values are + # used as a template to create the actual configuration, which might + # overwrite or extend the one provided by the configurator template. + + # To make it clear, AppConfig creates the config and sets into it the same + # values that AppConfig itself has. Then the values from the config file and + # gearbox options are loaded and merged into the configuration. Then an + # after_init_config(conf) method of AppConfig is called for any change that + # might depend on options provided by configuration files. + + def __init__(self): + super(KallitheaAppConfig, self).__init__() + + self['package'] = kallithea + + self['prefer_toscawidgets2'] = False + self['use_toscawidgets'] = False + + self['renderers'] = [] + + # Enable json in expose + self['renderers'].append('json') + + # Configure template rendering + self['renderers'].append('mako') + self['default_renderer'] = 'mako' + self['use_dotted_templatenames'] = False + + # Configure Sessions, store data as JSON to avoid pickle security issues + self['session.enabled'] = True + self['session.data_serializer'] = 'json' + + # Configure the base SQLALchemy Setup + self['use_sqlalchemy'] = True + self['model'] = kallithea.model.base + self['DBSession'] = kallithea.model.meta.Session + + # Configure App without an authentication backend. + self['auth_backend'] = None + + # Use custom error page for these errors. By default, Turbogears2 does not add + # 400 in this list. + # Explicitly listing all is considered more robust than appending to defaults, + # in light of possible future framework changes. + self['errorpage.status_codes'] = [400, 401, 403, 404] + + # Disable transaction manager -- currently Kallithea takes care of transactions itself + self['tm.enabled'] = False + + +base_config = KallitheaAppConfig() + +# TODO still needed as long as we use pylonslib +sys.modules['pylons'] = tg + +# DebugBar, a debug toolbar for TurboGears2. +# (https://github.com/TurboGears/tgext.debugbar) +# To enable it, install 'tgext.debugbar' and 'kajiki', and run Kallithea with +# 'debug = true' (not in production!) +# See the Kallithea documentation for more information. +try: + from tgext.debugbar import enable_debugbar + import kajiki # only to check its existence +except ImportError: + pass +else: + base_config['renderers'].append('kajiki') + enable_debugbar(base_config) + + +def setup_configuration(app): + config = app.config + + if config.get('ignore_alembic_revision', False): + log.warn('database alembic revision checking is disabled') + else: + dbconf = config['sqlalchemy.url'] + alembic_cfg = alembic.config.Config() + alembic_cfg.set_main_option('script_location', 'kallithea:alembic') + alembic_cfg.set_main_option('sqlalchemy.url', dbconf) + script_dir = ScriptDirectory.from_config(alembic_cfg) + available_heads = sorted(script_dir.get_heads()) + + engine = create_engine(dbconf) + with engine.connect() as conn: + context = MigrationContext.configure(conn) + current_heads = sorted(str(s) for s in context.get_current_heads()) + if current_heads != available_heads: + log.error('Failed to run Kallithea:\n\n' + 'The database version does not match the Kallithea version.\n' + 'Please read the documentation on how to upgrade or downgrade the database.\n' + 'Current database version id(s): %s\n' + 'Expected database version id(s): %s\n' + 'If you are a developer and you know what you are doing, you can add `ignore_alembic_revision = True` ' + 'to your .ini file to skip the check.\n' % (' '.join(current_heads), ' '.join(available_heads))) + sys.exit(1) + + # store some globals into kallithea + kallithea.CELERY_ON = str2bool(config['app_conf'].get('use_celery')) + kallithea.CELERY_EAGER = str2bool(config['app_conf'].get('celery.always.eager')) + kallithea.CONFIG = config + + load_rcextensions(root_path=config['here']) + + set_available_permissions(config) + repos_path = make_ui('db').configitems('paths')[0][1] + config['base_path'] = repos_path + set_app_settings(config) + + instance_id = kallithea.CONFIG.get('instance_id', '*') + if instance_id == '*': + instance_id = '%s-%s' % (platform.uname()[1], os.getpid()) + kallithea.CONFIG['instance_id'] = instance_id + + # update kallithea.CONFIG with the meanwhile changed 'config' + kallithea.CONFIG.update(config) + + # configure vcs and indexer libraries (they are supposed to be independent + # as much as possible and thus avoid importing tg.config or + # kallithea.CONFIG). + set_vcs_config(kallithea.CONFIG) + set_indexer_config(kallithea.CONFIG) + + check_git_version() + + +hooks.register('configure_new_app', setup_configuration) + + +def setup_application(app): + config = app.config + + # we want our low level middleware to get to the request ASAP. We don't + # need any stack middleware in them - especially no StatusCodeRedirect buffering + app = SimpleHg(app, config) + app = SimpleGit(app, config) + + # Enable https redirects based on HTTP_X_URL_SCHEME set by proxy + if any(asbool(config.get(x)) for x in ['https_fixup', 'force_https', 'use_htsts']): + app = HttpsFixup(app, config) + return app + + +hooks.register('before_config', setup_application) diff -r 42788d5f5967 -r b3289fef0daa kallithea/config/conf.py --- a/kallithea/config/conf.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/config/conf.py Thu Jun 07 01:46:02 2018 +0200 @@ -25,19 +25,21 @@ :license: GPLv3, see LICENSE.md for more details. """ -from kallithea.lib.utils2 import __get_lem +from kallithea.lib import pygmentsutils # language map is also used by whoosh indexer, which for those specified # extensions will index it's content -LANGUAGES_EXTENSIONS_MAP = __get_lem() +LANGUAGES_EXTENSIONS_MAP = pygmentsutils.get_extension_descriptions() + +# Whoosh index targets -#============================================================================== -# WHOOSH INDEX EXTENSIONS -#============================================================================== -# EXTENSIONS WE WANT TO INDEX CONTENT OFF USING WHOOSH +# Extensions we want to index content of using whoosh INDEX_EXTENSIONS = LANGUAGES_EXTENSIONS_MAP.keys() +# Filenames we want to index content of using whoosh +INDEX_FILENAMES = pygmentsutils.get_index_filenames() + # list of readme files to search in file tree and display in summary # attached weights defines the search order lower is first ALL_READMES = [ @@ -65,7 +67,3 @@ PLAIN_EXTS = [('.text', 2), ('.TEXT', 2)] ALL_EXTS = MARKDOWN_EXTS + RST_EXTS + PLAIN_EXTS - -DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" - -DATE_FORMAT = "%Y-%m-%d" diff -r 42788d5f5967 -r b3289fef0daa kallithea/config/deployment.ini_tmpl --- a/kallithea/config/deployment.ini_tmpl Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,580 +0,0 @@ -################################################################################ -################################################################################ -# Kallithea - Example config # -# # -# The %(here)s variable will be replaced with the parent directory of this file# -################################################################################ -################################################################################ - -[DEFAULT] -debug = true -pdebug = false - -################################################################################ -## Email settings ## -## ## -## Refer to the documentation ("Email settings") for more details. ## -## ## -## It is recommended to use a valid sender address that passes access ## -## validation and spam filtering in mail servers. ## -################################################################################ - -## 'From' header for application emails. You can optionally add a name. -## Default: -#app_email_from = Kallithea -## Examples: -#app_email_from = Kallithea -#app_email_from = kallithea-noreply@example.com - -## Subject prefix for application emails. -## A space between this prefix and the real subject is automatically added. -## Default: -#email_prefix = -## Example: -#email_prefix = [Kallithea] - -## Recipients for error emails and fallback recipients of application mails. -## Multiple addresses can be specified, space-separated. -## Only addresses are allowed, do not add any name part. -## Default: -#email_to = -## Examples: -#email_to = admin@example.com -#email_to = admin@example.com another_admin@example.com - -## 'From' header for error emails. You can optionally add a name. -## Default: -#error_email_from = pylons@yourapp.com -## Examples: -#error_email_from = Kallithea Errors -#error_email_from = paste_error@example.com - -## SMTP server settings -## Only smtp_server is mandatory. All other settings take the specified default -## values. -#smtp_server = smtp.example.com -#smtp_username = -#smtp_password = -#smtp_port = 25 -#smtp_use_tls = false -#smtp_use_ssl = false -## SMTP authentication parameters to use (e.g. LOGIN PLAIN CRAM-MD5, etc.). -## If empty, use any of the authentication parameters supported by the server. -#smtp_auth = - -[server:main] -## PASTE ## -#use = egg:Paste#http -## nr of worker threads to spawn -#threadpool_workers = 1 -## max request before thread respawn -#threadpool_max_requests = 100 -## option to use threads of process -#use_threadpool = true - -## WAITRESS ## -use = egg:waitress#main -## number of worker threads -threads = 1 -## MAX BODY SIZE 100GB -max_request_body_size = 107374182400 -## use poll instead of select, fixes fd limits, may not work on old -## windows systems. -#asyncore_use_poll = True - -## GUNICORN ## -#use = egg:gunicorn#main -## number of process workers. You must set `instance_id = *` when this option -## is set to more than one worker -#workers = 1 -## process name -#proc_name = kallithea -## type of worker class, one of sync, eventlet, gevent, tornado -## recommended for bigger setup is using of of other than sync one -#worker_class = sync -#max_requests = 1000 -## ammount of time a worker can handle request before it gets killed and -## restarted -#timeout = 3600 - -## UWSGI ## -## run with uwsgi --ini-paste-logged -#[uwsgi] -#socket = /tmp/uwsgi.sock -#master = true -#http = 127.0.0.1:5000 - -## set as deamon and redirect all output to file -#daemonize = ./uwsgi_kallithea.log - -## master process PID -#pidfile = ./uwsgi_kallithea.pid - -## stats server with workers statistics, use uwsgitop -## for monitoring, `uwsgitop 127.0.0.1:1717` -#stats = 127.0.0.1:1717 -#memory-report = true - -## log 5XX errors -#log-5xx = true - -## Set the socket listen queue size. -#listen = 256 - -## Gracefully Reload workers after the specified amount of managed requests -## (avoid memory leaks). -#max-requests = 1000 - -## enable large buffers -#buffer-size = 65535 - -## socket and http timeouts ## -#http-timeout = 3600 -#socket-timeout = 3600 - -## Log requests slower than the specified number of milliseconds. -#log-slow = 10 - -## Exit if no app can be loaded. -#need-app = true - -## Set lazy mode (load apps in workers instead of master). -#lazy = true - -## scaling ## -## set cheaper algorithm to use, if not set default will be used -#cheaper-algo = spare - -## minimum number of workers to keep at all times -#cheaper = 1 - -## number of workers to spawn at startup -#cheaper-initial = 1 - -## maximum number of workers that can be spawned -#workers = 4 - -## how many workers should be spawned at a time -#cheaper-step = 1 - -## COMMON ## -host = 127.0.0.1 -port = 5000 - -## middleware for hosting the WSGI application under a URL prefix -#[filter:proxy-prefix] -#use = egg:PasteDeploy#prefix -#prefix = / - -[app:main] -use = egg:kallithea -## enable proxy prefix middleware -#filter-with = proxy-prefix - -full_stack = true -static_files = true -## Available Languages: -## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW -lang = -cache_dir = %(here)s/data -index_dir = %(here)s/data/index - -## perform a full repository scan on each server start, this should be -## set to false after first startup, to allow faster server restarts. -initial_repo_scan = false - -## uncomment and set this path to use archive download cache -archive_cache_dir = %(here)s/tarballcache - -## change this to unique ID for security -app_instance_uuid = ${app_instance_uuid} - -## cut off limit for large diffs (size in bytes) -cut_off_limit = 256000 - -## use cache version of scm repo everywhere -vcs_full_cache = true - -## force https in Kallithea, fixes https redirects, assumes it's always https -force_https = false - -## use Strict-Transport-Security headers -use_htsts = false - -## number of commits stats will parse on each iteration -commit_parse_limit = 25 - -## path to git executable -git_path = git - -## git rev filter option, --all is the default filter, if you need to -## hide all refs in changelog switch this to --branches --tags -#git_rev_filter = --branches --tags - -## RSS feed options -rss_cut_off_limit = 256000 -rss_items_per_page = 10 -rss_include_diff = false - -## options for showing and identifying changesets -show_sha_length = 12 -show_revision_number = false - -## gist URL alias, used to create nicer urls for gist. This should be an -## url that does rewrites to _admin/gists/. -## example: http://gist.example.com/{gistid}. Empty means use the internal -## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/ -gist_alias_url = - -## white list of API enabled controllers. This allows to add list of -## controllers to which access will be enabled by api_key. eg: to enable -## api access to raw_files put `FilesController:raw`, to enable access to patches -## add `ChangesetController:changeset_patch`. This list should be "," separated -## Syntax is :. Check debug logs for generated names -## Recommended settings below are commented out: -api_access_controllers_whitelist = -# ChangesetController:changeset_patch, -# ChangesetController:changeset_raw, -# FilesController:raw, -# FilesController:archivefile - -## default encoding used to convert from and to unicode -## can be also a comma seperated list of encoding in case of mixed encodings -default_encoding = utf8 - -## issue tracker for Kallithea (leave blank to disable, absent for default) -#bugtracker = https://bitbucket.org/conservancy/kallithea/issues - -## issue tracking mapping for commits messages -## comment out issue_pat, issue_server, issue_prefix to enable - -## pattern to get the issues from commit messages -## default one used here is # with a regex passive group for `#` -## {id} will be all groups matched from this pattern - -issue_pat = (?:\s*#)(\d+) - -## server url to the issue, each {id} will be replaced with match -## fetched from the regex and {repo} is replaced with full repository name -## including groups {repo_name} is replaced with just name of repo - -issue_server_link = https://issues.example.com/{repo}/issue/{id} - -## prefix to add to link to indicate it's an url -## #314 will be replaced by - -issue_prefix = # - -## issue_pat, issue_server_link, issue_prefix can have suffixes to specify -## multiple patterns, to other issues server, wiki or others -## below an example how to create a wiki pattern -# wiki-some-id -> https://wiki.example.com/some-id - -#issue_pat_wiki = (?:wiki-)(.+) -#issue_server_link_wiki = https://wiki.example.com/{id} -#issue_prefix_wiki = WIKI- - -## instance-id prefix -## a prefix key for this instance used for cache invalidation when running -## multiple instances of kallithea, make sure it's globally unique for -## all running kallithea instances. Leave empty if you don't use it -instance_id = - -## alternative return HTTP header for failed authentication. Default HTTP -## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with -## handling that. Set this variable to 403 to return HTTPForbidden -auth_ret_code = - -## locking return code. When repository is locked return this HTTP code. 2XX -## codes don't break the transactions while 4XX codes do -lock_ret_code = 423 - -## allows to change the repository location in settings page -allow_repo_location_change = True - -## allows to setup custom hooks in settings page -allow_custom_hooks_settings = True - -#################################### -### CELERY CONFIG #### -#################################### - -use_celery = false -broker.host = localhost -broker.vhost = rabbitmqhost -broker.port = 5672 -broker.user = rabbitmq -broker.password = qweqwe - -celery.imports = kallithea.lib.celerylib.tasks - -celery.result.backend = amqp -celery.result.dburi = amqp:// -celery.result.serialier = json - -#celery.send.task.error.emails = true -#celery.amqp.task.result.expires = 18000 - -celeryd.concurrency = 2 -#celeryd.log.file = celeryd.log -celeryd.log.level = DEBUG -celeryd.max.tasks.per.child = 1 - -## tasks will never be sent to the queue, but executed locally instead. -celery.always.eager = false - -#################################### -### BEAKER CACHE #### -#################################### - -beaker.cache.data_dir = %(here)s/data/cache/data -beaker.cache.lock_dir = %(here)s/data/cache/lock - -beaker.cache.regions = short_term,long_term,sql_cache_short - -beaker.cache.short_term.type = memory -beaker.cache.short_term.expire = 60 -beaker.cache.short_term.key_length = 256 - -beaker.cache.long_term.type = memory -beaker.cache.long_term.expire = 36000 -beaker.cache.long_term.key_length = 256 - -beaker.cache.sql_cache_short.type = memory -beaker.cache.sql_cache_short.expire = 10 -beaker.cache.sql_cache_short.key_length = 256 - -#################################### -### BEAKER SESSION #### -#################################### - -## Name of session cookie. Should be unique for a given host and path, even when running -## on different ports. Otherwise, cookie sessions will be shared and messed up. -beaker.session.key = kallithea -## Sessions should always only be accessible by the browser, not directly by JavaScript. -beaker.session.httponly = true -## Session lifetime. 2592000 seconds is 30 days. -beaker.session.timeout = 2592000 - -## Server secret used with HMAC to ensure integrity of cookies. -beaker.session.secret = ${app_instance_uuid} -## Further, encrypt the data with AES. -#beaker.session.encrypt_key = -#beaker.session.validate_key = - -## Type of storage used for the session, current types are -## dbm, file, memcached, database, and memory. - -## File system storage of session data. (default) -#beaker.session.type = file - -## Cookie only, store all session data inside the cookie. Requires secure secrets. -#beaker.session.type = cookie - -## Database storage of session data. -#beaker.session.type = ext:database -#beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea -#beaker.session.table_name = db_session - -############################ -## ERROR HANDLING SYSTEMS ## -############################ - -#################### -### [appenlight] ### -#################### - -## AppEnlight is tailored to work with Kallithea, see -## http://appenlight.com for details how to obtain an account -## you must install python package `appenlight_client` to make it work - -## appenlight enabled -appenlight = false - -appenlight.server_url = https://api.appenlight.com -appenlight.api_key = YOUR_API_KEY - -## TWEAK AMOUNT OF INFO SENT HERE - -## enables 404 error logging (default False) -appenlight.report_404 = false - -## time in seconds after request is considered being slow (default 1) -appenlight.slow_request_time = 1 - -## record slow requests in application -## (needs to be enabled for slow datastore recording and time tracking) -appenlight.slow_requests = true - -## enable hooking to application loggers -#appenlight.logging = true - -## minimum log level for log capture -#appenlight.logging.level = WARNING - -## send logs only from erroneous/slow requests -## (saves API quota for intensive logging) -appenlight.logging_on_error = false - -## list of additonal keywords that should be grabbed from environ object -## can be string with comma separated list of words in lowercase -## (by default client will always send following info: -## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that -## start with HTTP* this list be extended with additional keywords here -appenlight.environ_keys_whitelist = - -## list of keywords that should be blanked from request object -## can be string with comma separated list of words in lowercase -## (by default client will always blank keys that contain following words -## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' -## this list be extended with additional keywords set here -appenlight.request_keys_blacklist = - -## list of namespaces that should be ignores when gathering log entries -## can be string with comma separated list of namespaces -## (by default the client ignores own entries: appenlight_client.client) -appenlight.log_namespace_blacklist = - -################ -### [sentry] ### -################ - -## sentry is a alternative open source error aggregator -## you must install python packages `sentry` and `raven` to enable - -sentry.dsn = YOUR_DNS -sentry.servers = -sentry.name = -sentry.key = -sentry.public_key = -sentry.secret_key = -sentry.project = -sentry.site = -sentry.include_paths = -sentry.exclude_paths = - -################################################################################ -## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ## -## Debug mode will enable the interactive debugging tool, allowing ANYONE to ## -## execute malicious code after an exception is raised. ## -################################################################################ -set debug = false - -################################## -### LOGVIEW CONFIG ### -################################## - -logview.sqlalchemy = #faa -logview.pylons.templating = #bfb -logview.pylons.util = #eee - -######################################################### -### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### -######################################################### - -# SQLITE [default] -sqlalchemy.db1.url = sqlite:///%(here)s/kallithea.db?timeout=60 - -# POSTGRESQL -#sqlalchemy.db1.url = postgresql://user:pass@localhost/kallithea - -# MySQL -#sqlalchemy.db1.url = mysql://user:pass@localhost/kallithea - -# see sqlalchemy docs for others - -sqlalchemy.db1.echo = false -sqlalchemy.db1.pool_recycle = 3600 -sqlalchemy.db1.convert_unicode = true - -################################ -### LOGGING CONFIGURATION #### -################################ - -[loggers] -keys = root, routes, kallithea, sqlalchemy, beaker, templates, whoosh_indexer - -[handlers] -keys = console, console_sql - -[formatters] -keys = generic, color_formatter, color_formatter_sql - -############# -## LOGGERS ## -############# - -[logger_root] -level = NOTSET -handlers = console - -[logger_routes] -level = DEBUG -handlers = -qualname = routes.middleware -## "level = DEBUG" logs the route matched and routing variables. -propagate = 1 - -[logger_beaker] -level = DEBUG -handlers = -qualname = beaker.container -propagate = 1 - -[logger_templates] -level = INFO -handlers = -qualname = pylons.templating -propagate = 1 - -[logger_kallithea] -level = DEBUG -handlers = -qualname = kallithea -propagate = 1 - -[logger_sqlalchemy] -level = INFO -handlers = console_sql -qualname = sqlalchemy.engine -propagate = 0 - -[logger_whoosh_indexer] -level = DEBUG -handlers = -qualname = whoosh_indexer -propagate = 1 - -############## -## HANDLERS ## -############## - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = INFO -formatter = generic - -[handler_console_sql] -class = StreamHandler -args = (sys.stderr,) -level = WARN -formatter = generic - -################ -## FORMATTERS ## -################ - -[formatter_generic] -format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S - -[formatter_color_formatter] -class = kallithea.lib.colored_formatter.ColorFormatter -format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S - -[formatter_color_formatter_sql] -class = kallithea.lib.colored_formatter.ColorFormatterSql -format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S diff -r 42788d5f5967 -r b3289fef0daa kallithea/config/environment.py --- a/kallithea/config/environment.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/config/environment.py Thu Jun 07 01:46:02 2018 +0200 @@ -11,130 +11,11 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -""" - Pylons environment configuration -""" - -import os -import logging -import kallithea -import platform - -import pylons -import mako.lookup -import beaker - -# don't remove this import it does magic for celery -from kallithea.lib import celerypylons - -import kallithea.lib.app_globals as app_globals - -from kallithea.config.routing import make_map - -from kallithea.lib import helpers -from kallithea.lib.auth import set_available_permissions -from kallithea.lib.utils import repo2db_mapper, make_ui, set_app_settings,\ - load_rcextensions, check_git_version, set_vcs_config -from kallithea.lib.utils2 import engine_from_config, str2bool -from kallithea.lib.db_manage import DbManage -from kallithea.model import init_model -from kallithea.model.scm import ScmModel - -log = logging.getLogger(__name__) +"""WSGI environment setup for Kallithea.""" - -def load_environment(global_conf, app_conf, initial=False, - test_env=None, test_index=None): - """ - Configure the Pylons environment via the ``pylons.config`` - object - """ - config = pylons.configuration.PylonsConfig() - - # Pylons paths - root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - paths = dict( - root=root, - controllers=os.path.join(root, 'controllers'), - static_files=os.path.join(root, 'public'), - templates=[os.path.join(root, 'templates')] - ) - - # Initialize config with the basic options - config.init_app(global_conf, app_conf, package='kallithea', paths=paths) - - # store some globals into kallithea - kallithea.CELERY_ON = str2bool(config['app_conf'].get('use_celery')) - kallithea.CELERY_EAGER = str2bool(config['app_conf'].get('celery.always.eager')) - - config['routes.map'] = make_map(config) - config['pylons.app_globals'] = app_globals.Globals(config) - config['pylons.h'] = helpers - kallithea.CONFIG = config - - load_rcextensions(root_path=config['here']) +from kallithea.config.app_cfg import base_config - # Setup cache object as early as possible - pylons.cache._push_object(config['pylons.app_globals'].cache) - - # Create the Mako TemplateLookup, with the default auto-escaping - config['pylons.app_globals'].mako_lookup = mako.lookup.TemplateLookup( - directories=paths['templates'], - error_handler=pylons.error.handle_mako_error, - module_directory=os.path.join(app_conf['cache_dir'], 'templates'), - input_encoding='utf-8', default_filters=['escape'], - imports=['from webhelpers.html import escape']) - - # sets the c attribute access when don't existing attribute are accessed - config['pylons.strict_tmpl_context'] = True - test = os.path.split(config['__file__'])[-1] == 'test.ini' - if test: - if test_env is None: - test_env = not int(os.environ.get('KALLITHEA_NO_TMP_PATH', 0)) - if test_index is None: - test_index = not int(os.environ.get('KALLITHEA_WHOOSH_TEST_DISABLE', 0)) - if os.environ.get('TEST_DB'): - # swap config if we pass enviroment variable - config['sqlalchemy.db1.url'] = os.environ.get('TEST_DB') +__all__ = ['load_environment'] - from kallithea.lib.utils import create_test_env, create_test_index - from kallithea.tests import TESTS_TMP_PATH - #set KALLITHEA_NO_TMP_PATH=1 to disable re-creating the database and - #test repos - if test_env: - create_test_env(TESTS_TMP_PATH, config) - #set KALLITHEA_WHOOSH_TEST_DISABLE=1 to disable whoosh index during tests - if test_index: - create_test_index(TESTS_TMP_PATH, config, True) - - DbManage.check_waitress() - # MULTIPLE DB configs - # Setup the SQLAlchemy database engine - sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.') - init_model(sa_engine_db1) - - set_available_permissions(config) - repos_path = make_ui('db').configitems('paths')[0][1] - config['base_path'] = repos_path - set_app_settings(config) - - instance_id = kallithea.CONFIG.get('instance_id') - if instance_id == '*': - instance_id = '%s-%s' % (platform.uname()[1], os.getpid()) - kallithea.CONFIG['instance_id'] = instance_id - - # CONFIGURATION OPTIONS HERE (note: all config options will override - # any Pylons config options) - - # store config reference into our module to skip import magic of - # pylons - kallithea.CONFIG.update(config) - set_vcs_config(kallithea.CONFIG) - - #check git version - check_git_version() - - if str2bool(config.get('initial_repo_scan', True)): - repo2db_mapper(ScmModel().repo_scan(repos_path), - remove_obsolete=False, install_git_hooks=False) - return config +# Use base_config to setup the environment loader function +load_environment = base_config.make_load_environment() diff -r 42788d5f5967 -r b3289fef0daa kallithea/config/middleware.py --- a/kallithea/config/middleware.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/config/middleware.py Thu Jun 07 01:46:02 2018 +0200 @@ -11,102 +11,41 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -""" - Pylons middleware initialization -""" +"""WSGI middleware initialization for the Kallithea application.""" + +import logging.config +from kallithea.config.app_cfg import base_config +from kallithea.config.environment import load_environment + +__all__ = ['make_app'] -from routes.middleware import RoutesMiddleware -from paste.cascade import Cascade -from paste.registry import RegistryManager -from paste.urlparser import StaticURLParser -from paste.deploy.converters import asbool -from paste.gzipper import make_gzip_middleware +# Use base_config to setup the necessary PasteDeploy application factory. +# make_base_app will wrap the TurboGears2 app with all the middleware it needs. +make_base_app = base_config.setup_tg_wsgi_app(load_environment) -from pylons.middleware import ErrorHandler, StatusCodeRedirect -from pylons.wsgiapp import PylonsApp -from kallithea.lib.middleware.simplehg import SimpleHg -from kallithea.lib.middleware.simplegit import SimpleGit -from kallithea.lib.middleware.https_fixup import HttpsFixup -from kallithea.lib.middleware.sessionmiddleware import SecureSessionMiddleware -from kallithea.config.environment import load_environment -from kallithea.lib.middleware.wrapper import RequestWrapper +def make_app_without_logging(global_conf, full_stack=True, **app_conf): + """The core of make_app for use from gearbox commands (other than 'serve')""" + return make_base_app(global_conf, full_stack=full_stack, **app_conf) -def make_app(global_conf, full_stack=True, static_files=True, **app_conf): - """Create a Pylons WSGI application and return it - - ``global_conf`` - The inherited configuration for this application. Normally from - the [DEFAULT] section of the Paste ini file. - - ``full_stack`` - Whether or not this application provides a full WSGI stack (by - default, meaning it handles its own exceptions and errors). - Disable full_stack when this application is "managed" by - another WSGI middleware. - - ``app_conf`` - The application's local configuration. Normally specified in - the [app:] section of the Paste ini file (where - defaults to main). - +def make_app(global_conf, full_stack=True, **app_conf): """ - # Configure the Pylons environment - config = load_environment(global_conf, app_conf) - - # The Pylons WSGI app - app = PylonsApp(config=config) - - # Routing/Session/Cache Middleware - app = RoutesMiddleware(app, config['routes.map']) - app = SecureSessionMiddleware(app, config) - - # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) - if asbool(config['pdebug']): - from kallithea.lib.profiler import ProfilingMiddleware - app = ProfilingMiddleware(app) - - if asbool(full_stack): + Set up Kallithea with the settings found in the PasteDeploy configuration + file used. - from kallithea.lib.middleware.sentry import Sentry - from kallithea.lib.middleware.appenlight import AppEnlight - if AppEnlight and asbool(config['app_conf'].get('appenlight')): - app = AppEnlight(app, config) - elif Sentry: - app = Sentry(app, config) - - # Handle Python exceptions - app = ErrorHandler(app, global_conf, **config['pylons.errorware']) - - # Display error documents for 401, 403, 404 status codes (and - # 500 when debug is disabled) - # Note: will buffer the output in memory! - if asbool(config['debug']): - app = StatusCodeRedirect(app) - else: - app = StatusCodeRedirect(app, [400, 401, 403, 404, 500]) + :param global_conf: The global settings for Kallithea (those + defined under the ``[DEFAULT]`` section). + :type global_conf: dict + :param full_stack: Should the whole TurboGears2 stack be set up? + :type full_stack: str or bool + :return: The Kallithea application with all the relevant middleware + loaded. - # we want our low level middleware to get to the request ASAP. We don't - # need any pylons stack middleware in them - especially no StatusCodeRedirect buffering - app = SimpleHg(app, config) - app = SimpleGit(app, config) - - # Enable https redirects based on HTTP_X_URL_SCHEME set by proxy - if any(asbool(config.get(x)) for x in ['https_fixup', 'force_https', 'use_htsts']): - app = HttpsFixup(app, config) - - app = RequestWrapper(app, config) # logging + This is the PasteDeploy factory for the Kallithea application. - # Establish the Registry for this application - app = RegistryManager(app) # thread / request-local module globals / variables - - if asbool(static_files): - # Serve static files - static_app = StaticURLParser(config['pylons.paths']['static_files']) - app = Cascade([static_app, app]) - app = make_gzip_middleware(app, global_conf, compress_level=1) - - app.config = config - - return app + ``app_conf`` contains all the application-specific settings (those defined + under ``[app:main]``. + """ + logging.config.fileConfig(global_conf['__file__']) + return make_app_without_logging(global_conf, full_stack=full_stack, **app_conf) diff -r 42788d5f5967 -r b3289fef0daa kallithea/config/post_receive_tmpl.py --- a/kallithea/config/post_receive_tmpl.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/config/post_receive_tmpl.py Thu Jun 07 01:46:02 2018 +0200 @@ -1,34 +1,29 @@ -#!/usr/bin/env python2 import os import sys -try: - import kallithea - KALLITHEA_HOOK_VER = '_TMPL_' - os.environ['KALLITHEA_HOOK_VER'] = KALLITHEA_HOOK_VER - from kallithea.lib.hooks import handle_git_post_receive as _handler -except ImportError: - if os.environ.get('RC_DEBUG_GIT_HOOK'): - import traceback - print traceback.format_exc() - kallithea = None +# set output mode on windows to binary for stderr +# this prevents python (or the windows console) from replacing \n with \r\n +# git doesn't display remote output lines that contain \r +# and therefore without this modification git would displayes empty lines +# instead of the exception output +if sys.platform == "win32": + import msvcrt + msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) + +KALLITHEA_HOOK_VER = '_TMPL_' +os.environ['KALLITHEA_HOOK_VER'] = KALLITHEA_HOOK_VER +from kallithea.lib.hooks import handle_git_post_receive as _handler def main(): - if kallithea is None: - # exit with success if we cannot import kallithea !! - # this allows simply push to this repo even without - # kallithea - sys.exit(0) - repo_path = os.path.abspath('.') - push_data = sys.stdin.readlines() + git_stdin_lines = sys.stdin.readlines() # os.environ is modified here by a subprocess call that # runs git and later git executes this hook. # Environ gets some additional info from kallithea system # like IP or username from basic-auth - _handler(repo_path, push_data, os.environ) - sys.exit(0) + sys.exit(_handler(repo_path, git_stdin_lines, os.environ)) + if __name__ == '__main__': main() diff -r 42788d5f5967 -r b3289fef0daa kallithea/config/pre_receive_tmpl.py --- a/kallithea/config/pre_receive_tmpl.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/config/pre_receive_tmpl.py Thu Jun 07 01:46:02 2018 +0200 @@ -1,34 +1,29 @@ -#!/usr/bin/env python2 import os import sys -try: - import kallithea - KALLITHEA_HOOK_VER = '_TMPL_' - os.environ['KALLITHEA_HOOK_VER'] = KALLITHEA_HOOK_VER - from kallithea.lib.hooks import handle_git_pre_receive as _handler -except ImportError: - if os.environ.get('RC_DEBUG_GIT_HOOK'): - import traceback - print traceback.format_exc() - kallithea = None +# set output mode on windows to binary for stderr +# this prevents python (or the windows console) from replacing \n with \r\n +# git doesn't display remote output lines that contain \r +# and therefore without this modification git would displayes empty lines +# instead of the exception output +if sys.platform == "win32": + import msvcrt + msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) + +KALLITHEA_HOOK_VER = '_TMPL_' +os.environ['KALLITHEA_HOOK_VER'] = KALLITHEA_HOOK_VER +from kallithea.lib.hooks import handle_git_pre_receive as _handler def main(): - if kallithea is None: - # exit with success if we cannot import kallithea !! - # this allows simply push to this repo even without - # kallithea - sys.exit(0) - repo_path = os.path.abspath('.') - push_data = sys.stdin.readlines() + git_stdin_lines = sys.stdin.readlines() # os.environ is modified here by a subprocess call that # runs git and later git executes this hook. # Environ gets some additional info from kallithea system # like IP or username from basic-auth - _handler(repo_path, push_data, os.environ) - sys.exit(0) + sys.exit(_handler(repo_path, git_stdin_lines, os.environ)) + if __name__ == '__main__': main() diff -r 42788d5f5967 -r b3289fef0daa kallithea/config/rcextensions/__init__.py --- a/kallithea/config/rcextensions/__init__.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/config/rcextensions/__init__.py Thu Jun 07 01:46:02 2018 +0200 @@ -41,7 +41,7 @@ :param created_on: :param enable_downloads: :param repo_id: - :param user_id: + :param owner_id: :param enable_statistics: :param clone_uri: :param fork_id: @@ -49,6 +49,8 @@ :param created_by: """ return 0 + + CREATE_REPO_HOOK = _crrepohook @@ -73,6 +75,8 @@ """ reason = 'allowed' return True, reason + + PRE_CREATE_USER_HOOK = _pre_cruserhook #============================================================================== @@ -105,6 +109,8 @@ :param created_by: """ return 0 + + CREATE_USER_HOOK = _cruserhook @@ -123,7 +129,7 @@ :param created_on: :param enable_downloads: :param repo_id: - :param user_id: + :param owner_id: :param enable_statistics: :param clone_uri: :param fork_id: @@ -132,6 +138,8 @@ :param deleted_on: """ return 0 + + DELETE_REPO_HOOK = _dlrepohook @@ -165,6 +173,8 @@ :param deleted_by: """ return 0 + + DELETE_USER_HOOK = _dluserhook @@ -189,6 +199,8 @@ :param pushed_revs: list of pushed revisions """ return 0 + + PUSH_HOOK = _pushhook @@ -212,4 +224,6 @@ :param repository: repository name """ return 0 + + PULL_HOOK = _pullhook diff -r 42788d5f5967 -r b3289fef0daa kallithea/config/routing.py --- a/kallithea/config/routing.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/config/routing.py Thu Jun 07 01:46:02 2018 +0200 @@ -19,6 +19,7 @@ refer to the routes manual at http://routes.groovie.org/docs/ """ +from tg import request from routes import Mapper # prefix for non repository related links needs to be prefixed with `/` @@ -27,7 +28,7 @@ def make_map(config): """Create, configure and return the routes Mapper""" - rmap = Mapper(directory=config['pylons.paths']['controllers'], + rmap = Mapper(directory=config['paths']['controllers'], always_scan=config['debug']) rmap.minimization = False rmap.explicit = False @@ -45,7 +46,7 @@ repo_name = match_dict.get('repo_name') if match_dict.get('f_path'): - #fix for multiple initial slashes that causes errors + # fix for multiple initial slashes that causes errors match_dict['f_path'] = match_dict['f_path'].lstrip('/') by_id_match = get_repo_by_id(repo_name) @@ -89,20 +90,18 @@ def check_int(environ, match_dict): return match_dict.get('id').isdigit() - # The ErrorController route (handles 404/500 error pages); it should - # likely stay at the top, ensuring it can always be resolved - rmap.connect('/error/{action}', controller='error') - rmap.connect('/error/{action}/{id}', controller='error') - #========================================================================== # CUSTOM ROUTES HERE #========================================================================== - #MAIN PAGE + # MAIN PAGE rmap.connect('home', '/', controller='home', action='index') rmap.connect('about', '/about', controller='home', action='about') + rmap.redirect('/favicon.ico', '/images/favicon.ico') rmap.connect('repo_switcher_data', '/_repos', controller='home', action='repo_switcher_data') + rmap.connect('users_and_groups_data', '/_users_and_groups', controller='home', + action='users_and_groups_data') rmap.connect('rst_help', "http://docutils.sourceforge.net/docs/user/rst/quickref.html", @@ -110,7 +109,7 @@ rmap.connect('kallithea_project_url', "https://kallithea-scm.org/", _static=True) rmap.connect('issues_url', 'https://bitbucket.org/conservancy/kallithea/issues', _static=True) - #ADMIN REPOSITORY ROUTES + # ADMIN REPOSITORY ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/repos') as m: m.connect("repos", "/repos", @@ -119,14 +118,13 @@ action="index", conditions=dict(method=["GET"])) m.connect("new_repo", "/create_repository", action="create_repository", conditions=dict(method=["GET"])) - m.connect("put_repo", "/repos/{repo_name:.*?}", - action="update", conditions=dict(method=["PUT"], + m.connect("update_repo", "/repos/{repo_name:.*?}", + action="update", conditions=dict(method=["POST"], function=check_repo)) - m.connect("delete_repo", "/repos/{repo_name:.*?}", - action="delete", conditions=dict(method=["DELETE"], - )) + m.connect("delete_repo", "/repos/{repo_name:.*?}/delete", + action="delete", conditions=dict(method=["POST"])) - #ADMIN REPOSITORY GROUPS ROUTES + # ADMIN REPOSITORY GROUPS ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/repo_groups') as m: m.connect("repos_groups", "/repo_groups", @@ -136,47 +134,40 @@ m.connect("new_repos_group", "/repo_groups/new", action="new", conditions=dict(method=["GET"])) m.connect("update_repos_group", "/repo_groups/{group_name:.*?}", - action="update", conditions=dict(method=["PUT"], + action="update", conditions=dict(method=["POST"], function=check_group)) m.connect("repos_group", "/repo_groups/{group_name:.*?}", action="show", conditions=dict(method=["GET"], function=check_group)) - #EXTRAS REPO GROUP ROUTES + # EXTRAS REPO GROUP ROUTES m.connect("edit_repo_group", "/repo_groups/{group_name:.*?}/edit", action="edit", conditions=dict(method=["GET"], function=check_group)) - m.connect("edit_repo_group", "/repo_groups/{group_name:.*?}/edit", - action="edit", - conditions=dict(method=["PUT"], function=check_group)) m.connect("edit_repo_group_advanced", "/repo_groups/{group_name:.*?}/edit/advanced", action="edit_repo_group_advanced", conditions=dict(method=["GET"], function=check_group)) - m.connect("edit_repo_group_advanced", "/repo_groups/{group_name:.*?}/edit/advanced", - action="edit_repo_group_advanced", - conditions=dict(method=["PUT"], function=check_group)) m.connect("edit_repo_group_perms", "/repo_groups/{group_name:.*?}/edit/permissions", action="edit_repo_group_perms", conditions=dict(method=["GET"], function=check_group)) - m.connect("edit_repo_group_perms", "/repo_groups/{group_name:.*?}/edit/permissions", + m.connect("edit_repo_group_perms_update", "/repo_groups/{group_name:.*?}/edit/permissions", action="update_perms", - conditions=dict(method=["PUT"], function=check_group)) - m.connect("edit_repo_group_perms", "/repo_groups/{group_name:.*?}/edit/permissions", + conditions=dict(method=["POST"], function=check_group)) + m.connect("edit_repo_group_perms_delete", "/repo_groups/{group_name:.*?}/edit/permissions/delete", action="delete_perms", - conditions=dict(method=["DELETE"], function=check_group)) + conditions=dict(method=["POST"], function=check_group)) - m.connect("delete_repo_group", "/repo_groups/{group_name:.*?}", - action="delete", conditions=dict(method=["DELETE"], + m.connect("delete_repo_group", "/repo_groups/{group_name:.*?}/delete", + action="delete", conditions=dict(method=["POST"], function=check_group_skip_path)) - - #ADMIN USER ROUTES + # ADMIN USER ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/users') as m: - m.connect("users", "/users", + m.connect("new_user", "/users/new", action="create", conditions=dict(method=["POST"])) m.connect("users", "/users", action="index", conditions=dict(method=["GET"])) @@ -185,47 +176,43 @@ m.connect("new_user", "/users/new", action="new", conditions=dict(method=["GET"])) m.connect("update_user", "/users/{id}", - action="update", conditions=dict(method=["PUT"])) - m.connect("delete_user", "/users/{id}", - action="delete", conditions=dict(method=["DELETE"])) + action="update", conditions=dict(method=["POST"])) + m.connect("delete_user", "/users/{id}/delete", + action="delete", conditions=dict(method=["POST"])) m.connect("edit_user", "/users/{id}/edit", action="edit", conditions=dict(method=["GET"])) - m.connect("user", "/users/{id}", - action="show", conditions=dict(method=["GET"])) - #EXTRAS USER ROUTES + # EXTRAS USER ROUTES m.connect("edit_user_advanced", "/users/{id}/edit/advanced", action="edit_advanced", conditions=dict(method=["GET"])) - m.connect("edit_user_advanced", "/users/{id}/edit/advanced", - action="update_advanced", conditions=dict(method=["PUT"])) m.connect("edit_user_api_keys", "/users/{id}/edit/api_keys", action="edit_api_keys", conditions=dict(method=["GET"])) - m.connect("edit_user_api_keys", "/users/{id}/edit/api_keys", + m.connect("edit_user_api_keys_update", "/users/{id}/edit/api_keys", action="add_api_key", conditions=dict(method=["POST"])) - m.connect("edit_user_api_keys", "/users/{id}/edit/api_keys", - action="delete_api_key", conditions=dict(method=["DELETE"])) + m.connect("edit_user_api_keys_delete", "/users/{id}/edit/api_keys/delete", + action="delete_api_key", conditions=dict(method=["POST"])) m.connect("edit_user_perms", "/users/{id}/edit/permissions", action="edit_perms", conditions=dict(method=["GET"])) - m.connect("edit_user_perms", "/users/{id}/edit/permissions", - action="update_perms", conditions=dict(method=["PUT"])) + m.connect("edit_user_perms_update", "/users/{id}/edit/permissions", + action="update_perms", conditions=dict(method=["POST"])) m.connect("edit_user_emails", "/users/{id}/edit/emails", action="edit_emails", conditions=dict(method=["GET"])) - m.connect("edit_user_emails", "/users/{id}/edit/emails", - action="add_email", conditions=dict(method=["PUT"])) - m.connect("edit_user_emails", "/users/{id}/edit/emails", - action="delete_email", conditions=dict(method=["DELETE"])) + m.connect("edit_user_emails_update", "/users/{id}/edit/emails", + action="add_email", conditions=dict(method=["POST"])) + m.connect("edit_user_emails_delete", "/users/{id}/edit/emails/delete", + action="delete_email", conditions=dict(method=["POST"])) m.connect("edit_user_ips", "/users/{id}/edit/ips", action="edit_ips", conditions=dict(method=["GET"])) - m.connect("edit_user_ips", "/users/{id}/edit/ips", - action="add_ip", conditions=dict(method=["PUT"])) - m.connect("edit_user_ips", "/users/{id}/edit/ips", - action="delete_ip", conditions=dict(method=["DELETE"])) + m.connect("edit_user_ips_update", "/users/{id}/edit/ips", + action="add_ip", conditions=dict(method=["POST"])) + m.connect("edit_user_ips_delete", "/users/{id}/edit/ips/delete", + action="delete_ip", conditions=dict(method=["POST"])) - #ADMIN USER GROUPS REST ROUTES + # ADMIN USER GROUPS REST ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/user_groups') as m: m.connect("users_groups", "/user_groups", @@ -235,28 +222,25 @@ m.connect("new_users_group", "/user_groups/new", action="new", conditions=dict(method=["GET"])) m.connect("update_users_group", "/user_groups/{id}", - action="update", conditions=dict(method=["PUT"])) - m.connect("delete_users_group", "/user_groups/{id}", - action="delete", conditions=dict(method=["DELETE"])) + action="update", conditions=dict(method=["POST"])) + m.connect("delete_users_group", "/user_groups/{id}/delete", + action="delete", conditions=dict(method=["POST"])) m.connect("edit_users_group", "/user_groups/{id}/edit", action="edit", conditions=dict(method=["GET"]), function=check_user_group) - m.connect("users_group", "/user_groups/{id}", - action="show", conditions=dict(method=["GET"])) - #EXTRAS USER GROUP ROUTES + # EXTRAS USER GROUP ROUTES m.connect("edit_user_group_default_perms", "/user_groups/{id}/edit/default_perms", action="edit_default_perms", conditions=dict(method=["GET"])) - m.connect("edit_user_group_default_perms", "/user_groups/{id}/edit/default_perms", - action="update_default_perms", conditions=dict(method=["PUT"])) - + m.connect("edit_user_group_default_perms_update", "/user_groups/{id}/edit/default_perms", + action="update_default_perms", conditions=dict(method=["POST"])) m.connect("edit_user_group_perms", "/user_groups/{id}/edit/perms", action="edit_perms", conditions=dict(method=["GET"])) - m.connect("edit_user_group_perms", "/user_groups/{id}/edit/perms", - action="update_perms", conditions=dict(method=["PUT"])) - m.connect("edit_user_group_perms", "/user_groups/{id}/edit/perms", - action="delete_perms", conditions=dict(method=["DELETE"])) + m.connect("edit_user_group_perms_update", "/user_groups/{id}/edit/perms", + action="update_perms", conditions=dict(method=["POST"])) + m.connect("edit_user_group_perms_delete", "/user_groups/{id}/edit/perms/delete", + action="delete_perms", conditions=dict(method=["POST"])) m.connect("edit_user_group_advanced", "/user_groups/{id}/edit/advanced", action="edit_advanced", conditions=dict(method=["GET"])) @@ -264,9 +248,7 @@ m.connect("edit_user_group_members", "/user_groups/{id}/edit/members", action="edit_members", conditions=dict(method=["GET"])) - - - #ADMIN PERMISSIONS ROUTES + # ADMIN PERMISSIONS ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/permissions') as m: m.connect("admin_permissions", "/permissions", @@ -275,28 +257,27 @@ action="permission_globals", conditions=dict(method=["GET"])) m.connect("admin_permissions_ips", "/permissions/ips", - action="permission_ips", conditions=dict(method=["POST"])) - m.connect("admin_permissions_ips", "/permissions/ips", action="permission_ips", conditions=dict(method=["GET"])) m.connect("admin_permissions_perms", "/permissions/perms", - action="permission_perms", conditions=dict(method=["POST"])) - m.connect("admin_permissions_perms", "/permissions/perms", action="permission_perms", conditions=dict(method=["GET"])) + # ADMIN DEFAULTS ROUTES + with rmap.submapper(path_prefix=ADMIN_PREFIX, + controller='admin/defaults') as m: + m.connect('defaults', 'defaults', + action="index") + m.connect('defaults_update', 'defaults/{id}/update', + action="update", conditions=dict(method=["POST"])) - #ADMIN DEFAULTS REST ROUTES - rmap.resource('default', 'defaults', - controller='admin/defaults', path_prefix=ADMIN_PREFIX) - - #ADMIN AUTH SETTINGS + # ADMIN AUTH SETTINGS rmap.connect('auth_settings', '%s/auth' % ADMIN_PREFIX, controller='admin/auth_settings', action='auth_settings', conditions=dict(method=["POST"])) rmap.connect('auth_home', '%s/auth' % ADMIN_PREFIX, controller='admin/auth_settings') - #ADMIN SETTINGS ROUTES + # ADMIN SETTINGS ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/settings') as m: m.connect("admin_settings", "/settings", @@ -326,8 +307,8 @@ m.connect("admin_settings_hooks", "/settings/hooks", action="settings_hooks", conditions=dict(method=["POST"])) - m.connect("admin_settings_hooks", "/settings/hooks", - action="settings_hooks", conditions=dict(method=["DELETE"])) + m.connect("admin_settings_hooks_delete", "/settings/hooks/delete", + action="settings_hooks", conditions=dict(method=["POST"])) m.connect("admin_settings_hooks", "/settings/hooks", action="settings_hooks", conditions=dict(method=["GET"])) @@ -343,7 +324,7 @@ m.connect("admin_settings_system_update", "/settings/system/updates", action="settings_system_update", conditions=dict(method=["GET"])) - #ADMIN MY ACCOUNT + # ADMIN MY ACCOUNT with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/my_account') as m: @@ -370,46 +351,35 @@ action="my_account_emails", conditions=dict(method=["GET"])) m.connect("my_account_emails", "/my_account/emails", action="my_account_emails_add", conditions=dict(method=["POST"])) - m.connect("my_account_emails", "/my_account/emails", - action="my_account_emails_delete", conditions=dict(method=["DELETE"])) + m.connect("my_account_emails_delete", "/my_account/emails/delete", + action="my_account_emails_delete", conditions=dict(method=["POST"])) m.connect("my_account_api_keys", "/my_account/api_keys", action="my_account_api_keys", conditions=dict(method=["GET"])) m.connect("my_account_api_keys", "/my_account/api_keys", action="my_account_api_keys_add", conditions=dict(method=["POST"])) - m.connect("my_account_api_keys", "/my_account/api_keys", - action="my_account_api_keys_delete", conditions=dict(method=["DELETE"])) + m.connect("my_account_api_keys_delete", "/my_account/api_keys/delete", + action="my_account_api_keys_delete", conditions=dict(method=["POST"])) - #NOTIFICATION REST ROUTES + # NOTIFICATION REST ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/notifications') as m: m.connect("notifications", "/notifications", - action="create", conditions=dict(method=["POST"])) - m.connect("notifications", "/notifications", action="index", conditions=dict(method=["GET"])) m.connect("notifications_mark_all_read", "/notifications/mark_all_read", action="mark_all_read", conditions=dict(method=["GET"])) m.connect("formatted_notifications", "/notifications.{format}", action="index", conditions=dict(method=["GET"])) - m.connect("new_notification", "/notifications/new", - action="new", conditions=dict(method=["GET"])) - m.connect("formatted_new_notification", "/notifications/new.{format}", - action="new", conditions=dict(method=["GET"])) - m.connect("/notifications/{notification_id}", - action="update", conditions=dict(method=["PUT"])) - m.connect("/notifications/{notification_id}", - action="delete", conditions=dict(method=["DELETE"])) - m.connect("edit_notification", "/notifications/{notification_id}/edit", - action="edit", conditions=dict(method=["GET"])) - m.connect("formatted_edit_notification", - "/notifications/{notification_id}.{format}/edit", - action="edit", conditions=dict(method=["GET"])) + m.connect("notification_update", "/notifications/{notification_id}/update", + action="update", conditions=dict(method=["POST"])) + m.connect("notification_delete", "/notifications/{notification_id}/delete", + action="delete", conditions=dict(method=["POST"])) m.connect("notification", "/notifications/{notification_id}", action="show", conditions=dict(method=["GET"])) m.connect("formatted_notification", "/notifications/{notification_id}.{format}", action="show", conditions=dict(method=["GET"])) - #ADMIN GIST + # ADMIN GIST with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/gists') as m: m.connect("gists", "/gists", @@ -419,17 +389,13 @@ m.connect("new_gist", "/gists/new", action="new", conditions=dict(method=["GET"])) - - m.connect("/gists/{gist_id}", - action="update", conditions=dict(method=["PUT"])) - m.connect("/gists/{gist_id}", - action="delete", conditions=dict(method=["DELETE"])) + m.connect("gist_delete", "/gists/{gist_id}/delete", + action="delete", conditions=dict(method=["POST"])) m.connect("edit_gist", "/gists/{gist_id}/edit", action="edit", conditions=dict(method=["GET", "POST"])) m.connect("edit_gist_check_revision", "/gists/{gist_id}/edit/check_revision", action="check_revision", conditions=dict(method=["POST"])) - m.connect("gist", "/gists/{gist_id}", action="show", conditions=dict(method=["GET"])) m.connect("gist_rev", "/gists/{gist_id}/{revision}", @@ -442,7 +408,7 @@ revision='tip', action="show", conditions=dict(method=["GET"])) - #ADMIN MAIN PAGES + # ADMIN MAIN PAGES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/admin') as m: m.connect('admin_home', '', action='index') @@ -451,11 +417,11 @@ #========================================================================== # API V2 #========================================================================== - with rmap.submapper(path_prefix=ADMIN_PREFIX, - controller='api/api') as m: + with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='api/api', + action='_dispatch') as m: m.connect('api', '/api') - #USER JOURNAL + # USER JOURNAL rmap.connect('journal', '%s/journal' % ADMIN_PREFIX, controller='journal', action='index') rmap.connect('journal_rss', '%s/journal/rss' % ADMIN_PREFIX, @@ -484,7 +450,7 @@ controller='journal', action='toggle_following', conditions=dict(method=["POST"])) - #SEARCH + # SEARCH rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',) rmap.connect('search_repo_admin', '%s/search/{repo_name:.*}' % ADMIN_PREFIX, controller='search', @@ -494,7 +460,7 @@ conditions=dict(function=check_repo), ) - #LOGIN/LOGOUT/REGISTER/SIGN IN + # LOGIN/LOGOUT/REGISTER/SIGN IN rmap.connect('authentication_token', '%s/authentication_token' % ADMIN_PREFIX, controller='login', action='authentication_token') rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login') rmap.connect('logout_home', '%s/logout' % ADMIN_PREFIX, controller='login', @@ -510,7 +476,7 @@ '%s/password_reset_confirmation' % ADMIN_PREFIX, controller='login', action='password_reset_confirmation') - #FEEDS + # FEEDS rmap.connect('rss_feed_home', '/{repo_name:.*?}/feed/rss', controller='feed', action='rss', conditions=dict(function=check_repo)) @@ -543,8 +509,6 @@ controller='summary', action='repo_size', conditions=dict(function=check_repo)) - rmap.connect('branch_tag_switcher', '/{repo_name:.*?}/branches-tags', - controller='home', action='branch_tag_switcher') rmap.connect('repo_refs_data', '/{repo_name:.*?}/refs-data', controller='home', action='repo_refs_data') @@ -568,21 +532,20 @@ conditions=dict(method=["GET"], function=check_repo)) rmap.connect("edit_repo_perms_update", "/{repo_name:.*?}/settings/permissions", controller='admin/repos', action="edit_permissions_update", - conditions=dict(method=["PUT"], function=check_repo)) - rmap.connect("edit_repo_perms_revoke", "/{repo_name:.*?}/settings/permissions", + conditions=dict(method=["POST"], function=check_repo)) + rmap.connect("edit_repo_perms_revoke", "/{repo_name:.*?}/settings/permissions/delete", controller='admin/repos', action="edit_permissions_revoke", - conditions=dict(method=["DELETE"], function=check_repo)) + conditions=dict(method=["POST"], function=check_repo)) rmap.connect("edit_repo_fields", "/{repo_name:.*?}/settings/fields", controller='admin/repos', action="edit_fields", conditions=dict(method=["GET"], function=check_repo)) rmap.connect('create_repo_fields', "/{repo_name:.*?}/settings/fields/new", controller='admin/repos', action="create_repo_field", - conditions=dict(method=["PUT"], function=check_repo)) - rmap.connect('delete_repo_fields', "/{repo_name:.*?}/settings/fields/{field_id}", + conditions=dict(method=["POST"], function=check_repo)) + rmap.connect('delete_repo_fields', "/{repo_name:.*?}/settings/fields/{field_id}/delete", controller='admin/repos', action="delete_repo_field", - conditions=dict(method=["DELETE"], function=check_repo)) - + conditions=dict(method=["POST"], function=check_repo)) rmap.connect("edit_repo_advanced", "/{repo_name:.*?}/settings/advanced", controller='admin/repos', action="edit_advanced", @@ -590,43 +553,41 @@ rmap.connect("edit_repo_advanced_locking", "/{repo_name:.*?}/settings/advanced/locking", controller='admin/repos', action="edit_advanced_locking", - conditions=dict(method=["PUT"], function=check_repo)) + conditions=dict(method=["POST"], function=check_repo)) rmap.connect('toggle_locking', "/{repo_name:.*?}/settings/advanced/locking_toggle", controller='admin/repos', action="toggle_locking", conditions=dict(method=["GET"], function=check_repo)) rmap.connect("edit_repo_advanced_journal", "/{repo_name:.*?}/settings/advanced/journal", controller='admin/repos', action="edit_advanced_journal", - conditions=dict(method=["PUT"], function=check_repo)) + conditions=dict(method=["POST"], function=check_repo)) rmap.connect("edit_repo_advanced_fork", "/{repo_name:.*?}/settings/advanced/fork", controller='admin/repos', action="edit_advanced_fork", - conditions=dict(method=["PUT"], function=check_repo)) - + conditions=dict(method=["POST"], function=check_repo)) rmap.connect("edit_repo_caches", "/{repo_name:.*?}/settings/caches", controller='admin/repos', action="edit_caches", conditions=dict(method=["GET"], function=check_repo)) - rmap.connect("edit_repo_caches", "/{repo_name:.*?}/settings/caches", + rmap.connect("update_repo_caches", "/{repo_name:.*?}/settings/caches", controller='admin/repos', action="edit_caches", - conditions=dict(method=["PUT"], function=check_repo)) - + conditions=dict(method=["POST"], function=check_repo)) rmap.connect("edit_repo_remote", "/{repo_name:.*?}/settings/remote", controller='admin/repos', action="edit_remote", conditions=dict(method=["GET"], function=check_repo)) - rmap.connect("edit_repo_remote", "/{repo_name:.*?}/settings/remote", + rmap.connect("edit_repo_remote_update", "/{repo_name:.*?}/settings/remote", controller='admin/repos', action="edit_remote", - conditions=dict(method=["PUT"], function=check_repo)) + conditions=dict(method=["POST"], function=check_repo)) rmap.connect("edit_repo_statistics", "/{repo_name:.*?}/settings/statistics", controller='admin/repos', action="edit_statistics", conditions=dict(method=["GET"], function=check_repo)) - rmap.connect("edit_repo_statistics", "/{repo_name:.*?}/settings/statistics", + rmap.connect("edit_repo_statistics_update", "/{repo_name:.*?}/settings/statistics", controller='admin/repos', action="edit_statistics", - conditions=dict(method=["PUT"], function=check_repo)) + conditions=dict(method=["POST"], function=check_repo)) - #still working url for backward compat. + # still working url for backward compat. rmap.connect('raw_changeset_home_depraced', '/{repo_name:.*?}/raw-changeset/{revision}', controller='changeset', action='changeset_raw', @@ -653,16 +614,11 @@ controller='changeset', revision='tip', action='comment', conditions=dict(function=check_repo)) - rmap.connect('changeset_comment_preview', - '/{repo_name:.*?}/changeset-comment-preview', - controller='changeset', action='preview_comment', + rmap.connect('changeset_comment_delete', + '/{repo_name:.*?}/changeset-comment/{comment_id}/delete', + controller='changeset', action='delete_comment', conditions=dict(function=check_repo, method=["POST"])) - rmap.connect('changeset_comment_delete', - '/{repo_name:.*?}/changeset-comment-delete/{comment_id}', - controller='changeset', action='delete_comment', - conditions=dict(function=check_repo, method=["DELETE"])) - rmap.connect('changeset_info', '/changeset_info/{repo_name:.*?}/{revision}', controller='changeset', action='changeset_info') @@ -706,10 +662,10 @@ action='post', conditions=dict(function=check_repo, method=["POST"])) rmap.connect('pullrequest_delete', - '/{repo_name:.*?}/pull-request/{pull_request_id}', + '/{repo_name:.*?}/pull-request/{pull_request_id}/delete', controller='pullrequests', action='delete', conditions=dict(function=check_repo, - method=["DELETE"])) + method=["POST"])) rmap.connect('pullrequest_show_all', '/{repo_name:.*?}/pull-request', @@ -731,27 +687,14 @@ rmap.connect('pullrequest_comment_delete', '/{repo_name:.*?}/pull-request-comment/{comment_id}/delete', controller='pullrequests', action='delete_comment', - conditions=dict(function=check_repo, method=["DELETE"])) + conditions=dict(function=check_repo, method=["POST"])) rmap.connect('summary_home_summary', '/{repo_name:.*?}/summary', controller='summary', conditions=dict(function=check_repo)) - rmap.connect('branches_home', '/{repo_name:.*?}/branches', - controller='branches', conditions=dict(function=check_repo)) - - rmap.connect('tags_home', '/{repo_name:.*?}/tags', - controller='tags', conditions=dict(function=check_repo)) - - rmap.connect('bookmarks_home', '/{repo_name:.*?}/bookmarks', - controller='bookmarks', conditions=dict(function=check_repo)) - rmap.connect('changelog_home', '/{repo_name:.*?}/changelog', controller='changelog', conditions=dict(function=check_repo)) - rmap.connect('changelog_summary_home', '/{repo_name:.*?}/changelog_summary', - controller='changelog', action='changelog_summary', - conditions=dict(function=check_repo)) - rmap.connect('changelog_file_home', '/{repo_name:.*?}/changelog/{revision}/{f_path:.*}', controller='changelog', f_path=None, conditions=dict(function=check_repo)) @@ -842,3 +785,29 @@ conditions=dict(function=check_repo)) return rmap + + +class UrlGenerator(object): + """Emulate pylons.url in providing a wrapper around routes.url + + This code was added during migration from Pylons to Turbogears2. Pylons + already provided a wrapper like this, but Turbogears2 does not. + + When the routing of Kallithea is changed to use less Routes and more + Turbogears2-style routing, this class may disappear or change. + + url() (the __call__ method) returns the URL based on a route name and + arguments. + url.current() returns the URL of the current page with arguments applied. + + Refer to documentation of Routes for details: + https://routes.readthedocs.io/en/latest/generating.html#generation + """ + def __call__(self, *args, **kwargs): + return request.environ['routes.url'](*args, **kwargs) + + def current(self, *args, **kwargs): + return request.environ['routes.url'].current(*args, **kwargs) + + +url = UrlGenerator() diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/admin.py --- a/kallithea/controllers/admin/admin.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/admin.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,19 +28,20 @@ import logging -from pylons import request, tmpl_context as c, url +from tg import request, tmpl_context as c from sqlalchemy.orm import joinedload from whoosh.qparser.default import QueryParser from whoosh.qparser.dateparse import DateParserPlugin from whoosh import query from sqlalchemy.sql.expression import or_, and_, func +from kallithea.config.routing import url from kallithea.model.db import UserLog -from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator +from kallithea.lib.auth import LoginRequired, HasPermissionAnyDecorator from kallithea.lib.base import BaseController, render from kallithea.lib.utils2 import safe_int, remove_prefix, remove_suffix from kallithea.lib.indexers import JOURNAL_SCHEMA -from kallithea.lib.helpers import Page +from kallithea.lib.page import Page log = logging.getLogger(__name__) @@ -64,14 +65,14 @@ def wildcard_handler(col, wc_term): if wc_term.startswith('*') and not wc_term.endswith('*'): - #postfix == endswith + # postfix == endswith wc_term = remove_prefix(wc_term, prefix='*') - return func.lower(col).endswith(wc_term) + return func.lower(col).endswith(func.lower(wc_term)) elif wc_term.startswith('*') and wc_term.endswith('*'): - #wildcard == ilike + # wildcard == ilike wc_term = remove_prefix(wc_term, prefix='*') wc_term = remove_suffix(wc_term, suffix='*') - return func.lower(col).contains(wc_term) + return func.lower(col).contains(func.lower(wc_term)) def get_filterion(field, val, term): @@ -87,7 +88,7 @@ field = getattr(UserLog, field) log.debug('filter field: %s val=>%s', field, val) - #sql filtering + # sql filtering if isinstance(term, query.Wildcard): return wildcard_handler(field, val) elif isinstance(term, query.Prefix): @@ -119,23 +120,23 @@ class AdminController(BaseController): - @LoginRequired() - def __before__(self): - super(AdminController, self).__before__() + @LoginRequired(allow_default_user=True) + def _before(self, *args, **kwargs): + super(AdminController, self)._before(*args, **kwargs) - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def index(self): - users_log = UserLog.query()\ - .options(joinedload(UserLog.user))\ + users_log = UserLog.query() \ + .options(joinedload(UserLog.user)) \ .options(joinedload(UserLog.repository)) - #FILTERING + # FILTERING c.search_term = request.GET.get('filter') users_log = _journal_filter(users_log, c.search_term) users_log = users_log.order_by(UserLog.action_date.desc()) - p = safe_int(request.GET.get('page', 1), 1) + p = safe_int(request.GET.get('page'), 1) def url_generator(**kw): return url.current(filter=c.search_term, **kw) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/auth_settings.py --- a/kallithea/controllers/admin/auth_settings.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/auth_settings.py Thu Jun 07 01:46:02 2018 +0200 @@ -27,14 +27,15 @@ import formencode.htmlfill import traceback -from pylons import request, tmpl_context as c, url -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound +from kallithea.config.routing import url from kallithea.lib import helpers as h from kallithea.lib.compat import formatted_json from kallithea.lib.base import BaseController, render -from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator +from kallithea.lib.auth import LoginRequired, HasPermissionAnyDecorator from kallithea.lib import auth_modules from kallithea.model.forms import AuthSettingsForm from kallithea.model.db import Setting @@ -46,9 +47,9 @@ class AuthSettingsController(BaseController): @LoginRequired() - @HasPermissionAllDecorator('hg.admin') - def __before__(self): - super(AuthSettingsController, self).__before__() + @HasPermissionAnyDecorator('hg.admin') + def _before(self, *args, **kwargs): + super(AuthSettingsController, self)._before(*args, **kwargs) def __load_defaults(self): c.available_plugins = [ @@ -58,32 +59,32 @@ 'kallithea.lib.auth_modules.auth_crowd', 'kallithea.lib.auth_modules.auth_pam' ] - c.enabled_plugins = Setting.get_auth_plugins() + self.enabled_plugins = auth_modules.get_auth_plugins() + c.enabled_plugin_names = [plugin.__class__.__module__ for plugin in self.enabled_plugins] def __render(self, defaults, errors): c.defaults = {} c.plugin_settings = {} c.plugin_shortnames = {} - for module in c.enabled_plugins: - plugin = auth_modules.loadplugin(module) - plugin_name = plugin.name - c.plugin_shortnames[module] = plugin_name + for plugin in self.enabled_plugins: + module = plugin.__class__.__module__ + c.plugin_shortnames[module] = plugin.name c.plugin_settings[module] = plugin.plugin_settings() for v in c.plugin_settings[module]: - fullname = ("auth_" + plugin_name + "_" + v["name"]) + fullname = "auth_%s_%s" % (plugin.name, v["name"]) if "default" in v: c.defaults[fullname] = v["default"] # Current values will be the default on the form, if there are any setting = Setting.get_by_name(fullname) if setting is not None: c.defaults[fullname] = setting.app_settings_value - # we want to show , separated list of enabled plugins - c.defaults['auth_plugins'] = ','.join(c.enabled_plugins) - if defaults: c.defaults.update(defaults) + # we want to show , separated list of enabled plugins + c.defaults['auth_plugins'] = ','.join(c.enabled_plugin_names) + log.debug(formatted_json(defaults)) return formencode.htmlfill.render( render('admin/auth/auth_settings.html'), @@ -117,10 +118,10 @@ # (yet), since that'll cause validation errors and/or wrong # settings being applied (e.g. checkboxes being cleared), # since the plugin settings will not be in the POST data. - c.enabled_plugins = [ p for p in c.enabled_plugins if p in new_enabled_plugins ] + c.enabled_plugin_names = [p for p in c.enabled_plugin_names if p in new_enabled_plugins] # Next, parse everything including plugin settings. - _form = AuthSettingsForm(c.enabled_plugins)() + _form = AuthSettingsForm(c.enabled_plugin_names)() try: form_result = _form.to_python(dict(request.POST)) @@ -130,7 +131,6 @@ v = ','.join(v) log.debug("%s = %s", k, str(v)) setting = Setting.create_or_update(k, v) - Session().add(setting) Session().commit() h.flash(_('Auth settings updated successfully'), category='success') @@ -146,4 +146,4 @@ h.flash(_('error occurred during update of auth settings'), category='error') - return redirect(url('auth_home')) + raise HTTPFound(location=url('auth_home')) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/defaults.py --- a/kallithea/controllers/admin/defaults.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/defaults.py Thu Jun 07 01:46:02 2018 +0200 @@ -30,12 +30,13 @@ import formencode from formencode import htmlfill -from pylons import request, tmpl_context as c, url -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound +from kallithea.config.routing import url from kallithea.lib import helpers as h -from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator +from kallithea.lib.auth import LoginRequired, HasPermissionAnyDecorator from kallithea.lib.base import BaseController, render from kallithea.model.forms import DefaultsForm from kallithea.model.meta import Session @@ -46,19 +47,13 @@ class DefaultsController(BaseController): - """REST Controller styled on the Atom Publishing Protocol""" - # To properly map this controller, ensure your config/routing.py - # file has a resource setup: - # map.resource('default', 'defaults') @LoginRequired() - @HasPermissionAllDecorator('hg.admin') - def __before__(self): - super(DefaultsController, self).__before__() + @HasPermissionAnyDecorator('hg.admin') + def _before(self, *args, **kwargs): + super(DefaultsController, self)._before(*args, **kwargs) def index(self, format='html'): - """GET /defaults: All items in the collection""" - # url('defaults') c.backends = BACKENDS.keys() defaults = Setting.get_default_repo_settings() @@ -69,30 +64,13 @@ force_defaults=False ) - def create(self): - """POST /defaults: Create a new item""" - # url('defaults') - - def new(self, format='html'): - """GET /defaults/new: Form to create a new item""" - # url('new_default') - def update(self, id): - """PUT /defaults/id: Update an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('default', id=ID), - # method='put') - # url('default', id=ID) - _form = DefaultsForm()() try: form_result = _form.to_python(dict(request.POST)) for k, v in form_result.iteritems(): setting = Setting.create_or_update(k, v) - Session().add(setting) Session().commit() h.flash(_('Default settings updated successfully'), category='success') @@ -112,21 +90,4 @@ h.flash(_('Error occurred during update of defaults'), category='error') - return redirect(url('defaults')) - - def delete(self, id): - """DELETE /defaults/id: Delete an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('default', id=ID), - # method='delete') - # url('default', id=ID) - - def show(self, id, format='html'): - """GET /defaults/id: Show a specific item""" - # url('default', id=ID) - - def edit(self, id, format='html'): - """GET /defaults/id/edit: Form to edit an existing item""" - # url('edit_default', id=ID) + raise HTTPFound(location=url('defaults')) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/gists.py --- a/kallithea/controllers/admin/gists.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/gists.py Thu Jun 07 01:46:02 2018 +0200 @@ -30,21 +30,20 @@ import traceback import formencode.htmlfill -from pylons import request, response, tmpl_context as c, url -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, response, tmpl_context as c +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound, HTTPNotFound, HTTPForbidden +from kallithea.config.routing import url from kallithea.model.forms import GistForm from kallithea.model.gist import GistModel from kallithea.model.meta import Session from kallithea.model.db import Gist, User from kallithea.lib import helpers as h -from kallithea.lib.base import BaseController, render -from kallithea.lib.auth import LoginRequired, NotAnonymous -from kallithea.lib.utils import jsonify +from kallithea.lib.base import BaseController, render, jsonify +from kallithea.lib.auth import LoginRequired from kallithea.lib.utils2 import safe_int, safe_unicode, time_to_datetime -from kallithea.lib.helpers import Page -from webob.exc import HTTPNotFound, HTTPForbidden +from kallithea.lib.page import Page from sqlalchemy.sql.expression import or_ from kallithea.lib.vcs.exceptions import VCSError, NodeNotChangedError @@ -66,52 +65,47 @@ c.lifetime_values.append(extra_values) c.lifetime_options = [(c.lifetime_values, _("Lifetime"))] - @LoginRequired() + @LoginRequired(allow_default_user=True) def index(self): - """GET /admin/gists: All items in the collection""" - # url('gists') - not_default_user = c.authuser.username != User.DEFAULT_USER + not_default_user = not request.authuser.is_default_user c.show_private = request.GET.get('private') and not_default_user c.show_public = request.GET.get('public') and not_default_user - gists = Gist().query()\ - .filter(or_(Gist.gist_expires == -1, Gist.gist_expires >= time.time()))\ + gists = Gist().query() \ + .filter_by(is_expired=False) \ .order_by(Gist.created_on.desc()) # MY private if c.show_private and not c.show_public: - gists = gists.filter(Gist.gist_type == Gist.GIST_PRIVATE)\ - .filter(Gist.gist_owner == c.authuser.user_id) + gists = gists.filter(Gist.gist_type == Gist.GIST_PRIVATE) \ + .filter(Gist.owner_id == request.authuser.user_id) # MY public elif c.show_public and not c.show_private: - gists = gists.filter(Gist.gist_type == Gist.GIST_PUBLIC)\ - .filter(Gist.gist_owner == c.authuser.user_id) + gists = gists.filter(Gist.gist_type == Gist.GIST_PUBLIC) \ + .filter(Gist.owner_id == request.authuser.user_id) # MY public+private elif c.show_private and c.show_public: gists = gists.filter(or_(Gist.gist_type == Gist.GIST_PUBLIC, - Gist.gist_type == Gist.GIST_PRIVATE))\ - .filter(Gist.gist_owner == c.authuser.user_id) + Gist.gist_type == Gist.GIST_PRIVATE)) \ + .filter(Gist.owner_id == request.authuser.user_id) # default show ALL public gists if not c.show_public and not c.show_private: gists = gists.filter(Gist.gist_type == Gist.GIST_PUBLIC) c.gists = gists - p = safe_int(request.GET.get('page', 1), 1) + p = safe_int(request.GET.get('page'), 1) c.gists_pager = Page(c.gists, page=p, items_per_page=10) return render('admin/gists/index.html') @LoginRequired() - @NotAnonymous() def create(self): - """POST /admin/gists: Create a new item""" - # url('gists') self.__load_defaults() gist_form = GistForm([x[0] for x in c.lifetime_values])() try: form_result = gist_form.to_python(dict(request.POST)) - #TODO: multiple files support, from the form + # TODO: multiple files support, from the form filename = form_result['filename'] or Gist.DEFAULT_FILENAME nodes = { filename: { @@ -123,7 +117,7 @@ gist_type = Gist.GIST_PUBLIC if _public else Gist.GIST_PRIVATE gist = GistModel().create( description=form_result['description'], - owner=c.authuser.user_id, + owner=request.authuser.user_id, gist_mapping=nodes, gist_type=gist_type, lifetime=form_result['lifetime'] @@ -144,40 +138,18 @@ except Exception as e: log.error(traceback.format_exc()) h.flash(_('Error occurred during gist creation'), category='error') - return redirect(url('new_gist')) - return redirect(url('gist', gist_id=new_gist_id)) + raise HTTPFound(location=url('new_gist')) + raise HTTPFound(location=url('gist', gist_id=new_gist_id)) @LoginRequired() - @NotAnonymous() def new(self, format='html'): - """GET /admin/gists/new: Form to create a new item""" - # url('new_gist') self.__load_defaults() return render('admin/gists/new.html') @LoginRequired() - @NotAnonymous() - def update(self, gist_id): - """PUT /admin/gists/gist_id: Update an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('gist', gist_id=ID), - # method='put') - # url('gist', gist_id=ID) - - @LoginRequired() - @NotAnonymous() def delete(self, gist_id): - """DELETE /admin/gists/gist_id: Delete an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('gist', gist_id=ID), - # method='delete') - # url('gist', gist_id=ID) gist = GistModel().get_gist(gist_id) - owner = gist.gist_owner == c.authuser.user_id + owner = gist.owner_id == request.authuser.user_id if h.HasPermissionAny('hg.admin')() or owner: GistModel().delete(gist) Session().commit() @@ -185,20 +157,16 @@ else: raise HTTPForbidden() - return redirect(url('gists')) + raise HTTPFound(location=url('gists')) - @LoginRequired() + @LoginRequired(allow_default_user=True) def show(self, gist_id, revision='tip', format='html', f_path=None): - """GET /admin/gists/gist_id: Show a specific item""" - # url('gist', gist_id=ID) c.gist = Gist.get_or_404(gist_id) - #check if this gist is not expired - if c.gist.gist_expires != -1: - if time.time() > c.gist.gist_expires: - log.error('Gist expired at %s', - time_to_datetime(c.gist.gist_expires)) - raise HTTPNotFound() + if c.gist.is_expired: + log.error('Gist expired at %s', + time_to_datetime(c.gist.gist_expires)) + raise HTTPNotFound() try: c.file_changeset, c.files = GistModel().get_gist_files(gist_id, revision=revision) @@ -212,18 +180,13 @@ return render('admin/gists/show.html') @LoginRequired() - @NotAnonymous() def edit(self, gist_id, format='html'): - """GET /admin/gists/gist_id/edit: Form to edit an existing item""" - # url('edit_gist', gist_id=ID) c.gist = Gist.get_or_404(gist_id) - #check if this gist is not expired - if c.gist.gist_expires != -1: - if time.time() > c.gist.gist_expires: - log.error('Gist expired at %s', - time_to_datetime(c.gist.gist_expires)) - raise HTTPNotFound() + if c.gist.is_expired: + log.error('Gist expired at %s', + time_to_datetime(c.gist.gist_expires)) + raise HTTPNotFound() try: c.file_changeset, c.files = GistModel().get_gist_files(gist_id) except VCSError: @@ -270,12 +233,11 @@ h.flash(_('Error occurred during update of gist %s') % gist_id, category='error') - return redirect(url('gist', gist_id=gist_id)) + raise HTTPFound(location=url('gist', gist_id=gist_id)) return rendered @LoginRequired() - @NotAnonymous() @jsonify def check_revision(self, gist_id): c.gist = Gist.get_or_404(gist_id) @@ -283,7 +245,7 @@ success = True revision = request.POST.get('revision') - ##TODO: maybe move this to model ? + # TODO: maybe move this to model ? if revision != last_rev.raw_id: log.error('Last revision %s is different than submitted %s', revision, last_rev) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/my_account.py --- a/kallithea/controllers/admin/my_account.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/my_account.py Thu Jun 07 01:46:02 2018 +0200 @@ -31,17 +31,16 @@ from sqlalchemy import func from formencode import htmlfill -from pylons import request, tmpl_context as c, url -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound -from kallithea import EXTERN_TYPE_INTERNAL +from kallithea.config.routing import url from kallithea.lib import helpers as h from kallithea.lib import auth_modules -from kallithea.lib.auth import LoginRequired, NotAnonymous, AuthUser +from kallithea.lib.auth import LoginRequired, AuthUser from kallithea.lib.base import BaseController, render from kallithea.lib.utils2 import generate_api_key, safe_int -from kallithea.lib.compat import json from kallithea.model.db import Repository, UserEmailMap, User, UserFollowing from kallithea.model.forms import UserForm, PasswordChangeForm from kallithea.model.user import UserModel @@ -60,46 +59,35 @@ # path_prefix='/admin', name_prefix='admin_') @LoginRequired() - @NotAnonymous() - def __before__(self): - super(MyAccountController, self).__before__() + def _before(self, *args, **kwargs): + super(MyAccountController, self)._before(*args, **kwargs) def __load_data(self): - c.user = User.get(self.authuser.user_id) - if c.user.username == User.DEFAULT_USER: + c.user = User.get(request.authuser.user_id) + if c.user.is_default_user: h.flash(_("You can't edit this user since it's" " crucial for entire application"), category='warning') - return redirect(url('users')) - c.EXTERN_TYPE_INTERNAL = EXTERN_TYPE_INTERNAL + raise HTTPFound(location=url('users')) def _load_my_repos_data(self, watched=False): if watched: admin = False - repos_list = [x.follows_repository for x in - Session().query(UserFollowing).filter( - UserFollowing.user_id == - self.authuser.user_id).all()] + repos_list = Session().query(Repository) \ + .join(UserFollowing) \ + .filter(UserFollowing.user_id == + request.authuser.user_id).all() else: admin = True - repos_list = Session().query(Repository)\ - .filter(Repository.user_id == - self.authuser.user_id)\ - .order_by(func.lower(Repository.repo_name)).all() + repos_list = Session().query(Repository) \ + .filter(Repository.owner_id == + request.authuser.user_id).all() - repos_data = RepoModel().get_repos_as_dict(repos_list=repos_list, - admin=admin) - #json used to render the grid - return json.dumps(repos_data) + return RepoModel().get_repos_as_dict(repos_list, admin=admin) def my_account(self): - """ - GET /_admin/my_account Displays info about my account - """ - # url('my_account') c.active = 'profile' self.__load_data() - c.perm_user = AuthUser(user_id=self.authuser.user_id) - c.ip_addr = self.ip_addr + c.perm_user = AuthUser(user_id=request.authuser.user_id) managed_fields = auth_modules.get_managed_fields(c.user) def_user_perms = User.get_default_user().AuthUser.permissions['global'] if 'hg.register.none' in def_user_perms: @@ -111,8 +99,8 @@ update = False if request.POST: _form = UserForm(edit=True, - old_data={'user_id': self.authuser.user_id, - 'email': self.authuser.email})() + old_data={'user_id': request.authuser.user_id, + 'email': request.authuser.email})() form_result = {} try: post_data = dict(request.POST) @@ -124,7 +112,7 @@ 'new_password', 'password_confirmation', ] + managed_fields - UserModel().update(self.authuser.user_id, form_result, + UserModel().update(request.authuser.user_id, form_result, skip_attrs=skip_attrs) h.flash(_('Your account was updated successfully'), category='success') @@ -141,10 +129,10 @@ force_defaults=False) except Exception: log.error(traceback.format_exc()) - h.flash(_('Error occurred during update of user %s') \ + h.flash(_('Error occurred during update of user %s') % form_result.get('username'), category='error') if update: - return redirect('my_account') + raise HTTPFound(location='my_account') return htmlfill.render( render('admin/my_account/my_account.html'), defaults=defaults, @@ -159,10 +147,10 @@ c.can_change_password = 'password' not in managed_fields if request.POST and c.can_change_password: - _form = PasswordChangeForm(self.authuser.username)() + _form = PasswordChangeForm(request.authuser.username)() try: form_result = _form.to_python(request.POST) - UserModel().update(self.authuser.user_id, form_result) + UserModel().update(request.authuser.user_id, form_result) Session().commit() h.flash(_("Successfully updated password"), category='success') except formencode.Invalid as errors: @@ -183,7 +171,7 @@ c.active = 'repos' self.__load_data() - #json used to render the grid + # data used to render the grid c.data = self._load_my_repos_data() return render('admin/my_account/my_account.html') @@ -191,15 +179,14 @@ c.active = 'watched' self.__load_data() - #json used to render the grid + # data used to render the grid c.data = self._load_my_repos_data(watched=True) return render('admin/my_account/my_account.html') def my_account_perms(self): c.active = 'perms' self.__load_data() - c.perm_user = AuthUser(user_id=self.authuser.user_id) - c.ip_addr = self.ip_addr + c.perm_user = AuthUser(user_id=request.authuser.user_id) return render('admin/my_account/my_account.html') @@ -207,7 +194,7 @@ c.active = 'emails' self.__load_data() - c.user_email_map = UserEmailMap.query()\ + c.user_email_map = UserEmailMap.query() \ .filter(UserEmailMap.user == c.user).all() return render('admin/my_account/my_account.html') @@ -215,7 +202,7 @@ email = request.POST.get('new_email') try: - UserModel().add_extra_email(self.authuser.user_id, email) + UserModel().add_extra_email(request.authuser.user_id, email) Session().commit() h.flash(_("Added email %s to user") % email, category='success') except formencode.Invalid as error: @@ -225,15 +212,15 @@ log.error(traceback.format_exc()) h.flash(_('An error occurred during email saving'), category='error') - return redirect(url('my_account_emails')) + raise HTTPFound(location=url('my_account_emails')) def my_account_emails_delete(self): email_id = request.POST.get('del_email_id') user_model = UserModel() - user_model.delete_extra_email(self.authuser.user_id, email_id) + user_model.delete_extra_email(request.authuser.user_id, email_id) Session().commit() h.flash(_("Removed email from user"), category='success') - return redirect(url('my_account_emails')) + raise HTTPFound(location=url('my_account_emails')) def my_account_api_keys(self): c.active = 'api_keys' @@ -247,31 +234,28 @@ (str(60 * 24 * 30), _('1 month')), ] c.lifetime_options = [(c.lifetime_values, _("Lifetime"))] - c.user_api_keys = ApiKeyModel().get_api_keys(self.authuser.user_id, + c.user_api_keys = ApiKeyModel().get_api_keys(request.authuser.user_id, show_expired=show_expired) return render('admin/my_account/my_account.html') def my_account_api_keys_add(self): lifetime = safe_int(request.POST.get('lifetime'), -1) description = request.POST.get('description') - ApiKeyModel().create(self.authuser.user_id, description, lifetime) + ApiKeyModel().create(request.authuser.user_id, description, lifetime) Session().commit() h.flash(_("API key successfully created"), category='success') - return redirect(url('my_account_api_keys')) + raise HTTPFound(location=url('my_account_api_keys')) def my_account_api_keys_delete(self): api_key = request.POST.get('del_api_key') - user_id = self.authuser.user_id if request.POST.get('del_api_key_builtin'): - user = User.get(user_id) - if user is not None: - user.api_key = generate_api_key() - Session().add(user) - Session().commit() - h.flash(_("API key successfully reset"), category='success') + user = User.get(request.authuser.user_id) + user.api_key = generate_api_key() + Session().commit() + h.flash(_("API key successfully reset"), category='success') elif api_key: - ApiKeyModel().delete(api_key, self.authuser.user_id) + ApiKeyModel().delete(api_key, request.authuser.user_id) Session().commit() h.flash(_("API key successfully deleted"), category='success') - return redirect(url('my_account_api_keys')) + raise HTTPFound(location=url('my_account_api_keys')) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/notifications.py --- a/kallithea/controllers/admin/notifications.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/notifications.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,18 +28,17 @@ import logging import traceback -from pylons import request -from pylons import tmpl_context as c -from pylons.controllers.util import abort -from webob.exc import HTTPBadRequest +from tg import request +from tg import tmpl_context as c +from webob.exc import HTTPBadRequest, HTTPForbidden from kallithea.model.db import Notification from kallithea.model.notification import NotificationModel from kallithea.model.meta import Session -from kallithea.lib.auth import LoginRequired, NotAnonymous +from kallithea.lib.auth import LoginRequired from kallithea.lib.base import BaseController, render from kallithea.lib import helpers as h -from kallithea.lib.helpers import Page +from kallithea.lib.page import Page from kallithea.lib.utils2 import safe_int @@ -54,18 +53,15 @@ # path_prefix='/_admin', name_prefix='_admin_') @LoginRequired() - @NotAnonymous() - def __before__(self): - super(NotificationsController, self).__before__() + def _before(self, *args, **kwargs): + super(NotificationsController, self)._before(*args, **kwargs) def index(self, format='html'): - """GET /_admin/notifications: All items in the collection""" - # url('notifications') - c.user = self.authuser - notif = NotificationModel().get_for_user(self.authuser.user_id, + c.user = request.authuser + notif = NotificationModel().query_for_user(request.authuser.user_id, filter_=request.GET.getall('type')) - p = safe_int(request.GET.get('page', 1), 1) + p = safe_int(request.GET.get('page'), 1) c.notifications = Page(notif, page=p, items_per_page=10) c.pull_request_type = Notification.TYPE_PULL_REQUEST c.comment_type = [Notification.TYPE_CHANGESET_COMMENT, @@ -84,38 +80,23 @@ if request.environ.get('HTTP_X_PARTIAL_XHR'): nm = NotificationModel() # mark all read - nm.mark_all_read_for_user(self.authuser.user_id, + nm.mark_all_read_for_user(request.authuser.user_id, filter_=request.GET.getall('type')) Session().commit() - c.user = self.authuser - notif = nm.get_for_user(self.authuser.user_id, - filter_=request.GET.getall('type')) + c.user = request.authuser + notif = nm.query_for_user(request.authuser.user_id, + filter_=request.GET.getall('type')) c.notifications = Page(notif, page=1, items_per_page=10) return render('admin/notifications/notifications_data.html') - def create(self): - """POST /_admin/notifications: Create a new item""" - # url('notifications') - - def new(self, format='html'): - """GET /_admin/notifications/new: Form to create a new item""" - # url('new_notification') - def update(self, notification_id): - """PUT /_admin/notifications/id: Update an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('notification', notification_id=ID), - # method='put') - # url('notification', notification_id=ID) try: no = Notification.get(notification_id) - owner = all(un.user.user_id == c.authuser.user_id + owner = all(un.user_id == request.authuser.user_id for un in no.notifications_to_users) if h.HasPermissionAny('hg.admin')() or owner: # deletes only notification2user - NotificationModel().mark_read(c.authuser.user_id, no) + NotificationModel().mark_read(request.authuser.user_id, no) Session().commit() return 'ok' except Exception: @@ -124,20 +105,13 @@ raise HTTPBadRequest() def delete(self, notification_id): - """DELETE /_admin/notifications/id: Delete an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('notification', notification_id=ID), - # method='delete') - # url('notification', notification_id=ID) try: no = Notification.get(notification_id) - owner = any(un.user.user_id == c.authuser.user_id + owner = any(un.user_id == request.authuser.user_id for un in no.notifications_to_users) if h.HasPermissionAny('hg.admin')() or owner: # deletes only notification2user - NotificationModel().delete(c.authuser.user_id, no) + NotificationModel().delete(request.authuser.user_id, no) Session().commit() return 'ok' except Exception: @@ -146,30 +120,20 @@ raise HTTPBadRequest() def show(self, notification_id, format='html'): - """GET /_admin/notifications/id: Show a specific item""" - # url('notification', notification_id=ID) - c.user = self.authuser - no = Notification.get(notification_id) + notification = Notification.get_or_404(notification_id) - owner = any(un.user.user_id == c.authuser.user_id - for un in no.notifications_to_users) - repo_admin = h.HasRepoPermissionAny('repository.admin') - if no and (h.HasPermissionAny('hg.admin')() or repo_admin or owner): - unotification = NotificationModel()\ - .get_user_notification(c.user.user_id, no) + unotification = NotificationModel() \ + .get_user_notification(request.authuser.user_id, notification) - # if this association to user is not valid, we don't want to show - # this message - if unotification is not None: - if not unotification.read: - unotification.mark_as_read() - Session().commit() - c.notification = no + # if this association to user is not valid, we don't want to show + # this message + if unotification is None: + raise HTTPForbidden() - return render('admin/notifications/show_notification.html') - - return abort(403) + if not unotification.read: + unotification.mark_as_read() + Session().commit() - def edit(self, notification_id, format='html'): - """GET /_admin/notifications/id/edit: Form to edit an existing item""" - # url('edit_notification', notification_id=ID) + c.notification = notification + c.user = request.authuser + return render('admin/notifications/show_notification.html') diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/permissions.py --- a/kallithea/controllers/admin/permissions.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/permissions.py Thu Jun 07 01:46:02 2018 +0200 @@ -31,12 +31,13 @@ import formencode from formencode import htmlfill -from pylons import request, tmpl_context as c, url -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound +from kallithea.config.routing import url from kallithea.lib import helpers as h -from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator +from kallithea.lib.auth import LoginRequired, HasPermissionAnyDecorator from kallithea.lib.base import BaseController, render from kallithea.model.forms import DefaultPermissionsForm from kallithea.model.permission import PermissionModel @@ -53,9 +54,9 @@ # map.resource('permission', 'permissions') @LoginRequired() - @HasPermissionAllDecorator('hg.admin') - def __before__(self): - super(PermissionsController, self).__before__() + @HasPermissionAnyDecorator('hg.admin') + def _before(self, *args, **kwargs): + super(PermissionsController, self)._before(*args, **kwargs) def __load_data(self): c.repo_perms_choices = [('repository.none', _('None'),), @@ -139,7 +140,7 @@ h.flash(_('Error occurred during update of permissions'), category='error') - return redirect(url('admin_permissions')) + raise HTTPFound(location=url('admin_permissions')) c.user = User.get_default_user() defaults = {'anonymous': c.user.active} @@ -184,7 +185,7 @@ def permission_ips(self): c.active = 'ips' c.user = User.get_default_user() - c.user_ip_map = UserIpMap.query()\ + c.user_ip_map = UserIpMap.query() \ .filter(UserIpMap.user == c.user).all() return render('admin/permissions/permissions.html') diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/repo_groups.py --- a/kallithea/controllers/admin/repo_groups.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/repo_groups.py Thu Jun 07 01:46:02 2018 +0200 @@ -32,16 +32,16 @@ from formencode import htmlfill -from pylons import request, tmpl_context as c, url -from pylons.controllers.util import abort, redirect -from pylons.i18n.translation import _, ungettext +from tg import request, tmpl_context as c, app_globals +from tg.i18n import ugettext as _, ungettext +from webob.exc import HTTPFound, HTTPForbidden, HTTPNotFound, HTTPInternalServerError import kallithea +from kallithea.config.routing import url from kallithea.lib import helpers as h -from kallithea.lib.compat import json from kallithea.lib.auth import LoginRequired, \ - HasRepoGroupPermissionAnyDecorator, HasRepoGroupPermissionAll, \ - HasPermissionAll + HasRepoGroupPermissionLevelDecorator, HasRepoGroupPermissionLevel, \ + HasPermissionAny from kallithea.lib.base import BaseController, render from kallithea.model.db import RepoGroup, Repository from kallithea.model.scm import RepoGroupList, AvailableRepoGroupChoices @@ -49,7 +49,6 @@ from kallithea.model.forms import RepoGroupForm, RepoGroupPermsForm from kallithea.model.meta import Session from kallithea.model.repo import RepoModel -from webob.exc import HTTPInternalServerError, HTTPNotFound from kallithea.lib.utils2 import safe_int from sqlalchemy.sql.expression import func @@ -59,24 +58,20 @@ class RepoGroupsController(BaseController): - @LoginRequired() - def __before__(self): - super(RepoGroupsController, self).__before__() + @LoginRequired(allow_default_user=True) + def _before(self, *args, **kwargs): + super(RepoGroupsController, self)._before(*args, **kwargs) def __load_defaults(self, extras=(), exclude=()): """extras is used for keeping current parent ignoring permissions exclude is used for not moving group to itself TODO: also exclude descendants Note: only admin can create top level groups """ - repo_groups = AvailableRepoGroupChoices([], ['group.admin'], extras) + repo_groups = AvailableRepoGroupChoices([], 'admin', extras) exclude_group_ids = set(rg.group_id for rg in exclude) c.repo_groups = [rg for rg in repo_groups if rg[0] not in exclude_group_ids] - repo_model = RepoModel() - c.users_array = repo_model.get_users_js() - c.user_groups_array = repo_model.get_user_groups_js() - def __load_data(self, group_id): """ Load defaults settings for edit, and update @@ -100,24 +95,20 @@ return data def _revoke_perms_on_yourself(self, form_result): - _up = filter(lambda u: c.authuser.username == u[0], + _up = filter(lambda u: request.authuser.username == u[0], form_result['perms_updates']) - _new = filter(lambda u: c.authuser.username == u[0], + _new = filter(lambda u: request.authuser.username == u[0], form_result['perms_new']) if _new and _new[0][1] != 'group.admin' or _up and _up[0][1] != 'group.admin': return True return False def index(self, format='html'): - """GET /repo_groups: All items in the collection""" - # url('repos_groups') - _list = RepoGroup.query()\ - .order_by(func.lower(RepoGroup.group_name))\ - .all() - group_iter = RepoGroupList(_list, perm_set=['group.admin']) + _list = RepoGroup.query(sorted=True).all() + group_iter = RepoGroupList(_list, perm_level='admin') repo_groups_data = [] total_records = len(group_iter) - _tmpl_lookup = kallithea.CONFIG['pylons.app_globals'].mako_lookup + _tmpl_lookup = app_globals.mako_lookup template = _tmpl_lookup.get_template('data_table/_dt_elements.html') repo_group_name = lambda repo_group_name, children_groups: ( @@ -140,25 +131,20 @@ "group_name": repo_group_name(repo_gr.group_name, children_groups), "desc": h.escape(repo_gr.group_description), "repos": repo_count, - "owner": h.person(repo_gr.user), + "owner": h.person(repo_gr.owner), "action": repo_group_actions(repo_gr.group_id, repo_gr.group_name, repo_count) }) - c.data = json.dumps({ - "totalRecords": total_records, - "startIndex": 0, + c.data = { "sort": None, "dir": "asc", "records": repo_groups_data - }) + } return render('admin/repo_groups/repo_groups.html') def create(self): - """POST /repo_groups: Create a new item""" - # url('repos_groups') - self.__load_defaults() # permissions for can create group based on parent_id are checked @@ -169,12 +155,12 @@ gr = RepoGroupModel().create( group_name=form_result['group_name'], group_description=form_result['group_description'], - parent=form_result['group_parent_id'], - owner=self.authuser.user_id, # TODO: make editable + parent=form_result['parent_group_id'], + owner=request.authuser.user_id, # TODO: make editable copy_permissions=form_result['group_copy_permissions'] ) Session().commit() - #TODO: in futureaction_logger(, '', '', '', self.sa) + # TODO: in future action_logger(, '', '', '') except formencode.Invalid as errors: return htmlfill.render( render('admin/repo_groups/repo_group_add.html'), @@ -185,20 +171,18 @@ force_defaults=False) except Exception: log.error(traceback.format_exc()) - h.flash(_('Error occurred during creation of repository group %s') \ + h.flash(_('Error occurred during creation of repository group %s') % request.POST.get('group_name'), category='error') - parent_group_id = form_result['group_parent_id'] - #TODO: maybe we should get back to the main view, not the admin one - return redirect(url('repos_groups', parent_group=parent_group_id)) + parent_group_id = form_result['parent_group_id'] + # TODO: maybe we should get back to the main view, not the admin one + raise HTTPFound(location=url('repos_groups', parent_group=parent_group_id)) h.flash(_('Created repository group %s') % gr.group_name, category='success') - return redirect(url('repos_group_home', group_name=gr.group_name)) + raise HTTPFound(location=url('repos_group_home', group_name=gr.group_name)) def new(self): - """GET /repo_groups/new: Form to create a new item""" - # url('new_repos_group') - if HasPermissionAll('hg.admin')('group create'): - #we're global admin, we're ok and we can create TOP level groups + if HasPermissionAny('hg.admin')('group create'): + # we're global admin, we're ok and we can create TOP level groups pass else: # we pass in parent group into creation form, thus we know @@ -206,31 +190,23 @@ group_id = safe_int(request.GET.get('parent_group')) group = RepoGroup.get(group_id) if group_id else None group_name = group.group_name if group else None - if HasRepoGroupPermissionAll('group.admin')(group_name, 'group create'): + if HasRepoGroupPermissionLevel('admin')(group_name, 'group create'): pass else: - return abort(403) + raise HTTPForbidden() self.__load_defaults() return render('admin/repo_groups/repo_group_add.html') - @HasRepoGroupPermissionAnyDecorator('group.admin') + @HasRepoGroupPermissionLevelDecorator('admin') def update(self, group_name): - """PUT /repo_groups/group_name: Update an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('repos_group', group_name=GROUP_NAME), - # method='put') - # url('repos_group', group_name=GROUP_NAME) - - c.repo_group = RepoGroupModel()._get_repo_group(group_name) + c.repo_group = RepoGroup.guess_instance(group_name) self.__load_defaults(extras=[c.repo_group.parent_group], exclude=[c.repo_group]) # TODO: kill allow_empty_group - it is only used for redundant form validation! - if HasPermissionAll('hg.admin')('group edit'): - #we're global admin, we're ok and we can create TOP level groups + if HasPermissionAny('hg.admin')('group edit'): + # we're global admin, we're ok and we can create TOP level groups allow_empty_group = True elif not c.repo_group.parent_group: allow_empty_group = True @@ -247,13 +223,13 @@ new_gr = RepoGroupModel().update(group_name, form_result) Session().commit() - h.flash(_('Updated repository group %s') \ + h.flash(_('Updated repository group %s') % form_result['group_name'], category='success') # we now have new name ! group_name = new_gr.group_name - #TODO: in future action_logger(, '', '', '', self.sa) + # TODO: in future action_logger(, '', '', '') except formencode.Invalid as errors: - + c.active = 'settings' return htmlfill.render( render('admin/repo_groups/repo_group_edit.html'), defaults=errors.value, @@ -263,48 +239,40 @@ force_defaults=False) except Exception: log.error(traceback.format_exc()) - h.flash(_('Error occurred during update of repository group %s') \ + h.flash(_('Error occurred during update of repository group %s') % request.POST.get('group_name'), category='error') - return redirect(url('edit_repo_group', group_name=group_name)) + raise HTTPFound(location=url('edit_repo_group', group_name=group_name)) - @HasRepoGroupPermissionAnyDecorator('group.admin') + @HasRepoGroupPermissionLevelDecorator('admin') def delete(self, group_name): - """DELETE /repo_groups/group_name: Delete an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('repos_group', group_name=GROUP_NAME), - # method='delete') - # url('repos_group', group_name=GROUP_NAME) - - gr = c.repo_group = RepoGroupModel()._get_repo_group(group_name) + gr = c.repo_group = RepoGroup.guess_instance(group_name) repos = gr.repositories.all() if repos: h.flash(_('This group contains %s repositories and cannot be ' 'deleted') % len(repos), category='warning') - return redirect(url('repos_groups')) + raise HTTPFound(location=url('repos_groups')) children = gr.children.all() if children: h.flash(_('This group contains %s subgroups and cannot be deleted' % (len(children))), category='warning') - return redirect(url('repos_groups')) + raise HTTPFound(location=url('repos_groups')) try: RepoGroupModel().delete(group_name) Session().commit() h.flash(_('Removed repository group %s') % group_name, category='success') - #TODO: in future action_logger(, '', '', '', self.sa) + # TODO: in future action_logger(, '', '', '') except Exception: log.error(traceback.format_exc()) h.flash(_('Error occurred during deletion of repository group %s') % group_name, category='error') if gr.parent_group: - return redirect(url('repos_group_home', group_name=gr.parent_group.group_name)) - return redirect(url('repos_groups')) + raise HTTPFound(location=url('repos_group_home', group_name=gr.parent_group.group_name)) + raise HTTPFound(location=url('repos_groups')) def show_by_name(self, group_name): """ @@ -317,42 +285,27 @@ return self.show(group_name) raise HTTPNotFound - @HasRepoGroupPermissionAnyDecorator('group.read', 'group.write', - 'group.admin') + @HasRepoGroupPermissionLevelDecorator('read') def show(self, group_name): - """GET /repo_groups/group_name: Show a specific item""" - # url('repos_group', group_name=GROUP_NAME) c.active = 'settings' - c.group = c.repo_group = RepoGroupModel()._get_repo_group(group_name) - c.group_repos = c.group.repositories.all() + c.group = c.repo_group = RepoGroup.guess_instance(group_name) - #overwrite our cached list with current filter - c.repo_cnt = 0 - - groups = RepoGroup.query().order_by(RepoGroup.group_name)\ - .filter(RepoGroup.group_parent_id == c.group.group_id).all() - c.groups = self.scm_model.get_repo_groups(groups) + groups = RepoGroup.query(sorted=True).filter_by(parent_group=c.group).all() + repo_groups_list = self.scm_model.get_repo_groups(groups) - c.repos_list = Repository.query()\ - .filter(Repository.group_id == c.group.group_id)\ - .order_by(func.lower(Repository.repo_name))\ - .all() - - repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, - admin=False) - #json used to render the grid - c.data = json.dumps(repos_data) + repos_list = Repository.query(sorted=True).filter_by(group=c.group).all() + c.data = RepoModel().get_repos_as_dict(repos_list, + repo_groups_list=repo_groups_list, + short_name=True) return render('admin/repo_groups/repo_group_show.html') - @HasRepoGroupPermissionAnyDecorator('group.admin') + @HasRepoGroupPermissionLevelDecorator('admin') def edit(self, group_name): - """GET /repo_groups/group_name/edit: Form to edit an existing item""" - # url('edit_repo_group', group_name=GROUP_NAME) c.active = 'settings' - c.repo_group = RepoGroupModel()._get_repo_group(group_name) + c.repo_group = RepoGroup.guess_instance(group_name) self.__load_defaults(extras=[c.repo_group.parent_group], exclude=[c.repo_group]) defaults = self.__load_data(c.repo_group.group_id) @@ -364,21 +317,17 @@ force_defaults=False ) - @HasRepoGroupPermissionAnyDecorator('group.admin') + @HasRepoGroupPermissionLevelDecorator('admin') def edit_repo_group_advanced(self, group_name): - """GET /repo_groups/group_name/edit: Form to edit an existing item""" - # url('edit_repo_group', group_name=GROUP_NAME) c.active = 'advanced' - c.repo_group = RepoGroupModel()._get_repo_group(group_name) + c.repo_group = RepoGroup.guess_instance(group_name) return render('admin/repo_groups/repo_group_edit.html') - @HasRepoGroupPermissionAnyDecorator('group.admin') + @HasRepoGroupPermissionLevelDecorator('admin') def edit_repo_group_perms(self, group_name): - """GET /repo_groups/group_name/edit: Form to edit an existing item""" - # url('edit_repo_group', group_name=GROUP_NAME) c.active = 'perms' - c.repo_group = RepoGroupModel()._get_repo_group(group_name) + c.repo_group = RepoGroup.guess_instance(group_name) self.__load_defaults() defaults = self.__load_data(c.repo_group.group_id) @@ -389,7 +338,7 @@ force_defaults=False ) - @HasRepoGroupPermissionAnyDecorator('group.admin') + @HasRepoGroupPermissionLevelDecorator('admin') def update_perms(self, group_name): """ Update permissions for given repository group @@ -397,14 +346,14 @@ :param group_name: """ - c.repo_group = RepoGroupModel()._get_repo_group(group_name) + c.repo_group = RepoGroup.guess_instance(group_name) valid_recursive_choices = ['none', 'repos', 'groups', 'all'] form_result = RepoGroupPermsForm(valid_recursive_choices)().to_python(request.POST) - if not c.authuser.is_admin: + if not request.authuser.is_admin: if self._revoke_perms_on_yourself(form_result): msg = _('Cannot revoke permission for yourself as admin') h.flash(msg, category='warning') - return redirect(url('edit_repo_group_perms', group_name=group_name)) + raise HTTPFound(location=url('edit_repo_group_perms', group_name=group_name)) recursive = form_result['recursive'] # iterate over all members(if in recursive mode) of this groups and # set the permissions ! @@ -413,20 +362,15 @@ form_result['perms_new'], form_result['perms_updates'], recursive) - #TODO: implement this - #action_logger(self.authuser, 'admin_changed_repo_permissions', - # repo_name, self.ip_addr, self.sa) + # TODO: implement this + #action_logger(request.authuser, 'admin_changed_repo_permissions', + # repo_name, request.ip_addr) Session().commit() h.flash(_('Repository group permissions updated'), category='success') - return redirect(url('edit_repo_group_perms', group_name=group_name)) + raise HTTPFound(location=url('edit_repo_group_perms', group_name=group_name)) - @HasRepoGroupPermissionAnyDecorator('group.admin') + @HasRepoGroupPermissionLevelDecorator('admin') def delete_perms(self, group_name): - """ - DELETE an existing repository group permission user - - :param group_name: - """ try: obj_type = request.POST.get('obj_type') obj_id = None @@ -435,8 +379,8 @@ elif obj_type == 'user_group': obj_id = safe_int(request.POST.get('user_group_id')) - if not c.authuser.is_admin: - if obj_type == 'user' and c.authuser.user_id == obj_id: + if not request.authuser.is_admin: + if obj_type == 'user' and request.authuser.user_id == obj_id: msg = _('Cannot revoke permission for yourself as admin') h.flash(msg, category='warning') raise Exception('revoke admin permission on self') diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/repos.py --- a/kallithea/controllers/admin/repos.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/repos.py Thu Jun 07 01:46:02 2018 +0200 @@ -29,26 +29,24 @@ import traceback import formencode from formencode import htmlfill -from webob.exc import HTTPInternalServerError, HTTPForbidden, HTTPNotFound -from pylons import request, tmpl_context as c, url -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c +from tg.i18n import ugettext as _ from sqlalchemy.sql.expression import func +from webob.exc import HTTPFound, HTTPInternalServerError, HTTPForbidden, HTTPNotFound +from kallithea.config.routing import url from kallithea.lib import helpers as h from kallithea.lib.auth import LoginRequired, \ - HasRepoPermissionAllDecorator, NotAnonymous, HasPermissionAny, \ - HasRepoPermissionAnyDecorator -from kallithea.lib.base import BaseRepoController, render -from kallithea.lib.utils import action_logger, jsonify + HasRepoPermissionLevelDecorator, NotAnonymous, HasPermissionAny +from kallithea.lib.base import BaseRepoController, render, jsonify +from kallithea.lib.utils import action_logger from kallithea.lib.vcs import RepositoryError from kallithea.model.meta import Session -from kallithea.model.db import User, Repository, UserFollowing, RepoGroup,\ +from kallithea.model.db import User, Repository, UserFollowing, RepoGroup, \ Setting, RepositoryField from kallithea.model.forms import RepoForm, RepoFieldForm, RepoPermsForm from kallithea.model.scm import ScmModel, AvailableRepoGroupChoices, RepoList from kallithea.model.repo import RepoModel -from kallithea.lib.compat import json from kallithea.lib.exceptions import AttachedForksError from kallithea.lib.utils2 import safe_int @@ -62,81 +60,68 @@ # file has a resource setup: # map.resource('repo', 'repos') - @LoginRequired() - def __before__(self): - super(ReposController, self).__before__() + @LoginRequired(allow_default_user=True) + def _before(self, *args, **kwargs): + super(ReposController, self)._before(*args, **kwargs) - def _load_repo(self, repo_name): - repo_obj = Repository.get_by_repo_name(repo_name) + def _load_repo(self): + repo_obj = c.db_repo if repo_obj is None: - h.not_mapped_error(repo_name) - return redirect(url('repos')) + h.not_mapped_error(c.repo_name) + raise HTTPFound(location=url('repos')) return repo_obj def __load_defaults(self, repo=None): top_perms = ['hg.create.repository'] - repo_group_perms = ['group.admin'] if HasPermissionAny('hg.create.write_on_repogroup.true')(): - repo_group_perms.append('group.write') + repo_group_perm_level = 'write' + else: + repo_group_perm_level = 'admin' extras = [] if repo is None else [repo.group] - c.repo_groups = AvailableRepoGroupChoices(top_perms, repo_group_perms, extras) + c.repo_groups = AvailableRepoGroupChoices(top_perms, repo_group_perm_level, extras) c.landing_revs_choices, c.landing_revs = ScmModel().get_repo_landing_revs(repo) - def __load_data(self, repo_name=None): + def __load_data(self): """ Load defaults settings for edit, and update - - :param repo_name: """ - c.repo_info = self._load_repo(repo_name) + c.repo_info = self._load_repo() self.__load_defaults(c.repo_info) - defaults = RepoModel()._get_defaults(repo_name) + defaults = RepoModel()._get_defaults(c.repo_name) defaults['clone_uri'] = c.repo_info.clone_uri_hidden # don't show password return defaults def index(self, format='html'): - """GET /repos: All items in the collection""" - # url('repos') - _list = Repository.query()\ - .order_by(func.lower(Repository.repo_name))\ - .all() + _list = Repository.query(sorted=True).all() - c.repos_list = RepoList(_list, perm_set=['repository.admin']) - repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, - admin=True, - super_user_actions=True) - #json used to render the grid - c.data = json.dumps(repos_data) + c.repos_list = RepoList(_list, perm_level='admin') + # the repo list will be filtered to only show repos where the user has read permissions + repos_data = RepoModel().get_repos_as_dict(c.repos_list, admin=True) + # data used to render the grid + c.data = repos_data return render('admin/repos/repos.html') @NotAnonymous() def create(self): - """ - POST /repos: Create a new item""" - # url('repos') - self.__load_defaults() form_result = {} - task_id = None try: # CanWriteGroup validators checks permissions of this POST form_result = RepoForm(repo_groups=c.repo_groups, - landing_revs=c.landing_revs_choices)()\ + landing_revs=c.landing_revs_choices)() \ .to_python(dict(request.POST)) # create is done sometimes async on celery, db transaction # management is handled there. - task = RepoModel().create(form_result, self.authuser.user_id) - from celery.result import BaseAsyncResult - if isinstance(task, BaseAsyncResult): - task_id = task.task_id + task = RepoModel().create(form_result, request.authuser.user_id) + task_id = task.task_id except formencode.Invalid as errors: log.info(errors) return htmlfill.render( @@ -152,15 +137,14 @@ msg = (_('Error creating repository %s') % form_result.get('repo_name')) h.flash(msg, category='error') - return redirect(url('home')) + raise HTTPFound(location=url('home')) - return redirect(h.url('repo_creating_home', + raise HTTPFound(location=h.url('repo_creating_home', repo_name=form_result['repo_name_full'], task_id=task_id)) @NotAnonymous() def create_repository(self): - """GET /_admin/create_repository: Form to create a new item""" self.__load_defaults() if not c.repo_groups: raise HTTPForbidden @@ -184,7 +168,6 @@ force_defaults=False) @LoginRequired() - @NotAnonymous() def repo_creating(self, repo_name): c.repo = repo_name c.task_id = request.GET.get('task_id') @@ -193,7 +176,6 @@ return render('admin/repos/repo_creating.html') @LoginRequired() - @NotAnonymous() @jsonify def repo_check(self, repo_name): c.repo = repo_name @@ -201,9 +183,9 @@ if task_id and task_id not in ['None']: from kallithea import CELERY_ON - from celery.result import AsyncResult + from kallithea.lib import celerypylons if CELERY_ON: - task = AsyncResult(task_id) + task = celerypylons.result.AsyncResult(task_id) if task.failed(): raise HTTPInternalServerError(task.traceback) @@ -227,20 +209,12 @@ return {'result': True} return {'result': False} - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def update(self, repo_name): - """ - PUT /repos/repo_name: Update an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('put_repo', repo_name=ID), - # method='put') - # url('put_repo', repo_name=ID) - c.repo_info = self._load_repo(repo_name) + c.repo_info = self._load_repo() self.__load_defaults(c.repo_info) c.active = 'settings' - c.repo_fields = RepositoryField.query()\ + c.repo_fields = RepositoryField.query() \ .filter(RepositoryField.repository == c.repo_info).all() repo_model = RepoModel() @@ -262,14 +236,13 @@ h.flash(_('Repository %s updated successfully') % repo_name, category='success') changed_name = repo.repo_name - action_logger(self.authuser, 'admin_updated_repo', - changed_name, self.ip_addr, self.sa) + action_logger(request.authuser, 'admin_updated_repo', + changed_name, request.ip_addr) Session().commit() except formencode.Invalid as errors: log.info(errors) - defaults = self.__load_data(repo_name) + defaults = self.__load_data() defaults.update(errors.value) - c.users_array = repo_model.get_users_js() return htmlfill.render( render('admin/repos/repo_edit.html'), defaults=defaults, @@ -280,26 +253,17 @@ except Exception: log.error(traceback.format_exc()) - h.flash(_('Error occurred during update of repository %s') \ + h.flash(_('Error occurred during update of repository %s') % repo_name, category='error') - return redirect(url('edit_repo', repo_name=changed_name)) + raise HTTPFound(location=url('edit_repo', repo_name=changed_name)) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def delete(self, repo_name): - """ - DELETE /repos/repo_name: Delete an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('delete_repo', repo_name=ID), - # method='delete') - # url('delete_repo', repo_name=ID) - repo_model = RepoModel() repo = repo_model.get_by_repo_name(repo_name) if not repo: h.not_mapped_error(repo_name) - return redirect(url('repos')) + raise HTTPFound(location=url('repos')) try: _forks = repo.forks.count() handle_forks = None @@ -312,8 +276,8 @@ handle_forks = 'delete' h.flash(_('Deleted %s forks') % _forks, category='success') repo_model.delete(repo, forks=handle_forks) - action_logger(self.authuser, 'admin_deleted_repo', - repo_name, self.ip_addr, self.sa) + action_logger(request.authuser, 'admin_deleted_repo', + repo_name, request.ip_addr) ScmModel().mark_for_invalidation(repo_name) h.flash(_('Deleted repository %s') % repo_name, category='success') Session().commit() @@ -327,18 +291,14 @@ category='error') if repo.group: - return redirect(url('repos_group_home', group_name=repo.group.group_name)) - return redirect(url('repos')) + raise HTTPFound(location=url('repos_group_home', group_name=repo.group.group_name)) + raise HTTPFound(location=url('repos')) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit(self, repo_name): - """GET /repo_name/settings: Form to edit an existing item""" - # url('edit_repo', repo_name=ID) - defaults = self.__load_data(repo_name) - c.repo_fields = RepositoryField.query()\ + defaults = self.__load_data() + c.repo_fields = RepositoryField.query() \ .filter(RepositoryField.repository == c.repo_info).all() - repo_model = RepoModel() - c.users_array = repo_model.get_users_js() c.active = 'settings' return htmlfill.render( render('admin/repos/repo_edit.html'), @@ -346,14 +306,9 @@ encoding="UTF-8", force_defaults=False) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_permissions(self, repo_name): - """GET /repo_name/settings: Form to edit an existing item""" - # url('edit_repo', repo_name=ID) - c.repo_info = self._load_repo(repo_name) - repo_model = RepoModel() - c.users_array = repo_model.get_users_js() - c.user_groups_array = repo_model.get_user_groups_js() + c.repo_info = self._load_repo() c.active = 'permissions' defaults = RepoModel()._get_defaults(repo_name) @@ -363,19 +318,19 @@ encoding="UTF-8", force_defaults=False) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_permissions_update(self, repo_name): form = RepoPermsForm()().to_python(request.POST) RepoModel()._update_permissions(repo_name, form['perms_new'], form['perms_updates']) - #TODO: implement this - #action_logger(self.authuser, 'admin_changed_repo_permissions', - # repo_name, self.ip_addr, self.sa) + # TODO: implement this + #action_logger(request.authuser, 'admin_changed_repo_permissions', + # repo_name, request.ip_addr) Session().commit() h.flash(_('Repository permissions updated'), category='success') - return redirect(url('edit_repo_perms', repo_name=repo_name)) + raise HTTPFound(location=url('edit_repo_perms', repo_name=repo_name)) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_permissions_revoke(self, repo_name): try: obj_type = request.POST.get('obj_type') @@ -391,9 +346,9 @@ RepoModel().revoke_user_group_permission( repo=repo_name, group_name=obj_id ) - #TODO: implement this - #action_logger(self.authuser, 'admin_revoked_repo_permissions', - # repo_name, self.ip_addr, self.sa) + # TODO: implement this + #action_logger(request.authuser, 'admin_revoked_repo_permissions', + # repo_name, request.ip_addr) Session().commit() except Exception: log.error(traceback.format_exc()) @@ -401,20 +356,18 @@ category='error') raise HTTPInternalServerError() - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_fields(self, repo_name): - """GET /repo_name/settings: Form to edit an existing item""" - # url('edit_repo', repo_name=ID) - c.repo_info = self._load_repo(repo_name) - c.repo_fields = RepositoryField.query()\ + c.repo_info = self._load_repo() + c.repo_fields = RepositoryField.query() \ .filter(RepositoryField.repository == c.repo_info).all() c.active = 'fields' if request.POST: - return redirect(url('repo_edit_fields')) + raise HTTPFound(location=url('repo_edit_fields')) return render('admin/repos/repo_edit.html') - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def create_repo_field(self, repo_name): try: form_result = RepoFieldForm()().to_python(dict(request.POST)) @@ -427,15 +380,14 @@ new_field.field_label = form_result['new_field_label'] Session().add(new_field) Session().commit() + except formencode.Invalid as e: + h.flash(_('Field validation error: %s') % e.msg, category='error') except Exception as e: log.error(traceback.format_exc()) - msg = _('An error occurred during creation of field') - if isinstance(e, formencode.Invalid): - msg += ". " + e.msg - h.flash(msg, category='error') - return redirect(url('edit_repo_fields', repo_name=repo_name)) + h.flash(_('An error occurred during creation of field: %r') % e, category='error') + raise HTTPFound(location=url('edit_repo_fields', repo_name=repo_name)) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def delete_repo_field(self, repo_name, field_id): field = RepositoryField.get_or_404(field_id) try: @@ -445,39 +397,37 @@ log.error(traceback.format_exc()) msg = _('An error occurred during removal of field') h.flash(msg, category='error') - return redirect(url('edit_repo_fields', repo_name=repo_name)) + raise HTTPFound(location=url('edit_repo_fields', repo_name=repo_name)) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_advanced(self, repo_name): - """GET /repo_name/settings: Form to edit an existing item""" - # url('edit_repo', repo_name=ID) - c.repo_info = self._load_repo(repo_name) + c.repo_info = self._load_repo() c.default_user_id = User.get_default_user().user_id - c.in_public_journal = UserFollowing.query()\ - .filter(UserFollowing.user_id == c.default_user_id)\ + c.in_public_journal = UserFollowing.query() \ + .filter(UserFollowing.user_id == c.default_user_id) \ .filter(UserFollowing.follows_repository == c.repo_info).scalar() - _repos = Repository.query().order_by(Repository.repo_name).all() - read_access_repos = RepoList(_repos) + _repos = Repository.query(sorted=True).all() + read_access_repos = RepoList(_repos, perm_level='read') c.repos_list = [(None, _('-- Not a fork --'))] c.repos_list += [(x.repo_id, x.repo_name) for x in read_access_repos if x.repo_id != c.repo_info.repo_id] defaults = { - 'id_fork_of': c.repo_info.fork.repo_id if c.repo_info.fork else '' + 'id_fork_of': c.repo_info.fork_id if c.repo_info.fork_id else '' } c.active = 'advanced' if request.POST: - return redirect(url('repo_edit_advanced')) + raise HTTPFound(location=url('repo_edit_advanced')) return htmlfill.render( render('admin/repos/repo_edit.html'), defaults=defaults, encoding="UTF-8", force_defaults=False) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_advanced_journal(self, repo_name): """ Sets this repository to be visible in public journal, @@ -497,10 +447,9 @@ h.flash(_('An error occurred during setting this' ' repository in public journal'), category='error') - return redirect(url('edit_repo_advanced', repo_name=repo_name)) + raise HTTPFound(location=url('edit_repo_advanced', repo_name=repo_name)) - - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_advanced_fork(self, repo_name): """ Mark given repository as a fork of another @@ -510,7 +459,7 @@ try: fork_id = request.POST.get('id_fork_of') repo = ScmModel().mark_as_fork(repo_name, fork_id, - self.authuser.username) + request.authuser.username) fork = repo.fork.repo_name if repo.fork else _('Nothing') Session().commit() h.flash(_('Marked repository %s as fork of %s') % (repo_name, fork), @@ -523,9 +472,9 @@ h.flash(_('An error occurred during this operation'), category='error') - return redirect(url('edit_repo_advanced', repo_name=repo_name)) + raise HTTPFound(location=url('edit_repo_advanced', repo_name=repo_name)) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_advanced_locking(self, repo_name): """ Unlock repository when it is locked ! @@ -535,7 +484,7 @@ try: repo = Repository.get_by_repo_name(repo_name) if request.POST.get('set_lock'): - Repository.lock(repo, c.authuser.user_id) + Repository.lock(repo, request.authuser.user_id) h.flash(_('Repository has been locked'), category='success') elif request.POST.get('set_unlock'): Repository.unlock(repo) @@ -544,16 +493,10 @@ log.error(traceback.format_exc()) h.flash(_('An error occurred during unlocking'), category='error') - return redirect(url('edit_repo_advanced', repo_name=repo_name)) + raise HTTPFound(location=url('edit_repo_advanced', repo_name=repo_name)) - @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') + @HasRepoPermissionLevelDecorator('write') def toggle_locking(self, repo_name): - """ - Toggle locking of repository by simple GET call to url - - :param repo_name: - """ - try: repo = Repository.get_by_repo_name(repo_name) @@ -562,24 +505,22 @@ Repository.unlock(repo) h.flash(_('Repository has been unlocked'), category='success') else: - Repository.lock(repo, c.authuser.user_id) + Repository.lock(repo, request.authuser.user_id) h.flash(_('Repository has been locked'), category='success') except Exception as e: log.error(traceback.format_exc()) h.flash(_('An error occurred during unlocking'), category='error') - return redirect(url('summary_home', repo_name=repo_name)) + raise HTTPFound(location=url('summary_home', repo_name=repo_name)) - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_caches(self, repo_name): - """GET /repo_name/settings: Form to edit an existing item""" - # url('edit_repo', repo_name=ID) - c.repo_info = self._load_repo(repo_name) + c.repo_info = self._load_repo() c.active = 'caches' if request.POST: try: - ScmModel().mark_for_invalidation(repo_name, delete=True) + ScmModel().mark_for_invalidation(repo_name) Session().commit() h.flash(_('Cache invalidation successful'), category='success') @@ -588,31 +529,27 @@ h.flash(_('An error occurred during cache invalidation'), category='error') - return redirect(url('edit_repo_caches', repo_name=c.repo_name)) + raise HTTPFound(location=url('edit_repo_caches', repo_name=c.repo_name)) return render('admin/repos/repo_edit.html') - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_remote(self, repo_name): - """GET /repo_name/settings: Form to edit an existing item""" - # url('edit_repo', repo_name=ID) - c.repo_info = self._load_repo(repo_name) + c.repo_info = self._load_repo() c.active = 'remote' if request.POST: try: - ScmModel().pull_changes(repo_name, self.authuser.username) + ScmModel().pull_changes(repo_name, request.authuser.username) h.flash(_('Pulled from remote location'), category='success') except Exception as e: log.error(traceback.format_exc()) h.flash(_('An error occurred during pull from remote location'), category='error') - return redirect(url('edit_repo_remote', repo_name=c.repo_name)) + raise HTTPFound(location=url('edit_repo_remote', repo_name=c.repo_name)) return render('admin/repos/repo_edit.html') - @HasRepoPermissionAllDecorator('repository.admin') + @HasRepoPermissionLevelDecorator('admin') def edit_statistics(self, repo_name): - """GET /repo_name/settings: Form to edit an existing item""" - # url('edit_repo', repo_name=ID) - c.repo_info = self._load_repo(repo_name) + c.repo_info = self._load_repo() repo = c.repo_info.scm_instance if c.repo_info.stats: @@ -638,6 +575,6 @@ log.error(traceback.format_exc()) h.flash(_('An error occurred during deletion of repository stats'), category='error') - return redirect(url('edit_repo_statistics', repo_name=c.repo_name)) + raise HTTPFound(location=url('edit_repo_statistics', repo_name=c.repo_name)) return render('admin/repos/repo_edit.html') diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/settings.py --- a/kallithea/controllers/admin/settings.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/settings.py Thu Jun 07 01:46:02 2018 +0200 @@ -30,16 +30,18 @@ import formencode from formencode import htmlfill -from pylons import request, tmpl_context as c, url, config -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c, config +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound +from kallithea.config.routing import url from kallithea.lib import helpers as h -from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator +from kallithea.lib.auth import LoginRequired, HasPermissionAnyDecorator from kallithea.lib.base import BaseController, render -from kallithea.lib.celerylib import tasks, run_task +from kallithea.lib.celerylib import tasks from kallithea.lib.exceptions import HgsubversionImportError from kallithea.lib.utils import repo2db_mapper, set_app_settings +from kallithea.lib.vcs import VCSError from kallithea.model.db import Ui, Repository, Setting from kallithea.model.forms import ApplicationSettingsForm, \ ApplicationUiSettingsForm, ApplicationVisualisationForm @@ -57,38 +59,30 @@ # map.resource('setting', 'settings', controller='admin/settings', # path_prefix='/admin', name_prefix='admin_') - @LoginRequired() - def __before__(self): - super(SettingsController, self).__before__() + @LoginRequired(allow_default_user=True) + def _before(self, *args, **kwargs): + super(SettingsController, self)._before(*args, **kwargs) def _get_hg_ui_settings(self): ret = Ui.query().all() - if not ret: - raise Exception('Could not get application ui settings !') settings = {} for each in ret: - k = each.ui_key + k = each.ui_section + '_' + each.ui_key v = each.ui_value - if k == '/': - k = 'root_path' + if k == 'paths_/': + k = 'paths_root_path' - if k == 'push_ssl': - v = str2bool(v) - - if k.find('.') != -1: - k = k.replace('.', '_') + k = k.replace('.', '_') if each.ui_section in ['hooks', 'extensions']: v = each.ui_active - settings[each.ui_section + '_' + k] = v + settings[k] = v return settings - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def settings_vcs(self): - """GET /admin/settings: All items in the collection""" - # url('admin_settings') c.active = 'vcs' if request.POST: application_form = ApplicationUiSettingsForm()() @@ -104,66 +98,37 @@ force_defaults=False) try: - sett = Ui.get_by_key('push_ssl') - sett.ui_value = form_result['web_push_ssl'] - Session().add(sett) if c.visual.allow_repo_location_change: - sett = Ui.get_by_key('/') + sett = Ui.get_by_key('paths', '/') sett.ui_value = form_result['paths_root_path'] - Session().add(sett) - #HOOKS - sett = Ui.get_by_key(Ui.HOOK_UPDATE) + # HOOKS + sett = Ui.get_by_key('hooks', Ui.HOOK_UPDATE) sett.ui_active = form_result['hooks_changegroup_update'] - Session().add(sett) - sett = Ui.get_by_key(Ui.HOOK_REPO_SIZE) + sett = Ui.get_by_key('hooks', Ui.HOOK_REPO_SIZE) sett.ui_active = form_result['hooks_changegroup_repo_size'] - Session().add(sett) - sett = Ui.get_by_key(Ui.HOOK_PUSH) + sett = Ui.get_by_key('hooks', Ui.HOOK_PUSH_LOG) sett.ui_active = form_result['hooks_changegroup_push_logger'] - Session().add(sett) - sett = Ui.get_by_key(Ui.HOOK_PULL) + sett = Ui.get_by_key('hooks', Ui.HOOK_PULL_LOG) sett.ui_active = form_result['hooks_outgoing_pull_logger'] - Session().add(sett) - ## EXTENSIONS - sett = Ui.get_by_key('largefiles') - if not sett: - #make one if it's not there ! - sett = Ui() - sett.ui_key = 'largefiles' - sett.ui_section = 'extensions' + sett = Ui.get_or_create('extensions', 'largefiles') sett.ui_active = form_result['extensions_largefiles'] - Session().add(sett) - sett = Ui.get_by_key('hgsubversion') - if not sett: - #make one if it's not there ! - sett = Ui() - sett.ui_key = 'hgsubversion' - sett.ui_section = 'extensions' - + sett = Ui.get_or_create('extensions', 'hgsubversion') sett.ui_active = form_result['extensions_hgsubversion'] if sett.ui_active: try: import hgsubversion # pragma: no cover except ImportError: raise HgsubversionImportError - Session().add(sett) -# sett = Ui.get_by_key('hggit') -# if not sett: -# #make one if it's not there ! -# sett = Ui() -# sett.ui_key = 'hggit' -# sett.ui_section = 'extensions' -# +# sett = Ui.get_or_create('extensions', 'hggit') # sett.ui_active = form_result['extensions_hggit'] -# Session().add(sett) Session().commit() @@ -189,15 +154,13 @@ encoding="UTF-8", force_defaults=False) - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def settings_mapping(self): - """GET /admin/settings/mapping: All items in the collection""" - # url('admin_settings_mapping') c.active = 'mapping' if request.POST: rm_obsolete = request.POST.get('destroy', False) install_git_hooks = request.POST.get('hooks', False) - overwrite_git_hooks = request.POST.get('hooks_overwrite', False); + overwrite_git_hooks = request.POST.get('hooks_overwrite', False) invalidate_cache = request.POST.get('invalidate', False) log.debug('rescanning repo location with destroy obsolete=%s, ' 'install git hooks=%s and ' @@ -206,7 +169,7 @@ filesystem_repos = ScmModel().repo_scan() added, removed = repo2db_mapper(filesystem_repos, rm_obsolete, install_git_hooks=install_git_hooks, - user=c.authuser.username, + user=request.authuser.username, overwrite_git_hooks=overwrite_git_hooks) h.flash(h.literal(_('Repositories successfully rescanned. Added: %s. Removed: %s.') % (', '.join(h.link_to(safe_unicode(repo_name), h.url('summary_home', repo_name=repo_name)) @@ -217,15 +180,15 @@ if invalidate_cache: log.debug('invalidating all repositories cache') i = 0 - for repo in Repository.get_all(): + for repo in Repository.query(): try: - ScmModel().mark_for_invalidation(repo.repo_name, delete=True) + ScmModel().mark_for_invalidation(repo.repo_name) i += 1 except VCSError as e: log.warning('VCS error invalidating %s: %s', repo.repo_name, e) h.flash(_('Invalidated %s repositories') % i, category='success') - return redirect(url('admin_settings_mapping')) + raise HTTPFound(location=url('admin_settings_mapping')) defaults = Setting.get_app_settings() defaults.update(self._get_hg_ui_settings()) @@ -236,10 +199,8 @@ encoding="UTF-8", force_defaults=False) - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def settings_global(self): - """GET /admin/settings/global: All items in the collection""" - # url('admin_settings_global') c.active = 'global' if request.POST: application_form = ApplicationSettingsForm()() @@ -255,25 +216,14 @@ force_defaults=False) try: - sett1 = Setting.create_or_update('title', - form_result['title']) - Session().add(sett1) - - sett2 = Setting.create_or_update('realm', - form_result['realm']) - Session().add(sett2) - - sett3 = Setting.create_or_update('ga_code', - form_result['ga_code']) - Session().add(sett3) - - sett4 = Setting.create_or_update('captcha_public_key', - form_result['captcha_public_key']) - Session().add(sett4) - - sett5 = Setting.create_or_update('captcha_private_key', - form_result['captcha_private_key']) - Session().add(sett5) + for setting in ( + 'title', + 'realm', + 'ga_code', + 'captcha_public_key', + 'captcha_private_key', + ): + Setting.create_or_update(setting, form_result[setting]) Session().commit() set_app_settings(config) @@ -285,7 +235,7 @@ 'application settings'), category='error') - return redirect(url('admin_settings_global')) + raise HTTPFound(location=url('admin_settings_global')) defaults = Setting.get_app_settings() defaults.update(self._get_hg_ui_settings()) @@ -296,10 +246,8 @@ encoding="UTF-8", force_defaults=False) - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def settings_visual(self): - """GET /admin/settings/visual: All items in the collection""" - # url('admin_settings_visual') c.active = 'visual' if request.POST: application_form = ApplicationVisualisationForm()() @@ -318,7 +266,7 @@ settings = [ ('show_public_icon', 'show_public_icon', 'bool'), ('show_private_icon', 'show_private_icon', 'bool'), - ('stylify_metatags', 'stylify_metatags', 'bool'), + ('stylify_metalabels', 'stylify_metalabels', 'bool'), ('repository_fields', 'repository_fields', 'bool'), ('dashboard_items', 'dashboard_items', 'int'), ('admin_grid_items', 'admin_grid_items', 'int'), @@ -328,9 +276,7 @@ ('clone_uri_tmpl', 'clone_uri_tmpl', 'unicode'), ] for setting, form_key, type_ in settings: - sett = Setting.create_or_update(setting, - form_result[form_key], type_) - Session().add(sett) + Setting.create_or_update(setting, form_result[form_key], type_) Session().commit() set_app_settings(config) @@ -343,7 +289,7 @@ 'visualisation settings'), category='error') - return redirect(url('admin_settings_visual')) + raise HTTPFound(location=url('admin_settings_visual')) defaults = Setting.get_app_settings() defaults.update(self._get_hg_ui_settings()) @@ -354,10 +300,8 @@ encoding="UTF-8", force_defaults=False) - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def settings_email(self): - """GET /admin/settings/email: All items in the collection""" - # url('admin_settings_email') c.active = 'email' if request.POST: test_email = request.POST.get('test_email') @@ -366,22 +310,22 @@ 'Kallithea version: %s' % c.kallithea_version) if not test_email: h.flash(_('Please enter email address'), category='error') - return redirect(url('admin_settings_email')) + raise HTTPFound(location=url('admin_settings_email')) - test_email_txt_body = EmailNotificationModel()\ + test_email_txt_body = EmailNotificationModel() \ .get_email_tmpl(EmailNotificationModel.TYPE_DEFAULT, 'txt', body=test_body) - test_email_html_body = EmailNotificationModel()\ + test_email_html_body = EmailNotificationModel() \ .get_email_tmpl(EmailNotificationModel.TYPE_DEFAULT, 'html', body=test_body) recipients = [test_email] if test_email else None - run_task(tasks.send_email, recipients, test_email_subj, - test_email_txt_body, test_email_html_body) + tasks.send_email(recipients, test_email_subj, + test_email_txt_body, test_email_html_body) h.flash(_('Send email task created'), category='success') - return redirect(url('admin_settings_email')) + raise HTTPFound(location=url('admin_settings_email')) defaults = Setting.get_app_settings() defaults.update(self._get_hg_ui_settings()) @@ -395,10 +339,8 @@ encoding="UTF-8", force_defaults=False) - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def settings_hooks(self): - """GET /admin/settings/hooks: All items in the collection""" - # url('admin_settings_hooks') c.active = 'hooks' if request.POST: if c.visual.allow_custom_hooks_settings: @@ -409,7 +351,11 @@ try: ui_key = ui_key and ui_key.strip() - if ui_value and ui_key: + if ui_key in (x.ui_key for x in Ui.get_custom_hooks()): + h.flash(_('Hook already exists'), category='error') + elif ui_key in (x.ui_key for x in Ui.get_builtin_hooks()): + h.flash(_('Builtin hooks are read-only. Please use another hook name.'), category='error') + elif ui_value and ui_key: Ui.create_or_update_hook(ui_key, ui_value) h.flash(_('Added new hook'), category='success') elif hook_id: @@ -419,10 +365,12 @@ # check for edits update = False _d = request.POST.dict_of_lists() - for k, v in zip(_d.get('hook_ui_key', []), - _d.get('hook_ui_value_new', [])): - Ui.create_or_update_hook(k, v) - update = True + for k, v, ov in zip(_d.get('hook_ui_key', []), + _d.get('hook_ui_value_new', []), + _d.get('hook_ui_value', [])): + if v != ov: + Ui.create_or_update_hook(k, v) + update = True if update: h.flash(_('Updated hooks'), category='success') @@ -432,7 +380,7 @@ h.flash(_('Error occurred during hook creation'), category='error') - return redirect(url('admin_settings_hooks')) + raise HTTPFound(location=url('admin_settings_hooks')) defaults = Setting.get_app_settings() defaults.update(self._get_hg_ui_settings()) @@ -446,17 +394,15 @@ encoding="UTF-8", force_defaults=False) - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def settings_search(self): - """GET /admin/settings/search: All items in the collection""" - # url('admin_settings_search') c.active = 'search' if request.POST: repo_location = self._get_hg_ui_settings()['paths_root_path'] full_index = request.POST.get('full_index', False) - run_task(tasks.whoosh_index, repo_location, full_index) + tasks.whoosh_index(repo_location, full_index) h.flash(_('Whoosh reindex task scheduled'), category='success') - return redirect(url('admin_settings_search')) + raise HTTPFound(location=url('admin_settings_search')) defaults = Setting.get_app_settings() defaults.update(self._get_hg_ui_settings()) @@ -467,10 +413,8 @@ encoding="UTF-8", force_defaults=False) - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def settings_system(self): - """GET /admin/settings/system: All items in the collection""" - # url('admin_settings_system') c.active = 'system' defaults = Setting.get_app_settings() @@ -489,10 +433,8 @@ encoding="UTF-8", force_defaults=False) - @HasPermissionAllDecorator('hg.admin') + @HasPermissionAnyDecorator('hg.admin') def settings_system_update(self): - """GET /admin/settings/system/updates: All items in the collection""" - # url('admin_settings_system_update') import json import urllib2 from kallithea.lib.verlib import NormalizedVersion @@ -503,7 +445,7 @@ _update_url = defaults.get('update_url', '') _update_url = "" # FIXME: disabled - _err = lambda s: '
%s
' % (s) + _err = lambda s: '
%s
' % (s) try: import kallithea ver = kallithea.__version__ diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/user_groups.py --- a/kallithea/controllers/admin/user_groups.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/user_groups.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.controllers.admin.user_groups ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -User Groups crud controller for pylons +User Groups crud controller This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: @@ -30,21 +30,22 @@ import formencode from formencode import htmlfill -from pylons import request, tmpl_context as c, url, config -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c, config, app_globals +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound from sqlalchemy.orm import joinedload from sqlalchemy.sql.expression import func from webob.exc import HTTPInternalServerError import kallithea +from kallithea.config.routing import url from kallithea.lib import helpers as h from kallithea.lib.exceptions import UserGroupsAssignedException, \ RepoGroupAssignmentError from kallithea.lib.utils2 import safe_unicode, safe_int from kallithea.lib.auth import LoginRequired, \ - HasUserGroupPermissionAnyDecorator, HasPermissionAnyDecorator + HasUserGroupPermissionLevelDecorator, HasPermissionAnyDecorator from kallithea.lib.base import BaseController, render from kallithea.model.scm import UserGroupList from kallithea.model.user_group import UserGroupModel @@ -55,7 +56,6 @@ CustomDefaultPermissionsForm from kallithea.model.meta import Session from kallithea.lib.utils import action_logger -from kallithea.lib.compat import json log = logging.getLogger(__name__) @@ -63,9 +63,9 @@ class UserGroupsController(BaseController): """REST Controller styled on the Atom Publishing Protocol""" - @LoginRequired() - def __before__(self): - super(UserGroupsController, self).__before__() + @LoginRequired(allow_default_user=True) + def _before(self, *args, **kwargs): + super(UserGroupsController, self)._before(*args, **kwargs) c.available_permissions = config['available_permissions'] def __load_data(self, user_group_id): @@ -88,15 +88,13 @@ return data def index(self, format='html'): - """GET /users_groups: All items in the collection""" - # url('users_groups') - _list = UserGroup.query()\ - .order_by(func.lower(UserGroup.users_group_name))\ + _list = UserGroup.query() \ + .order_by(func.lower(UserGroup.users_group_name)) \ .all() - group_iter = UserGroupList(_list, perm_set=['usergroup.admin']) + group_iter = UserGroupList(_list, perm_level='admin') user_groups_data = [] total_records = len(group_iter) - _tmpl_lookup = kallithea.CONFIG['pylons.app_globals'].mako_lookup + _tmpl_lookup = app_globals.mako_lookup template = _tmpl_lookup.get_template('data_table/_dt_elements.html') user_group_name = lambda user_group_id, user_group_name: ( @@ -116,37 +114,32 @@ "desc": h.escape(user_gr.user_group_description), "members": len(user_gr.members), "active": h.boolicon(user_gr.users_group_active), - "owner": h.person(user_gr.user.username), + "owner": h.person(user_gr.owner.username), "action": user_group_actions(user_gr.users_group_id, user_gr.users_group_name) }) - c.data = json.dumps({ - "totalRecords": total_records, - "startIndex": 0, + c.data = { "sort": None, "dir": "asc", "records": user_groups_data - }) + } return render('admin/user_groups/user_groups.html') @HasPermissionAnyDecorator('hg.admin', 'hg.usergroup.create.true') def create(self): - """POST /users_groups: Create a new item""" - # url('users_groups') - users_group_form = UserGroupForm()() try: form_result = users_group_form.to_python(dict(request.POST)) ug = UserGroupModel().create(name=form_result['users_group_name'], description=form_result['user_group_description'], - owner=self.authuser.user_id, + owner=request.authuser.user_id, active=form_result['users_group_active']) gr = form_result['users_group_name'] - action_logger(self.authuser, + action_logger(request.authuser, 'admin_created_users_group:%s' % gr, - None, self.ip_addr, self.sa) + None, request.ip_addr) h.flash(h.literal(_('Created user group %s') % h.link_to(h.escape(gr), url('edit_users_group', id=ug.users_group_id))), category='success') Session().commit() @@ -160,27 +153,17 @@ force_defaults=False) except Exception: log.error(traceback.format_exc()) - h.flash(_('Error occurred during creation of user group %s') \ + h.flash(_('Error occurred during creation of user group %s') % request.POST.get('users_group_name'), category='error') - return redirect(url('users_groups')) + raise HTTPFound(location=url('users_groups')) @HasPermissionAnyDecorator('hg.admin', 'hg.usergroup.create.true') def new(self, format='html'): - """GET /user_groups/new: Form to create a new item""" - # url('new_users_group') return render('admin/user_groups/user_group_add.html') - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def update(self, id): - """PUT /user_groups/id: Update an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('users_group', id=ID), - # method='put') - # url('users_group', id=ID) - c.user_group = UserGroup.get_or_404(id) c.active = 'settings' self.__load_data(id) @@ -195,9 +178,9 @@ form_result = users_group_form.to_python(request.POST) UserGroupModel().update(c.user_group, form_result) gr = form_result['users_group_name'] - action_logger(self.authuser, + action_logger(request.authuser, 'admin_updated_users_group:%s' % gr, - None, self.ip_addr, self.sa) + None, request.ip_addr) h.flash(_('Updated user group %s') % gr, category='success') Session().commit() except formencode.Invalid as errors: @@ -209,7 +192,6 @@ 'hg.create.repository'), 'fork_repo_perm': ug_model.has_perm(id, 'hg.fork.repository'), - '_method': 'put' }) return htmlfill.render( @@ -221,20 +203,13 @@ force_defaults=False) except Exception: log.error(traceback.format_exc()) - h.flash(_('Error occurred during update of user group %s') \ + h.flash(_('Error occurred during update of user group %s') % request.POST.get('users_group_name'), category='error') - return redirect(url('edit_users_group', id=id)) + raise HTTPFound(location=url('edit_users_group', id=id)) - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def delete(self, id): - """DELETE /user_groups/id: Delete an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('users_group', id=ID), - # method='delete') - # url('users_group', id=ID) usr_gr = UserGroup.get_or_404(id) try: UserGroupModel().delete(usr_gr) @@ -246,17 +221,10 @@ log.error(traceback.format_exc()) h.flash(_('An error occurred during deletion of user group'), category='error') - return redirect(url('users_groups')) - - def show(self, id, format='html'): - """GET /user_groups/id: Show a specific item""" - # url('users_group', id=ID) + raise HTTPFound(location=url('users_groups')) - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def edit(self, id, format='html'): - """GET /user_groups/id/edit: Form to edit an existing item""" - # url('edit_users_group', id=ID) - c.user_group = UserGroup.get_or_404(id) c.active = 'settings' self.__load_data(id) @@ -270,15 +238,11 @@ force_defaults=False ) - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def edit_perms(self, id): c.user_group = UserGroup.get_or_404(id) c.active = 'perms' - repo_model = RepoModel() - c.users_array = repo_model.get_users_js() - c.user_groups_array = repo_model.get_user_groups_js() - defaults = {} # fill user group users for p in c.user_group.user_user_group_to_perm: @@ -296,7 +260,7 @@ force_defaults=False ) - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def update_perms(self, id): """ grant permission for given usergroup @@ -312,21 +276,16 @@ form['perms_updates']) except RepoGroupAssignmentError: h.flash(_('Target group cannot be the same'), category='error') - return redirect(url('edit_user_group_perms', id=id)) - #TODO: implement this - #action_logger(self.authuser, 'admin_changed_repo_permissions', - # repo_name, self.ip_addr, self.sa) + raise HTTPFound(location=url('edit_user_group_perms', id=id)) + # TODO: implement this + #action_logger(request.authuser, 'admin_changed_repo_permissions', + # repo_name, request.ip_addr) Session().commit() h.flash(_('User group permissions updated'), category='success') - return redirect(url('edit_user_group_perms', id=id)) + raise HTTPFound(location=url('edit_user_group_perms', id=id)) - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def delete_perms(self, id): - """ - DELETE an existing repository group permission user - - :param group_name: - """ try: obj_type = request.POST.get('obj_type') obj_id = None @@ -335,8 +294,8 @@ elif obj_type == 'user_group': obj_id = safe_int(request.POST.get('user_group_id')) - if not c.authuser.is_admin: - if obj_type == 'user' and c.authuser.user_id == obj_id: + if not request.authuser.is_admin: + if obj_type == 'user' and request.authuser.user_id == obj_id: msg = _('Cannot revoke permission for yourself as admin') h.flash(msg, category='warning') raise Exception('revoke admin permission on self') @@ -353,7 +312,7 @@ category='error') raise HTTPInternalServerError() - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def edit_default_perms(self, id): c.user_group = UserGroup.get_or_404(id) c.active = 'default_perms' @@ -362,20 +321,20 @@ 'repositories': {}, 'repositories_groups': {} } - ugroup_repo_perms = UserGroupRepoToPerm.query()\ - .options(joinedload(UserGroupRepoToPerm.permission))\ - .options(joinedload(UserGroupRepoToPerm.repository))\ - .filter(UserGroupRepoToPerm.users_group_id == id)\ + ugroup_repo_perms = UserGroupRepoToPerm.query() \ + .options(joinedload(UserGroupRepoToPerm.permission)) \ + .options(joinedload(UserGroupRepoToPerm.repository)) \ + .filter(UserGroupRepoToPerm.users_group_id == id) \ .all() for gr in ugroup_repo_perms: permissions['repositories'][gr.repository.repo_name] \ = gr.permission.permission_name - ugroup_group_perms = UserGroupRepoGroupToPerm.query()\ - .options(joinedload(UserGroupRepoGroupToPerm.permission))\ - .options(joinedload(UserGroupRepoGroupToPerm.group))\ - .filter(UserGroupRepoGroupToPerm.users_group_id == id)\ + ugroup_group_perms = UserGroupRepoGroupToPerm.query() \ + .options(joinedload(UserGroupRepoGroupToPerm.permission)) \ + .options(joinedload(UserGroupRepoGroupToPerm.group)) \ + .filter(UserGroupRepoGroupToPerm.users_group_id == id) \ .all() for gr in ugroup_group_perms: @@ -402,11 +361,8 @@ force_defaults=False ) - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def update_default_perms(self, id): - """PUT /users_perm/id: Update an existing item""" - # url('users_group_perm', id=ID, method='put') - user_group = UserGroup.get_or_404(id) try: @@ -415,11 +371,10 @@ inherit_perms = form_result['inherit_default_permissions'] user_group.inherit_default_permissions = inherit_perms - Session().add(user_group) usergroup_model = UserGroupModel() - defs = UserGroupToPerm.query()\ - .filter(UserGroupToPerm.users_group == user_group)\ + defs = UserGroupToPerm.query() \ + .filter(UserGroupToPerm.users_group == user_group) \ .all() for ug in defs: Session().delete(ug) @@ -444,9 +399,9 @@ h.flash(_('An error occurred during permissions saving'), category='error') - return redirect(url('edit_user_group_default_perms', id=id)) + raise HTTPFound(location=url('edit_user_group_default_perms', id=id)) - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def edit_advanced(self, id): c.user_group = UserGroup.get_or_404(id) c.active = 'advanced' @@ -454,8 +409,7 @@ key=lambda u: u.username.lower()) return render('admin/user_groups/user_group_edit.html') - - @HasUserGroupPermissionAnyDecorator('usergroup.admin') + @HasUserGroupPermissionLevelDecorator('admin') def edit_members(self, id): c.user_group = UserGroup.get_or_404(id) c.active = 'members' diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/admin/users.py --- a/kallithea/controllers/admin/users.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/admin/users.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.controllers.admin.users ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Users crud controller for pylons +Users crud controller This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: @@ -30,20 +30,19 @@ import formencode from formencode import htmlfill -from pylons import request, tmpl_context as c, url, config -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c, config, app_globals +from tg.i18n import ugettext as _ from sqlalchemy.sql.expression import func -from webob.exc import HTTPNotFound +from webob.exc import HTTPFound, HTTPNotFound import kallithea +from kallithea.config.routing import url from kallithea.lib.exceptions import DefaultUserException, \ UserOwnsReposException, UserCreationError from kallithea.lib import helpers as h -from kallithea.lib.auth import LoginRequired, HasPermissionAllDecorator, \ +from kallithea.lib.auth import LoginRequired, HasPermissionAnyDecorator, \ AuthUser from kallithea.lib import auth_modules -from kallithea.lib.auth_modules import auth_internal from kallithea.lib.base import BaseController, render from kallithea.model.api_key import ApiKeyModel @@ -52,7 +51,6 @@ from kallithea.model.user import UserModel from kallithea.model.meta import Session from kallithea.lib.utils import action_logger -from kallithea.lib.compat import json from kallithea.lib.utils2 import datetime_to_time, safe_int, generate_api_key log = logging.getLogger(__name__) @@ -62,24 +60,20 @@ """REST Controller styled on the Atom Publishing Protocol""" @LoginRequired() - @HasPermissionAllDecorator('hg.admin') - def __before__(self): - super(UsersController, self).__before__() + @HasPermissionAnyDecorator('hg.admin') + def _before(self, *args, **kwargs): + super(UsersController, self)._before(*args, **kwargs) c.available_permissions = config['available_permissions'] - c.EXTERN_TYPE_INTERNAL = kallithea.EXTERN_TYPE_INTERNAL def index(self, format='html'): - """GET /users: All items in the collection""" - # url('users') - - c.users_list = User.query().order_by(User.username)\ - .filter(User.username != User.DEFAULT_USER)\ - .order_by(func.lower(User.username))\ + c.users_list = User.query().order_by(User.username) \ + .filter_by(is_default_user=False) \ + .order_by(func.lower(User.username)) \ .all() users_data = [] total_records = len(c.users_list) - _tmpl_lookup = kallithea.CONFIG['pylons.app_globals'].mako_lookup + _tmpl_lookup = app_globals.mako_lookup template = _tmpl_lookup.get_template('data_table/_dt_elements.html') grav_tmpl = '
%s
' @@ -108,30 +102,25 @@ "action": user_actions(user.user_id, user.username), }) - c.data = json.dumps({ - "totalRecords": total_records, - "startIndex": 0, + c.data = { "sort": None, "dir": "asc", "records": users_data - }) + } return render('admin/users/users.html') def create(self): - """POST /users: Create a new item""" - # url('users') - c.default_extern_type = auth_internal.KallitheaAuthPlugin.name - c.default_extern_name = auth_internal.KallitheaAuthPlugin.name + c.default_extern_type = User.DEFAULT_AUTH_TYPE + c.default_extern_name = '' user_model = UserModel() user_form = UserForm()() try: form_result = user_form.to_python(dict(request.POST)) user = user_model.create(form_result) - usr = form_result['username'] - action_logger(self.authuser, 'admin_created_user:%s' % usr, - None, self.ip_addr, self.sa) - h.flash(h.literal(_('Created user %s') % h.link_to(h.escape(usr), url('edit_user', id=user.user_id))), + action_logger(request.authuser, 'admin_created_user:%s' % user.username, + None, request.ip_addr) + h.flash(_('Created user %s') % user.username, category='success') Session().commit() except formencode.Invalid as errors: @@ -146,25 +135,16 @@ h.flash(e, 'error') except Exception: log.error(traceback.format_exc()) - h.flash(_('Error occurred during creation of user %s') \ + h.flash(_('Error occurred during creation of user %s') % request.POST.get('username'), category='error') - return redirect(url('users')) + raise HTTPFound(location=url('edit_user', id=user.user_id)) def new(self, format='html'): - """GET /users/new: Form to create a new item""" - # url('new_user') - c.default_extern_type = auth_internal.KallitheaAuthPlugin.name - c.default_extern_name = auth_internal.KallitheaAuthPlugin.name + c.default_extern_type = User.DEFAULT_AUTH_TYPE + c.default_extern_name = '' return render('admin/users/user_add.html') def update(self, id): - """PUT /users/id: Update an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('update_user', id=ID), - # method='put') - # url('user', id=ID) user_model = UserModel() user = user_model.get(id) _form = UserForm(edit=True, old_data={'user_id': id, @@ -177,8 +157,8 @@ user_model.update(id, form_result, skip_attrs=skip_attrs) usr = form_result['username'] - action_logger(self.authuser, 'admin_updated_user:%s' % usr, - None, self.ip_addr, self.sa) + action_logger(request.authuser, 'admin_updated_user:%s' % usr, + None, request.ip_addr) h.flash(_('User updated successfully'), category='success') Session().commit() except formencode.Invalid as errors: @@ -188,7 +168,6 @@ 'create_repo_perm': user_model.has_perm(id, 'hg.create.repository'), 'fork_repo_perm': user_model.has_perm(id, 'hg.fork.repository'), - '_method': 'put' }) return htmlfill.render( self._render_edit_profile(user), @@ -199,18 +178,11 @@ force_defaults=False) except Exception: log.error(traceback.format_exc()) - h.flash(_('Error occurred during update of user %s') \ + h.flash(_('Error occurred during update of user %s') % form_result.get('username'), category='error') - return redirect(url('edit_user', id=id)) + raise HTTPFound(location=url('edit_user', id=id)) def delete(self, id): - """DELETE /users/id: Delete an existing item""" - # Forms posted to this method should contain a hidden field: - # - # Or using helpers: - # h.form(url('delete_user', id=ID), - # method='delete') - # url('user', id=ID) usr = User.get_or_404(id) try: UserModel().delete(usr) @@ -222,12 +194,7 @@ log.error(traceback.format_exc()) h.flash(_('An error occurred during deletion of user'), category='error') - return redirect(url('users')) - - def show(self, id, format='html'): - """GET /users/id: Show a specific item""" - # url('user', id=ID) - User.get_or_404(-1) + raise HTTPFound(location=url('users')) def _get_user_or_raise_if_default(self, id): try: @@ -240,14 +207,11 @@ c.user = user c.active = 'profile' c.perm_user = AuthUser(dbuser=user) - c.ip_addr = self.ip_addr managed_fields = auth_modules.get_managed_fields(user) c.readonly = lambda n: 'readonly' if n in managed_fields else None return render('admin/users/user_edit.html') def edit(self, id, format='html'): - """GET /users/id/edit: Form to edit an existing item""" - # url('edit_user', id=ID) user = self._get_user_or_raise_if_default(id) defaults = user.get_dict() @@ -260,8 +224,7 @@ def edit_advanced(self, id): c.user = self._get_user_or_raise_if_default(id) c.active = 'advanced' - c.perm_user = AuthUser(user_id=id) - c.ip_addr = self.ip_addr + c.perm_user = AuthUser(dbuser=c.user) umodel = UserModel() defaults = c.user.get_dict() @@ -306,25 +269,22 @@ ApiKeyModel().create(c.user.user_id, description, lifetime) Session().commit() h.flash(_("API key successfully created"), category='success') - return redirect(url('edit_user_api_keys', id=c.user.user_id)) + raise HTTPFound(location=url('edit_user_api_keys', id=c.user.user_id)) def delete_api_key(self, id): c.user = self._get_user_or_raise_if_default(id) api_key = request.POST.get('del_api_key') if request.POST.get('del_api_key_builtin'): - user = User.get(c.user.user_id) - if user is not None: - user.api_key = generate_api_key() - Session().add(user) - Session().commit() - h.flash(_("API key successfully reset"), category='success') + c.user.api_key = generate_api_key() + Session().commit() + h.flash(_("API key successfully reset"), category='success') elif api_key: ApiKeyModel().delete(api_key, c.user.user_id) Session().commit() h.flash(_("API key successfully deleted"), category='success') - return redirect(url('edit_user_api_keys', id=c.user.user_id)) + raise HTTPFound(location=url('edit_user_api_keys', id=c.user.user_id)) def update_account(self, id): pass @@ -332,8 +292,7 @@ def edit_perms(self, id): c.user = self._get_user_or_raise_if_default(id) c.active = 'perms' - c.perm_user = AuthUser(user_id=id) - c.ip_addr = self.ip_addr + c.perm_user = AuthUser(dbuser=c.user) umodel = UserModel() defaults = c.user.get_dict() @@ -350,8 +309,6 @@ force_defaults=False) def update_perms(self, id): - """PUT /users_perm/id: Update an existing item""" - # url('user_perm', id=ID, method='put') user = self._get_user_or_raise_if_default(id) try: @@ -360,11 +317,10 @@ inherit_perms = form_result['inherit_default_permissions'] user.inherit_default_permissions = inherit_perms - Session().add(user) user_model = UserModel() - defs = UserToPerm.query()\ - .filter(UserToPerm.user == user)\ + defs = UserToPerm.query() \ + .filter(UserToPerm.user == user) \ .all() for ug in defs: Session().delete(ug) @@ -387,12 +343,12 @@ log.error(traceback.format_exc()) h.flash(_('An error occurred during permissions saving'), category='error') - return redirect(url('edit_user_perms', id=id)) + raise HTTPFound(location=url('edit_user_perms', id=id)) def edit_emails(self, id): c.user = self._get_user_or_raise_if_default(id) c.active = 'emails' - c.user_email_map = UserEmailMap.query()\ + c.user_email_map = UserEmailMap.query() \ .filter(UserEmailMap.user == c.user).all() defaults = c.user.get_dict() @@ -403,8 +359,6 @@ force_defaults=False) def add_email(self, id): - """POST /user_emails:Add an existing item""" - # url('user_emails', id=ID, method='put') user = self._get_user_or_raise_if_default(id) email = request.POST.get('new_email') user_model = UserModel() @@ -420,27 +374,25 @@ log.error(traceback.format_exc()) h.flash(_('An error occurred during email saving'), category='error') - return redirect(url('edit_user_emails', id=id)) + raise HTTPFound(location=url('edit_user_emails', id=id)) def delete_email(self, id): - """DELETE /user_emails_delete/id: Delete an existing item""" - # url('user_emails_delete', id=ID, method='delete') user = self._get_user_or_raise_if_default(id) email_id = request.POST.get('del_email_id') user_model = UserModel() user_model.delete_extra_email(id, email_id) Session().commit() h.flash(_("Removed email from user"), category='success') - return redirect(url('edit_user_emails', id=id)) + raise HTTPFound(location=url('edit_user_emails', id=id)) def edit_ips(self, id): c.user = self._get_user_or_raise_if_default(id) c.active = 'ips' - c.user_ip_map = UserIpMap.query()\ + c.user_ip_map = UserIpMap.query() \ .filter(UserIpMap.user == c.user).all() c.inherit_default_ips = c.user.inherit_default_permissions - c.default_user_ip_map = UserIpMap.query()\ + c.default_user_ip_map = UserIpMap.query() \ .filter(UserIpMap.user == User.get_default_user()).all() defaults = c.user.get_dict() @@ -451,9 +403,6 @@ force_defaults=False) def add_ip(self, id): - """POST /user_ips:Add an existing item""" - # url('user_ips', id=ID, method='put') - ip = request.POST.get('new_ip') user_model = UserModel() @@ -470,12 +419,10 @@ category='error') if 'default_user' in request.POST: - return redirect(url('admin_permissions_ips')) - return redirect(url('edit_user_ips', id=id)) + raise HTTPFound(location=url('admin_permissions_ips')) + raise HTTPFound(location=url('edit_user_ips', id=id)) def delete_ip(self, id): - """DELETE /user_ips_delete/id: Delete an existing item""" - # url('user_ips_delete', id=ID, method='delete') ip_id = request.POST.get('del_ip_id') user_model = UserModel() user_model.delete_extra_ip(id, ip_id) @@ -483,5 +430,5 @@ h.flash(_("Removed IP address from user whitelist"), category='success') if 'default_user' in request.POST: - return redirect(url('admin_permissions_ips')) - return redirect(url('edit_user_ips', id=id)) + raise HTTPFound(location=url('admin_permissions_ips')) + raise HTTPFound(location=url('edit_user_ips', id=id)) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/api/__init__.py --- a/kallithea/controllers/api/__init__.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/api/__init__.py Thu Jun 07 01:46:02 2018 +0200 @@ -30,15 +30,15 @@ import types import traceback import time +import itertools -from paste.response import replace_header -from pylons.controllers import WSGIController +from tg import Response, response, request, TGController -from webob.exc import HTTPError +from webob.exc import HTTPError, HTTPException, WSGIHTTPException from kallithea.model.db import User from kallithea.model import meta -from kallithea.lib.compat import izip_longest, json +from kallithea.lib.compat import json from kallithea.lib.auth import AuthUser from kallithea.lib.base import _get_ip_addr as _get_ip, _get_access_path from kallithea.lib.utils2 import safe_unicode, safe_str @@ -56,23 +56,20 @@ return safe_str(self.message) -def jsonrpc_error(message, retid=None, code=None): +class JSONRPCErrorResponse(Response, HTTPException): """ Generate a Response object with a JSON-RPC error body + """ - :param code: - :param retid: - :param message: - """ - from pylons.controllers.util import Response - return Response( - body=json.dumps(dict(id=retid, result=None, error=message)), - status=code, - content_type='application/json' - ) + def __init__(self, message=None, retid=None, code=None): + HTTPException.__init__(self, message, self) + Response.__init__(self, + json_body=dict(id=retid, result=None, error=message), + status=code, + content_type='application/json') -class JSONRPCController(WSGIController): +class JSONRPCController(TGController): """ A WSGI-speaking JSON-RPC controller class @@ -96,32 +93,30 @@ """ return self._rpc_args - def __call__(self, environ, start_response): + def _dispatch(self, state, remainder=None): """ Parse the request body as JSON, look up the method on the controller and if it exists, dispatch to it. """ - try: - return self._handle_request(environ, start_response) - finally: - meta.Session.remove() + # Since we are here we should respond as JSON + response.content_type = 'application/json' - def _handle_request(self, environ, start_response): + environ = state.request.environ start = time.time() - ip_addr = self.ip_addr = self._get_ip_addr(environ) + ip_addr = request.ip_addr = self._get_ip_addr(environ) self._req_id = None if 'CONTENT_LENGTH' not in environ: log.debug("No Content-Length") - return jsonrpc_error(retid=self._req_id, - message="No Content-Length in request") + raise JSONRPCErrorResponse(retid=self._req_id, + message="No Content-Length in request") else: length = environ['CONTENT_LENGTH'] or 0 length = int(environ['CONTENT_LENGTH']) log.debug('Content-Length: %s', length) if length == 0: - return jsonrpc_error(retid=self._req_id, - message="Content-Length is 0") + raise JSONRPCErrorResponse(retid=self._req_id, + message="Content-Length is 0") raw_body = environ['wsgi.input'].read(length) @@ -129,9 +124,9 @@ json_body = json.loads(raw_body) except ValueError as e: # catch JSON errors Here - return jsonrpc_error(retid=self._req_id, - message="JSON parse error ERR:%s RAW:%r" - % (e, raw_body)) + raise JSONRPCErrorResponse(retid=self._req_id, + message="JSON parse error ERR:%s RAW:%r" + % (e, raw_body)) # check AUTH based on API key try: @@ -142,38 +137,36 @@ if not isinstance(self._request_params, dict): self._request_params = {} - log.debug( - 'method: %s, params: %s', self._req_method, - self._request_params - ) + log.debug('method: %s, params: %s', + self._req_method, self._request_params) except KeyError as e: - return jsonrpc_error(retid=self._req_id, - message='Incorrect JSON query missing %s' % e) + raise JSONRPCErrorResponse(retid=self._req_id, + message='Incorrect JSON query missing %s' % e) # check if we can find this session using api_key try: u = User.get_by_api_key(self._req_api_key) if u is None: - return jsonrpc_error(retid=self._req_id, - message='Invalid API key') + raise JSONRPCErrorResponse(retid=self._req_id, + message='Invalid API key') auth_u = AuthUser(dbuser=u) if not AuthUser.check_ip_allowed(auth_u, ip_addr): - return jsonrpc_error(retid=self._req_id, - message='request from IP:%s not allowed' % (ip_addr,)) + raise JSONRPCErrorResponse(retid=self._req_id, + message='request from IP:%s not allowed' % (ip_addr,)) else: log.info('Access for IP:%s allowed', ip_addr) except Exception as e: - return jsonrpc_error(retid=self._req_id, - message='Invalid API key') + raise JSONRPCErrorResponse(retid=self._req_id, + message='Invalid API key') self._error = None try: self._func = self._find_method() except AttributeError as e: - return jsonrpc_error(retid=self._req_id, - message=str(e)) + raise JSONRPCErrorResponse(retid=self._req_id, + message=str(e)) # now that we have a method, add self._req_params to # self.kargs and dispatch control to WGIController @@ -183,26 +176,18 @@ default_empty = types.NotImplementedType # kw arguments required by this method - func_kwargs = dict(izip_longest(reversed(arglist), reversed(defaults), - fillvalue=default_empty)) + func_kwargs = dict(itertools.izip_longest(reversed(arglist), reversed(defaults), + fillvalue=default_empty)) # this is little trick to inject logged in user for # perms decorators to work they expect the controller class to have # authuser attribute set - self.authuser = auth_u + request.authuser = request.user = auth_u # This attribute will need to be first param of a method that uses # api_key, which is translated to instance of user at that name USER_SESSION_ATTR = 'apiuser' - if USER_SESSION_ATTR not in arglist: - return jsonrpc_error( - retid=self._req_id, - message='This method [%s] does not support ' - 'authentication (missing %s param)' % ( - self._func.__name__, USER_SESSION_ATTR) - ) - # get our arglist and check if we provided them as args for arg, default in func_kwargs.iteritems(): if arg == USER_SESSION_ATTR: @@ -213,47 +198,40 @@ # skip the required param check if it's default value is # NotImplementedType (default_empty) if default == default_empty and arg not in self._request_params: - return jsonrpc_error( + raise JSONRPCErrorResponse( retid=self._req_id, - message=( - 'Missing non optional `%s` arg in JSON DATA' % arg - ) + message='Missing non optional `%s` arg in JSON DATA' % arg, ) - self._rpc_args = {USER_SESSION_ATTR: u} + extra = set(self._request_params).difference(func_kwargs) + if extra: + raise JSONRPCErrorResponse( + retid=self._req_id, + message='Unknown %s arg in JSON DATA' % + ', '.join('`%s`' % arg for arg in extra), + ) + self._rpc_args = {} self._rpc_args.update(self._request_params) - self._rpc_args['action'] = self._req_method self._rpc_args['environ'] = environ - self._rpc_args['start_response'] = start_response - status = [] - headers = [] - exc_info = [] - - def change_content(new_status, new_headers, new_exc_info=None): - status.append(new_status) - headers.extend(new_headers) - exc_info.append(new_exc_info) - - output = WSGIController.__call__(self, environ, change_content) - output = list(output) # expand iterator - just to ensure exact timing - replace_header(headers, 'Content-Type', 'application/json') - start_response(status[0], headers, exc_info[0]) log.info('IP: %s Request to %s time: %.3fs' % ( self._get_ip_addr(environ), safe_unicode(_get_access_path(environ)), time.time() - start) ) - return output - def _dispatch_call(self): + state.set_action(self._rpc_call, []) + state.set_params(self._rpc_args) + return state + + def _rpc_call(self, action, environ, **rpc_args): """ - Implement dispatch interface specified by WSGIController + Call the specified RPC Method """ raw_response = '' try: - raw_response = self._inspect_call(self._func) + raw_response = getattr(self, action)(**rpc_args) if isinstance(raw_response, HTTPError): self._error = str(raw_response) except JSONRPCError as e: diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/api/api.py --- a/kallithea/controllers/api/api.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/api/api.py Thu Jun 07 01:46:02 2018 +0200 @@ -25,18 +25,20 @@ :license: GPLv3, see LICENSE.md for more details. """ - import time import traceback import logging + +from datetime import datetime from sqlalchemy import or_ -from kallithea import EXTERN_TYPE_INTERNAL +from tg import request + from kallithea.controllers.api import JSONRPCController, JSONRPCError from kallithea.lib.auth import ( - PasswordGenerator, AuthUser, HasPermissionAllDecorator, - HasPermissionAnyDecorator, HasPermissionAnyApi, HasRepoPermissionAnyApi, - HasRepoGroupPermissionAnyApi, HasUserGroupPermissionAny) + PasswordGenerator, AuthUser, HasPermissionAnyDecorator, + HasPermissionAnyDecorator, HasPermissionAny, HasRepoPermissionLevel, + HasRepoGroupPermissionLevel, HasUserGroupPermissionLevel) from kallithea.lib.utils import map_groups, repo2db_mapper from kallithea.lib.utils2 import ( str2bool, time_to_datetime, safe_int, Optional, OAttr) @@ -47,12 +49,18 @@ from kallithea.model.user import UserModel from kallithea.model.user_group import UserGroupModel from kallithea.model.gist import GistModel +from kallithea.model.changeset_status import ChangesetStatusModel +from kallithea.model.comment import ChangesetCommentsModel +from kallithea.model.pull_request import PullRequestModel from kallithea.model.db import ( Repository, Setting, UserIpMap, Permission, User, Gist, - RepoGroup) + RepoGroup, UserGroup, PullRequest, ChangesetStatus) from kallithea.lib.compat import json from kallithea.lib.exceptions import ( DefaultUserException, UserGroupsAssignedException) +from kallithea.lib.vcs.exceptions import ChangesetDoesNotExistError, EmptyRepositoryError +from kallithea.lib.vcs.backends.base import EmptyChangeset +from kallithea.lib.utils import action_logger log = logging.getLogger(__name__) @@ -96,7 +104,7 @@ :param repogroupid: """ - repo_group = RepoGroupModel()._get_repo_group(repogroupid) + repo_group = RepoGroup.guess_instance(repogroupid) if repo_group is None: raise JSONRPCError( 'repository group `%s` does not exist' % (repogroupid,)) @@ -147,34 +155,32 @@ """ API Controller - Each method takes USER as first argument. This is then, based on given - API_KEY propagated as instance of user object who's making the call. - - example function:: - - def func(apiuser,arg1, arg2,...): + The authenticated user can be found as request.authuser. + + Example function:: + + def func(arg1, arg2,...): pass Each function should also **raise** JSONRPCError for any errors that happens. - """ - @HasPermissionAllDecorator('hg.admin') - def test(self, apiuser, args): + @HasPermissionAnyDecorator('hg.admin') + def test(self, args): return args - @HasPermissionAllDecorator('hg.admin') - def pull(self, apiuser, repoid): + @HasPermissionAnyDecorator('hg.admin') + def pull(self, repoid, clone_uri=Optional(None)): """ Triggers a pull from remote location on given repo. Can be used to automatically keep remote repos up to date. This command can be executed only using api_key belonging to user with admin rights - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int + :param clone_uri: repository URI to pull from (optional) + :type clone_uri: str OUTPUT:: @@ -199,7 +205,8 @@ try: ScmModel().pull_changes(repo.repo_name, - self.authuser.username) + request.authuser.username, + clone_uri=Optional.extract(clone_uri)) return dict( msg='Pulled from `%s`' % repo.repo_name, repository=repo.repo_name @@ -210,16 +217,14 @@ 'Unable to pull changes from `%s`' % repo.repo_name ) - @HasPermissionAllDecorator('hg.admin') - def rescan_repos(self, apiuser, remove_obsolete=Optional(False)): + @HasPermissionAnyDecorator('hg.admin') + def rescan_repos(self, remove_obsolete=Optional(False)): """ Triggers rescan repositories action. If remove_obsolete is set than also delete repos that are in database but not in the filesystem. aka "clean zombies". This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param remove_obsolete: deletes repositories from database that are not found on the filesystem :type remove_obsolete: Optional(bool) @@ -254,14 +259,12 @@ 'Error occurred during rescan repositories action' ) - def invalidate_cache(self, apiuser, repoid): + def invalidate_cache(self, repoid): """ Invalidate cache for repository. This command can be executed only using api_key belonging to user with admin rights or regular user that have write or admin or write access to repository. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int @@ -284,11 +287,8 @@ """ repo = get_repo_or_error(repoid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo ! - if not HasRepoPermissionAnyApi('repository.admin', - 'repository.write')( - user=apiuser, repo_name=repo.repo_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoPermissionLevel('write')(repo.repo_name): raise JSONRPCError('repository `%s` does not exist' % (repoid,)) try: @@ -304,7 +304,7 @@ ) # permission check inside - def lock(self, apiuser, repoid, locked=Optional(None), + def lock(self, repoid, locked=Optional(None), userid=Optional(OAttr('apiuser'))): """ Set locking state on given repository by given user. If userid param @@ -314,8 +314,6 @@ to user with admin rights or regular user that have admin or write access to repository. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int :param locked: lock state to be set @@ -350,14 +348,12 @@ """ repo = get_repo_or_error(repoid) - if HasPermissionAnyApi('hg.admin')(user=apiuser): + if HasPermissionAny('hg.admin')(): pass - elif HasRepoPermissionAnyApi('repository.admin', - 'repository.write')(user=apiuser, - repo_name=repo.repo_name): + elif HasRepoPermissionLevel('write')(repo.repo_name): # make sure normal user does not pass someone else userid, # he is not allowed to do that - if not isinstance(userid, Optional) and userid != apiuser.user_id: + if not isinstance(userid, Optional) and userid != request.authuser.user_id: raise JSONRPCError( 'userid is not the same as your user' ) @@ -365,7 +361,7 @@ raise JSONRPCError('repository `%s` does not exist' % (repoid,)) if isinstance(userid, Optional): - userid = apiuser.user_id + userid = request.authuser.user_id user = get_user_or_error(userid) @@ -423,14 +419,12 @@ 'Error occurred locking repository `%s`' % repo.repo_name ) - def get_locks(self, apiuser, userid=Optional(OAttr('apiuser'))): + def get_locks(self, userid=Optional(OAttr('apiuser'))): """ Get all repositories with locks for given userid, if this command is run by non-admin account userid is set to user who is calling this method, thus returning locks for himself. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param userid: User to get locks for :type userid: Optional(str or int) @@ -443,10 +437,10 @@ error : null """ - if not HasPermissionAnyApi('hg.admin')(user=apiuser): + if not HasPermissionAny('hg.admin')(): # make sure normal user does not pass someone else userid, # he is not allowed to do that - if not isinstance(userid, Optional) and userid != apiuser.user_id: + if not isinstance(userid, Optional) and userid != request.authuser.user_id: raise JSONRPCError( 'userid is not the same as your user' ) @@ -458,7 +452,7 @@ user = get_user_or_error(userid) # show all locks - for r in Repository.getAll(): + for r in Repository.query(): userid, time_ = r.locked if time_: _api_data = r.get_api_data() @@ -471,8 +465,8 @@ return ret - @HasPermissionAllDecorator('hg.admin') - def get_ip(self, apiuser, userid=Optional(OAttr('apiuser'))): + @HasPermissionAnyDecorator('hg.admin') + def get_ip(self, userid=Optional(OAttr('apiuser'))): """ Shows IP address as seen from Kallithea server, together with all defined IP addresses for given user. If userid is not passed data is @@ -480,8 +474,6 @@ This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param userid: username to show ips for :type userid: Optional(str or int) @@ -501,24 +493,22 @@ """ if isinstance(userid, Optional): - userid = apiuser.user_id + userid = request.authuser.user_id user = get_user_or_error(userid) ips = UserIpMap.query().filter(UserIpMap.user == user).all() return dict( - server_ip_addr=self.ip_addr, + server_ip_addr=request.ip_addr, user_ips=ips ) # alias for old show_ip = get_ip - @HasPermissionAllDecorator('hg.admin') - def get_server_info(self, apiuser): + @HasPermissionAnyDecorator('hg.admin') + def get_server_info(self): """ return server info, including Kallithea version and installed packages - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser OUTPUT:: @@ -533,7 +523,7 @@ """ return Setting.get_server_info() - def get_user(self, apiuser, userid=Optional(OAttr('apiuser'))): + def get_user(self, userid=Optional(OAttr('apiuser'))): """ Gets a user by username or user_id, Returns empty result if user is not found. If userid param is skipped it is set to id of user who is @@ -541,8 +531,6 @@ belonging to user with admin rights, or regular users that cannot specify different userid than theirs - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param userid: user to get data for :type userid: Optional(str or int) @@ -577,30 +565,28 @@ error: null """ - if not HasPermissionAnyApi('hg.admin')(user=apiuser): + if not HasPermissionAny('hg.admin')(): # make sure normal user does not pass someone else userid, # he is not allowed to do that - if not isinstance(userid, Optional) and userid != apiuser.user_id: + if not isinstance(userid, Optional) and userid != request.authuser.user_id: raise JSONRPCError( 'userid is not the same as your user' ) if isinstance(userid, Optional): - userid = apiuser.user_id + userid = request.authuser.user_id user = get_user_or_error(userid) data = user.get_api_data() data['permissions'] = AuthUser(user_id=user.user_id).permissions return data - @HasPermissionAllDecorator('hg.admin') - def get_users(self, apiuser): + @HasPermissionAnyDecorator('hg.admin') + def get_users(self): """ Lists all existing users. This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser OUTPUT:: @@ -609,26 +595,23 @@ error: null """ - result = [] - users_list = User.query().order_by(User.username) \ - .filter(User.username != User.DEFAULT_USER) \ - .all() - for user in users_list: - result.append(user.get_api_data()) - return result - - @HasPermissionAllDecorator('hg.admin') - def create_user(self, apiuser, username, email, password=Optional(''), - firstname=Optional(''), lastname=Optional(''), + return [ + user.get_api_data() + for user in User.query() + .order_by(User.username) + .filter_by(is_default_user=False) + ] + + @HasPermissionAnyDecorator('hg.admin') + def create_user(self, username, email, password=Optional(''), + firstname=Optional(u''), lastname=Optional(u''), active=Optional(True), admin=Optional(False), - extern_name=Optional(EXTERN_TYPE_INTERNAL), - extern_type=Optional(EXTERN_TYPE_INTERNAL)): + extern_type=Optional(User.DEFAULT_AUTH_TYPE), + extern_name=Optional('')): """ Creates new user. Returns new user object. This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param username: new username :type username: str or int :param email: email @@ -675,13 +658,9 @@ if User.get_by_username(username): raise JSONRPCError("user `%s` already exist" % (username,)) - if User.get_by_email(email, case_insensitive=True): + if User.get_by_email(email): raise JSONRPCError("email `%s` already exist" % (email,)) - if Optional.extract(extern_name): - # generate temporary password if user is external - password = PasswordGenerator().gen_password(length=8) - try: user = UserModel().create_or_update( username=Optional.extract(username), @@ -703,18 +682,16 @@ log.error(traceback.format_exc()) raise JSONRPCError('failed to create user `%s`' % (username,)) - @HasPermissionAllDecorator('hg.admin') - def update_user(self, apiuser, userid, username=Optional(None), - email=Optional(None),password=Optional(None), + @HasPermissionAnyDecorator('hg.admin') + def update_user(self, userid, username=Optional(None), + email=Optional(None), password=Optional(None), firstname=Optional(None), lastname=Optional(None), active=Optional(None), admin=Optional(None), - extern_type=Optional(None), extern_name=Optional(None),): + extern_type=Optional(None), extern_name=Optional(None)): """ updates given user if such user exists. This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param userid: userid to update :type userid: str or int :param username: new username @@ -786,14 +763,12 @@ log.error(traceback.format_exc()) raise JSONRPCError('failed to update user `%s`' % (userid,)) - @HasPermissionAllDecorator('hg.admin') - def delete_user(self, apiuser, userid): + @HasPermissionAnyDecorator('hg.admin') + def delete_user(self, userid): """ deletes given user if such user exists. This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param userid: user to delete :type userid: str or int @@ -831,14 +806,12 @@ % (user.user_id, user.username)) # permission check inside - def get_user_group(self, apiuser, usergroupid): + def get_user_group(self, usergroupid): """ Gets an existing user group. This command can be executed only using api_key belonging to user with admin rights or user who has at least read access to user group. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param usergroupid: id of user_group to edit :type usergroupid: str or int @@ -856,25 +829,20 @@ """ user_group = get_user_group_or_error(usergroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have at least read permission for this user group ! - _perms = ('usergroup.read', 'usergroup.write', 'usergroup.admin',) - if not HasUserGroupPermissionAny(*_perms)( - user=apiuser, user_group_name=user_group.users_group_name): + if not HasPermissionAny('hg.admin')(): + if not HasUserGroupPermissionLevel('read')(user_group.users_group_name): raise JSONRPCError('user group `%s` does not exist' % (usergroupid,)) data = user_group.get_api_data() return data # permission check inside - def get_user_groups(self, apiuser): + def get_user_groups(self): """ Lists all existing user groups. This command can be executed only using api_key belonging to user with admin rights or user who has at least read access to user group. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser OUTPUT:: @@ -883,24 +851,19 @@ error : null """ - result = [] - _perms = ('usergroup.read', 'usergroup.write', 'usergroup.admin',) - extras = {'user': apiuser} - for user_group in UserGroupList(UserGroupModel().get_all(), - perm_set=_perms, extra_kwargs=extras): - result.append(user_group.get_api_data()) - return result + return [ + user_group.get_api_data() + for user_group in UserGroupList(UserGroup.query().all(), perm_level='read') + ] @HasPermissionAnyDecorator('hg.admin', 'hg.usergroup.create.true') - def create_user_group(self, apiuser, group_name, description=Optional(''), + def create_user_group(self, group_name, description=Optional(u''), owner=Optional(OAttr('apiuser')), active=Optional(True)): """ Creates new user group. This command can be executed only using api_key belonging to user with admin rights or an user who has create user group permission - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param group_name: name of new user group :type group_name: str :param description: group description @@ -936,7 +899,7 @@ try: if isinstance(owner, Optional): - owner = apiuser.user_id + owner = request.authuser.user_id owner = get_user_or_error(owner) active = Optional.extract(active) @@ -953,15 +916,13 @@ raise JSONRPCError('failed to create group `%s`' % (group_name,)) # permission check inside - def update_user_group(self, apiuser, usergroupid, group_name=Optional(''), + def update_user_group(self, usergroupid, group_name=Optional(''), description=Optional(''), owner=Optional(None), active=Optional(True)): """ Updates given usergroup. This command can be executed only using api_key belonging to user with admin rights or an admin of given user group - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param usergroupid: id of user group to update :type usergroupid: str or int :param group_name: name of new user group @@ -992,11 +953,8 @@ """ user_group = get_user_group_or_error(usergroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this user group ! - _perms = ('usergroup.admin',) - if not HasUserGroupPermissionAny(*_perms)( - user=apiuser, user_group_name=user_group.users_group_name): + if not HasPermissionAny('hg.admin')(): + if not HasUserGroupPermissionLevel('admin')(user_group.users_group_name): raise JSONRPCError('user group `%s` does not exist' % (usergroupid,)) if not isinstance(owner, Optional): @@ -1005,7 +963,7 @@ updates = {} store_update(updates, group_name, 'users_group_name') store_update(updates, description, 'user_group_description') - store_update(updates, owner, 'user') + store_update(updates, owner, 'owner') store_update(updates, active, 'users_group_active') try: UserGroupModel().update(user_group, updates) @@ -1020,14 +978,12 @@ raise JSONRPCError('failed to update user group `%s`' % (usergroupid,)) # permission check inside - def delete_user_group(self, apiuser, usergroupid): + def delete_user_group(self, usergroupid): """ Delete given user group by user group id or name. This command can be executed only using api_key belonging to user with admin rights or an admin of given user group - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param usergroupid: :type usergroupid: int @@ -1051,11 +1007,8 @@ """ user_group = get_user_group_or_error(usergroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this user group ! - _perms = ('usergroup.admin',) - if not HasUserGroupPermissionAny(*_perms)( - user=apiuser, user_group_name=user_group.users_group_name): + if not HasPermissionAny('hg.admin')(): + if not HasUserGroupPermissionLevel('admin')(user_group.users_group_name): raise JSONRPCError('user group `%s` does not exist' % (usergroupid,)) try: @@ -1074,17 +1027,15 @@ raise JSONRPCError('failed to delete user group ID:%s %s' % (user_group.users_group_id, user_group.users_group_name) - ) + ) # permission check inside - def add_user_to_user_group(self, apiuser, usergroupid, userid): + def add_user_to_user_group(self, usergroupid, userid): """ Adds a user to a user group. If user exists in that group success will be `false`. This command can be executed only using api_key belonging to user with admin rights or an admin of given user group - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param usergroupid: :type usergroupid: int :param userid: @@ -1112,11 +1063,8 @@ """ user = get_user_or_error(userid) user_group = get_user_group_or_error(usergroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this user group ! - _perms = ('usergroup.admin',) - if not HasUserGroupPermissionAny(*_perms)( - user=apiuser, user_group_name=user_group.users_group_name): + if not HasPermissionAny('hg.admin')(): + if not HasUserGroupPermissionLevel('admin')(user_group.users_group_name): raise JSONRPCError('user group `%s` does not exist' % (usergroupid,)) try: @@ -1141,14 +1089,12 @@ ) # permission check inside - def remove_user_from_user_group(self, apiuser, usergroupid, userid): + def remove_user_from_user_group(self, usergroupid, userid): """ Removes a user from a user group. If user is not in given group success will be `false`. This command can be executed only using api_key belonging to user with admin rights or an admin of given user group - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param usergroupid: :param userid: @@ -1166,11 +1112,8 @@ """ user = get_user_or_error(userid) user_group = get_user_group_or_error(usergroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this user group ! - _perms = ('usergroup.admin',) - if not HasUserGroupPermissionAny(*_perms)( - user=apiuser, user_group_name=user_group.users_group_name): + if not HasPermissionAny('hg.admin')(): + if not HasUserGroupPermissionLevel('admin')(user_group.users_group_name): raise JSONRPCError('user group `%s` does not exist' % (usergroupid,)) try: @@ -1190,15 +1133,15 @@ ) # permission check inside - def get_repo(self, apiuser, repoid): + def get_repo(self, repoid, + with_revision_names=Optional(False), + with_pullrequests=Optional(False)): """ Gets an existing repository by it's name or repository_id. Members will return either users_group or user associated to that repository. This command can be executed only using api_key belonging to user with admin rights or regular user that have at least read access to repository. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int @@ -1242,8 +1185,20 @@ }, … ] - "followers": [, ...] - ] + "followers": [, ...], + + "tags": { + "": "", + ... + }, + "branches": { + "": "", + ... + }, + "bookmarks": { + "": "", + ... + }, } } error : null @@ -1251,14 +1206,11 @@ """ repo = get_repo_or_error(repoid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo ! - perms = ('repository.admin', 'repository.write', 'repository.read') - if not HasRepoPermissionAnyApi(*perms)(user=apiuser, repo_name=repo.repo_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoPermissionLevel('read')(repo.repo_name): raise JSONRPCError('repository `%s` does not exist' % (repoid,)) members = [] - followers = [] for user in repo.repo_to_perm: perm = user.permission.permission_name user = user.user @@ -1279,23 +1231,24 @@ } members.append(user_group_data) - for user in repo.followers: - followers.append(user.user.get_api_data()) - - data = repo.get_api_data() + followers = [ + uf.user.get_api_data() + for uf in repo.followers + ] + + data = repo.get_api_data(with_revision_names=Optional.extract(with_revision_names), + with_pullrequests=Optional.extract(with_pullrequests)) data['members'] = members data['followers'] = followers return data # permission check inside - def get_repos(self, apiuser): + def get_repos(self): """ Lists all existing repositories. This command can be executed only using api_key belonging to user with admin rights or regular user that have admin, write or read access to repository. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser OUTPUT:: @@ -1320,18 +1273,18 @@ ] error: null """ - result = [] - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - repos = RepoModel().get_all_user_repos(user=apiuser) + if not HasPermissionAny('hg.admin')(): + repos = RepoModel().get_all_user_repos(user=request.authuser.user_id) else: - repos = RepoModel().get_all() - - for repo in repos: - result.append(repo.get_api_data()) - return result + repos = Repository.query() + + return [ + repo.get_api_data() + for repo in repos + ] # permission check inside - def get_repo_nodes(self, apiuser, repoid, revision, root_path, + def get_repo_nodes(self, repoid, revision, root_path, ret_type=Optional('all')): """ returns a list of nodes and it's children in a flat list for a given path @@ -1339,8 +1292,6 @@ `dirs`. This command can be executed only using api_key belonging to user with admin rights or regular user that have at least read access to repository. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int :param revision: revision for which listing should be done @@ -1365,10 +1316,8 @@ """ repo = get_repo_or_error(repoid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo ! - perms = ('repository.admin', 'repository.write', 'repository.read') - if not HasRepoPermissionAnyApi(*perms)(user=apiuser, repo_name=repo.repo_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoPermissionLevel('read')(repo.repo_name): raise JSONRPCError('repository `%s` does not exist' % (repoid,)) ret_type = Optional.extract(ret_type) @@ -1392,7 +1341,7 @@ ) @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') - def create_repo(self, apiuser, repo_name, owner=Optional(OAttr('apiuser')), + def create_repo(self, repo_name, owner=Optional(OAttr('apiuser')), repo_type=Optional('hg'), description=Optional(''), private=Optional(False), clone_uri=Optional(None), landing_rev=Optional('rev:tip'), @@ -1408,8 +1357,6 @@ belonging to user with admin rights or regular user that have create repository permission. Regular users cannot specify owner parameter - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repo_name: repository name :type repo_name: str :param owner: user_id or username @@ -1453,14 +1400,14 @@ } """ - if not HasPermissionAnyApi('hg.admin')(user=apiuser): + if not HasPermissionAny('hg.admin')(): if not isinstance(owner, Optional): - #forbid setting owner for non-admins + # forbid setting owner for non-admins raise JSONRPCError( 'Only Kallithea admin can specify `owner` param' ) if isinstance(owner, Optional): - owner = apiuser.user_id + owner = request.authuser.user_id owner = get_user_or_error(owner) @@ -1509,10 +1456,7 @@ ) task = RepoModel().create(form_data=data, cur_user=owner) - from celery.result import BaseAsyncResult - task_id = None - if isinstance(task, BaseAsyncResult): - task_id = task.task_id + task_id = task.task_id # no commit, it's done in RepoModel, or async via celery return dict( msg="Created new repository `%s`" % (repo_name,), @@ -1526,7 +1470,7 @@ 'failed to create repository `%s`' % (repo_name,)) # permission check inside - def update_repo(self, apiuser, repoid, name=Optional(None), + def update_repo(self, repoid, name=Optional(None), owner=Optional(OAttr('apiuser')), group=Optional(None), description=Optional(''), private=Optional(False), @@ -1538,8 +1482,6 @@ """ Updates repo - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int :param name: @@ -1554,19 +1496,17 @@ :param enable_downloads: """ repo = get_repo_or_error(repoid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo ! - if not HasRepoPermissionAnyApi('repository.admin')(user=apiuser, - repo_name=repo.repo_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoPermissionLevel('admin')(repo.repo_name): raise JSONRPCError('repository `%s` does not exist' % (repoid,)) if (name != repo.repo_name and - not HasPermissionAnyApi('hg.create.repository')(user=apiuser) + not HasPermissionAny('hg.create.repository')() ): raise JSONRPCError('no permission to create (or move) repositories') if not isinstance(owner, Optional): - #forbid setting owner for non-admins + # forbid setting owner for non-admins raise JSONRPCError( 'Only Kallithea admin can specify `owner` param' ) @@ -1579,7 +1519,7 @@ try: store_update(updates, name, 'repo_name') store_update(updates, repo_group, 'repo_group') - store_update(updates, owner, 'user') + store_update(updates, owner, 'owner') store_update(updates, description, 'repo_description') store_update(updates, private, 'repo_private') store_update(updates, clone_uri, 'clone_uri') @@ -1599,7 +1539,7 @@ raise JSONRPCError('failed to update repo `%s`' % repoid) @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository') - def fork_repo(self, apiuser, repoid, fork_name, + def fork_repo(self, repoid, fork_name, owner=Optional(OAttr('apiuser')), description=Optional(''), copy_permissions=Optional(False), private=Optional(False), landing_rev=Optional('rev:tip')): @@ -1610,8 +1550,6 @@ user with admin rights or regular user that have fork permission, and at least read access to forking repository. Regular users cannot specify owner parameter. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int :param fork_name: @@ -1654,25 +1592,22 @@ type_ = 'fork' if _repo.fork else 'repo' raise JSONRPCError("%s `%s` already exist" % (type_, fork_name)) - if HasPermissionAnyApi('hg.admin')(user=apiuser): + if HasPermissionAny('hg.admin')(): pass - elif HasRepoPermissionAnyApi('repository.admin', - 'repository.write', - 'repository.read')(user=apiuser, - repo_name=repo.repo_name): + elif HasRepoPermissionLevel('read')(repo.repo_name): if not isinstance(owner, Optional): - #forbid setting owner for non-admins + # forbid setting owner for non-admins raise JSONRPCError( 'Only Kallithea admin can specify `owner` param' ) - if not HasPermissionAnyApi('hg.create.repository')(user=apiuser): + if not HasPermissionAny('hg.create.repository')(): raise JSONRPCError('no permission to create repositories') else: raise JSONRPCError('repository `%s` does not exist' % (repoid,)) if isinstance(owner, Optional): - owner = apiuser.user_id + owner = request.authuser.user_id owner = get_user_or_error(owner) @@ -1699,10 +1634,7 @@ ) task = RepoModel().create_fork(form_data, cur_user=owner) # no commit, it's done in RepoModel, or async via celery - from celery.result import BaseAsyncResult - task_id = None - if isinstance(task, BaseAsyncResult): - task_id = task.task_id + task_id = task.task_id return dict( msg='Created fork of `%s` as `%s`' % (repo.repo_name, fork_name), @@ -1718,15 +1650,13 @@ ) # permission check inside - def delete_repo(self, apiuser, repoid, forks=Optional('')): + def delete_repo(self, repoid, forks=Optional('')): """ Deletes a repository. This command can be executed only using api_key belonging to user with admin rights or regular user that have admin access to repository. When `forks` param is set it's possible to detach or delete forks of deleting repository - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int :param forks: `detach` or `delete`, what do do with attached forks for repo @@ -1744,10 +1674,8 @@ """ repo = get_repo_or_error(repoid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo ! - if not HasRepoPermissionAnyApi('repository.admin')(user=apiuser, - repo_name=repo.repo_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoPermissionLevel('admin')(repo.repo_name): raise JSONRPCError('repository `%s` does not exist' % (repoid,)) try: @@ -1776,15 +1704,13 @@ 'failed to delete repository `%s`' % (repo.repo_name,) ) - @HasPermissionAllDecorator('hg.admin') - def grant_user_permission(self, apiuser, repoid, userid, perm): + @HasPermissionAnyDecorator('hg.admin') + def grant_user_permission(self, repoid, userid, perm): """ Grant permission for user on given repository, or update existing one if found. This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int :param userid: @@ -1823,14 +1749,12 @@ ) ) - @HasPermissionAllDecorator('hg.admin') - def revoke_user_permission(self, apiuser, repoid, userid): + @HasPermissionAnyDecorator('hg.admin') + def revoke_user_permission(self, repoid, userid): """ Revoke permission for user on given repository. This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int :param userid: @@ -1866,14 +1790,12 @@ ) # permission check inside - def grant_user_group_permission(self, apiuser, repoid, usergroupid, perm): + def grant_user_group_permission(self, repoid, usergroupid, perm): """ Grant permission for user group on given repository, or update existing one if found. This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int :param usergroupid: id of usergroup @@ -1903,17 +1825,11 @@ repo = get_repo_or_error(repoid) perm = get_perm_or_error(perm) user_group = get_user_group_or_error(usergroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo ! - _perms = ('repository.admin',) - if not HasRepoPermissionAnyApi(*_perms)( - user=apiuser, repo_name=repo.repo_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoPermissionLevel('admin')(repo.repo_name): raise JSONRPCError('repository `%s` does not exist' % (repoid,)) - # check if we have at least read permission for this user group ! - _perms = ('usergroup.read', 'usergroup.write', 'usergroup.admin',) - if not HasUserGroupPermissionAny(*_perms)( - user=apiuser, user_group_name=user_group.users_group_name): + if not HasUserGroupPermissionLevel('read')(user_group.users_group_name): raise JSONRPCError('user group `%s` does not exist' % (usergroupid,)) try: @@ -1939,13 +1855,11 @@ ) # permission check inside - def revoke_user_group_permission(self, apiuser, repoid, usergroupid): + def revoke_user_group_permission(self, repoid, usergroupid): """ Revoke permission for user group on given repository. This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repoid: repository name or repository id :type repoid: str or int :param usergroupid: @@ -1961,17 +1875,11 @@ """ repo = get_repo_or_error(repoid) user_group = get_user_group_or_error(usergroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo ! - _perms = ('repository.admin',) - if not HasRepoPermissionAnyApi(*_perms)( - user=apiuser, repo_name=repo.repo_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoPermissionLevel('admin')(repo.repo_name): raise JSONRPCError('repository `%s` does not exist' % (repoid,)) - # check if we have at least read permission for this user group ! - _perms = ('usergroup.read', 'usergroup.write', 'usergroup.admin',) - if not HasUserGroupPermissionAny(*_perms)( - user=apiuser, user_group_name=user_group.users_group_name): + if not HasUserGroupPermissionLevel('read')(user_group.users_group_name): raise JSONRPCError('user group `%s` does not exist' % (usergroupid,)) try: @@ -1994,14 +1902,12 @@ ) ) - @HasPermissionAllDecorator('hg.admin') - def get_repo_group(self, apiuser, repogroupid): + @HasPermissionAnyDecorator('hg.admin') + def get_repo_group(self, repogroupid): """ Returns given repo group together with permissions, and repositories inside the group - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repogroupid: id/name of repository group :type repogroupid: str or int """ @@ -2032,21 +1938,19 @@ data["members"] = members return data - @HasPermissionAllDecorator('hg.admin') - def get_repo_groups(self, apiuser): + @HasPermissionAnyDecorator('hg.admin') + def get_repo_groups(self): """ Returns all repository groups - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser """ - result = [] - for repo_group in RepoGroupModel().get_all(): - result.append(repo_group.get_api_data()) - return result - - @HasPermissionAllDecorator('hg.admin') - def create_repo_group(self, apiuser, group_name, description=Optional(''), + return [ + repo_group.get_api_data() + for repo_group in RepoGroup.query() + ] + + @HasPermissionAnyDecorator('hg.admin') + def create_repo_group(self, group_name, description=Optional(''), owner=Optional(OAttr('apiuser')), parent=Optional(None), copy_permissions=Optional(False)): @@ -2054,8 +1958,6 @@ Creates a repository group. This command can be executed only using api_key belonging to user with admin rights. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param group_name: :type group_name: :param description: @@ -2089,7 +1991,7 @@ raise JSONRPCError("repo group `%s` already exist" % (group_name,)) if isinstance(owner, Optional): - owner = apiuser.user_id + owner = request.authuser.user_id group_description = Optional.extract(description) parent_group = Optional.extract(parent) if not isinstance(parent, Optional): @@ -2114,8 +2016,8 @@ log.error(traceback.format_exc()) raise JSONRPCError('failed to create repo group `%s`' % (group_name,)) - @HasPermissionAllDecorator('hg.admin') - def update_repo_group(self, apiuser, repogroupid, group_name=Optional(''), + @HasPermissionAnyDecorator('hg.admin') + def update_repo_group(self, repogroupid, group_name=Optional(''), description=Optional(''), owner=Optional(OAttr('apiuser')), parent=Optional(None), enable_locking=Optional(False)): @@ -2140,12 +2042,10 @@ raise JSONRPCError('failed to update repository group `%s`' % (repogroupid,)) - @HasPermissionAllDecorator('hg.admin') - def delete_repo_group(self, apiuser, repogroupid): + @HasPermissionAnyDecorator('hg.admin') + def delete_repo_group(self, repogroupid): """ - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repogroupid: name or id of repository group :type repogroupid: str or int @@ -2181,10 +2081,10 @@ log.error(traceback.format_exc()) raise JSONRPCError('failed to delete repo group ID:%s %s' % (repo_group.group_id, repo_group.group_name) - ) + ) # permission check inside - def grant_user_permission_to_repo_group(self, apiuser, repogroupid, userid, + def grant_user_permission_to_repo_group(self, repogroupid, userid, perm, apply_to_children=Optional('none')): """ Grant permission for user on given repository group, or update existing @@ -2192,8 +2092,6 @@ to user with admin rights, or user who has admin right to given repository group. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repogroupid: name or id of repository group :type repogroupid: str or int :param userid: @@ -2223,10 +2121,8 @@ repo_group = get_repo_group_or_error(repogroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo group ! - if not HasRepoGroupPermissionAnyApi('group.admin')(user=apiuser, - group_name=repo_group.group_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoGroupPermissionLevel('admin')(repo_group.group_name): raise JSONRPCError('repository group `%s` does not exist' % (repogroupid,)) user = get_user_or_error(userid) @@ -2253,15 +2149,13 @@ userid, repo_group.name)) # permission check inside - def revoke_user_permission_from_repo_group(self, apiuser, repogroupid, userid, + def revoke_user_permission_from_repo_group(self, repogroupid, userid, apply_to_children=Optional('none')): """ Revoke permission for user on given repository group. This command can be executed only using api_key belonging to user with admin rights, or user who has admin right to given repository group. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repogroupid: name or id of repository group :type repogroupid: str or int :param userid: @@ -2290,10 +2184,8 @@ repo_group = get_repo_group_or_error(repogroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo group ! - if not HasRepoGroupPermissionAnyApi('group.admin')(user=apiuser, - group_name=repo_group.group_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoGroupPermissionLevel('admin')(repo_group.group_name): raise JSONRPCError('repository group `%s` does not exist' % (repogroupid,)) user = get_user_or_error(userid) @@ -2320,16 +2212,14 @@ # permission check inside def grant_user_group_permission_to_repo_group( - self, apiuser, repogroupid, usergroupid, perm, - apply_to_children=Optional('none'),): + self, repogroupid, usergroupid, perm, + apply_to_children=Optional('none')): """ Grant permission for user group on given repository group, or update existing one if found. This command can be executed only using api_key belonging to user with admin rights, or user who has admin right to given repository group. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repogroupid: name or id of repository group :type repogroupid: str or int :param usergroupid: id of usergroup @@ -2361,18 +2251,12 @@ repo_group = get_repo_group_or_error(repogroupid) perm = get_perm_or_error(perm, prefix='group.') user_group = get_user_group_or_error(usergroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo group ! - _perms = ('group.admin',) - if not HasRepoGroupPermissionAnyApi(*_perms)( - user=apiuser, group_name=repo_group.group_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoGroupPermissionLevel('admin')(repo_group.group_name): raise JSONRPCError( 'repository group `%s` does not exist' % (repogroupid,)) - # check if we have at least read permission for this user group ! - _perms = ('usergroup.read', 'usergroup.write', 'usergroup.admin',) - if not HasUserGroupPermissionAny(*_perms)( - user=apiuser, user_group_name=user_group.users_group_name): + if not HasUserGroupPermissionLevel('read')(user_group.users_group_name): raise JSONRPCError( 'user group `%s` does not exist' % (usergroupid,)) @@ -2387,9 +2271,9 @@ Session().commit() return dict( msg='Granted perm: `%s` (recursive:%s) for user group: `%s` in repo group: `%s`' % ( - perm.permission_name, apply_to_children, - user_group.users_group_name, repo_group.name - ), + perm.permission_name, apply_to_children, + user_group.users_group_name, repo_group.name + ), success=True ) except Exception: @@ -2403,15 +2287,13 @@ # permission check inside def revoke_user_group_permission_from_repo_group( - self, apiuser, repogroupid, usergroupid, + self, repogroupid, usergroupid, apply_to_children=Optional('none')): """ Revoke permission for user group on given repository. This command can be executed only using api_key belonging to user with admin rights, or user who has admin right to given repository group. - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param repogroupid: name or id of repository group :type repogroupid: str or int :param usergroupid: @@ -2439,18 +2321,12 @@ """ repo_group = get_repo_group_or_error(repogroupid) user_group = get_user_group_or_error(usergroupid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - # check if we have admin permission for this repo group ! - _perms = ('group.admin',) - if not HasRepoGroupPermissionAnyApi(*_perms)( - user=apiuser, group_name=repo_group.group_name): + if not HasPermissionAny('hg.admin')(): + if not HasRepoGroupPermissionLevel('admin')(repo_group.group_name): raise JSONRPCError( 'repository group `%s` does not exist' % (repogroupid,)) - # check if we have at least read permission for this user group ! - _perms = ('usergroup.read', 'usergroup.write', 'usergroup.admin',) - if not HasUserGroupPermissionAny(*_perms)( - user=apiuser, user_group_name=user_group.users_group_name): + if not HasUserGroupPermissionLevel('read')(user_group.users_group_name): raise JSONRPCError( 'user group `%s` does not exist' % (usergroupid,)) @@ -2476,62 +2352,55 @@ ) ) - def get_gist(self, apiuser, gistid): + def get_gist(self, gistid): """ Get given gist by id - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param gistid: id of private or public gist :type gistid: str """ gist = get_gist_or_error(gistid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - if gist.gist_owner != apiuser.user_id: + if not HasPermissionAny('hg.admin')(): + if gist.owner_id != request.authuser.user_id: raise JSONRPCError('gist `%s` does not exist' % (gistid,)) return gist.get_api_data() - def get_gists(self, apiuser, userid=Optional(OAttr('apiuser'))): + def get_gists(self, userid=Optional(OAttr('apiuser'))): """ Get all gists for given user. If userid is empty returned gists are for user who called the api - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param userid: user to get gists for :type userid: Optional(str or int) """ - if not HasPermissionAnyApi('hg.admin')(user=apiuser): + if not HasPermissionAny('hg.admin')(): # make sure normal user does not pass someone else userid, # he is not allowed to do that - if not isinstance(userid, Optional) and userid != apiuser.user_id: + if not isinstance(userid, Optional) and userid != request.authuser.user_id: raise JSONRPCError( 'userid is not the same as your user' ) if isinstance(userid, Optional): - user_id = apiuser.user_id + user_id = request.authuser.user_id else: user_id = get_user_or_error(userid).user_id - gists = [] - _gists = Gist().query()\ - .filter(or_(Gist.gist_expires == -1, Gist.gist_expires >= time.time()))\ - .filter(Gist.gist_owner == user_id)\ - .order_by(Gist.created_on.desc()) - for gist in _gists: - gists.append(gist.get_api_data()) - return gists - - def create_gist(self, apiuser, files, owner=Optional(OAttr('apiuser')), + return [ + gist.get_api_data() + for gist in Gist().query() + .filter_by(is_expired=False) + .filter(Gist.owner_id == user_id) + .order_by(Gist.created_on.desc()) + ] + + def create_gist(self, files, owner=Optional(OAttr('apiuser')), gist_type=Optional(Gist.GIST_PUBLIC), lifetime=Optional(-1), description=Optional('')): """ Creates new Gist - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param files: files to be added to gist {'filename': {'content':'...', 'lexer': null}, 'filename2': {'content':'...', 'lexer': null}} @@ -2565,7 +2434,7 @@ """ try: if isinstance(owner, Optional): - owner = apiuser.user_id + owner = request.authuser.user_id owner = get_user_or_error(owner) description = Optional.extract(description) @@ -2586,19 +2455,17 @@ log.error(traceback.format_exc()) raise JSONRPCError('failed to create gist') - # def update_gist(self, apiuser, gistid, files, owner=Optional(OAttr('apiuser')), + # def update_gist(self, gistid, files, owner=Optional(OAttr('apiuser')), # gist_type=Optional(Gist.GIST_PUBLIC), # gist_lifetime=Optional(-1), gist_description=Optional('')): # gist = get_gist_or_error(gistid) # updates = {} # permission check inside - def delete_gist(self, apiuser, gistid): + def delete_gist(self, gistid): """ Deletes existing gist - :param apiuser: filled automatically from apikey - :type apiuser: AuthUser :param gistid: id of gist to delete :type gistid: str @@ -2621,8 +2488,8 @@ """ gist = get_gist_or_error(gistid) - if not HasPermissionAnyApi('hg.admin')(user=apiuser): - if gist.gist_owner != apiuser.user_id: + if not HasPermissionAny('hg.admin')(): + if gist.owner_id != request.authuser.user_id: raise JSONRPCError('gist `%s` does not exist' % (gistid,)) try: @@ -2636,3 +2503,103 @@ log.error(traceback.format_exc()) raise JSONRPCError('failed to delete gist ID:%s' % (gist.gist_access_id,)) + + # permission check inside + def get_changesets(self, repoid, start=None, end=None, start_date=None, + end_date=None, branch_name=None, reverse=False, with_file_list=False, max_revisions=None): + repo = get_repo_or_error(repoid) + if not HasRepoPermissionLevel('read')(repo.repo_name): + raise JSONRPCError('Access denied to repo %s' % repo.repo_name) + + format = "%Y-%m-%dT%H:%M:%S" + try: + return [e.__json__(with_file_list) for e in + repo.scm_instance.get_changesets(start, + end, + datetime.strptime(start_date, format) if start_date else None, + datetime.strptime(end_date, format) if end_date else None, + branch_name, + reverse, max_revisions)] + except EmptyRepositoryError as e: + raise JSONRPCError(e.message) + + # permission check inside + def get_changeset(self, repoid, raw_id, with_reviews=Optional(False)): + repo = get_repo_or_error(repoid) + if not HasRepoPermissionLevel('read')(repo.repo_name): + raise JSONRPCError('Access denied to repo %s' % repo.repo_name) + changeset = repo.get_changeset(raw_id) + if isinstance(changeset, EmptyChangeset): + raise JSONRPCError('Changeset %s does not exist' % raw_id) + + info = dict(changeset.as_dict()) + + with_reviews = Optional.extract(with_reviews) + if with_reviews: + reviews = ChangesetStatusModel().get_statuses( + repo.repo_name, raw_id) + info["reviews"] = reviews + + return info + + # permission check inside + def get_pullrequest(self, pullrequest_id): + """ + Get given pull request by id + """ + pull_request = PullRequest.get(pullrequest_id) + if pull_request is None: + raise JSONRPCError('pull request `%s` does not exist' % (pullrequest_id,)) + if not HasRepoPermissionLevel('read')(pull_request.org_repo.repo_name): + raise JSONRPCError('not allowed') + return pull_request.get_api_data() + + # permission check inside + def comment_pullrequest(self, pull_request_id, comment_msg=u'', status=None, close_pr=False): + """ + Add comment, close and change status of pull request. + """ + apiuser = get_user_or_error(request.authuser.user_id) + pull_request = PullRequest.get(pull_request_id) + if pull_request is None: + raise JSONRPCError('pull request `%s` does not exist' % (pull_request_id,)) + if (not HasRepoPermissionLevel('read')(pull_request.org_repo.repo_name)): + raise JSONRPCError('No permission to add comment. User needs at least reading permissions' + ' to the source repository.') + owner = apiuser.user_id == pull_request.owner_id + reviewer = apiuser.user_id in [reviewer.user_id for reviewer in pull_request.reviewers] + if close_pr and not (apiuser.admin or owner): + raise JSONRPCError('No permission to close pull request. User needs to be admin or owner.') + if status and not (apiuser.admin or owner or reviewer): + raise JSONRPCError('No permission to change pull request status. User needs to be admin, owner or reviewer.') + if pull_request.is_closed(): + raise JSONRPCError('pull request is already closed') + + comment = ChangesetCommentsModel().create( + text=comment_msg, + repo=pull_request.org_repo.repo_id, + author=apiuser.user_id, + pull_request=pull_request.pull_request_id, + f_path=None, + line_no=None, + status_change=(ChangesetStatus.get_status_lbl(status)), + closing_pr=close_pr + ) + action_logger(apiuser, + 'user_commented_pull_request:%s' % pull_request_id, + pull_request.org_repo, request.ip_addr) + if status: + ChangesetStatusModel().set_status( + pull_request.org_repo_id, + status, + apiuser.user_id, + comment, + pull_request=pull_request_id + ) + if close_pr: + PullRequestModel().close_pull_request(pull_request_id) + action_logger(apiuser, + 'user_closed_pull_request:%s' % pull_request_id, + pull_request.org_repo, request.ip_addr) + Session().commit() + return True diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/bookmarks.py --- a/kallithea/controllers/bookmarks.py Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -""" -kallithea.controllers.bookmarks -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Bookmarks controller for Kallithea - -This file was forked by the Kallithea project in July 2014. -Original author and date, and relevant copyright and licensing information is below: -:created_on: Dec 1, 2011 -:author: marcink -:copyright: (c) 2013 RhodeCode GmbH, and others. -:license: GPLv3, see LICENSE.md for more details. -""" - -import logging - -from pylons import tmpl_context as c - -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator -from kallithea.lib.base import BaseRepoController, render -from kallithea.lib.compat import OrderedDict -from webob.exc import HTTPNotFound - -log = logging.getLogger(__name__) - - -class BookmarksController(BaseRepoController): - - def __before__(self): - super(BookmarksController, self).__before__() - - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - def index(self): - if c.db_repo_scm_instance.alias != 'hg': - raise HTTPNotFound() - - c.repo_bookmarks = OrderedDict() - - bookmarks = [(name, c.db_repo_scm_instance.get_changeset(hash_)) for \ - name, hash_ in c.db_repo_scm_instance._repo._bookmarks.items()] - ordered_tags = sorted(bookmarks, key=lambda x: x[1].date, reverse=True) - for name, cs_book in ordered_tags: - c.repo_bookmarks[name] = cs_book - - return render('bookmarks/bookmarks.html') diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/branches.py --- a/kallithea/controllers/branches.py Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -""" -kallithea.controllers.branches -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -branches controller for Kallithea - -This file was forked by the Kallithea project in July 2014. -Original author and date, and relevant copyright and licensing information is below: -:created_on: Apr 21, 2010 -:author: marcink -:copyright: (c) 2013 RhodeCode GmbH, and others. -:license: GPLv3, see LICENSE.md for more details. -""" - -import logging -import binascii - -from pylons import tmpl_context as c - -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator -from kallithea.lib.base import BaseRepoController, render -from kallithea.lib.compat import OrderedDict -from kallithea.lib.utils2 import safe_unicode - -log = logging.getLogger(__name__) - - -class BranchesController(BaseRepoController): - - def __before__(self): - super(BranchesController, self).__before__() - - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - def index(self): - - def _branchtags(localrepo): - bt_closed = {} - for bn, heads in localrepo.branchmap().iteritems(): - tip = heads[-1] - if 'close' in localrepo.changelog.read(tip)[5]: - bt_closed[bn] = tip - return bt_closed - - cs_g = c.db_repo_scm_instance.get_changeset - - c.repo_closed_branches = {} - if c.db_repo.repo_type == 'hg': - bt_closed = _branchtags(c.db_repo_scm_instance._repo) - _closed_branches = [(safe_unicode(n), cs_g(binascii.hexlify(h)),) - for n, h in bt_closed.items()] - - c.repo_closed_branches = OrderedDict(sorted(_closed_branches, - key=lambda ctx: ctx[0], - reverse=False)) - - _branches = [(safe_unicode(n), cs_g(h)) - for n, h in c.db_repo_scm_instance.branches.items()] - c.repo_branches = OrderedDict(sorted(_branches, - key=lambda ctx: ctx[0], - reverse=False)) - - return render('branches/branches.html') diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/changelog.py --- a/kallithea/controllers/changelog.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/changelog.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,18 +28,17 @@ import logging import traceback -from pylons import request, url, session, tmpl_context as c -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ -from webob.exc import HTTPNotFound, HTTPBadRequest +from tg import request, session, tmpl_context as c +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound, HTTPNotFound, HTTPBadRequest import kallithea.lib.helpers as h -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator +from kallithea.config.routing import url +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator from kallithea.lib.base import BaseRepoController, render -from kallithea.lib.helpers import RepoPage -from kallithea.lib.compat import json from kallithea.lib.graphmod import graph_data -from kallithea.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError,\ +from kallithea.lib.page import RepoPage +from kallithea.lib.vcs.exceptions import RepositoryError, ChangesetDoesNotExistError, \ ChangesetError, NodeDoesNotExistError, EmptyRepositoryError from kallithea.lib.utils2 import safe_int, safe_str @@ -47,28 +46,10 @@ log = logging.getLogger(__name__) -def _load_changelog_summary(): - p = safe_int(request.GET.get('page'), 1) - size = safe_int(request.GET.get('size'), 10) - - def url_generator(**kw): - return url('changelog_summary_home', - repo_name=c.db_repo.repo_name, size=size, **kw) - - collection = c.db_repo_scm_instance - - c.repo_changesets = RepoPage(collection, page=p, - items_per_page=size, - url=url_generator) - page_revisions = [x.raw_id for x in list(c.repo_changesets)] - c.comments = c.db_repo.get_comments(page_revisions) - c.statuses = c.db_repo.statuses(page_revisions) - - class ChangelogController(BaseRepoController): - def __before__(self): - super(ChangelogController, self).__before__() + def _before(self, *args, **kwargs): + super(ChangelogController, self)._before(*args, **kwargs) c.affected_files_cut_off = 60 @staticmethod @@ -90,18 +71,9 @@ h.flash(safe_str(e), category='error') raise HTTPBadRequest() - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def index(self, repo_name, revision=None, f_path=None): - # Fix URL after page size form submission via GET - # TODO: Somehow just don't send this extra junk in the GET URL - if request.GET.get('set'): - request.GET.pop('set', None) - if revision is None: - return redirect(url('changelog_home', repo_name=repo_name, **request.GET)) - return redirect(url('changelog_file_home', repo_name=repo_name, revision=revision, f_path=f_path, **request.GET)) - limit = 2000 default = 100 if request.GET.get('size'): @@ -112,13 +84,13 @@ c.size = int(session.get('changelog_size', default)) # min size must be 1 c.size = max(c.size, 1) - p = safe_int(request.GET.get('page', 1), 1) + p = safe_int(request.GET.get('page'), 1) branch_name = request.GET.get('branch', None) if (branch_name and branch_name not in c.db_repo_scm_instance.branches and branch_name not in c.db_repo_scm_instance.closed_branches and not revision): - return redirect(url('changelog_file_home', repo_name=c.repo_name, + raise HTTPFound(location=url('changelog_file_home', repo_name=c.repo_name, revision=branch_name, f_path=f_path or '')) if revision == 'tip': @@ -134,32 +106,32 @@ try: collection = tip_cs.get_file_history(f_path) except (NodeDoesNotExistError, ChangesetError): - #this node is not present at tip ! + # this node is not present at tip ! try: cs = self.__get_cs(revision, repo_name) collection = cs.get_file_history(f_path) except RepositoryError as e: h.flash(safe_str(e), category='warning') - redirect(h.url('changelog_home', repo_name=repo_name)) + raise HTTPFound(location=h.url('changelog_home', repo_name=repo_name)) collection = list(reversed(collection)) else: collection = c.db_repo_scm_instance.get_changesets(start=0, end=revision, branch_name=branch_name) c.total_cs = len(collection) - c.pagination = RepoPage(collection, page=p, item_count=c.total_cs, + c.cs_pagination = RepoPage(collection, page=p, item_count=c.total_cs, items_per_page=c.size, branch=branch_name,) - page_revisions = [x.raw_id for x in c.pagination] - c.comments = c.db_repo.get_comments(page_revisions) - c.statuses = c.db_repo.statuses(page_revisions) + page_revisions = [x.raw_id for x in c.cs_pagination] + c.cs_comments = c.db_repo.get_comments(page_revisions) + c.cs_statuses = c.db_repo.statuses(page_revisions) except EmptyRepositoryError as e: h.flash(safe_str(e), category='warning') - return redirect(url('summary_home', repo_name=c.repo_name)) + raise HTTPFound(location=url('summary_home', repo_name=c.repo_name)) except (RepositoryError, ChangesetDoesNotExistError, Exception) as e: log.error(traceback.format_exc()) h.flash(safe_str(e), category='error') - return redirect(url('changelog_home', repo_name=c.repo_name)) + raise HTTPFound(location=url('changelog_home', repo_name=c.repo_name)) c.branch_name = branch_name c.branch_filters = [('', _('None'))] + \ @@ -170,28 +142,17 @@ [(k, prefix + k) for k in c.db_repo_scm_instance.closed_branches.keys()] revs = [] if not f_path: - revs = [x.revision for x in c.pagination] - c.jsdata = json.dumps(graph_data(c.db_repo_scm_instance, revs)) + revs = [x.revision for x in c.cs_pagination] + c.jsdata = graph_data(c.db_repo_scm_instance, revs) c.revision = revision # requested revision ref - c.first_revision = c.pagination[0] # pagination is never empty here! + c.first_revision = c.cs_pagination[0] # pagination is never empty here! return render('changelog/changelog.html') - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def changelog_details(self, cs): if request.environ.get('HTTP_X_PARTIAL_XHR'): c.cs = c.db_repo_scm_instance.get_changeset(cs) return render('changelog/changelog_details.html') raise HTTPNotFound() - - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - def changelog_summary(self, repo_name): - if request.environ.get('HTTP_X_PARTIAL_XHR'): - _load_changelog_summary() - - return render('changelog/changelog_summary_data.html') - raise HTTPNotFound() diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/changeset.py --- a/kallithea/controllers/changeset.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/changeset.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,8 +15,7 @@ kallithea.controllers.changeset ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -changeset controller for pylons showing changes between -revisions +changeset controller showing changes between revisions This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: @@ -29,21 +28,17 @@ import logging import traceback from collections import defaultdict -from webob.exc import HTTPForbidden, HTTPBadRequest, HTTPNotFound -from pylons import tmpl_context as c, request, response -from pylons.i18n.translation import _ -from pylons.controllers.util import redirect -from kallithea.lib.utils import jsonify +from tg import tmpl_context as c, request, response +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound, HTTPForbidden, HTTPBadRequest, HTTPNotFound from kallithea.lib.vcs.exceptions import RepositoryError, \ - ChangesetDoesNotExistError + ChangesetDoesNotExistError, EmptyRepositoryError -from kallithea.lib.compat import json import kallithea.lib.helpers as h -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\ - NotAnonymous -from kallithea.lib.base import BaseRepoController, render +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator +from kallithea.lib.base import BaseRepoController, render, jsonify from kallithea.lib.utils import action_logger from kallithea.lib.compat import OrderedDict from kallithea.lib import diffs @@ -52,7 +47,6 @@ from kallithea.model.changeset_status import ChangesetStatusModel from kallithea.model.meta import Session from kallithea.model.repo import RepoModel -from kallithea.lib.diffs import LimitedDiffContainer from kallithea.lib.exceptions import StatusChangeOnClosedPullRequestError from kallithea.lib.vcs.backends.base import EmptyChangeset from kallithea.lib.utils2 import safe_unicode @@ -110,7 +104,7 @@ params['anchor'] = fileid icon = h.literal('') - return h.link_to(icon, h.url.current(**params), title=lbl, class_='tooltip') + return h.link_to(icon, h.url.current(**params), title=lbl, **{'data-toggle': 'tooltip'}) def get_line_ctx(fid, GET): @@ -119,7 +113,7 @@ ln_ctx = filter(lambda k: k.startswith('C'), GET.getall(fid)) else: _ln_ctx = filter(lambda k: k.startswith('C'), GET) - ln_ctx = GET.get(_ln_ctx[0]) if _ln_ctx else ln_ctx_global + ln_ctx = GET.get(_ln_ctx[0]) if _ln_ctx else ln_ctx_global if ln_ctx: ln_ctx = [ln_ctx] @@ -170,26 +164,47 @@ params['anchor'] = fileid icon = h.literal('') - return h.link_to(icon, h.url.current(**params), title=lbl, class_='tooltip') + return h.link_to(icon, h.url.current(**params), title=lbl, **{'data-toggle': 'tooltip'}) + + +# Could perhaps be nice to have in the model but is too high level ... +def create_comment(text, status, f_path, line_no, revision=None, pull_request_id=None, closing_pr=None): + """Comment functionality shared between changesets and pullrequests""" + f_path = f_path or None + line_no = line_no or None + + comment = ChangesetCommentsModel().create( + text=text, + repo=c.db_repo.repo_id, + author=request.authuser.user_id, + revision=revision, + pull_request=pull_request_id, + f_path=f_path, + line_no=line_no, + status_change=ChangesetStatus.get_status_lbl(status) if status else None, + closing_pr=closing_pr, + ) + + return comment class ChangesetController(BaseRepoController): - def __before__(self): - super(ChangesetController, self).__before__() + def _before(self, *args, **kwargs): + super(ChangesetController, self)._before(*args, **kwargs) c.affected_files_cut_off = 60 def __load_data(self): repo_model = RepoModel() c.users_array = repo_model.get_users_js() - c.user_groups_array = repo_model.get_user_groups_js() def _index(self, revision, method): + c.pull_request = None c.anchor_url = anchor_url c.ignorews_url = _ignorews_url c.context_url = _context_url - c.fulldiff = fulldiff = request.GET.get('fulldiff') - #get ranges of revisions if preset + c.fulldiff = request.GET.get('fulldiff') # for reporting number of changed files + # get ranges of revisions if preset rev_range = revision.split('...')[:2] enable_comments = True c.cs_repo = c.db_repo @@ -207,7 +222,7 @@ if not c.cs_ranges: raise RepositoryError('Changeset range returned empty result') - except(ChangesetDoesNotExistError,), e: + except (ChangesetDoesNotExistError, EmptyRepositoryError): log.debug(traceback.format_exc()) msg = _('Such revision does not exist for this repository') h.flash(msg, category='error') @@ -226,7 +241,6 @@ # Iterate over ranges (default changeset view is always one changeset) for changeset in c.cs_ranges: - inlines = [] if method == 'show': c.statuses.extend([ChangesetStatusModel().get_status( c.db_repo.repo_id, changeset.raw_id)]) @@ -238,53 +252,46 @@ revision=changeset.raw_id)) # Status change comments - mostly from pull requests - comments.update((st.changeset_comment_id, st.comment) + comments.update((st.comment_id, st.comment) for st in ChangesetStatusModel() .get_statuses(c.db_repo.repo_id, changeset.raw_id, with_revisions=True) - if st.changeset_comment_id is not None) + if st.comment_id is not None) - inlines = ChangesetCommentsModel()\ + inlines = ChangesetCommentsModel() \ .get_inline_comments(c.db_repo.repo_id, revision=changeset.raw_id) c.inline_comments.extend(inlines) - c.changes[changeset.raw_id] = [] - cs2 = changeset.raw_id cs1 = changeset.parents[0].raw_id if changeset.parents else EmptyChangeset().raw_id context_lcl = get_line_ctx('', request.GET) - ign_whitespace_lcl = ign_whitespace_lcl = get_ignore_ws('', request.GET) + ign_whitespace_lcl = get_ignore_ws('', request.GET) - _diff = c.db_repo_scm_instance.get_diff(cs1, cs2, + raw_diff = diffs.get_diff(c.db_repo_scm_instance, cs1, cs2, ignore_whitespace=ign_whitespace_lcl, context=context_lcl) - diff_limit = self.cut_off_limit if not fulldiff else None - diff_processor = diffs.DiffProcessor(_diff, - vcs=c.db_repo_scm_instance.alias, - format='gitdiff', - diff_limit=diff_limit) - cs_changes = OrderedDict() + diff_limit = None if c.fulldiff else self.cut_off_limit + file_diff_data = [] if method == 'show': - _parsed = diff_processor.prepare() - c.limited_diff = False - if isinstance(_parsed, LimitedDiffContainer): - c.limited_diff = True - for f in _parsed: + diff_processor = diffs.DiffProcessor(raw_diff, + vcs=c.db_repo_scm_instance.alias, + diff_limit=diff_limit) + c.limited_diff = diff_processor.limited_diff + for f in diff_processor.parsed: st = f['stats'] c.lines_added += st['added'] c.lines_deleted += st['deleted'] - fid = h.FID(changeset.raw_id, f['filename']) - diff = diff_processor.as_html(enable_comments=enable_comments, - parsed_lines=[f]) - cs_changes[fid] = [cs1, cs2, f['operation'], f['filename'], - diff, st] + filename = f['filename'] + fid = h.FID(changeset.raw_id, filename) + url_fid = h.FID('', filename) + html_diff = diffs.as_html(enable_comments=enable_comments, parsed_lines=[f]) + file_diff_data.append((fid, url_fid, f['operation'], f['old_filename'], filename, html_diff, st)) else: # downloads/raw we only need RAW diff nothing else - diff = diff_processor.as_raw() - cs_changes[''] = [None, None, None, None, diff, None] - c.changes[changeset.raw_id] = cs_changes + file_diff_data.append(('', None, None, None, raw_diff, None)) + c.changes[changeset.raw_id] = (cs1, cs2, file_diff_data) - #sort comments in creation order + # sort comments in creation order c.comments = [com for com_id, com in sorted(comments.items())] # count inline comments @@ -300,14 +307,14 @@ response.content_type = 'text/plain' response.content_disposition = 'attachment; filename=%s.diff' \ % revision[:12] - return diff + return raw_diff elif method == 'patch': response.content_type = 'text/plain' - c.diff = safe_unicode(diff) + c.diff = safe_unicode(raw_diff) return render('changeset/patch_changeset.html') elif method == 'raw': response.content_type = 'text/plain' - return diff + return raw_diff elif method == 'show': self.__load_data() if len(c.cs_ranges) == 1: @@ -316,118 +323,88 @@ c.cs_ranges_org = None c.cs_comments = {} revs = [ctx.revision for ctx in reversed(c.cs_ranges)] - c.jsdata = json.dumps(graph_data(c.db_repo_scm_instance, revs)) + c.jsdata = graph_data(c.db_repo_scm_instance, revs) return render('changeset/changeset_range.html') - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def index(self, revision, method='show'): return self._index(revision, method=method) - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def changeset_raw(self, revision): return self._index(revision, method='raw') - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def changeset_patch(self, revision): return self._index(revision, method='patch') - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def changeset_download(self, revision): return self._index(revision, method='download') @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') @jsonify def comment(self, repo_name, revision): + assert request.environ.get('HTTP_X_PARTIAL_XHR') + status = request.POST.get('changeset_status') text = request.POST.get('text', '').strip() - c.comment = comment = ChangesetCommentsModel().create( - text=text, - repo=c.db_repo.repo_id, - user=c.authuser.user_id, + c.comment = create_comment( + text, + status, revision=revision, f_path=request.POST.get('f_path'), line_no=request.POST.get('line'), - status_change=(ChangesetStatus.get_status_lbl(status) - if status else None) ) # get status if set ! if status: # if latest status was from pull request and it's closed - # disallow changing status ! - # dont_allow_on_closed_pull_request = True ! - + # disallow changing status ! RLY? try: ChangesetStatusModel().set_status( c.db_repo.repo_id, status, - c.authuser.user_id, - comment, + request.authuser.user_id, + c.comment, revision=revision, - dont_allow_on_closed_pull_request=True + dont_allow_on_closed_pull_request=True, ) except StatusChangeOnClosedPullRequestError: - log.debug(traceback.format_exc()) - msg = _('Changing status on a changeset associated with ' - 'a closed pull request is not allowed') - h.flash(msg, category='warning') - return redirect(h.url('changeset_home', repo_name=repo_name, - revision=revision)) - action_logger(self.authuser, + log.debug('cannot change status on %s with closed pull request', revision) + raise HTTPBadRequest() + + action_logger(request.authuser, 'user_commented_revision:%s' % revision, - c.db_repo, self.ip_addr, self.sa) + c.db_repo, request.ip_addr) Session().commit() - if not request.environ.get('HTTP_X_PARTIAL_XHR'): - return redirect(h.url('changeset_home', repo_name=repo_name, - revision=revision)) - #only ajax below data = { 'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))), } - if comment is not None: - data.update(comment.get_dict()) + if c.comment is not None: + data.update(c.comment.get_dict()) data.update({'rendered_text': render('changeset/changeset_comment_block.html')}) return data @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - def preview_comment(self): - if not request.environ.get('HTTP_X_PARTIAL_XHR'): - raise HTTPBadRequest() - text = request.POST.get('text') - if text: - return h.rst_w_mentions(text) - return '' - - @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') @jsonify def delete_comment(self, repo_name, comment_id): co = ChangesetComment.get_or_404(comment_id) if co.repo.repo_name != repo_name: raise HTTPNotFound() - owner = co.author.user_id == c.authuser.user_id - repo_admin = h.HasRepoPermissionAny('repository.admin')(repo_name) + owner = co.author_id == request.authuser.user_id + repo_admin = h.HasRepoPermissionLevel('admin')(repo_name) if h.HasPermissionAny('hg.admin')() or repo_admin or owner: ChangesetCommentsModel().delete(comment=co) Session().commit() @@ -435,9 +412,8 @@ else: raise HTTPForbidden() - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') @jsonify def changeset_info(self, repo_name, revision): if request.is_xhr: @@ -448,9 +424,8 @@ else: raise HTTPBadRequest() - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') @jsonify def changeset_children(self, repo_name, revision): if request.is_xhr: @@ -462,9 +437,8 @@ else: raise HTTPBadRequest() - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') @jsonify def changeset_parents(self, repo_name, revision): if request.is_xhr: diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/compare.py --- a/kallithea/controllers/compare.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/compare.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.controllers.compare ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -compare controller for pylons showing differences between two +compare controller showing differences between two repos, branches, bookmarks or tips This file was forked by the Kallithea project in July 2014. @@ -30,29 +30,48 @@ import logging import re -from webob.exc import HTTPBadRequest -from pylons import request, tmpl_context as c, url -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound, HTTPBadRequest, HTTPNotFound +from kallithea.config.routing import url +from kallithea.lib.utils2 import safe_str, safe_int from kallithea.lib.vcs.utils.hgcompat import unionrepo from kallithea.lib import helpers as h from kallithea.lib.base import BaseRepoController, render -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator from kallithea.lib import diffs from kallithea.model.db import Repository -from kallithea.lib.diffs import LimitedDiffContainer from kallithea.controllers.changeset import _ignorews_url, _context_url from kallithea.lib.graphmod import graph_data -from kallithea.lib.compat import json log = logging.getLogger(__name__) class CompareController(BaseRepoController): - def __before__(self): - super(CompareController, self).__before__() + def _before(self, *args, **kwargs): + super(CompareController, self)._before(*args, **kwargs) + + # The base repository has already been retrieved. + c.a_repo = c.db_repo + + # Retrieve the "changeset" repository (default: same as base). + other_repo = request.GET.get('other_repo', None) + if other_repo is None: + c.cs_repo = c.a_repo + else: + c.cs_repo = Repository.get_by_repo_name(other_repo) + if c.cs_repo is None: + msg = _('Could not find other repository %s') % other_repo + h.flash(msg, category='error') + raise HTTPFound(location=url('compare_home', repo_name=c.a_repo.repo_name)) + + # Verify that it's even possible to compare these two repositories. + if c.a_repo.scm_instance.alias != c.cs_repo.scm_instance.alias: + msg = _('Cannot compare repositories of different types') + h.flash(msg, category='error') + raise HTTPFound(location=url('compare_home', repo_name=c.a_repo.repo_name)) @staticmethod def _get_changesets(alias, org_repo, org_rev, other_repo, other_rev): @@ -60,7 +79,7 @@ Returns lists of changesets that can be merged from org_repo@org_rev to other_repo@other_rev ... and the other way - ... and the ancestor that would be used for merge + ... and the ancestors that would be used for merge :param org_repo: repo object, that is most likely the original repo we forked from :param org_rev: the revision we want our compare to be made @@ -68,14 +87,13 @@ all changesets that we need to obtain :param other_rev: revision we want out compare to be made on other_repo """ - ancestor = None + ancestors = None if org_rev == other_rev: org_changesets = [] other_changesets = [] - ancestor = org_rev elif alias == 'hg': - #case two independent repos + # case two independent repos if org_repo != other_repo: hgrepo = unionrepo.unionrepository(other_repo.baseui, other_repo.path, @@ -83,29 +101,24 @@ # all ancestors of other_rev will be in other_repo and # rev numbers from hgrepo can be used in other_repo - org_rev ancestors cannot - #no remote compare do it on the same repository + # no remote compare do it on the same repository else: hgrepo = other_repo._repo - if org_repo.EMPTY_CHANGESET in (org_rev, other_rev): - # work around unexpected behaviour in Mercurial < 3.4 - ancestor = org_repo.EMPTY_CHANGESET + ancestors = [hgrepo[ancestor].hex() for ancestor in + hgrepo.revs("id(%s) & ::id(%s)", other_rev, org_rev)] + if ancestors: + log.debug("shortcut found: %s is already an ancestor of %s", other_rev, org_rev) else: - ancestors = hgrepo.revs("ancestor(id(%s), id(%s))", org_rev, other_rev) - if ancestors: - # FIXME: picks arbitrary ancestor - but there is usually only one - try: - ancestor = hgrepo[ancestors.first()].hex() - except AttributeError: - # removed in hg 3.2 - ancestor = hgrepo[ancestors[0]].hex() + log.debug("no shortcut found: %s is not an ancestor of %s", other_rev, org_rev) + ancestors = [hgrepo[ancestor].hex() for ancestor in + hgrepo.revs("heads(::id(%s) & ::id(%s))", org_rev, other_rev)] # FIXME: expensive! other_revs = hgrepo.revs("ancestors(id(%s)) and not ancestors(id(%s)) and not id(%s)", other_rev, org_rev, org_rev) other_changesets = [other_repo.get_changeset(rev) for rev in other_revs] org_revs = hgrepo.revs("ancestors(id(%s)) and not ancestors(id(%s)) and not id(%s)", org_rev, other_rev, other_rev) - org_changesets = [org_repo.get_changeset(hgrepo[rev].hex()) for rev in org_revs] elif alias == 'git': @@ -114,22 +127,25 @@ from dulwich.client import SubprocessGitClient gitrepo = Repo(org_repo.path) - SubprocessGitClient(thin_packs=False).fetch(other_repo.path, gitrepo) + SubprocessGitClient(thin_packs=False).fetch(safe_str(other_repo.path), gitrepo) gitrepo_remote = Repo(other_repo.path) - SubprocessGitClient(thin_packs=False).fetch(org_repo.path, gitrepo_remote) + SubprocessGitClient(thin_packs=False).fetch(safe_str(org_repo.path), gitrepo_remote) - revs = [] - for x in gitrepo_remote.get_walker(include=[other_rev], - exclude=[org_rev]): - revs.append(x.commit.id) - + revs = [ + x.commit.id + for x in gitrepo_remote.get_walker(include=[other_rev], + exclude=[org_rev]) + ] other_changesets = [other_repo.get_changeset(rev) for rev in reversed(revs)] if other_changesets: - ancestor = other_changesets[0].parents[0].raw_id + ancestors = [other_changesets[0].parents[0].raw_id] else: # no changesets from other repo, ancestor is the other_rev - ancestor = other_rev + ancestors = [other_rev] + + gitrepo.close() + gitrepo_remote.close() else: so, se = org_repo.run_git_command( @@ -141,35 +157,27 @@ so, se = org_repo.run_git_command( ['merge-base', org_rev, other_rev] ) - ancestor = re.findall(r'[0-9a-fA-F]{40}', so)[0] + ancestors = [re.findall(r'[0-9a-fA-F]{40}', so)[0]] org_changesets = [] else: raise Exception('Bad alias only git and hg is allowed') - return other_changesets, org_changesets, ancestor + return other_changesets, org_changesets, ancestors - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def index(self, repo_name): c.compare_home = True - org_repo = c.db_repo.repo_name - other_repo = request.GET.get('other_repo', org_repo) - c.a_repo = Repository.get_by_repo_name(org_repo) - c.cs_repo = Repository.get_by_repo_name(other_repo) - c.a_ref_name = c.cs_ref_name = _('Select changeset') + c.a_ref_name = c.cs_ref_name = None return render('compare/compare_diff.html') - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def compare(self, repo_name, org_ref_type, org_ref_name, other_ref_type, other_ref_name): org_ref_name = org_ref_name.strip() other_ref_name = other_ref_name.strip() - org_repo = c.db_repo.repo_name - other_repo = request.GET.get('other_repo', org_repo) # If merge is True: # Show what org would get if merged with other: # List changesets that are ancestors of other but not of org. @@ -180,16 +188,16 @@ # Changesets in one and not in the other will be ignored merge = bool(request.GET.get('merge')) # fulldiff disables cut_off_limit - c.fulldiff = request.GET.get('fulldiff') + fulldiff = request.GET.get('fulldiff') # partial uses compare_cs.html template directly partial = request.environ.get('HTTP_X_PARTIAL_XHR') - # as_form puts hidden input field with changeset revisions - c.as_form = partial and request.GET.get('as_form') - # swap url for compare_diff page - never partial and never as_form + # is_ajax_preview puts hidden input field with changeset revisions + c.is_ajax_preview = partial and request.GET.get('is_ajax_preview') + # swap url for compare_diff page - never partial and never is_ajax_preview c.swap_url = h.url('compare_url', - repo_name=other_repo, + repo_name=c.cs_repo.repo_name, org_ref_type=other_ref_type, org_ref_name=other_ref_name, - other_repo=org_repo, + other_repo=c.a_repo.repo_name, other_ref_type=org_ref_type, other_ref_name=org_ref_name, merge=merge or '') @@ -197,64 +205,56 @@ c.ignorews_url = _ignorews_url c.context_url = _context_url ignore_whitespace = request.GET.get('ignorews') == '1' - line_context = request.GET.get('context', 3) - - org_repo = Repository.get_by_repo_name(org_repo) - other_repo = Repository.get_by_repo_name(other_repo) - - if org_repo is None: - msg = 'Could not find org repo %s' % org_repo - log.error(msg) - h.flash(msg, category='error') - return redirect(url('compare_home', repo_name=c.repo_name)) + line_context = safe_int(request.GET.get('context'), 3) - if other_repo is None: - msg = 'Could not find other repo %s' % other_repo - log.error(msg) - h.flash(msg, category='error') - return redirect(url('compare_home', repo_name=c.repo_name)) - - if org_repo.scm_instance.alias != other_repo.scm_instance.alias: - msg = 'compare of two different kind of remote repos not available' - log.error(msg) - h.flash(msg, category='error') - return redirect(url('compare_home', repo_name=c.repo_name)) - - c.a_rev = self._get_ref_rev(org_repo, org_ref_type, org_ref_name, + c.a_rev = self._get_ref_rev(c.a_repo, org_ref_type, org_ref_name, returnempty=True) - c.cs_rev = self._get_ref_rev(other_repo, other_ref_type, other_ref_name) + c.cs_rev = self._get_ref_rev(c.cs_repo, other_ref_type, other_ref_name) c.compare_home = False - c.a_repo = org_repo c.a_ref_name = org_ref_name c.a_ref_type = org_ref_type - c.cs_repo = other_repo c.cs_ref_name = other_ref_name c.cs_ref_type = other_ref_type - c.cs_ranges, c.cs_ranges_org, c.ancestor = self._get_changesets( - org_repo.scm_instance.alias, org_repo.scm_instance, c.a_rev, - other_repo.scm_instance, c.cs_rev) + c.cs_ranges, c.cs_ranges_org, c.ancestors = self._get_changesets( + c.a_repo.scm_instance.alias, c.a_repo.scm_instance, c.a_rev, + c.cs_repo.scm_instance, c.cs_rev) raw_ids = [x.raw_id for x in c.cs_ranges] - c.cs_comments = other_repo.get_comments(raw_ids) - c.statuses = other_repo.statuses(raw_ids) + c.cs_comments = c.cs_repo.get_comments(raw_ids) + c.cs_statuses = c.cs_repo.statuses(raw_ids) revs = [ctx.revision for ctx in reversed(c.cs_ranges)] - c.jsdata = json.dumps(graph_data(c.cs_repo.scm_instance, revs)) + c.jsdata = graph_data(c.cs_repo.scm_instance, revs) if partial: return render('compare/compare_cs.html') - if merge and c.ancestor: + + org_repo = c.a_repo + other_repo = c.cs_repo + + if merge: + rev1 = msg = None + if not c.cs_ranges: + msg = _('Cannot show empty diff') + elif not c.ancestors: + msg = _('No ancestor found for merge diff') + elif len(c.ancestors) == 1: + rev1 = c.ancestors[0] + else: + msg = _('Multiple merge ancestors found for merge compare') + if rev1 is None: + h.flash(msg, category='error') + log.error(msg) + raise HTTPNotFound + # case we want a simple diff without incoming changesets, # previewing what will be merged. # Make the diff on the other repo (which is known to have other_rev) log.debug('Using ancestor %s as rev1 instead of %s', - c.ancestor, c.a_rev) - rev1 = c.ancestor + rev1, c.a_rev) org_repo = other_repo else: # comparing tips, not necessarily linearly related - if merge: - log.error('Unable to find ancestor revision') if org_repo != other_repo: # TODO: we could do this by using hg unionrepo log.error('cannot compare across repos %s and %s', org_repo, other_repo) @@ -262,34 +262,26 @@ raise HTTPBadRequest rev1 = c.a_rev - diff_limit = self.cut_off_limit if not c.fulldiff else None + diff_limit = None if fulldiff else self.cut_off_limit log.debug('running diff between %s and %s in %s', rev1, c.cs_rev, org_repo.scm_instance.path) - txtdiff = org_repo.scm_instance.get_diff(rev1=rev1, rev2=c.cs_rev, + raw_diff = diffs.get_diff(org_repo.scm_instance, rev1=rev1, rev2=c.cs_rev, ignore_whitespace=ignore_whitespace, context=line_context) - diff_processor = diffs.DiffProcessor(txtdiff or '', format='gitdiff', - diff_limit=diff_limit) - _parsed = diff_processor.prepare() - - c.limited_diff = False - if isinstance(_parsed, LimitedDiffContainer): - c.limited_diff = True - - c.files = [] - c.changes = {} + diff_processor = diffs.DiffProcessor(raw_diff or '', diff_limit=diff_limit) + c.limited_diff = diff_processor.limited_diff + c.file_diff_data = [] c.lines_added = 0 c.lines_deleted = 0 - for f in _parsed: + for f in diff_processor.parsed: st = f['stats'] - if not st['binary']: - c.lines_added += st['added'] - c.lines_deleted += st['deleted'] - fid = h.FID('', f['filename']) - c.files.append([fid, f['operation'], f['filename'], f['stats']]) - htmldiff = diff_processor.as_html(enable_comments=False, parsed_lines=[f]) - c.changes[fid] = [f['operation'], f['filename'], htmldiff] + c.lines_added += st['added'] + c.lines_deleted += st['deleted'] + filename = f['filename'] + fid = h.FID('', filename) + html_diff = diffs.as_html(enable_comments=False, parsed_lines=[f]) + c.file_diff_data.append((fid, None, f['operation'], f['old_filename'], filename, html_diff, st)) return render('compare/compare_diff.html') diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/error.py --- a/kallithea/controllers/error.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/error.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,11 +28,9 @@ import os import cgi import logging -import paste.fileapp -from pylons import tmpl_context as c, request, config -from pylons.i18n.translation import _ -from pylons.middleware import media_path +from tg import tmpl_context as c, request, config, expose +from tg.i18n import ugettext as _ from kallithea.lib.base import BaseController, render @@ -49,12 +47,13 @@ ErrorDocuments middleware in your config/middleware.py file. """ - def __before__(self): + def _before(self, *args, **kwargs): # disable all base actions since we don't need them here pass - def document(self): - resp = request.environ.get('pylons.original_response') + @expose('/errors/error_document.html') + def document(self, *args, **kwargs): + resp = request.environ.get('tg.original_response') c.site_name = config.get('title') log.debug('### %s ###', resp and resp.status or 'no response') @@ -71,22 +70,7 @@ c.error_message = _('No response') c.error_explanation = _('Unknown error') - return render('/errors/error_document.html') - - def img(self, id): - """Serve Pylons' stock images""" - return self._serve_file(os.path.join(media_path, 'img', id)) - - def style(self, id): - """Serve Pylons' stock stylesheets""" - return self._serve_file(os.path.join(media_path, 'style', id)) - - def _serve_file(self, path): - """Call Paste's FileApp (a WSGI application) to serve the file - at the specified path - """ - fapp = paste.fileapp.FileApp(path) - return fapp(request.environ, self.start_response) + return dict() def get_error_explanation(self, code): """ get the error explanations of int codes diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/feed.py --- a/kallithea/controllers/feed.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/feed.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,77 +28,65 @@ import logging -from pylons import response, tmpl_context as c -from pylons.i18n.translation import _ +from tg import response, tmpl_context as c +from tg.i18n import ugettext as _ from beaker.cache import cache_region, region_invalidate from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed +from kallithea import CONFIG from kallithea.lib import helpers as h -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator from kallithea.lib.base import BaseRepoController -from kallithea.lib.diffs import DiffProcessor, LimitedDiffContainer +from kallithea.lib.diffs import DiffProcessor from kallithea.model.db import CacheInvalidation from kallithea.lib.utils2 import safe_int, str2bool, safe_unicode log = logging.getLogger(__name__) +language = 'en-us' +ttl = "5" + + class FeedController(BaseRepoController): - @LoginRequired(api_access=True) - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - def __before__(self): - super(FeedController, self).__before__() - #common values for feeds - self.description = _('Changes on %s repository') - self.title = self.title = _('%s %s feed') % (c.site_name, '%s') - self.language = 'en-us' - self.ttl = "5" - import kallithea - CONF = kallithea.CONFIG - self.include_diff = str2bool(CONF.get('rss_include_diff', False)) - self.feed_nr = safe_int(CONF.get('rss_items_per_page', 20)) - # we need to protect from parsing huge diffs here other way - # we can kill the server - self.feed_diff_limit = safe_int(CONF.get('rss_cut_off_limit', 32 * 1024)) + @LoginRequired(api_access=True, allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') + def _before(self, *args, **kwargs): + super(FeedController, self)._before(*args, **kwargs) def _get_title(self, cs): return h.shorter(cs.message, 160) - def __changes(self, cs): + def __get_desc(self, cs): + desc_msg = [(_('%s committed on %s') + % (h.person(cs.author), h.fmt_date(cs.date))) + '
'] + # branches, tags, bookmarks + for branch in cs.branches: + desc_msg.append('branch: %s
' % branch) + for book in cs.bookmarks: + desc_msg.append('bookmark: %s
' % book) + for tag in cs.tags: + desc_msg.append('tag: %s
' % tag) + changes = [] - diff_processor = DiffProcessor(cs.diff(), - diff_limit=self.feed_diff_limit) - _parsed = diff_processor.prepare(inline_diff=False) - limited_diff = False - if isinstance(_parsed, LimitedDiffContainer): - limited_diff = True + diff_limit = safe_int(CONFIG.get('rss_cut_off_limit', 32 * 1024)) + raw_diff = cs.diff() + diff_processor = DiffProcessor(raw_diff, + diff_limit=diff_limit, + inline_diff=False) - for st in _parsed: + for st in diff_processor.parsed: st.update({'added': st['stats']['added'], 'removed': st['stats']['deleted']}) changes.append('\n %(operation)s %(filename)s ' '(%(added)s lines added, %(removed)s lines removed)' % st) - if limited_diff: + if diff_processor.limited_diff: changes = changes + ['\n ' + _('Changeset was too big and was cut off...')] - return diff_processor, changes - def __get_desc(self, cs): - desc_msg = [(_('%s committed on %s') - % (h.person(cs.author), h.fmt_date(cs.date))) + '
'] - #branches, tags, bookmarks - if cs.branch: - desc_msg.append('branch: %s
' % cs.branch) - if h.is_hg(c.db_repo_scm_instance): - for book in cs.bookmarks: - desc_msg.append('bookmark: %s
' % book) - for tag in cs.tags: - desc_msg.append('tag: %s
' % tag) - diff_processor, changes = self.__changes(cs) # rev link _url = h.canonical_url('changeset_home', repo_name=c.db_repo.repo_name, revision=cs.raw_id) @@ -108,26 +96,27 @@ desc_msg.append(h.urlify_text(cs.message)) desc_msg.append('\n') desc_msg.extend(changes) - if self.include_diff: + if str2bool(CONFIG.get('rss_include_diff', False)): desc_msg.append('\n\n') - desc_msg.append(diff_processor.as_raw()) + desc_msg.append(raw_diff) desc_msg.append('') return map(safe_unicode, desc_msg) def atom(self, repo_name): """Produce an atom-1.0 feed via feedgenerator module""" - @cache_region('long_term') + @cache_region('long_term', '_get_feed_from_cache') def _get_feed_from_cache(key, kind): feed = Atom1Feed( - title=self.title % repo_name, - link=h.canonical_url('summary_home', repo_name=repo_name), - description=self.description % repo_name, - language=self.language, - ttl=self.ttl + title=_('%s %s feed') % (c.site_name, repo_name), + link=h.canonical_url('summary_home', repo_name=repo_name), + description=_('Changes on %s repository') % repo_name, + language=language, + ttl=ttl ) - for cs in reversed(list(c.db_repo_scm_instance[-self.feed_nr:])): + rss_items_per_page = safe_int(CONFIG.get('rss_items_per_page', 20)) + for cs in reversed(list(c.db_repo_scm_instance[-rss_items_per_page:])): feed.add_item(title=self._get_title(cs), link=h.canonical_url('changeset_home', repo_name=repo_name, revision=cs.raw_id), @@ -142,23 +131,24 @@ kind = 'ATOM' valid = CacheInvalidation.test_and_set_valid(repo_name, kind) if not valid: - region_invalidate(_get_feed_from_cache, None, repo_name, kind) + region_invalidate(_get_feed_from_cache, None, '_get_feed_from_cache', repo_name, kind) return _get_feed_from_cache(repo_name, kind) def rss(self, repo_name): """Produce an rss2 feed via feedgenerator module""" - @cache_region('long_term') + @cache_region('long_term', '_get_feed_from_cache') def _get_feed_from_cache(key, kind): feed = Rss201rev2Feed( - title=self.title % repo_name, + title=_('%s %s feed') % (c.site_name, repo_name), link=h.canonical_url('summary_home', repo_name=repo_name), - description=self.description % repo_name, - language=self.language, - ttl=self.ttl + description=_('Changes on %s repository') % repo_name, + language=language, + ttl=ttl ) - for cs in reversed(list(c.db_repo_scm_instance[-self.feed_nr:])): + rss_items_per_page = safe_int(CONFIG.get('rss_items_per_page', 20)) + for cs in reversed(list(c.db_repo_scm_instance[-rss_items_per_page:])): feed.add_item(title=self._get_title(cs), link=h.canonical_url('changeset_home', repo_name=repo_name, revision=cs.raw_id), @@ -173,5 +163,5 @@ kind = 'RSS' valid = CacheInvalidation.test_and_set_valid(repo_name, kind) if not valid: - region_invalidate(_get_feed_from_cache, None, repo_name, kind) + region_invalidate(_get_feed_from_cache, None, '_get_feed_from_cache', repo_name, kind) return _get_feed_from_cache(repo_name, kind) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/files.py --- a/kallithea/controllers/files.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/files.py Thu Jun 07 01:46:02 2018 +0200 @@ -26,29 +26,31 @@ """ import os +import posixpath import logging import traceback import tempfile import shutil -from pylons import request, response, tmpl_context as c, url -from pylons.i18n.translation import _ -from pylons.controllers.util import redirect -from kallithea.lib.utils import jsonify, action_logger +from tg import request, response, tmpl_context as c +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound +from kallithea.config.routing import url +from kallithea.lib.utils import action_logger from kallithea.lib import diffs from kallithea.lib import helpers as h from kallithea.lib.compat import OrderedDict -from kallithea.lib.utils2 import convert_line_endings, detect_mode, safe_str,\ - str2bool -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator -from kallithea.lib.base import BaseRepoController, render +from kallithea.lib.utils2 import convert_line_endings, detect_mode, safe_str, \ + str2bool, safe_int +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator +from kallithea.lib.base import BaseRepoController, render, jsonify from kallithea.lib.vcs.backends.base import EmptyChangeset from kallithea.lib.vcs.conf import settings from kallithea.lib.vcs.exceptions import RepositoryError, \ ChangesetDoesNotExistError, EmptyRepositoryError, \ - ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError,\ + ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError, \ NodeDoesNotExistError, ChangesetError, NodeError from kallithea.lib.vcs.nodes import FileNode @@ -56,7 +58,7 @@ from kallithea.model.scm import ScmModel from kallithea.model.db import Repository -from kallithea.controllers.changeset import anchor_url, _ignorews_url,\ +from kallithea.controllers.changeset import anchor_url, _ignorews_url, \ _context_url, get_line_ctx, get_ignore_ws from webob.exc import HTTPNotFound from kallithea.lib.exceptions import NonRelativePathError @@ -67,9 +69,8 @@ class FilesController(BaseRepoController): - def __before__(self): - super(FilesController, self).__before__() - c.cut_off_limit = self.cut_off_limit + def _before(self, *args, **kwargs): + super(FilesController, self)._before(*args, **kwargs) def __get_cs(self, rev, silent_empty=False): """ @@ -92,7 +93,7 @@ h.flash(h.literal(_('There are no files yet. %s') % add_new), category='warning') raise HTTPNotFound() - except(ChangesetDoesNotExistError, LookupError), e: + except (ChangesetDoesNotExistError, LookupError): msg = _('Such revision does not exist for this repository') h.flash(msg, category='error') raise HTTPNotFound() @@ -112,7 +113,7 @@ file_node = cs.get_node(path) if file_node.is_dir(): raise RepositoryError('given path is a directory') - except(ChangesetDoesNotExistError,), e: + except ChangesetDoesNotExistError: msg = _('Such revision does not exist for this repository') h.flash(msg, category='error') raise HTTPNotFound() @@ -122,9 +123,8 @@ return file_node - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def index(self, repo_name, revision, f_path, annotate=False): # redirect to given revision from form if given post_revision = request.POST.get('at_rev', None) @@ -137,6 +137,9 @@ c.f_path = f_path c.annotate = annotate cur_rev = c.changeset.revision + # used in files_source.html: + c.cut_off_limit = self.cut_off_limit + c.fulldiff = request.GET.get('fulldiff') # prev link try: @@ -162,13 +165,11 @@ try: c.file = c.changeset.get_node(f_path) - if c.file.is_file(): + if c.file.is_submodule(): + raise HTTPFound(location=c.file.url) + elif c.file.is_file(): c.load_full_history = False - file_last_cs = c.file.last_changeset - c.file_changeset = (c.changeset - if c.changeset.revision < file_last_cs.revision - else file_last_cs) - #determine if we're on branch head + # determine if we're on branch head _branches = c.db_repo_scm_instance.branches c.on_branch_head = revision in _branches.keys() + _branches.values() _hist = [] @@ -190,7 +191,7 @@ # TODO: tags and bookmarks? c.revision_options = [(c.changeset.raw_id, - _('%s at %s') % (c.changeset.branch, h.short_id(c.changeset.raw_id)))] + \ + _('%s at %s') % (b, h.short_id(c.changeset.raw_id))) for b in c.changeset.branches] + \ [(n, b) for b, n in c.db_repo_scm_instance.branches.items()] if c.db_repo_scm_instance.closed_branches: prefix = _('(closed)') + ' ' @@ -199,13 +200,11 @@ return render('files/files.html') - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') @jsonify def history(self, repo_name, revision, f_path): changeset = self.__get_cs(revision) - f_path = f_path _file = changeset.get_node(f_path) if _file.is_file(): file_history, _hist = self._get_node_history(changeset, f_path) @@ -223,12 +222,10 @@ } return data - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def authors(self, repo_name, revision, f_path): changeset = self.__get_cs(revision) - f_path = f_path _file = changeset.get_node(f_path) if _file.is_file(): file_history, _hist = self._get_node_history(changeset, f_path) @@ -237,9 +234,8 @@ c.authors.append((h.email(a), h.person(a))) return render('files/files_history_box.html') - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def rawfile(self, repo_name, revision, f_path): cs = self.__get_cs(revision) file_node = self.__get_filenode(cs, f_path) @@ -250,9 +246,8 @@ response.content_type = file_node.mimetype return file_node.content - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def raw(self, repo_name, revision, f_path): cs = self.__get_cs(revision) file_node = self.__get_filenode(cs, f_path) @@ -298,7 +293,7 @@ return file_node.content @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') + @HasRepoPermissionLevelDecorator('write') def delete(self, repo_name, revision, f_path): repo = c.db_repo if repo.enable_locking and repo.locked[0]: @@ -306,7 +301,7 @@ % (h.person_by_id(repo.locked[0]), h.fmt_date(h.time_to_datetime(repo.locked[1]))), 'warning') - return redirect(h.url('files_home', + raise HTTPFound(location=h.url('files_home', repo_name=repo_name, revision='tip')) # check if revision is a branch identifier- basically we cannot @@ -316,7 +311,7 @@ if revision not in _branches.keys() + _branches.values(): h.flash(_('You can only delete files with revision ' 'being a valid branch'), category='warning') - return redirect(h.url('files_home', + raise HTTPFound(location=h.url('files_home', repo_name=repo_name, revision='tip', f_path=f_path)) @@ -328,7 +323,7 @@ c.default_message = _('Deleted file %s via Kallithea') % (f_path) c.f_path = f_path node_path = f_path - author = self.authuser.full_contact + author = request.authuser.full_contact if r_post: message = r_post.get('message') or c.default_message @@ -340,7 +335,7 @@ } } self.scm_model.delete_nodes( - user=c.authuser.user_id, repo=c.db_repo, + user=request.authuser.user_id, repo=c.db_repo, message=message, nodes=nodes, parent_cs=c.cs, @@ -352,13 +347,13 @@ except Exception: log.error(traceback.format_exc()) h.flash(_('Error occurred during commit'), category='error') - return redirect(url('changeset_home', + raise HTTPFound(location=url('changeset_home', repo_name=c.repo_name, revision='tip')) return render('files/files_delete.html') @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') + @HasRepoPermissionLevelDecorator('write') def edit(self, repo_name, revision, f_path): repo = c.db_repo if repo.enable_locking and repo.locked[0]: @@ -366,7 +361,7 @@ % (h.person_by_id(repo.locked[0]), h.fmt_date(h.time_to_datetime(repo.locked[1]))), 'warning') - return redirect(h.url('files_home', + raise HTTPFound(location=h.url('files_home', repo_name=repo_name, revision='tip')) # check if revision is a branch identifier- basically we cannot @@ -376,7 +371,7 @@ if revision not in _branches.keys() + _branches.values(): h.flash(_('You can only edit files with revision ' 'being a valid branch'), category='warning') - return redirect(h.url('files_home', + raise HTTPFound(location=h.url('files_home', repo_name=repo_name, revision='tip', f_path=f_path)) @@ -386,7 +381,7 @@ c.file = self.__get_filenode(c.cs, f_path) if c.file.is_binary: - return redirect(url('files_home', repo_name=c.repo_name, + raise HTTPFound(location=url('files_home', repo_name=c.repo_name, revision=c.cs.raw_id, f_path=f_path)) c.default_message = _('Edited file %s via Kallithea') % (f_path) c.f_path = f_path @@ -401,16 +396,16 @@ content = convert_line_endings(r_post.get('content', ''), mode) message = r_post.get('message') or c.default_message - author = self.authuser.full_contact + author = request.authuser.full_contact if content == old_content: h.flash(_('No changes'), category='warning') - return redirect(url('changeset_home', repo_name=c.repo_name, + raise HTTPFound(location=url('changeset_home', repo_name=c.repo_name, revision='tip')) try: self.scm_model.commit_change(repo=c.db_repo_scm_instance, repo_name=repo_name, cs=c.cs, - user=self.authuser.user_id, + user=request.authuser.user_id, author=author, message=message, content=content, f_path=f_path) h.flash(_('Successfully committed to %s') % f_path, @@ -418,22 +413,22 @@ except Exception: log.error(traceback.format_exc()) h.flash(_('Error occurred during commit'), category='error') - return redirect(url('changeset_home', + raise HTTPFound(location=url('changeset_home', repo_name=c.repo_name, revision='tip')) return render('files/files_edit.html') @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') + @HasRepoPermissionLevelDecorator('write') def add(self, repo_name, revision, f_path): - repo = Repository.get_by_repo_name(repo_name) + repo = c.db_repo if repo.enable_locking and repo.locked[0]: h.flash(_('This repository has been locked by %s on %s') % (h.person_by_id(repo.locked[0]), h.fmt_date(h.time_to_datetime(repo.locked[1]))), 'warning') - return redirect(h.url('files_home', + raise HTTPFound(location=h.url('files_home', repo_name=repo_name, revision='tip')) r_post = request.POST @@ -462,16 +457,16 @@ if not content: h.flash(_('No content'), category='warning') - return redirect(url('changeset_home', repo_name=c.repo_name, + raise HTTPFound(location=url('changeset_home', repo_name=c.repo_name, revision='tip')) if not filename: h.flash(_('No filename'), category='warning') - return redirect(url('changeset_home', repo_name=c.repo_name, + raise HTTPFound(location=url('changeset_home', repo_name=c.repo_name, revision='tip')) - #strip all crap out of file, just leave the basename + # strip all crap out of file, just leave the basename filename = os.path.basename(filename) - node_path = os.path.join(location, filename) - author = self.authuser.full_contact + node_path = posixpath.join(location, filename) + author = request.authuser.full_contact try: nodes = { @@ -480,7 +475,7 @@ } } self.scm_model.create_nodes( - user=c.authuser.user_id, repo=c.db_repo, + user=request.authuser.user_id, repo=c.db_repo, message=message, nodes=nodes, parent_cs=c.cs, @@ -492,21 +487,20 @@ except NonRelativePathError as e: h.flash(_('Location must be relative path and must not ' 'contain .. in path'), category='warning') - return redirect(url('changeset_home', repo_name=c.repo_name, + raise HTTPFound(location=url('changeset_home', repo_name=c.repo_name, revision='tip')) except (NodeError, NodeAlreadyExistsError) as e: h.flash(_(e), category='error') except Exception: log.error(traceback.format_exc()) h.flash(_('Error occurred during commit'), category='error') - return redirect(url('changeset_home', + raise HTTPFound(location=url('changeset_home', repo_name=c.repo_name, revision='tip')) return render('files/files_add.html') - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def archivefile(self, repo_name, fname): fileformat = None revision = None @@ -548,7 +542,7 @@ archive_path = None cached_archive_path = None archive_cache_dir = CONFIG.get('archive_cache_dir') - if archive_cache_dir and not subrepos: # TOOD: subrepo caching? + if archive_cache_dir and not subrepos: # TODO: subrepo caching? if not os.path.isdir(archive_cache_dir): os.makedirs(archive_cache_dir) cached_archive_path = os.path.join(archive_cache_dir, archive_name) @@ -583,34 +577,34 @@ log.debug('Destroying temp archive %s', archive_path) os.remove(archive_path) - action_logger(user=c.authuser, + action_logger(user=request.authuser, action='user_downloaded_archive:%s' % (archive_name), - repo=repo_name, ipaddr=self.ip_addr, commit=True) + repo=repo_name, ipaddr=request.ip_addr, commit=True) response.content_disposition = str('attachment; filename=%s' % (archive_name)) response.content_type = str(content_type) return get_chunked_archive(archive_path) - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def diff(self, repo_name, f_path): ignore_whitespace = request.GET.get('ignorews') == '1' - line_context = request.GET.get('context', 3) + line_context = safe_int(request.GET.get('context'), 3) diff2 = request.GET.get('diff2', '') diff1 = request.GET.get('diff1', '') or diff2 c.action = request.GET.get('diff') c.no_changes = diff1 == diff2 c.f_path = f_path c.big_diff = False + fulldiff = request.GET.get('fulldiff') c.anchor_url = anchor_url c.ignorews_url = _ignorews_url c.context_url = _context_url c.changes = OrderedDict() c.changes[diff2] = [] - #special case if we want a show rev only, it's impl here - #to reduce JS and callbacks + # special case if we want a show rev only, it's impl here + # to reduce JS and callbacks if request.GET.get('show_rev'): if str2bool(request.GET.get('annotate', 'False')): @@ -620,7 +614,7 @@ _url = url('files_home', repo_name=c.repo_name, revision=diff1, f_path=c.f_path) - return redirect(_url) + raise HTTPFound(location=_url) try: if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]: c.changeset_1 = c.db_repo_scm_instance.get_changeset(diff1) @@ -655,54 +649,45 @@ node2 = FileNode(f_path, '', changeset=c.changeset_2) except (RepositoryError, NodeError): log.error(traceback.format_exc()) - return redirect(url('files_home', repo_name=c.repo_name, + raise HTTPFound(location=url('files_home', repo_name=c.repo_name, f_path=f_path)) if c.action == 'download': - _diff = diffs.get_gitdiff(node1, node2, + raw_diff = diffs.get_gitdiff(node1, node2, ignore_whitespace=ignore_whitespace, context=line_context) - diff = diffs.DiffProcessor(_diff, format='gitdiff') - diff_name = '%s_vs_%s.diff' % (diff1, diff2) response.content_type = 'text/plain' response.content_disposition = ( 'attachment; filename=%s' % diff_name ) - return diff.as_raw() + return raw_diff elif c.action == 'raw': - _diff = diffs.get_gitdiff(node1, node2, + raw_diff = diffs.get_gitdiff(node1, node2, ignore_whitespace=ignore_whitespace, context=line_context) - diff = diffs.DiffProcessor(_diff, format='gitdiff') response.content_type = 'text/plain' - return diff.as_raw() + return raw_diff else: fid = h.FID(diff2, node2.path) line_context_lcl = get_line_ctx(fid, request.GET) ign_whitespace_lcl = get_ignore_ws(fid, request.GET) - lim = request.GET.get('fulldiff') or self.cut_off_limit - _, cs1, cs2, diff, st = diffs.wrapped_diff(filenode_old=node1, + diff_limit = None if fulldiff else self.cut_off_limit + c.a_rev, c.cs_rev, a_path, diff, st, op = diffs.wrapped_diff(filenode_old=node1, filenode_new=node2, - cut_off_limit=lim, + diff_limit=diff_limit, ignore_whitespace=ign_whitespace_lcl, line_context=line_context_lcl, enable_comments=False) - op = '' - filename = node1.path - cs_changes = { - 'fid': [cs1, cs2, op, filename, diff, st] - } - c.changes = cs_changes + c.file_diff_data = [(fid, fid, op, a_path, node2.path, diff, st)] - return render('files/file_diff.html') + return render('files/file_diff.html') - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def diff_2way(self, repo_name, f_path): diff1 = request.GET.get('diff1', '') diff2 = request.GET.get('diff2', '') @@ -764,7 +749,7 @@ try: changesets = tip_cs.get_file_history(f_path) except (NodeDoesNotExistError, ChangesetError): - #this node is not present at tip ! + # this node is not present at tip ! changesets = cs.get_file_history(f_path) hist_l = [] @@ -772,7 +757,7 @@ branches_group = ([], _("Branches")) tags_group = ([], _("Tags")) for chs in changesets: - #_branch = '(%s)' % chs.branch if (cs.repository.alias == 'hg') else '' + # TODO: loop over chs.branches ... but that will not give all the bogus None branches for Git ... _branch = chs.branch n_desc = '%s (%s)' % (h.show_id(chs), _branch) changesets_group[0].append((chs.raw_id, n_desc,)) @@ -788,9 +773,8 @@ return hist_l, changesets - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') @jsonify def nodelist(self, repo_name, revision, f_path): if request.environ.get('HTTP_X_PARTIAL_XHR'): diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/followers.py --- a/kallithea/controllers/followers.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/followers.py Thu Jun 07 01:46:02 2018 +0200 @@ -27,29 +27,25 @@ import logging -from pylons import tmpl_context as c, request +from tg import tmpl_context as c, request -from kallithea.lib.helpers import Page -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator from kallithea.lib.base import BaseRepoController, render +from kallithea.lib.page import Page +from kallithea.lib.utils2 import safe_int from kallithea.model.db import UserFollowing -from kallithea.lib.utils2 import safe_int log = logging.getLogger(__name__) class FollowersController(BaseRepoController): - def __before__(self): - super(FollowersController, self).__before__() - - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def followers(self, repo_name): - p = safe_int(request.GET.get('page', 1), 1) + p = safe_int(request.GET.get('page'), 1) repo_id = c.db_repo.repo_id - d = UserFollowing.get_repo_followers(repo_id)\ + d = UserFollowing.get_repo_followers(repo_id) \ .order_by(UserFollowing.follows_from) c.followers_pager = Page(d, page=p, items_per_page=20) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/forks.py --- a/kallithea/controllers/forks.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/forks.py Thu Jun 07 01:46:02 2018 +0200 @@ -30,58 +30,55 @@ import traceback from formencode import htmlfill -from pylons import tmpl_context as c, request, url -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import tmpl_context as c, request +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound import kallithea.lib.helpers as h -from kallithea.lib.helpers import Page -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator, \ - NotAnonymous, HasRepoPermissionAny, HasPermissionAnyDecorator, HasPermissionAny +from kallithea.config.routing import url +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator, \ + HasRepoPermissionLevel, HasPermissionAnyDecorator, HasPermissionAny from kallithea.lib.base import BaseRepoController, render +from kallithea.lib.page import Page +from kallithea.lib.utils2 import safe_int from kallithea.model.db import Repository, UserFollowing, User, Ui from kallithea.model.repo import RepoModel from kallithea.model.forms import RepoForkForm from kallithea.model.scm import ScmModel, AvailableRepoGroupChoices -from kallithea.lib.utils2 import safe_int log = logging.getLogger(__name__) class ForksController(BaseRepoController): - def __before__(self): - super(ForksController, self).__before__() - def __load_defaults(self): - repo_group_perms = ['group.admin'] if HasPermissionAny('hg.create.write_on_repogroup.true')(): - repo_group_perms.append('group.write') - c.repo_groups = AvailableRepoGroupChoices(['hg.create.repository'], repo_group_perms) + repo_group_perm_level = 'write' + else: + repo_group_perm_level = 'admin' + c.repo_groups = AvailableRepoGroupChoices(['hg.create.repository'], repo_group_perm_level) c.landing_revs_choices, c.landing_revs = ScmModel().get_repo_landing_revs() - c.can_update = Ui.get_by_key(Ui.HOOK_UPDATE).ui_active + c.can_update = Ui.get_by_key('hooks', Ui.HOOK_UPDATE).ui_active - def __load_data(self, repo_name=None): + def __load_data(self): """ Load defaults settings for edit, and update - - :param repo_name: """ self.__load_defaults() - c.repo_info = db_repo = Repository.get_by_repo_name(repo_name) - repo = db_repo.scm_instance + c.repo_info = c.db_repo + repo = c.db_repo.scm_instance if c.repo_info is None: - h.not_mapped_error(repo_name) - return redirect(url('repos')) + h.not_mapped_error(c.repo_name) + raise HTTPFound(location=url('repos')) c.default_user_id = User.get_default_user().user_id - c.in_public_journal = UserFollowing.query()\ - .filter(UserFollowing.user_id == c.default_user_id)\ + c.in_public_journal = UserFollowing.query() \ + .filter(UserFollowing.user_id == c.default_user_id) \ .filter(UserFollowing.follows_repository == c.repo_info).scalar() if c.repo_info.stats: @@ -98,7 +95,7 @@ c.stats_percentage = '%.2f' % ((float((last_rev)) / c.repo_last_rev) * 100) - defaults = RepoModel()._get_defaults(repo_name) + defaults = RepoModel()._get_defaults(c.repo_name) # alter the description to indicate a fork defaults['description'] = ('fork of repository: %s \n%s' % (defaults['repo_name'], @@ -108,17 +105,14 @@ return defaults - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def forks(self, repo_name): - p = safe_int(request.GET.get('page', 1), 1) + p = safe_int(request.GET.get('page'), 1) repo_id = c.db_repo.repo_id d = [] for r in Repository.get_repo_forks(repo_id): - if not HasRepoPermissionAny( - 'repository.read', 'repository.write', 'repository.admin' - )(r.repo_name, 'get forks check'): + if not HasRepoPermissionLevel('read')(r.repo_name, 'get forks check'): continue d.append(r) c.forks_pager = Page(d, page=p, items_per_page=20) @@ -129,17 +123,15 @@ return render('/forks/forks.html') @LoginRequired() - @NotAnonymous() @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository') - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') def fork(self, repo_name): c.repo_info = Repository.get_by_repo_name(repo_name) if not c.repo_info: h.not_mapped_error(repo_name) - return redirect(url('home')) + raise HTTPFound(location=url('home')) - defaults = self.__load_data(repo_name) + defaults = self.__load_data() return htmlfill.render( render('forks/fork.html'), @@ -148,10 +140,8 @@ force_defaults=False) @LoginRequired() - @NotAnonymous() @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository') - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') def fork_create(self, repo_name): self.__load_defaults() c.repo_info = Repository.get_by_repo_name(repo_name) @@ -164,15 +154,13 @@ form_result = _form.to_python(dict(request.POST)) # an approximation that is better than nothing - if not Ui.get_by_key(Ui.HOOK_UPDATE).ui_active: + if not Ui.get_by_key('hooks', Ui.HOOK_UPDATE).ui_active: form_result['update_after_clone'] = False # create fork is done sometimes async on celery, db transaction # management is handled there. - task = RepoModel().create_fork(form_result, self.authuser.user_id) - from celery.result import BaseAsyncResult - if isinstance(task, BaseAsyncResult): - task_id = task.task_id + task = RepoModel().create_fork(form_result, request.authuser.user_id) + task_id = task.task_id except formencode.Invalid as errors: return htmlfill.render( render('forks/fork.html'), @@ -186,6 +174,6 @@ h.flash(_('An error occurred during repository forking %s') % repo_name, category='error') - return redirect(h.url('repo_creating_home', + raise HTTPFound(location=h.url('repo_creating_home', repo_name=form_result['repo_name_full'], task_id=task_id)) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/home.py --- a/kallithea/controllers/home.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/home.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,73 +28,76 @@ import logging -from pylons import tmpl_context as c, request -from pylons.i18n.translation import _ +from tg import tmpl_context as c, request +from tg.i18n import ugettext as _ from webob.exc import HTTPBadRequest from sqlalchemy.sql.expression import func +from sqlalchemy import or_, and_ -from kallithea.lib.utils import jsonify, conditional_cache -from kallithea.lib.compat import json -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator -from kallithea.lib.base import BaseController, render -from kallithea.model.db import Repository, RepoGroup +from kallithea.lib.utils import conditional_cache +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator +from kallithea.lib.base import BaseController, render, jsonify +from kallithea.lib import helpers as h +from kallithea.model.db import Repository, RepoGroup, User, UserGroup from kallithea.model.repo import RepoModel - +from kallithea.model.scm import UserGroupList log = logging.getLogger(__name__) class HomeController(BaseController): - def __before__(self): - super(HomeController, self).__before__() - def about(self): return render('/about.html') - @LoginRequired() + @LoginRequired(allow_default_user=True) def index(self): - c.groups = self.scm_model.get_repo_groups() c.group = None - c.repos_list = Repository.query()\ - .filter(Repository.group_id == None)\ - .order_by(func.lower(Repository.repo_name))\ - .all() + repo_groups_list = self.scm_model.get_repo_groups() + repos_list = Repository.query(sorted=True).filter_by(group=None).all() - repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, - admin=False) - #json used to render the grid - c.data = json.dumps(repos_data) + c.data = RepoModel().get_repos_as_dict(repos_list, + repo_groups_list=repo_groups_list, + short_name=True) return render('/index.html') - @LoginRequired() + @LoginRequired(allow_default_user=True) @jsonify def repo_switcher_data(self): - #wrapper for conditional cache + # wrapper for conditional cache def _c(): log.debug('generating switcher repo/groups list') - all_repos = Repository.query().order_by(Repository.repo_name).all() - repo_iter = self.scm_model.get_repos(all_repos, simple=True) - all_groups = RepoGroup.query().order_by(RepoGroup.group_name).all() + all_repos = Repository.query(sorted=True).all() + repo_iter = self.scm_model.get_repos(all_repos) + all_groups = RepoGroup.query(sorted=True).all() repo_groups_iter = self.scm_model.get_repo_groups(all_groups) res = [{ 'text': _('Groups'), 'children': [ - {'id': obj.group_name, 'text': obj.group_name, - 'type': 'group', 'obj': {}} for obj in repo_groups_iter] - }, { + {'id': obj.group_name, + 'text': obj.group_name, + 'type': 'group', + 'obj': {}} + for obj in repo_groups_iter + ], + }, + { 'text': _('Repositories'), 'children': [ - {'id': obj['name'], 'text': obj['name'], - 'type': 'repo', 'obj': obj['dbrepo']} for obj in repo_iter] + {'id': obj.repo_name, + 'text': obj.repo_name, + 'type': 'repo', + 'obj': obj.get_dict()} + for obj in repo_iter + ], }] data = { 'more': False, - 'results': res + 'results': res, } return data @@ -106,20 +109,8 @@ else: raise HTTPBadRequest() - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - def branch_tag_switcher(self, repo_name): - if request.is_xhr: - c.db_repo = Repository.get_by_repo_name(repo_name) - if c.db_repo: - c.db_repo_scm_instance = c.db_repo.scm_instance - return render('/switch_to_list.html') - raise HTTPBadRequest() - - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') @jsonify def repo_refs_data(self, repo_name): repo = Repository.get_by_repo_name(repo_name).scm_instance @@ -130,6 +121,12 @@ 'text': _('Branch'), 'children': [{'id': rev, 'text': name, 'type': 'branch'} for name, rev in _branches] }) + _closed_branches = repo.closed_branches.items() + if _closed_branches: + res.append({ + 'text': _('Closed Branches'), + 'children': [{'id': rev, 'text': name, 'type': 'closed-branch'} for name, rev in _closed_branches] + }) _tags = repo.tags.items() if _tags: res.append({ @@ -147,3 +144,69 @@ 'results': res } return data + + @LoginRequired() + @jsonify + def users_and_groups_data(self): + """ + Returns 'results' with a list of users and user groups. + + You can either use the 'key' GET parameter to get a user by providing + the exact user key or you can use the 'query' parameter to + search for users by user key, first name and last name. + 'types' defaults to just 'users' but can be set to 'users,groups' to + get both users and groups. + No more than 500 results (of each kind) will be returned. + """ + types = request.GET.get('types', 'users').split(',') + key = request.GET.get('key', '') + query = request.GET.get('query', '') + results = [] + if 'users' in types: + user_list = [] + if key: + u = User.get_by_username(key) + if u: + user_list = [u] + elif query: + user_list = User.query() \ + .filter(User.is_default_user == False) \ + .filter(User.active == True) \ + .filter(or_( + User.username.ilike("%%"+query+"%%"), + User.name.ilike("%%"+query+"%%"), + User.lastname.ilike("%%"+query+"%%"), + )) \ + .order_by(User.username) \ + .limit(500) \ + .all() + for u in user_list: + results.append({ + 'type': 'user', + 'id': u.user_id, + 'nname': u.username, + 'fname': u.name, + 'lname': u.lastname, + 'gravatar_lnk': h.gravatar_url(u.email, size=28, default='default'), + 'gravatar_size': 14, + }) + if 'groups' in types: + grp_list = [] + if key: + grp = UserGroup.get_by_group_name(key) + if grp: + grp_list = [grp] + elif query: + grp_list = UserGroup.query() \ + .filter(UserGroup.users_group_name.ilike("%%"+query+"%%")) \ + .filter(UserGroup.users_group_active == True) \ + .order_by(UserGroup.users_group_name) \ + .limit(500) \ + .all() + for g in UserGroupList(grp_list, perm_level='read'): + results.append({ + 'type': 'group', + 'id': g.users_group_id, + 'grname': g.users_group_name, + }) + return dict(results=results) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/journal.py --- a/kallithea/controllers/journal.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/journal.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.controllers.journal ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Journal controller for pylons +Journal controller This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: @@ -37,37 +37,39 @@ from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed from webob.exc import HTTPBadRequest -from pylons import request, tmpl_context as c, response, url -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c, response +from tg.i18n import ugettext as _ +from kallithea.config.routing import url from kallithea.controllers.admin.admin import _journal_filter from kallithea.model.db import UserLog, UserFollowing, Repository, User from kallithea.model.meta import Session from kallithea.model.repo import RepoModel import kallithea.lib.helpers as h -from kallithea.lib.helpers import Page -from kallithea.lib.auth import LoginRequired, NotAnonymous +from kallithea.lib.auth import LoginRequired from kallithea.lib.base import BaseController, render +from kallithea.lib.page import Page from kallithea.lib.utils2 import safe_int, AttributeDict -from kallithea.lib.compat import json log = logging.getLogger(__name__) +language = 'en-us' +ttl = "5" +feed_nr = 20 + + class JournalController(BaseController): - def __before__(self): - super(JournalController, self).__before__() - self.language = 'en-us' - self.ttl = "5" - self.feed_nr = 20 + def _before(self, *args, **kwargs): + super(JournalController, self)._before(*args, **kwargs) c.search_term = request.GET.get('filter') def _get_daily_aggregate(self, journal): groups = [] for k, g in groupby(journal, lambda x: x.action_as_day): user_group = [] - #groupby username if it's a present value, else fallback to journal username + # groupby username if it's a present value, else fallback to journal username for _unused, g2 in groupby(list(g), lambda x: x.user.username if x.user else x.username): l = list(g2) user_group.append((l[0].user, l)) @@ -77,10 +79,10 @@ return groups def _get_journal_data(self, following_repos): - repo_ids = [x.follows_repository.repo_id for x in following_repos - if x.follows_repository is not None] - user_ids = [x.follows_user.user_id for x in following_repos - if x.follows_user is not None] + repo_ids = [x.follows_repository_id for x in following_repos + if x.follows_repository_id is not None] + user_ids = [x.follows_user_id for x in following_repos + if x.follows_user_id is not None] filtering_criterion = None @@ -92,12 +94,12 @@ if not repo_ids and user_ids: filtering_criterion = UserLog.user_id.in_(user_ids) if filtering_criterion is not None: - journal = self.sa.query(UserLog)\ - .options(joinedload(UserLog.user))\ + journal = UserLog.query() \ + .options(joinedload(UserLog.user)) \ .options(joinedload(UserLog.repository)) - #filter + # filter journal = _journal_filter(journal, c.search_term) - journal = journal.filter(filtering_criterion)\ + journal = journal.filter(filtering_criterion) \ .order_by(UserLog.action_date.desc()) else: journal = [] @@ -117,13 +119,13 @@ feed = Atom1Feed(title=_desc, link=_link, description=_desc, - language=self.language, - ttl=self.ttl) + language=language, + ttl=ttl) - for entry in journal[:self.feed_nr]: + for entry in journal[:feed_nr]: user = entry.user if user is None: - #fix deleted users + # fix deleted users user = AttributeDict({'short_contact': entry.username, 'email': '', 'full_contact': ''}) @@ -159,13 +161,13 @@ feed = Rss201rev2Feed(title=_desc, link=_link, description=_desc, - language=self.language, - ttl=self.ttl) + language=language, + ttl=ttl) - for entry in journal[:self.feed_nr]: + for entry in journal[:feed_nr]: user = entry.user if user is None: - #fix deleted users + # fix deleted users user = AttributeDict({'short_contact': entry.username, 'email': '', 'full_contact': ''}) @@ -189,14 +191,13 @@ return feed.writeString('utf-8') @LoginRequired() - @NotAnonymous() def index(self): # Return a rendered template - p = safe_int(request.GET.get('page', 1), 1) - c.user = User.get(self.authuser.user_id) - c.following = self.sa.query(UserFollowing)\ - .filter(UserFollowing.user_id == self.authuser.user_id)\ - .options(joinedload(UserFollowing.follows_repository))\ + p = safe_int(request.GET.get('page'), 1) + c.user = User.get(request.authuser.user_id) + c.following = UserFollowing.query() \ + .filter(UserFollowing.user_id == request.authuser.user_id) \ + .options(joinedload(UserFollowing.follows_repository)) \ .all() journal = self._get_journal_data(c.following) @@ -205,119 +206,61 @@ return url.current(filter=c.search_term, **kw) c.journal_pager = Page(journal, page=p, items_per_page=20, url=url_generator) - c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager) + c.journal_day_aggregate = self._get_daily_aggregate(c.journal_pager) if request.environ.get('HTTP_X_PARTIAL_XHR'): return render('journal/journal_data.html') - repos_list = Session().query(Repository)\ - .filter(Repository.user_id == - self.authuser.user_id)\ - .order_by(func.lower(Repository.repo_name)).all() - - repos_data = RepoModel().get_repos_as_dict(repos_list=repos_list, - admin=True) - #json used to render the grid - c.data = json.dumps(repos_data) - - watched_repos_data = [] - - ## watched repos - _render = RepoModel._render_datatable - - def quick_menu(repo_name): - return _render('quick_menu', repo_name) - - def repo_lnk(name, rtype, rstate, private, fork_of): - return _render('repo_name', name, rtype, rstate, private, fork_of, - short_name=False, admin=False) - - def last_rev(repo_name, cs_cache): - return _render('revision', repo_name, cs_cache.get('revision'), - cs_cache.get('raw_id'), cs_cache.get('author'), - cs_cache.get('message')) - - def desc(desc): - from pylons import tmpl_context as c - return h.urlify_text(desc, truncate=60, stylize=c.visual.stylify_metatags) + repos_list = Repository.query(sorted=True) \ + .filter_by(owner_id=request.authuser.user_id).all() - def repo_actions(repo_name): - return _render('repo_actions', repo_name) - - def owner_actions(user_id, username): - return _render('user_name', user_id, username) - - def toogle_follow(repo_id): - return _render('toggle_follow', repo_id) + repos_data = RepoModel().get_repos_as_dict(repos_list, admin=True) + # data used to render the grid + c.data = repos_data - for entry in c.following: - repo = entry.follows_repository - cs_cache = repo.changeset_cache - row = { - "menu": quick_menu(repo.repo_name), - "raw_name": repo.repo_name.lower(), - "name": repo_lnk(repo.repo_name, repo.repo_type, - repo.repo_state, repo.private, repo.fork), - "last_changeset": last_rev(repo.repo_name, cs_cache), - "last_rev_raw": cs_cache.get('revision'), - "action": toogle_follow(repo.repo_id) - } - - watched_repos_data.append(row) - - c.watched_data = json.dumps({ - "totalRecords": len(c.following), - "startIndex": 0, - "sort": "name", - "dir": "asc", - "records": watched_repos_data - }) return render('journal/journal.html') @LoginRequired(api_access=True) - @NotAnonymous() def journal_atom(self): """ Produce an atom-1.0 feed via feedgenerator module """ - following = self.sa.query(UserFollowing)\ - .filter(UserFollowing.user_id == self.authuser.user_id)\ - .options(joinedload(UserFollowing.follows_repository))\ + following = UserFollowing.query() \ + .filter(UserFollowing.user_id == request.authuser.user_id) \ + .options(joinedload(UserFollowing.follows_repository)) \ .all() return self._atom_feed(following, public=False) @LoginRequired(api_access=True) - @NotAnonymous() def journal_rss(self): """ Produce an rss feed via feedgenerator module """ - following = self.sa.query(UserFollowing)\ - .filter(UserFollowing.user_id == self.authuser.user_id)\ - .options(joinedload(UserFollowing.follows_repository))\ + following = UserFollowing.query() \ + .filter(UserFollowing.user_id == request.authuser.user_id) \ + .options(joinedload(UserFollowing.follows_repository)) \ .all() return self._rss_feed(following, public=False) @LoginRequired() - @NotAnonymous() def toggle_following(self): user_id = request.POST.get('follows_user_id') if user_id: try: self.scm_model.toggle_following_user(user_id, - self.authuser.user_id) - Session.commit() + request.authuser.user_id) + Session().commit() return 'ok' except Exception: log.error(traceback.format_exc()) raise HTTPBadRequest() - repo_id = request.POST.get('follows_repo_id') + repo_id = request.POST.get('follows_repository_id') if repo_id: try: self.scm_model.toggle_following_repo(repo_id, - self.authuser.user_id) - Session.commit() + request.authuser.user_id) + Session().commit() return 'ok' except Exception: log.error(traceback.format_exc()) @@ -325,47 +268,47 @@ raise HTTPBadRequest() - @LoginRequired() + @LoginRequired(allow_default_user=True) def public_journal(self): # Return a rendered template - p = safe_int(request.GET.get('page', 1), 1) + p = safe_int(request.GET.get('page'), 1) - c.following = self.sa.query(UserFollowing)\ - .filter(UserFollowing.user_id == self.authuser.user_id)\ - .options(joinedload(UserFollowing.follows_repository))\ + c.following = UserFollowing.query() \ + .filter(UserFollowing.user_id == request.authuser.user_id) \ + .options(joinedload(UserFollowing.follows_repository)) \ .all() journal = self._get_journal_data(c.following) c.journal_pager = Page(journal, page=p, items_per_page=20) - c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager) + c.journal_day_aggregate = self._get_daily_aggregate(c.journal_pager) if request.environ.get('HTTP_X_PARTIAL_XHR'): return render('journal/journal_data.html') return render('journal/public_journal.html') - @LoginRequired(api_access=True) + @LoginRequired(api_access=True, allow_default_user=True) def public_journal_atom(self): """ Produce an atom-1.0 feed via feedgenerator module """ - c.following = self.sa.query(UserFollowing)\ - .filter(UserFollowing.user_id == self.authuser.user_id)\ - .options(joinedload(UserFollowing.follows_repository))\ + c.following = UserFollowing.query() \ + .filter(UserFollowing.user_id == request.authuser.user_id) \ + .options(joinedload(UserFollowing.follows_repository)) \ .all() return self._atom_feed(c.following) - @LoginRequired(api_access=True) + @LoginRequired(api_access=True, allow_default_user=True) def public_journal_rss(self): """ Produce an rss2 feed via feedgenerator module """ - c.following = self.sa.query(UserFollowing)\ - .filter(UserFollowing.user_id == self.authuser.user_id)\ - .options(joinedload(UserFollowing.follows_repository))\ + c.following = UserFollowing.query() \ + .filter(UserFollowing.user_id == request.authuser.user_id) \ + .options(joinedload(UserFollowing.follows_repository)) \ .all() return self._rss_feed(c.following) diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/login.py --- a/kallithea/controllers/login.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/login.py Thu Jun 07 01:46:02 2018 +0200 @@ -31,12 +31,12 @@ import formencode from formencode import htmlfill +from tg.i18n import ugettext as _ +from tg import request, session, tmpl_context as c from webob.exc import HTTPFound, HTTPBadRequest -from pylons.i18n.translation import _ -from pylons.controllers.util import redirect -from pylons import request, session, tmpl_context as c, url import kallithea.lib.helpers as h +from kallithea.config.routing import url from kallithea.lib.auth import AuthUser, HasPermissionAnyDecorator from kallithea.lib.base import BaseController, log_in_user, render from kallithea.lib.exceptions import UserCreationError @@ -53,9 +53,6 @@ class LoginController(BaseController): - def __before__(self): - super(LoginController, self).__before__() - def _validate_came_from(self, came_from, _re=re.compile(r"/(?!/)[-!#$%&'()*+,./:;=?@_~0-9A-Za-z]*$")): """Return True if came_from is valid and can and should be used. @@ -79,25 +76,24 @@ else: c.came_from = url('home') - not_default = self.authuser.username != User.DEFAULT_USER - ip_allowed = AuthUser.check_ip_allowed(self.authuser, self.ip_addr) + ip_allowed = AuthUser.check_ip_allowed(request.authuser, request.ip_addr) # redirect if already logged in - if self.authuser.is_authenticated and not_default and ip_allowed: + if request.authuser.is_authenticated and ip_allowed: raise HTTPFound(location=c.came_from) if request.POST: # import Login Form validator class - login_form = LoginForm() + login_form = LoginForm()() try: c.form_result = login_form.to_python(dict(request.POST)) # form checks for username/password, now we're authenticated username = c.form_result['username'] - user = User.get_by_username(username, case_insensitive=True) + user = User.get_by_username_or_email(username, case_insensitive=True) except formencode.Invalid as errors: defaults = errors.value # remove password from filling in form again - del defaults['password'] + defaults.pop('password', None) return htmlfill.render( render('/login.html'), defaults=errors.value, @@ -121,7 +117,7 @@ @HasPermissionAnyDecorator('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate') def register(self): - c.auto_active = 'hg.register.auto_activate' in User.get_default_user()\ + c.auto_active = 'hg.register.auto_activate' in User.get_default_user() \ .AuthUser.permissions['global'] settings = Setting.get_app_settings() @@ -137,11 +133,10 @@ if c.captcha_active: from kallithea.lib.recaptcha import submit - response = submit(request.POST.get('recaptcha_challenge_field'), - request.POST.get('recaptcha_response_field'), + response = submit(request.POST.get('g-recaptcha-response'), private_key=captcha_private_key, - remoteip=self.ip_addr) - if c.captcha_active and not response.is_valid: + remoteip=request.ip_addr) + if not response.is_valid: _value = form_result _msg = _('Bad captcha') error_dict = {'recaptcha_field': _msg} @@ -149,10 +144,10 @@ error_dict=error_dict) UserModel().create_registration(form_result) - h.flash(_('You have successfully registered into Kallithea'), + h.flash(_('You have successfully registered with %s') % (c.site_name or 'Kallithea'), category='success') Session().commit() - return redirect(url('login_home')) + raise HTTPFound(location=url('login_home')) except formencode.Invalid as errors: return htmlfill.render( @@ -183,11 +178,10 @@ form_result = password_reset_form.to_python(dict(request.POST)) if c.captcha_active: from kallithea.lib.recaptcha import submit - response = submit(request.POST.get('recaptcha_challenge_field'), - request.POST.get('recaptcha_response_field'), + response = submit(request.POST.get('g-recaptcha-response'), private_key=captcha_private_key, - remoteip=self.ip_addr) - if c.captcha_active and not response.is_valid: + remoteip=request.ip_addr) + if not response.is_valid: _value = form_result _msg = _('Bad captcha') error_dict = {'recaptcha_field': _msg} @@ -196,7 +190,7 @@ redirect_link = UserModel().send_reset_password_email(form_result) h.flash(_('A password reset confirmation code has been sent'), category='success') - return redirect(redirect_link) + raise HTTPFound(location=redirect_link) except formencode.Invalid as errors: return htmlfill.render( @@ -249,12 +243,12 @@ UserModel().reset_password(form_result['email'], form_result['password']) h.flash(_('Successfully updated password'), category='success') - return redirect(url('login_home')) + raise HTTPFound(location=url('login_home')) def logout(self): session.delete() log.info('Logging out and deleting session for user') - redirect(url('home')) + raise HTTPFound(location=url('home')) def authentication_token(self): """Return the CSRF protection token for the session - just like it diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/pullrequests.py --- a/kallithea/controllers/pullrequests.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/pullrequests.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,43 +28,52 @@ import logging import traceback import formencode -import re - -from webob.exc import HTTPNotFound, HTTPForbidden, HTTPBadRequest -from pylons import request, tmpl_context as c, url -from pylons.controllers.util import redirect -from pylons.i18n.translation import _ +from tg import request, tmpl_context as c +from tg.i18n import ugettext as _ +from webob.exc import HTTPFound, HTTPNotFound, HTTPForbidden, HTTPBadRequest -from kallithea.lib.vcs.utils.hgcompat import unionrepo -from kallithea.lib.compat import json -from kallithea.lib.base import BaseRepoController, render -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\ - NotAnonymous -from kallithea.lib.helpers import Page +from kallithea.config.routing import url from kallithea.lib import helpers as h from kallithea.lib import diffs -from kallithea.lib.exceptions import UserInvalidException -from kallithea.lib.utils import action_logger, jsonify +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator +from kallithea.lib.base import BaseRepoController, render, jsonify +from kallithea.lib.page import Page +from kallithea.lib.utils import action_logger +from kallithea.lib.vcs.exceptions import EmptyRepositoryError, ChangesetDoesNotExistError from kallithea.lib.vcs.utils import safe_str -from kallithea.lib.vcs.exceptions import EmptyRepositoryError -from kallithea.lib.diffs import LimitedDiffContainer -from kallithea.model.db import PullRequest, ChangesetStatus, ChangesetComment,\ - PullRequestReviewers, User -from kallithea.model.pull_request import PullRequestModel +from kallithea.lib.vcs.utils.hgcompat import unionrepo +from kallithea.model.db import PullRequest, ChangesetStatus, ChangesetComment, \ + PullRequestReviewer, Repository, User +from kallithea.model.pull_request import CreatePullRequestAction, CreatePullRequestIterationAction, PullRequestModel from kallithea.model.meta import Session from kallithea.model.repo import RepoModel from kallithea.model.comment import ChangesetCommentsModel from kallithea.model.changeset_status import ChangesetStatusModel from kallithea.model.forms import PullRequestForm, PullRequestPostForm from kallithea.lib.utils2 import safe_int -from kallithea.controllers.changeset import _ignorews_url, _context_url +from kallithea.controllers.changeset import _ignorews_url, _context_url, \ + create_comment from kallithea.controllers.compare import CompareController from kallithea.lib.graphmod import graph_data log = logging.getLogger(__name__) +def _get_reviewer(user_id): + """Look up user by ID and validate it as a potential reviewer.""" + try: + user = User.get(int(user_id)) + except ValueError: + user = None + + if user is None or user.is_default_user: + h.flash(_('Invalid reviewer "%s" specified') % user_id, category='error') + raise HTTPBadRequest() + + return user + + class PullrequestsController(BaseRepoController): def _get_repo_refs(self, repo, rev=None, branch=None, branch_rev=None): @@ -93,11 +102,11 @@ for i in repo._repo.revs( "sort(parents(branch(id(%s)) and merge()) - branch(id(%s)), -rev)", branch_rev, branch_rev): - abranch = repo.get_changeset(i).branch - if abranch not in peerbranches: - n = 'branch:%s:%s' % (abranch, repo.get_changeset(abranch).raw_id) - peers.append((n, abranch)) - peerbranches.add(abranch) + for abranch in repo.get_changeset(i).branches: + if abranch not in peerbranches: + n = 'branch:%s:%s' % (abranch, repo.get_changeset(abranch).raw_id) + peers.append((n, abranch)) + peerbranches.add(abranch) selected = None tiprev = repo.tags.get('tip') @@ -140,8 +149,7 @@ continue n = 'tag:%s:%s' % (tag, tagrev) tags.append((n, tag)) - if rev == tagrev: - selected = n + # note: even if rev == tagrev, don't select the static tag - it must be chosen explicitly # prio 1: rev was selected as existing entry above @@ -182,53 +190,59 @@ if pull_request.is_closed(): return False - owner = self.authuser.user_id == pull_request.user_id - reviewer = self.authuser.user_id in [x.user_id for x in - pull_request.reviewers] - return self.authuser.admin or owner or reviewer + owner = request.authuser.user_id == pull_request.owner_id + reviewer = PullRequestReviewer.query() \ + .filter(PullRequestReviewer.pull_request == pull_request) \ + .filter(PullRequestReviewer.user_id == request.authuser.user_id) \ + .count() != 0 - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + return request.authuser.admin or owner or reviewer + + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def show_all(self, repo_name): c.from_ = request.GET.get('from_') or '' c.closed = request.GET.get('closed') or '' - c.pull_requests = PullRequestModel().get_all(repo_name, from_=c.from_, closed=c.closed) - c.repo_name = repo_name - p = safe_int(request.GET.get('page', 1), 1) + p = safe_int(request.GET.get('page'), 1) + + q = PullRequest.query(include_closed=c.closed, sorted=True) + if c.from_: + q = q.filter_by(org_repo=c.db_repo) + else: + q = q.filter_by(other_repo=c.db_repo) + c.pull_requests = q.all() c.pullrequests_pager = Page(c.pull_requests, page=p, items_per_page=100) return render('/pullrequests/pullrequest_show_all.html') @LoginRequired() - @NotAnonymous() def show_my(self): c.closed = request.GET.get('closed') or '' - def _filter(pr): - s = sorted(pr, key=lambda o: o.created_on, reverse=True) - if not c.closed: - s = filter(lambda p: p.status != PullRequest.STATUS_CLOSED, s) - return s + c.my_pull_requests = PullRequest.query( + include_closed=c.closed, + sorted=True, + ).filter_by(owner_id=request.authuser.user_id).all() - c.my_pull_requests = _filter(PullRequest.query()\ - .filter(PullRequest.user_id == - self.authuser.user_id)\ - .all()) - - c.participate_in_pull_requests = _filter(PullRequest.query()\ - .join(PullRequestReviewers)\ - .filter(PullRequestReviewers.user_id == - self.authuser.user_id)\ - ) + c.participate_in_pull_requests = [] + c.participate_in_pull_requests_todo = [] + done_status = set([ChangesetStatus.STATUS_APPROVED, ChangesetStatus.STATUS_REJECTED]) + for pr in PullRequest.query( + include_closed=c.closed, + reviewer_id=request.authuser.user_id, + sorted=True, + ): + status = pr.user_review_status(request.authuser.user_id) # very inefficient!!! + if status in done_status: + c.participate_in_pull_requests.append(pr) + else: + c.participate_in_pull_requests_todo.append(pr) return render('/pullrequests/pullrequest_show_my.html') @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') def index(self): org_repo = c.db_repo org_scm_instance = org_repo.scm_instance @@ -237,7 +251,7 @@ except EmptyRepositoryError as e: h.flash(h.literal(_('There are no changesets yet')), category='warning') - redirect(url('summary_home', repo_name=org_repo.repo_name)) + raise HTTPFound(location=url('summary_home', repo_name=org_repo.repo_name)) org_rev = request.GET.get('rev_end') # rev_start is not directly useful - its parent could however be used @@ -283,12 +297,10 @@ return render('/pullrequests/pullrequest.html') @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') @jsonify def repo_info(self, repo_name): - repo = RepoModel()._get_repo(repo_name) + repo = c.db_repo refs, selected_ref = self._get_repo_refs(repo.scm_instance) return { 'description': repo.description.split('\n', 1)[0], @@ -297,11 +309,9 @@ } @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') def create(self, repo_name): - repo = RepoModel()._get_repo(repo_name) + repo = c.db_repo try: _form = PullRequestForm(repo.repo_id)().to_python(request.POST) except formencode.Invalid as errors: @@ -312,232 +322,136 @@ raise HTTPBadRequest # heads up: org and other might seem backward here ... - org_repo_name = _form['org_repo'] org_ref = _form['org_ref'] # will have merge_rev as rev but symbolic name - org_repo = RepoModel()._get_repo(org_repo_name) - (org_ref_type, - org_ref_name, - org_rev) = org_ref.split(':') - if org_ref_type == 'rev': - org_ref_type = 'branch' - cs = org_repo.scm_instance.get_changeset(org_rev) - org_ref = '%s:%s:%s' % (org_ref_type, cs.branch, cs.raw_id) + org_repo = Repository.guess_instance(_form['org_repo']) - other_repo_name = _form['other_repo'] other_ref = _form['other_ref'] # will have symbolic name and head revision - other_repo = RepoModel()._get_repo(other_repo_name) - (other_ref_type, - other_ref_name, - other_rev) = other_ref.split(':') + other_repo = Repository.guess_instance(_form['other_repo']) - cs_ranges, _cs_ranges_not, ancestor_rev = \ - CompareController._get_changesets(org_repo.scm_instance.alias, - other_repo.scm_instance, other_rev, # org and other "swapped" - org_repo.scm_instance, org_rev, - ) - if ancestor_rev is None: - ancestor_rev = org_repo.scm_instance.EMPTY_CHANGESET - revisions = [cs_.raw_id for cs_ in cs_ranges] - - # hack: ancestor_rev is not an other_rev but we want to show the - # requested destination and have the exact ancestor - other_ref = '%s:%s:%s' % (other_ref_type, other_ref_name, ancestor_rev) - - reviewers = _form['review_members'] + reviewers = [] title = _form['pullrequest_title'] - if not title: - if org_repo_name == other_repo_name: - title = '%s to %s' % (h.short_ref(org_ref_type, org_ref_name), - h.short_ref(other_ref_type, other_ref_name)) - else: - title = '%s#%s to %s#%s' % (org_repo_name, h.short_ref(org_ref_type, org_ref_name), - other_repo_name, h.short_ref(other_ref_type, other_ref_name)) - description = _form['pullrequest_desc'].strip() or _('No description') + description = _form['pullrequest_desc'].strip() + owner = User.get(request.authuser.user_id) + try: - pull_request = PullRequestModel().create( - self.authuser.user_id, org_repo_name, org_ref, other_repo_name, - other_ref, revisions, reviewers, title, description - ) + cmd = CreatePullRequestAction(org_repo, other_repo, org_ref, other_ref, title, description, owner, reviewers) + except CreatePullRequestAction.ValidationError as e: + h.flash(str(e), category='error', logf=log.error) + raise HTTPNotFound + + try: + pull_request = cmd.execute() Session().commit() - h.flash(_('Successfully opened new pull request'), - category='success') - except UserInvalidException as u: - h.flash(_('Invalid reviewer "%s" specified') % u, category='error') - raise HTTPBadRequest() except Exception: h.flash(_('Error occurred while creating pull request'), category='error') log.error(traceback.format_exc()) - return redirect(url('pullrequest_home', repo_name=repo_name)) - - return redirect(pull_request.url()) - - def create_update(self, old_pull_request, updaterev, title, description, reviewers_ids): - org_repo = RepoModel()._get_repo(old_pull_request.org_repo.repo_name) - org_ref_type, org_ref_name, org_rev = old_pull_request.org_ref.split(':') - new_org_rev = self._get_ref_rev(org_repo, 'rev', updaterev) - - other_repo = RepoModel()._get_repo(old_pull_request.other_repo.repo_name) - other_ref_type, other_ref_name, other_rev = old_pull_request.other_ref.split(':') # other_rev is ancestor - #assert other_ref_type == 'branch', other_ref_type # TODO: what if not? - new_other_rev = self._get_ref_rev(other_repo, other_ref_type, other_ref_name) + raise HTTPFound(location=url('pullrequest_home', repo_name=repo_name)) - cs_ranges, _cs_ranges_not, ancestor_rev = CompareController._get_changesets(org_repo.scm_instance.alias, - other_repo.scm_instance, new_other_rev, # org and other "swapped" - org_repo.scm_instance, new_org_rev) - - old_revisions = set(old_pull_request.revisions) - revisions = [cs.raw_id for cs in cs_ranges] - new_revisions = [r for r in revisions if r not in old_revisions] - lost = old_revisions.difference(revisions) - - infos = ['This is an update of %s "%s".' % - (h.canonical_url('pullrequest_show', repo_name=old_pull_request.other_repo.repo_name, - pull_request_id=old_pull_request.pull_request_id), - old_pull_request.title)] + h.flash(_('Successfully opened new pull request'), + category='success') + raise HTTPFound(location=pull_request.url()) - if lost: - infos.append(_('Missing changesets since the previous pull request:')) - for r in old_pull_request.revisions: - if r in lost: - rev_desc = org_repo.get_changeset(r).message.split('\n')[0] - infos.append(' %s "%s"' % (h.short_id(r), rev_desc)) - - if new_revisions: - infos.append(_('New changesets on %s %s since the previous pull request:') % (org_ref_type, org_ref_name)) - for r in reversed(revisions): - if r in new_revisions: - rev_desc = org_repo.get_changeset(r).message.split('\n')[0] - infos.append(' %s %s' % (h.short_id(r), h.shorter(rev_desc, 80))) - - if ancestor_rev == other_rev: - infos.append(_("Ancestor didn't change - show diff since previous version:")) - infos.append(h.canonical_url('compare_url', - repo_name=org_repo.repo_name, # other_repo is always same as repo_name - org_ref_type='rev', org_ref_name=h.short_id(org_rev), # use old org_rev as base - other_ref_type='rev', other_ref_name=h.short_id(new_org_rev), - )) # note: linear diff, merge or not doesn't matter - else: - infos.append(_('This pull request is based on another %s revision and there is no simple diff.') % other_ref_name) - else: - infos.append(_('No changes found on %s %s since previous version.') % (org_ref_type, org_ref_name)) - # TODO: fail? - - # hack: ancestor_rev is not an other_ref but we want to show the - # requested destination and have the exact ancestor - new_other_ref = '%s:%s:%s' % (other_ref_type, other_ref_name, ancestor_rev) - new_org_ref = '%s:%s:%s' % (org_ref_type, org_ref_name, new_org_rev) + def create_new_iteration(self, old_pull_request, new_rev, title, description, reviewers): + owner = User.get(request.authuser.user_id) + new_org_rev = self._get_ref_rev(old_pull_request.org_repo, 'rev', new_rev) + new_other_rev = self._get_ref_rev(old_pull_request.other_repo, old_pull_request.other_ref_parts[0], old_pull_request.other_ref_parts[1]) + try: + cmd = CreatePullRequestIterationAction(old_pull_request, new_org_rev, new_other_rev, title, description, owner, reviewers) + except CreatePullRequestAction.ValidationError as e: + h.flash(str(e), category='error', logf=log.error) + raise HTTPNotFound try: - title, old_v = re.match(r'(.*)\(v(\d+)\)\s*$', title).groups() - v = int(old_v) + 1 - except (AttributeError, ValueError): - v = 2 - title = '%s (v%s)' % (title.strip(), v) - - # using a mail-like separator, insert new update info at the top of the list - descriptions = description.replace('\r\n', '\n').split('\n-- \n', 1) - description = descriptions[0].strip() + '\n\n-- \n' + '\n'.join(infos) - if len(descriptions) > 1: - description += '\n\n' + descriptions[1].strip() - - try: - pull_request = PullRequestModel().create( - self.authuser.user_id, - old_pull_request.org_repo.repo_name, new_org_ref, - old_pull_request.other_repo.repo_name, new_other_ref, - revisions, reviewers_ids, title, description - ) - except UserInvalidException as u: - h.flash(_('Invalid reviewer "%s" specified') % u, category='error') - raise HTTPBadRequest() + pull_request = cmd.execute() + Session().commit() except Exception: h.flash(_('Error occurred while creating pull request'), category='error') log.error(traceback.format_exc()) - return redirect(old_pull_request.url()) + raise HTTPFound(location=old_pull_request.url()) - ChangesetCommentsModel().create( - text=_('Closed, replaced by %s .') % pull_request.url(canonical=True), - repo=old_pull_request.other_repo.repo_id, - user=c.authuser.user_id, - pull_request=old_pull_request.pull_request_id, - closing_pr=True) - PullRequestModel().close_pull_request(old_pull_request.pull_request_id) - - Session().commit() - h.flash(_('Pull request update created'), + h.flash(_('New pull request iteration created'), category='success') - - return redirect(pull_request.url()) + raise HTTPFound(location=pull_request.url()) # pullrequest_post for PR editing @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') def post(self, repo_name, pull_request_id): pull_request = PullRequest.get_or_404(pull_request_id) if pull_request.is_closed(): raise HTTPForbidden() assert pull_request.other_repo.repo_name == repo_name - #only owner or admin can update it - owner = pull_request.owner.user_id == c.authuser.user_id - repo_admin = h.HasRepoPermissionAny('repository.admin')(c.repo_name) + # only owner or admin can update it + owner = pull_request.owner_id == request.authuser.user_id + repo_admin = h.HasRepoPermissionLevel('admin')(c.repo_name) if not (h.HasPermissionAny('hg.admin')() or repo_admin or owner): raise HTTPForbidden() _form = PullRequestPostForm()().to_python(request.POST) - reviewers_ids = [int(s) for s in _form['review_members']] + + cur_reviewers = set(pull_request.get_reviewer_users()) + new_reviewers = set(_get_reviewer(s) for s in _form['review_members']) + old_reviewers = set(_get_reviewer(s) for s in _form['org_review_members']) + + other_added = cur_reviewers - old_reviewers + other_removed = old_reviewers - cur_reviewers + + if other_added: + h.flash(_('Meanwhile, the following reviewers have been added: %s') % + (', '.join(u.username for u in other_added)), + category='warning') + if other_removed: + h.flash(_('Meanwhile, the following reviewers have been removed: %s') % + (', '.join(u.username for u in other_removed)), + category='warning') if _form['updaterev']: - return self.create_update(pull_request, + return self.create_new_iteration(pull_request, _form['updaterev'], _form['pullrequest_title'], _form['pullrequest_desc'], - reviewers_ids) + new_reviewers) + + added_reviewers = new_reviewers - old_reviewers - cur_reviewers + removed_reviewers = (old_reviewers - new_reviewers) & cur_reviewers old_description = pull_request.description pull_request.title = _form['pullrequest_title'] pull_request.description = _form['pullrequest_desc'].strip() or _('No description') pull_request.owner = User.get_by_username(_form['owner']) - user = User.get(c.authuser.user_id) - try: - PullRequestModel().mention_from_description(user, pull_request, old_description) - PullRequestModel().update_reviewers(user, pull_request_id, reviewers_ids) - except UserInvalidException as u: - h.flash(_('Invalid reviewer "%s" specified') % u, category='error') - raise HTTPBadRequest() + user = User.get(request.authuser.user_id) + + PullRequestModel().mention_from_description(user, pull_request, old_description) + PullRequestModel().add_reviewers(user, pull_request, added_reviewers) + PullRequestModel().remove_reviewers(user, pull_request, removed_reviewers) Session().commit() h.flash(_('Pull request updated'), category='success') - return redirect(pull_request.url()) + raise HTTPFound(location=pull_request.url()) @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') @jsonify def delete(self, repo_name, pull_request_id): pull_request = PullRequest.get_or_404(pull_request_id) - #only owner can delete it ! - if pull_request.owner.user_id == c.authuser.user_id: + # only owner can delete it ! + if pull_request.owner_id == request.authuser.user_id: PullRequestModel().delete(pull_request) Session().commit() h.flash(_('Successfully deleted pull request'), category='success') - return redirect(url('my_pullrequests')) + raise HTTPFound(location=url('my_pullrequests')) raise HTTPForbidden() - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def show(self, repo_name, pull_request_id, extra=None): repo_model = RepoModel() c.users_array = repo_model.get_users_js() - c.user_groups_array = repo_model.get_user_groups_js() c.pull_request = PullRequest.get_or_404(pull_request_id) c.allowed_to_change_status = self._get_is_allowed_change_status(c.pull_request) cc_model = ChangesetCommentsModel() @@ -557,125 +471,136 @@ c.a_repo = c.pull_request.other_repo (c.a_ref_type, c.a_ref_name, - c.a_rev) = c.pull_request.other_ref.split(':') # other_rev is ancestor + c.a_rev) = c.pull_request.other_ref.split(':') # a_rev is ancestor org_scm_instance = c.cs_repo.scm_instance # property with expensive cache invalidation check!!! - c.cs_repo = c.cs_repo - c.cs_ranges = [org_scm_instance.get_changeset(x) for x in c.pull_request.revisions] + try: + c.cs_ranges = [] + for x in c.pull_request.revisions: + c.cs_ranges.append(org_scm_instance.get_changeset(x)) + except ChangesetDoesNotExistError: + c.cs_ranges = [] + h.flash(_('Revision %s not found in %s') % (x, c.cs_repo.repo_name), + 'error') c.cs_ranges_org = None # not stored and not important and moving target - could be calculated ... revs = [ctx.revision for ctx in reversed(c.cs_ranges)] - c.jsdata = json.dumps(graph_data(org_scm_instance, revs)) + c.jsdata = graph_data(org_scm_instance, revs) c.is_range = False - if c.a_ref_type == 'rev': # this looks like a free range where target is ancestor - cs_a = org_scm_instance.get_changeset(c.a_rev) - root_parents = c.cs_ranges[0].parents - c.is_range = cs_a in root_parents - #c.merge_root = len(root_parents) > 1 # a range starting with a merge might deserve a warning + try: + if c.a_ref_type == 'rev': # this looks like a free range where target is ancestor + cs_a = org_scm_instance.get_changeset(c.a_rev) + root_parents = c.cs_ranges[0].parents + c.is_range = cs_a in root_parents + #c.merge_root = len(root_parents) > 1 # a range starting with a merge might deserve a warning + except ChangesetDoesNotExistError: # probably because c.a_rev not found + pass + except IndexError: # probably because c.cs_ranges is empty, probably because revisions are missing + pass avail_revs = set() avail_show = [] c.cs_branch_name = c.cs_ref_name + c.a_branch_name = None other_scm_instance = c.a_repo.scm_instance c.update_msg = "" c.update_msg_other = "" - if org_scm_instance.alias == 'hg' and c.a_ref_name != 'ancestor': - if c.cs_ref_type != 'branch': - c.cs_branch_name = org_scm_instance.get_changeset(c.cs_ref_name).branch # use ref_type ? - c.a_branch_name = c.a_ref_name - if c.a_ref_type != 'branch': - try: - c.a_branch_name = other_scm_instance.get_changeset(c.a_ref_name).branch # use ref_type ? - except EmptyRepositoryError: - c.a_branch_name = 'null' # not a branch name ... but close enough - # candidates: descendants of old head that are on the right branch - # and not are the old head itself ... - # and nothing at all if old head is a descendant of target ref name - if not c.is_range and other_scm_instance._repo.revs('present(%s)::&%s', c.cs_ranges[-1].raw_id, c.a_branch_name): - c.update_msg = _('This pull request has already been merged to %s.') % c.a_branch_name - elif c.pull_request.is_closed(): - c.update_msg = _('This pull request has been closed and can not be updated.') - else: # look for descendants of PR head on source branch in org repo - avail_revs = org_scm_instance._repo.revs('%s:: & branch(%s)', - revs[0], c.cs_branch_name) - if len(avail_revs) > 1: # more than just revs[0] - # also show changesets that not are descendants but would be merged in - targethead = other_scm_instance.get_changeset(c.a_branch_name).raw_id - if org_scm_instance.path != other_scm_instance.path: - # Note: org_scm_instance.path must come first so all - # valid revision numbers are 100% org_scm compatible - # - both for avail_revs and for revset results - hgrepo = unionrepo.unionrepository(org_scm_instance.baseui, - org_scm_instance.path, - other_scm_instance.path) + try: + if not c.cs_ranges: + c.update_msg = _('Error: changesets not found when displaying pull request from %s.') % c.cs_rev + elif org_scm_instance.alias == 'hg' and c.a_ref_name != 'ancestor': + if c.cs_ref_type != 'branch': + c.cs_branch_name = org_scm_instance.get_changeset(c.cs_ref_name).branch # use ref_type ? + c.a_branch_name = c.a_ref_name + if c.a_ref_type != 'branch': + try: + c.a_branch_name = other_scm_instance.get_changeset(c.a_ref_name).branch # use ref_type ? + except EmptyRepositoryError: + c.a_branch_name = 'null' # not a branch name ... but close enough + # candidates: descendants of old head that are on the right branch + # and not are the old head itself ... + # and nothing at all if old head is a descendant of target ref name + if not c.is_range and other_scm_instance._repo.revs('present(%s)::&%s', c.cs_ranges[-1].raw_id, c.a_branch_name): + c.update_msg = _('This pull request has already been merged to %s.') % c.a_branch_name + elif c.pull_request.is_closed(): + c.update_msg = _('This pull request has been closed and can not be updated.') + else: # look for descendants of PR head on source branch in org repo + avail_revs = org_scm_instance._repo.revs('%s:: & branch(%s)', + revs[0], c.cs_branch_name) + if len(avail_revs) > 1: # more than just revs[0] + # also show changesets that not are descendants but would be merged in + targethead = other_scm_instance.get_changeset(c.a_branch_name).raw_id + if org_scm_instance.path != other_scm_instance.path: + # Note: org_scm_instance.path must come first so all + # valid revision numbers are 100% org_scm compatible + # - both for avail_revs and for revset results + hgrepo = unionrepo.unionrepository(org_scm_instance.baseui, + org_scm_instance.path, + other_scm_instance.path) + else: + hgrepo = org_scm_instance._repo + show = set(hgrepo.revs('::%ld & !::parents(%s) & !::%s', + avail_revs, revs[0], targethead)) + c.update_msg = _('The following additional changes are available on %s:') % c.cs_branch_name else: - hgrepo = org_scm_instance._repo - show = set(hgrepo.revs('::%ld & !::%s & !::%s', - avail_revs, revs[0], targethead)) - c.update_msg = _('This pull request can be updated with changes on %s:') % c.cs_branch_name - else: - show = set() - avail_revs = set() # drop revs[0] - c.update_msg = _('No changesets found for updating this pull request.') + show = set() + avail_revs = set() # drop revs[0] + c.update_msg = _('No additional changesets found for iterating on this pull request.') - # TODO: handle branch heads that not are tip-most - brevs = org_scm_instance._repo.revs('%s - %ld - %s', c.cs_branch_name, avail_revs, revs[0]) - if brevs: - # also show changesets that are on branch but neither ancestors nor descendants - show.update(org_scm_instance._repo.revs('::%ld - ::%ld - ::%s', brevs, avail_revs, c.a_branch_name)) - show.add(revs[0]) # make sure graph shows this so we can see how they relate - c.update_msg_other = _('Note: Branch %s has another head: %s.') % (c.cs_branch_name, - h.short_id(org_scm_instance.get_changeset((max(brevs))).raw_id)) + # TODO: handle branch heads that not are tip-most + brevs = org_scm_instance._repo.revs('%s - %ld - %s', c.cs_branch_name, avail_revs, revs[0]) + if brevs: + # also show changesets that are on branch but neither ancestors nor descendants + show.update(org_scm_instance._repo.revs('::%ld - ::%ld - ::%s', brevs, avail_revs, c.a_branch_name)) + show.add(revs[0]) # make sure graph shows this so we can see how they relate + c.update_msg_other = _('Note: Branch %s has another head: %s.') % (c.cs_branch_name, + h.short_id(org_scm_instance.get_changeset((max(brevs))).raw_id)) - avail_show = sorted(show, reverse=True) + avail_show = sorted(show, reverse=True) - elif org_scm_instance.alias == 'git': - c.update_msg = _("Git pull requests don't support updates yet.") + elif org_scm_instance.alias == 'git': + c.cs_repo.scm_instance.get_changeset(c.cs_rev) # check it exists - raise ChangesetDoesNotExistError if not + c.update_msg = _("Git pull requests don't support iterating yet.") + except ChangesetDoesNotExistError: + c.update_msg = _('Error: some changesets not found when displaying pull request from %s.') % c.cs_rev c.avail_revs = avail_revs c.avail_cs = [org_scm_instance.get_changeset(r) for r in avail_show] - c.avail_jsdata = json.dumps(graph_data(org_scm_instance, avail_show)) + c.avail_jsdata = graph_data(org_scm_instance, avail_show) raw_ids = [x.raw_id for x in c.cs_ranges] c.cs_comments = c.cs_repo.get_comments(raw_ids) - c.statuses = c.cs_repo.statuses(raw_ids) + c.cs_statuses = c.cs_repo.statuses(raw_ids) ignore_whitespace = request.GET.get('ignorews') == '1' - line_context = request.GET.get('context', 3) + line_context = safe_int(request.GET.get('context'), 3) c.ignorews_url = _ignorews_url c.context_url = _context_url - c.fulldiff = request.GET.get('fulldiff') - diff_limit = self.cut_off_limit if not c.fulldiff else None + fulldiff = request.GET.get('fulldiff') + diff_limit = None if fulldiff else self.cut_off_limit # we swap org/other ref since we run a simple diff on one repo log.debug('running diff between %s and %s in %s', c.a_rev, c.cs_rev, org_scm_instance.path) - txtdiff = org_scm_instance.get_diff(rev1=safe_str(c.a_rev), rev2=safe_str(c.cs_rev), - ignore_whitespace=ignore_whitespace, - context=line_context) - - diff_processor = diffs.DiffProcessor(txtdiff or '', format='gitdiff', - diff_limit=diff_limit) - _parsed = diff_processor.prepare() - - c.limited_diff = False - if isinstance(_parsed, LimitedDiffContainer): - c.limited_diff = True - - c.files = [] - c.changes = {} + try: + raw_diff = diffs.get_diff(org_scm_instance, rev1=safe_str(c.a_rev), rev2=safe_str(c.cs_rev), + ignore_whitespace=ignore_whitespace, context=line_context) + except ChangesetDoesNotExistError: + raw_diff = _("The diff can't be shown - the PR revisions could not be found.") + diff_processor = diffs.DiffProcessor(raw_diff or '', diff_limit=diff_limit) + c.limited_diff = diff_processor.limited_diff + c.file_diff_data = [] c.lines_added = 0 c.lines_deleted = 0 - for f in _parsed: + for f in diff_processor.parsed: st = f['stats'] c.lines_added += st['added'] c.lines_deleted += st['deleted'] - fid = h.FID('', f['filename']) - c.files.append([fid, f['operation'], f['filename'], f['stats']]) - htmldiff = diff_processor.as_html(enable_comments=True, - parsed_lines=[f]) - c.changes[fid] = [f['operation'], f['filename'], htmldiff] + filename = f['filename'] + fid = h.FID('', filename) + html_diff = diffs.as_html(enable_comments=True, parsed_lines=[f]) + c.file_diff_data.append((fid, None, f['operation'], f['old_filename'], filename, html_diff, st)) # inline comments c.inline_cnt = 0 @@ -687,8 +612,7 @@ for comments in lines.values(): c.inline_cnt += len(comments) # comments - c.comments = cc_model.get_comments(c.db_repo.repo_id, - pull_request=pull_request_id) + c.comments = cc_model.get_comments(c.db_repo.repo_id, pull_request=pull_request_id) # (badly named) pull-request status calculation based on reviewer votes (c.pull_request_reviewers, @@ -697,24 +621,23 @@ ) = cs_model.calculate_pull_request_result(c.pull_request) c.changeset_statuses = ChangesetStatus.STATUSES - c.as_form = False - c.ancestor = None # there is one - but right here we don't know which + c.is_ajax_preview = False + c.ancestors = None # [c.a_rev] ... but that is shown in an other way return render('/pullrequests/pullrequest_show.html') @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') @jsonify def comment(self, repo_name, pull_request_id): pull_request = PullRequest.get_or_404(pull_request_id) status = request.POST.get('changeset_status') close_pr = request.POST.get('save_close') + delete = request.POST.get('save_delete') f_path = request.POST.get('f_path') line_no = request.POST.get('line') - if (status or close_pr) and (f_path or line_no): + if (status or close_pr or delete) and (f_path or line_no): # status votes and closing is only possible in general comments raise HTTPBadRequest() @@ -724,45 +647,56 @@ h.flash(_('No permission to change pull request status'), 'error') raise HTTPForbidden() - text = request.POST.get('text', '').strip() - if close_pr: - text = _('Closing.') + '\n' + text + if delete == "delete": + if (pull_request.owner_id == request.authuser.user_id or + h.HasPermissionAny('hg.admin')() or + h.HasRepoPermissionLevel('admin')(pull_request.org_repo.repo_name) or + h.HasRepoPermissionLevel('admin')(pull_request.other_repo.repo_name) + ) and not pull_request.is_closed(): + PullRequestModel().delete(pull_request) + Session().commit() + h.flash(_('Successfully deleted pull request %s') % pull_request_id, + category='success') + return { + 'location': url('my_pullrequests'), # or repo pr list? + } + raise HTTPFound(location=url('my_pullrequests')) # or repo pr list? + raise HTTPForbidden() - comment = ChangesetCommentsModel().create( - text=text, - repo=c.db_repo.repo_id, - user=c.authuser.user_id, - pull_request=pull_request_id, + text = request.POST.get('text', '').strip() + + comment = create_comment( + text, + status, + pull_request_id=pull_request_id, f_path=f_path, line_no=line_no, - status_change=(ChangesetStatus.get_status_lbl(status) - if status and allowed_to_change_status else None), - closing_pr=close_pr + closing_pr=close_pr, ) - action_logger(self.authuser, + action_logger(request.authuser, 'user_commented_pull_request:%s' % pull_request_id, - c.db_repo, self.ip_addr, self.sa) + c.db_repo, request.ip_addr) if status: ChangesetStatusModel().set_status( c.db_repo.repo_id, status, - c.authuser.user_id, + request.authuser.user_id, comment, pull_request=pull_request_id ) if close_pr: PullRequestModel().close_pull_request(pull_request_id) - action_logger(self.authuser, + action_logger(request.authuser, 'user_closed_pull_request:%s' % pull_request_id, - c.db_repo, self.ip_addr, self.sa) + c.db_repo, request.ip_addr) Session().commit() if not request.environ.get('HTTP_X_PARTIAL_XHR'): - return redirect(pull_request.url()) + raise HTTPFound(location=pull_request.url()) data = { 'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))), @@ -776,18 +710,16 @@ return data @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') @jsonify def delete_comment(self, repo_name, comment_id): co = ChangesetComment.get(comment_id) if co.pull_request.is_closed(): - #don't allow deleting comments on closed pull request + # don't allow deleting comments on closed pull request raise HTTPForbidden() - owner = co.author.user_id == c.authuser.user_id - repo_admin = h.HasRepoPermissionAny('repository.admin')(c.repo_name) + owner = co.author_id == request.authuser.user_id + repo_admin = h.HasRepoPermissionLevel('admin')(c.repo_name) if h.HasPermissionAny('hg.admin')() or repo_admin or owner: ChangesetCommentsModel().delete(comment=co) Session().commit() diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/root.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/controllers/root.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +from tgext.routes import RoutedController +from kallithea.config.routing import make_map +from kallithea.lib.base import BaseController +from kallithea.controllers.error import ErrorController +from tg import config + + +# This is the main Kallithea entry point; TurboGears will forward all requests +# to an instance of 'controller.root.RootController' in the configured +# 'application' module (set by app_cfg.py). Requests are forwarded to +# controllers based on the routing mapper that lives in this root instance. +# The mapper is configured using routes defined in routing.py. This use of the +# 'mapper' attribute is a feature of tgext.routes, which is activated by +# inheriting from its RoutedController class. +class RootController(RoutedController, BaseController): + + mapper = make_map(config) + + # the following assignment hooks in error handling + error = ErrorController() diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/search.py --- a/kallithea/controllers/search.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/search.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,8 +28,8 @@ import logging import traceback import urllib -from pylons.i18n.translation import _ -from pylons import request, config, tmpl_context as c +from tg.i18n import ugettext as _ +from tg import request, config, tmpl_context as c from whoosh.index import open_dir, EmptyIndexError from whoosh.qparser import QueryParser, QueryParserError @@ -40,19 +40,16 @@ from kallithea.lib.base import BaseRepoController, render from kallithea.lib.indexers import CHGSETS_SCHEMA, SCHEMA, CHGSET_IDX_NAME, \ IDX_NAME, WhooshResultWrapper -from kallithea.model.repo import RepoModel +from kallithea.lib.page import Page from kallithea.lib.utils2 import safe_str, safe_int -from kallithea.lib.helpers import Page +from kallithea.model.repo import RepoModel log = logging.getLogger(__name__) class SearchController(BaseRepoController): - def __before__(self): - super(SearchController, self).__before__() - - @LoginRequired() + @LoginRequired(allow_default_user=True) def index(self, repo_name=None): c.repo_name = repo_name c.formated_results = [] @@ -85,7 +82,7 @@ log.debug(cur_query) if c.cur_query: - p = safe_int(request.GET.get('page', 1), 1) + p = safe_int(request.GET.get('page'), 1) highlight_items = set() try: idx = open_dir(config['app_conf']['index_dir'], @@ -94,7 +91,9 @@ qp = QueryParser(search_type, schema=schema_defn) if c.repo_name: - cur_query = u'repository:%s %s' % (c.repo_name, cur_query) + # use "repository_rawname:" instead of "repository:" + # for case-sensitive matching + cur_query = u'repository_rawname:%s %s' % (c.repo_name, cur_query) try: query = qp.parse(unicode(cur_query)) # extract words for highlight @@ -139,7 +138,7 @@ log.error('Empty Index data') c.runtime = _('There is no index to search in. ' 'Please run whoosh indexer') - except (Exception): + except Exception: log.error(traceback.format_exc()) c.runtime = _('An error occurred during search operation.') diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/summary.py --- a/kallithea/controllers/summary.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/controllers/summary.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,50 +28,44 @@ import traceback import calendar import logging +import itertools from time import mktime from datetime import timedelta, date -from pylons import tmpl_context as c, request -from pylons.i18n.translation import _ +from tg import tmpl_context as c, request +from tg.i18n import ugettext as _ from webob.exc import HTTPBadRequest from beaker.cache import cache_region, region_invalidate -from kallithea.lib.compat import product from kallithea.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \ NodeDoesNotExistError from kallithea.config.conf import ALL_READMES, ALL_EXTS, LANGUAGES_EXTENSIONS_MAP from kallithea.model.db import Statistics, CacheInvalidation, User -from kallithea.lib.utils import jsonify -from kallithea.lib.utils2 import safe_str -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\ - NotAnonymous -from kallithea.lib.base import BaseRepoController, render +from kallithea.lib.utils2 import safe_int, safe_str +from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator +from kallithea.lib.base import BaseRepoController, render, jsonify from kallithea.lib.vcs.backends.base import EmptyChangeset from kallithea.lib.markup_renderer import MarkupRenderer -from kallithea.lib.celerylib import run_task from kallithea.lib.celerylib.tasks import get_commits_stats from kallithea.lib.compat import json from kallithea.lib.vcs.nodes import FileNode -from kallithea.controllers.changelog import _load_changelog_summary +from kallithea.lib.page import RepoPage log = logging.getLogger(__name__) README_FILES = [''.join([x[0][0], x[1][0]]) for x in - sorted(list(product(ALL_READMES, ALL_EXTS)), + sorted(list(itertools.product(ALL_READMES, ALL_EXTS)), key=lambda y:y[0][1] + y[1][1])] class SummaryController(BaseRepoController): - def __before__(self): - super(SummaryController, self).__before__() - def __get_readme_data(self, db_repo): repo_name = db_repo.repo_name log.debug('Looking for README file') - @cache_region('long_term') + @cache_region('long_term', '_get_readme_from_cache') def _get_readme_from_cache(key, kind): readme_data = None readme_file = None @@ -105,18 +99,24 @@ kind = 'README' valid = CacheInvalidation.test_and_set_valid(repo_name, kind) if not valid: - region_invalidate(_get_readme_from_cache, None, repo_name, kind) + region_invalidate(_get_readme_from_cache, None, '_get_readme_from_cache', repo_name, kind) return _get_readme_from_cache(repo_name, kind) - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def index(self, repo_name): - _load_changelog_summary() + p = safe_int(request.GET.get('page'), 1) + size = safe_int(request.GET.get('size'), 10) + collection = c.db_repo_scm_instance + c.cs_pagination = RepoPage(collection, page=p, items_per_page=size) + page_revisions = [x.raw_id for x in list(c.cs_pagination)] + c.cs_comments = c.db_repo.get_comments(page_revisions) + c.cs_statuses = c.db_repo.statuses(page_revisions) - username = '' - if self.authuser.username != User.DEFAULT_USER: - username = safe_str(self.authuser.username) + if request.authuser.is_default_user: + username = '' + else: + username = safe_str(request.authuser.username) _def_clone_uri = _def_clone_uri_by_id = c.clone_uri_tmpl if '{repo}' in _def_clone_uri: @@ -134,8 +134,8 @@ else: c.show_stats = False - stats = self.sa.query(Statistics)\ - .filter(Statistics.repository == c.db_repo)\ + stats = Statistics.query() \ + .filter(Statistics.repository == c.db_repo) \ .scalar() c.stats_percentage = 0 @@ -148,12 +148,12 @@ "desc": LANGUAGES_EXTENSIONS_MAP.get(x)}) for x, y in lang_stats_d.items()) - c.trending_languages = json.dumps( + c.trending_languages = ( sorted(lang_stats, reverse=True, key=lambda k: k[1])[:10] ) else: c.no_data = True - c.trending_languages = json.dumps([]) + c.trending_languages = [] c.enable_downloads = c.db_repo.enable_downloads c.readme_data, c.readme_file = \ @@ -161,9 +161,7 @@ return render('summary/summary.html') @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @HasRepoPermissionLevelDecorator('read') @jsonify def repo_size(self, repo_name): if request.is_xhr: @@ -171,9 +169,8 @@ else: raise HTTPBadRequest() - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') + @LoginRequired(allow_default_user=True) + @HasRepoPermissionLevelDecorator('read') def statistics(self, repo_name): if c.db_repo.enable_statistics: c.show_stats = True @@ -192,25 +189,25 @@ c.ts_min = ts_min_m c.ts_max = ts_max_y - stats = self.sa.query(Statistics)\ - .filter(Statistics.repository == c.db_repo)\ + stats = Statistics.query() \ + .filter(Statistics.repository == c.db_repo) \ .scalar() c.stats_percentage = 0 if stats and stats.languages: c.no_data = False is c.db_repo.enable_statistics lang_stats_d = json.loads(stats.languages) - c.commit_data = stats.commit_activity - c.overview_data = stats.commit_activity_combined + c.commit_data = json.loads(stats.commit_activity) + c.overview_data = json.loads(stats.commit_activity_combined) lang_stats = ((x, {"count": y, "desc": LANGUAGES_EXTENSIONS_MAP.get(x)}) for x, y in lang_stats_d.items()) - c.trending_languages = json.dumps( + c.trending_languages = ( sorted(lang_stats, reverse=True, key=lambda k: k[1])[:10] ) last_rev = stats.stat_on_revision + 1 - c.repo_last_rev = c.db_repo_scm_instance.count()\ + c.repo_last_rev = c.db_repo_scm_instance.count() \ if c.db_repo_scm_instance.revisions else 0 if last_rev == 0 or c.repo_last_rev == 0: pass @@ -218,12 +215,11 @@ c.stats_percentage = '%.2f' % ((float((last_rev)) / c.repo_last_rev) * 100) else: - c.commit_data = json.dumps({}) - c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10]]) - c.trending_languages = json.dumps({}) + c.commit_data = {} + c.overview_data = ([[ts_min_y, 0], [ts_max_y, 10]]) + c.trending_languages = {} c.no_data = True recurse_limit = 500 # don't recurse more than 500 times when parsing - run_task(get_commits_stats, c.db_repo.repo_name, ts_min_y, - ts_max_y, recurse_limit) + get_commits_stats(c.db_repo.repo_name, ts_min_y, ts_max_y, recurse_limit) return render('summary/statistics.html') diff -r 42788d5f5967 -r b3289fef0daa kallithea/controllers/tags.py --- a/kallithea/controllers/tags.py Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -""" -kallithea.controllers.tags -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Tags controller for Kallithea - -This file was forked by the Kallithea project in July 2014. -Original author and date, and relevant copyright and licensing information is below: -:created_on: Apr 21, 2010 -:author: marcink -:copyright: (c) 2013 RhodeCode GmbH, and others. -:license: GPLv3, see LICENSE.md for more details. - -""" - -import logging - -from pylons import tmpl_context as c - -from kallithea.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator -from kallithea.lib.base import BaseRepoController, render -from kallithea.lib.compat import OrderedDict - -log = logging.getLogger(__name__) - - -class TagsController(BaseRepoController): - - def __before__(self): - super(TagsController, self).__before__() - - @LoginRequired() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - def index(self): - c.repo_tags = OrderedDict() - - tags = [(name, c.db_repo_scm_instance.get_changeset(hash_)) for \ - name, hash_ in c.db_repo_scm_instance.tags.items()] - ordered_tags = sorted(tags, key=lambda x: x[1].date, reverse=True) - for name, cs_tag in ordered_tags: - c.repo_tags[name] = cs_tag - - return render('tags/tags.html') diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/be/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/be/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/be/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -1,104 +1,119 @@ # Belarusian translations for Kallithea. -# Copyright (C) 2015 Various authors, licensing as GPLv3 +# Copyright (C) 2016 Various authors, licensing as GPLv3 # This file is distributed under the same license as the Kallithea project. -# Automatically generated, 2015. +# Automatically generated, 2016. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" -"PO-Revision-Date: 2017-04-22 21:08+0000\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" +"PO-Revision-Date: 2017-06-03 21:48+0000\n" "Last-Translator: Viktar Vauchkevich \n" "Language-Team: Belarusian " -"\n" +"\n" "Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" "4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 2.14-dev\n" +"X-Generator: Weblate 2.15-dev\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "Яшчэ не было змен" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "Нічога" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(зачынена)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" -msgstr "Адлюстроўваць прабелы" - -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +msgstr "Паказваць прабелы" + +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "Ігнараваць прабелы" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "Павялічыць кантэкст да %(num)s радкоў" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "Няма такой рэвізіі ў гэтым рэпазітары" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "Нельга рэдагаваць статус змен, злучаных з зачыненымі pull-request'ами" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "Выбраць набор змен" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "Перайсці на верхавіну рэпазітара" + +#: kallithea/controllers/compare.py:73 +#, fuzzy +#| msgid "Cannot compare repositories without using common ancestor" +msgid "Cannot compare repositories of different types" +msgstr "Немагчыма параўноўваць рэпазітары без агульнага продка" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "Немагчыма параўноўваць рэпазітары без агульнага продка" -#: kallithea/controllers/error.py:71 +#: kallithea/controllers/error.py:70 msgid "No response" msgstr "Няма адказу" -#: kallithea/controllers/error.py:72 +#: kallithea/controllers/error.py:71 msgid "Unknown error" msgstr "Невядомая памылка" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "Запыт не распазнаны серверам з-за няправільнага сінтаксісу." -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "Несанкцыянаваны доступ да рэсурсу" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "У вас няма правоў для прагляду гэтай старонкі" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "Рэсурс не знойдзены" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." @@ -106,360 +121,393 @@ "Сервер не можа выканаць запыт з-за нечаканых умоваў, якія ўзніклі падчас " "яго спрацавання." -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "Змены ў рэпазітары %s" - -#: kallithea/controllers/feed.py:56 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "Змены апынуліся занадта вялікімі і былі скарочаныя..." + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "%s выканаў каміт у %s" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 #, python-format msgid "%s %s feed" msgstr "Стужка навін %s %s" -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "Змены апынуліся занадта вялікімі і былі выразаныя..." - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "%s выканаў каміт у %s" - -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "Змены ў рэпазітары %s" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "Націсніце каб дадаць новы файл" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "Няма файлаў. %s" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, python-format msgid "%s at %s" msgstr "%s (%s)" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "Рэпазітар заблакаваў %s у %s" -#: kallithea/controllers/files.py:317 +#: kallithea/controllers/files.py:309 msgid "You can only delete files with revision being a valid branch" -msgstr "Вы можаце выдаляць файлы толькі ў рэвізіі, злучанай з існай галінкай" - -#: kallithea/controllers/files.py:328 +msgstr "Вы можаце выдаляць файлы толькі ў рэвізіі, злучанай з існай галінай" + +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "Файл %s выдалены з дапамогай Kallithea" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "Файл %s выдалены" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "Падчас каміта адбылася памылка" -#: kallithea/controllers/files.py:377 +#: kallithea/controllers/files.py:369 msgid "You can only edit files with revision being a valid branch" -msgstr "Вы можаце рэдагаваць файлы толькі ў рэвізіі, злучанай з існай галінкай" - -#: kallithea/controllers/files.py:391 +msgstr "Вы можаце рэдагаваць файлы толькі ў рэвізіі, злучанай з існай галінай" + +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "Файл %s адрэдагаваны з дапамогай Kallithea" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "Без змен" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" -msgstr "Змены ўжыты ў %s" - -#: kallithea/controllers/files.py:443 +msgstr "Змены захаваныя ў %s" + +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "Файл дададзены з дапамогай Kallithea" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "Пуста" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "Безназоўны" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "" "Размяшчэнне павінна быць адносным шляхам, і не можа ўтрымліваць \"..\" у " "шляхі" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" -msgstr "Магчымасць спампоўваць адключана" - -#: kallithea/controllers/files.py:537 +msgstr "Магчымасць спампоўваць адключаная" + +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "Невядомая рэвізія %s" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "Пусты рэпазітар" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "Невядомы тып архіва" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "Набор змен" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" -msgstr "Галінкі" - -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +msgstr "Галіны" + +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "Тэгі" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" -msgstr "Адбылася памылка падчас стварэння форка рэпазітара %s" - -#: kallithea/controllers/home.py:84 +msgstr "Памылка падчас стварэння форка рэпазітара %s" + +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "Групы" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "Рэпазітары" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" -msgstr "Галінка" - -#: kallithea/controllers/home.py:136 +msgstr "Галіна" + +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "Зачыненыя галіны" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "Тэгі" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "Закладкі" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" -msgstr "Публічны часопіс" - -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +msgstr "Публічны журнал" + +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" -msgstr "Часопіс" - -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +msgstr "Журнал" + +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "Няслушная капча" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "Рэгістрацыя ў Kallithea прайшла паспяхова" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "Рэгістрацыя ў %s прайшла паспяхова" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" -msgstr "Спасылка для скідання пароля адасланая" - -#: kallithea/controllers/login.py:246 +msgstr "Код для скідання пароля адпраўлены" + +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" -msgstr "Няспраўны код для скідання пароля" - -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +msgstr "Няслушны код скідання пароля" + +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "Пароль абноўлены" -#: kallithea/controllers/pullrequests.py:124 +#: kallithea/controllers/pullrequests.py:73 +#, python-format +msgid "Invalid reviewer \"%s\" specified" +msgstr "Няслушны рэцэнзент \"%s\"" + +#: kallithea/controllers/pullrequests.py:135 #, python-format msgid "%s (closed)" msgstr "%s (зачынена)" -#: kallithea/controllers/pullrequests.py:152 +#: kallithea/controllers/pullrequests.py:162 #: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 msgid "Changeset" msgstr "Змены" -#: kallithea/controllers/pullrequests.py:173 +#: kallithea/controllers/pullrequests.py:183 msgid "Special" msgstr "Адмысловы" -#: kallithea/controllers/pullrequests.py:174 +#: kallithea/controllers/pullrequests.py:184 msgid "Peer branches" -msgstr "Галінкі ўдзельніка" - -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 +msgstr "Галіны ўдзельніка" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 msgid "Bookmarks" msgstr "Закладкі" -#: kallithea/controllers/pullrequests.py:310 +#: kallithea/controllers/pullrequests.py:326 #, python-format msgid "Error creating pull request: %s" msgstr "Памылка пры стварэнні pull-запыту: %s" -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "Няма апісання" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "Pull-запыт створаны паспяхова" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 -#, python-format -msgid "Invalid reviewer \"%s\" specified" -msgstr "" - -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "Адбылася памылка пры стварэнні pull-запыту" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "Адсутныя рэвізіі адносна папярэдняга pull-запыту:" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "Новыя рэвізіі на %s %s адносна папярэдняга pull-запыту:" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "Гэты pull-запыт заснаваны на іншай рэвізіі %s, просты diff немагчымы." - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "Няма змен на %s %s адносна папярэдняй версіі." - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "Зачынены, замешчаны %s." - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "Pull-запыт створаны паспяхова" + +#: kallithea/controllers/pullrequests.py:381 +#, fuzzy +#| msgid "Pull request update created" +msgid "New pull request iteration created" msgstr "Абнаўленне для pull-запыту створана" -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "Няма апісання" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "Pull-запыт абноўлены" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "Pull-запыт паспяхова выдалены" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, fuzzy, python-format +#| msgid "Changeset for %s %s not found in %s" +msgid "Revision %s not found in %s" +msgstr "Набор змен для %s %s не знойдзены ў %s" + +#: kallithea/controllers/pullrequests.py:518 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "Няма змен для абнаўлення гэтага pull-запыту." + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." -msgstr "Гэты pull-запыт ужо прыняты на галінку %s." - -#: kallithea/controllers/pullrequests.py:597 +msgstr "Гэты pull-запыт ужо прыняты на галіну %s." + +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "Гэты pull-запыт быў зачынены і не можа быць абноўлены." -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "Гэты pull-запыт можа быць абноўлены з %s:" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." +#: kallithea/controllers/pullrequests.py:552 +#, fuzzy, python-format +#| msgid "The following changes are available on %s:" +msgid "The following additional changes are available on %s:" +msgstr "Гэтыя змены даступныя на %s:" + +#: kallithea/controllers/pullrequests.py:556 +#, fuzzy +#| msgid "No changesets found for updating this pull request." +msgid "No additional changesets found for iterating on this pull request." msgstr "Няма змен для абнаўлення гэтага pull-запыту." -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." -msgstr "Увага: Галінка %s мае яшчэ адну верхавіну: %s." - -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "Абнаўленне pull-запытаў git не падтрымліваецца." - -#: kallithea/controllers/pullrequests.py:724 +msgstr "Увага: Галіна %s мае яшчэ адну верхавіну: %s." + +#: kallithea/controllers/pullrequests.py:571 +#, fuzzy +#| msgid "Git pull requests don't support updates yet." +msgid "Git pull requests don't support iterating yet." +msgstr "Абнаўленне pull-запытаў git яшчэ не падтрымліваецца." + +#: kallithea/controllers/pullrequests.py:573 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "Няма змен для абнаўлення гэтага pull-запыту." + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "Няма правоў змяняць статус pull-запыту" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "Зачынены." - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, python-format +msgid "Successfully deleted pull request %s" +msgstr "Pull-запыт %s паспяхова выдалены" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "Недапушчальны пошукавы запыт. Паспрабуйце скласці яго ў двукоссі." -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "Індэксы адсутнічаюць. Калі ласка, запусціце індэксатар Whoosh" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." -msgstr "Адбылася памылка пры выкананні гэтага пошуку." - -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +msgstr "Памылка пры выкананні гэтага пошуку." + +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "Няма дадзеных" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "Статыстычныя дадзеныя адключаны для гэтага рэпазітара" @@ -469,153 +517,157 @@ #: kallithea/controllers/admin/auth_settings.py:146 msgid "error occurred during update of auth settings" -msgstr "адбылася памылка пры абнаўленні налад аўтарызацыі" - -#: kallithea/controllers/admin/defaults.py:97 +msgstr "памылка пры абнаўленні налад аўтарызацыі" + +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "Стандартныя налады паспяхова абноўлены" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" -msgstr "Адбылася памылка пры абнаўленні стандартных налад" +msgstr "Памылка пры абнаўленні стандартных налад" + +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "Назаўжды" #: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 -msgid "Forever" -msgstr "Назаўжды" +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" +msgstr "5 хвілін" #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" -msgstr "5 хвілін" +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" +msgstr "1 гадзіна" #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" -msgstr "1 гадзіна" - -#: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 msgid "1 day" msgstr "1 дзень" -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/gists.py:62 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "1 месяц" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "Тэрмін" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "Адбылася памылка падчас стварэння gist-запіса" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "Gist-запіс %s выдалены" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" msgstr "Без змен" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" -msgstr "" - -#: kallithea/controllers/admin/gists.py:267 +msgstr "Gist-запіс абноўлены" + +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" -msgstr "Дадзеныя gist-запісы абноўлены" - -#: kallithea/controllers/admin/gists.py:270 +msgstr "Gist-запіс абноўлены" + +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" -msgstr "Адбылася памылка пры абнаўленні gist-запісы %s" - -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +msgstr "Памылка пры абнаўленні gist-запісу %s" + +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -"Вы не можаце змяніць дадзеныя гэтага карыстача, паколькі ён важны для " -"працы ўсяго прыкладання" - -#: kallithea/controllers/admin/my_account.py:129 +"Вы не можаце змяніць дадзеныя гэтага карыстальніка, паколькі ён важны для" +" працы ўсёй праграмы" + +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "Ваш уліковы запіс паспяхова абноўлены" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" -msgstr "Адбылася памылка пры абнаўленні карыстача %s" - -#: kallithea/controllers/admin/my_account.py:178 +msgstr "Памылка пры абнаўленні карыстальніка %s" + +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "Памылка пры абнаўленні пароля" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" -msgstr "Карыстачу дададзены e-mail %s" - -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +msgstr "Карыстальніку дададзены e-mail %s" + +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" -msgstr "Адбылася памылка пры захаванні e-mail" - -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +msgstr "Памылка пры захаванні e-mail" + +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" -msgstr "E-mail карыстача выдалены" - -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +msgstr "E-mail карыстальніка выдалены" + +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "API-ключ паспяхова створаны" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "API-ключ паспяхова скінуты" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "API-ключ паспяхова выдалены" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "Чытанне" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" -msgstr "Запіс" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "Чытанне" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "Запіс" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -623,623 +675,643 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "Адміністратар" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "Адключана" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "Дазволена, з ручной актывацыяй уліковага запісу" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "Дазволена, з аўтаматычнай актывацыяй уліковага запісу" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "Ручная актывацыя вонкавага ўліковага запісу" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "Аўтаматычная актывацыя вонкавага ўліковага запісу" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "Адключана" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "Дазволена, з ручной актывацыяй уліковага запісу" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "Дазволена, з аўтаматычнай актывацыяй уліковага запісу" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "Ручная актывацыя вонкавага ўліковага запісу" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "Аўтаматычная актывацыя вонкавага ўліковага запісу" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "Уключана" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" -msgstr "Глабальныя прывілеі паспяхова абноўлены" - -#: kallithea/controllers/admin/permissions.py:139 +msgstr "Глабальныя прывілеі паспяхова абноўленыя" + +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "Адбылася памылка падчас абнаўлення прывілеяў" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "Адбылася памылка пры стварэнні групы рэпазітароў %s" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" -msgstr "Створана новая група рэпазітароў %s" - -#: kallithea/controllers/admin/repo_groups.py:250 +msgstr "Створаная новая група рэпазітароў %s" + +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" -msgstr "Група рэпазітароў %s абноўлена" - -#: kallithea/controllers/admin/repo_groups.py:266 +msgstr "Група рэпазітароў %s абноўленая" + +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "Адбылася памылка пры абнаўленні групы рэпазітароў %s" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" -msgstr "Дадзеная група ўтрымоўвае %s рэпазітароў і не можа быць выдалена" - -#: kallithea/controllers/admin/repo_groups.py:291 +msgstr "Група ўтрымлівае %s рэпазітароў і не можа быць выдаленая" + +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" -msgstr "Група ўтрымоўвае ў сабе %s падгруп і не можа быць выдалены" - -#: kallithea/controllers/admin/repo_groups.py:297 +msgstr "Група ўтрымлівае ў сабе %s падгруп і не можа быць выдаленая" + +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" -msgstr "Група рэпазітароў %s выдалена" - -#: kallithea/controllers/admin/repo_groups.py:302 +msgstr "Група рэпазітароў %s выдаленая" + +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" -msgstr "Адбылася памылка пры выдаленні групы рэпазітароў %s" - -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +msgstr "Памылка пры выдаленні групы рэпазітароў %s" + +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "Адміністратар не можа адклікаць свае прывелеі" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" -msgstr "Прывілеі групы рэпазітароў абноўлены" - -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +msgstr "Прывілеі групы рэпазітароў абноўленыя" + +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" -msgstr "Адбылася памылка пры водгуку прывелеі" - -#: kallithea/controllers/admin/repos.py:152 +msgstr "Памылка пры водгуку прывелея" + +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" -msgstr "Адбылася памылка пры стварэнні рэпазітара %s" - -#: kallithea/controllers/admin/repos.py:213 +msgstr "Памылка пры стварэнні рэпазітара %s" + +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "Рэпазітар %s створаны з %s" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" -msgstr "Зроблены форк(копія) рэпазітара %s на %s" - -#: kallithea/controllers/admin/repos.py:225 +msgstr "Зроблены форк рэпазітара %s на %s" + +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "Рэпазітар %s створаны" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "Рэпазітар %s паспяхова абноўлены" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" -msgstr "Адбылася памылка падчас абнаўлення рэпазітара %s" - -#: kallithea/controllers/admin/repos.py:310 +msgstr "Памылка падчас абнаўлення рэпазітара %s" + +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" -msgstr "Форки %s адлучаны" - -#: kallithea/controllers/admin/repos.py:313 +msgstr "Форкі %s адлучаныя" + +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" -msgstr "Выдалены форки рэпазітара %s" - -#: kallithea/controllers/admin/repos.py:318 +msgstr "Выдаленыя форки рэпазітара %s" + +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "Рэпазітар %s выдалены" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "Немагчыма выдаліць %s, ён усё яшчэ мае форкі" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" -msgstr "Адбылася памылка падчас выдалення %s" - -#: kallithea/controllers/admin/repos.py:374 +msgstr "Памылка падчас выдалення %s" + +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" -msgstr "Прывілеі рэпазітара абноўлены" - -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" -msgstr "Адбылася памылка пры стварэнні поля" - -#: kallithea/controllers/admin/repos.py:444 +msgstr "Прывілеі рэпазітара абноўленыя" + +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during creation of field" +msgid "An error occurred during creation of field: %r" +msgstr "Памылка пры стварэнні поля" + +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" -msgstr "Адбылася памылка пры выдаленні поля" - -#: kallithea/controllers/admin/repos.py:460 +msgstr "Памылка пры выдаленні поля" + +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "-- Не форк --" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "Бачнасць рэпазітара ў публічным часопісе абноўлена" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" -msgstr "Адбылася памылка пры ўсталёўцы рэпазітара ў агульнадаступны часопіс" - -#: kallithea/controllers/admin/repos.py:512 +msgstr "Памылка пры даданні рэпазітара ў агульнадаступны часопіс" + +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "Нічога" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "Рэпазітар %s адзначаны як форк %s" -#: kallithea/controllers/admin/repos.py:521 +#: kallithea/controllers/admin/repos.py:480 msgid "An error occurred during this operation" -msgstr "Адбылася памылка пры выкананні аперацыі" - -#: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 +msgstr "Памылка пры выкананні аперацыі" + +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 msgid "Repository has been locked" msgstr "Рэпазітар заблакаваны" -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 msgid "Repository has been unlocked" -msgstr "Рэпазітар адблакаваны" - -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 +msgstr "Рэпазітар разблакаваны" + +#: kallithea/controllers/admin/repos.py:502 +#: kallithea/controllers/admin/repos.py:521 msgid "An error occurred during unlocking" -msgstr "Адбылася памылка падчас разблакавання" - -#: kallithea/controllers/admin/repos.py:582 +msgstr "Памылка падчас разблакавання" + +#: kallithea/controllers/admin/repos.py:533 msgid "Cache invalidation successful" msgstr "Кэш скінуты" -#: kallithea/controllers/admin/repos.py:586 +#: kallithea/controllers/admin/repos.py:537 msgid "An error occurred during cache invalidation" -msgstr "Адбылася памылка пры ачыстцы кэша" - -#: kallithea/controllers/admin/repos.py:601 +msgstr "Памылка пры скіданні кэша" + +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" -msgstr "Занесены змены з выдаленага рэпазітара" - -#: kallithea/controllers/admin/repos.py:604 +msgstr "Занесеныя змены з аддаленага рэпазітара" + +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" -msgstr "Адбылася памылка пры занясенні змен з выдаленага рэпазітара" - -#: kallithea/controllers/admin/repos.py:637 +msgstr "Памылка пры занясенні змен з аддаленага рэпазітара" + +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "Адбылася памылка пры выдаленні статыстыкі рэпазітара" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "Абноўлены налады VCS" -#: kallithea/controllers/admin/settings.py:174 +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 msgid "" "Unable to activate hgsubversion support. The \"hgsubversion\" library is " "missing" msgstr "" -"Немагчыма ўключыць падтрымку hgsubversion. Бібліятэка «hgsubversion» " +"Немагчыма ўключыць падтрымку hgsubversion. Бібліятэка hgsubversion " "адсутнічае" -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 msgid "Error occurred while updating application settings" -msgstr "Адбылася памылка пры абнаўленні налад прыкладання" - -#: kallithea/controllers/admin/settings.py:211 +msgstr "Памылка пры абнаўленні наладаў праграмы" + +#: kallithea/controllers/admin/settings.py:174 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." -msgstr "Рэпазітары паспяхова перасканіраваны, дададзена: %s, выдалена: %s." - -#: kallithea/controllers/admin/settings.py:226 +msgstr "Рэпазітары паспяхова перасканаваныя, дададзена: %s, выдалена: %s." + +#: kallithea/controllers/admin/settings.py:189 #, python-format msgid "Invalidated %s repositories" msgstr "Скінуць кэш для %s рэпазітароў" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" -msgstr "Абноўленыя параметры налады прыкладання" - -#: kallithea/controllers/admin/settings.py:337 +msgstr "Абноўленыя налады праграмы" + +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "Налады візуалізацыі абноўленыя" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" -msgstr "Адбылася памылка пры абнаўленні налад візуалізацыі" - -#: kallithea/controllers/admin/settings.py:368 +msgstr "Адбылася памылка пры абнаўленні наладаў візуалізацыі" + +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" -msgstr "Калі ласка, увядзіце email-адрас" - -#: kallithea/controllers/admin/settings.py:383 +msgstr "Калі ласка, увядзіце e-mail-адрас" + +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "Задача адпраўкі e-mail створаная" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "Дададзены новы хук" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "Абноўленыя хукі" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" -msgstr "адбылася памылка пры стварэнні хука" - -#: kallithea/controllers/admin/settings.py:458 +msgstr "Памылка пры стварэнні хука" + +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" -msgstr "Запланавана пераіндэксаванне базы Whoosh" - -#: kallithea/controllers/admin/user_groups.py:150 +msgstr "Запланаванае пераіндэксаванне базы Whoosh" + +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" -msgstr "Створана група карыстачоў %s" - -#: kallithea/controllers/admin/user_groups.py:163 +msgstr "Створана група карыстальнікаў %s" + +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" -msgstr "Адбылася памылка пры стварэнні групы карыстачоў %s" - -#: kallithea/controllers/admin/user_groups.py:201 +msgstr "Памылка пры стварэнні групы карыстальнікаў %s" + +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" -msgstr "Група карыстачоў %s абноўлена" - -#: kallithea/controllers/admin/user_groups.py:224 +msgstr "Група карыстальнікаў %s абноўленая" + +#: kallithea/controllers/admin/user_groups.py:208 #, python-format msgid "Error occurred during update of user group %s" -msgstr "Адбылася памылка пры абнаўленні групы карыстачоў %s" - -#: kallithea/controllers/admin/user_groups.py:242 +msgstr "Памылка пры абнаўленні групы карыстальнікаў %s" + +#: kallithea/controllers/admin/user_groups.py:219 msgid "Successfully deleted user group" -msgstr "Група карыстачоў паспяхова выдалена" - -#: kallithea/controllers/admin/user_groups.py:247 +msgstr "Група карыстальнікаў паспяхова выдаленая" + +#: kallithea/controllers/admin/user_groups.py:224 msgid "An error occurred during deletion of user group" -msgstr "Адбылася памылка пры выдаленні групы карыстачоў" - -#: kallithea/controllers/admin/user_groups.py:314 +msgstr "Памылка пры выдаленні групы карыстальнікаў" + +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" -msgstr "Мэтавая група не можа быць такі ж" - -#: kallithea/controllers/admin/user_groups.py:320 +msgstr "Мэтавая група не можа быць той жа самай" + +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" -msgstr "Прывілеі групы карыстачоў абноўлены" - -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +msgstr "Прывілеі групы карыстальнікаў абноўленыя" + +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" -msgstr "Абноўлены прывілеі" - -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +msgstr "Абноўленыя прывілеі" + +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" -msgstr "Адбылася памылка пры захаванні прывілеяў" - -#: kallithea/controllers/admin/users.py:134 +msgstr "Памылка пры захаванні прывілеяў" + +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" -msgstr "Карыстач %s створаны" - -#: kallithea/controllers/admin/users.py:149 +msgstr "Карыстальнік %s створаны" + +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" -msgstr "Адбылася памылка пры стварэнні карыстача %s" - -#: kallithea/controllers/admin/users.py:182 +msgstr "Памылка пры стварэнні карыстальніка %s" + +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" -msgstr "Карыстач паспяхова абноўлены" - -#: kallithea/controllers/admin/users.py:218 +msgstr "Карыстальнік паспяхова абноўлены" + +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" -msgstr "Карыстач паспяхова выдалены" - -#: kallithea/controllers/admin/users.py:223 +msgstr "Карыстальнік паспяхова выдалены" + +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" -msgstr "Адбылася памылка пры выдаленні карыстача" - -#: kallithea/controllers/admin/users.py:236 +msgstr "Памылка пры выдаленні карыстальніка" + +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" -msgstr "Дададзены IP %s у белы спіс карыстача" - -#: kallithea/controllers/admin/users.py:469 +msgstr "Дададзены IP %s у белы спіс карыстальніка" + +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "Адбылася памылка пры захаванні IP" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" -msgstr "Выдалены IP %s з белага спісу карыстача" - -#: kallithea/lib/auth.py:744 +msgstr "Выдалены IP %s з белага спісу карыстальніка" + +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "IP %s заблакаваны" -#: kallithea/lib/auth.py:757 +#: kallithea/lib/auth.py:829 +msgid "You need to be a registered user to perform this action" +msgstr "Вы павінны быць зарэгістраваным карыстальнікам, каб выканаць гэта дзеянне" + +#: kallithea/lib/auth.py:857 +msgid "You need to be signed in to view this page" +msgstr "Старонка даступная толькі аўтарызаваным карыстальнікам" + +#: kallithea/lib/base.py:449 msgid "Invalid API key" msgstr "Няслушны API-ключ" -#: kallithea/lib/auth.py:785 +#: kallithea/lib/base.py:508 msgid "CSRF token leak has been detected - all form tokens have been expired" msgstr "" -#: kallithea/lib/auth.py:832 -msgid "You need to be a registered user to perform this action" -msgstr "Вы павінны быць зарэгістраваным карыстачом, каб выканаць гэта дзеянне" - -#: kallithea/lib/auth.py:864 -msgid "You need to be signed in to view this page" -msgstr "Старонка даступная толькі аўтарызаваным карыстачам" - -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "Рэпазітар не знойдзены на файлавай сістэме" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, python-format msgid "Changeset for %s %s not found in %s" msgstr "Набор змен для %s %s не знойдзены ў %s" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "Двайковы файл" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" "Набор змены апынуўся занадта вялікімі і быў падрэзаны, выкарыстоўвайце " "меню параўнання для паказу выніку параўнання" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "Змен не выяўлена" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" -msgstr "Выдалена галінка: %s" - -#: kallithea/lib/helpers.py:612 +msgstr "Выдаленая галіна: %s" + +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "Створаны тэг: %s" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, python-format msgid "Changeset %s not found" msgstr "Набор змен %s не знойдзены" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Паказаць адрозненні разам %s->%s" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 msgid "Compare view" msgstr "Параўнанне" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "і" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "на %s больш" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "версіі" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, python-format msgid "Fork name %s" msgstr "Імя форка %s" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, python-format msgid "Pull request %s" msgstr "Pull-запыт %s" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "[выдалены] рэпазітар" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "[створаны] рэпазітар" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "[створаны] рэпазітар як форк" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "[форкнуты] рэпазітар" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "[абноўлены] рэпазітар" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "[загружаны] архіў з рэпазітара" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "[выдалены] рэпазітар" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" -msgstr "[створаны] карыстач" - -#: kallithea/lib/helpers.py:775 +msgstr "[створаны] карыстальнік" + +#: kallithea/lib/helpers.py:766 msgid "[updated] user" -msgstr "[абноўлены] карыстач" - -#: kallithea/lib/helpers.py:777 +msgstr "[абноўлены] карыстальнік" + +#: kallithea/lib/helpers.py:768 msgid "[created] user group" -msgstr "[створана] група карыстачоў" - -#: kallithea/lib/helpers.py:779 +msgstr "[створана] група карыстальнікаў" + +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" -msgstr "[абноўлена] група карыстачоў" - -#: kallithea/lib/helpers.py:781 +msgstr "[абноўлена] група карыстальнікаў" + +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "[каментар] да рэвізіі ў рэпазітары" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" -msgstr "[пракаменціравана] у запыце на занясенне змен для" - -#: kallithea/lib/helpers.py:785 +msgstr "[каментар] у pull-запыце для" + +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" -msgstr "[зачынены] Pull-запыт для" - -#: kallithea/lib/helpers.py:787 +msgstr "[зачынены] pull-запыт для" + +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "[адпраўлена] у" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" -msgstr "[занесены змены з дапамогай Kallithea] у рэпазітары" - -#: kallithea/lib/helpers.py:791 +msgstr "[каміт праз Kallithea] у рэпазітары" + +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" -msgstr "[занесены змены з выдаленага рэпазітара] у рэпазітар" - -#: kallithea/lib/helpers.py:793 +msgstr "[занесены з аддаленага рэпазітара] у рэпазітар" + +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" -msgstr "[занесены змены] з" - -#: kallithea/lib/helpers.py:795 +msgstr "[занесены] з" + +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "[дададзены ў назіранні] рэпазітар" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "[выдалены з назірання] рэпазітар" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr " і на %s больш" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "Няма файлаў" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "новы файл" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "зменены" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "выдалены" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "пераназваны" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "chmod" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1250,39 +1322,39 @@ "пераназваны з файлавай сістэмы. Калі ласка, перазапусціце прыкладанне для" " сканавання рэпазітароў" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d год" -msgstr[1] "%d гадоў" -msgstr[2] "%d гады" - -#: kallithea/lib/utils2.py:416 +msgstr[1] "%d гады" +msgstr[2] "%d гадоў" + +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d месяц" -msgstr[1] "%d месяца" +msgstr[1] "%d месяцы" msgstr[2] "%d месяцаў" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d дзень" -msgstr[1] "%d дня" +msgstr[1] "%d дні" msgstr[2] "%d дзён" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d гадзіна" -msgstr[1] "%d гадзін" -msgstr[2] "%d гадзіны" - -#: kallithea/lib/utils2.py:419 +msgstr[1] "%d гадзіны" +msgstr[2] "%d гадзін" + +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" @@ -1290,7 +1362,7 @@ msgstr[1] "%d хвіліны" msgstr[2] "%d хвілін" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" @@ -1298,846 +1370,508 @@ msgstr[1] "%d секунды" msgstr[2] "%d секунд" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "у %s" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "%s назад" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "у %s і %s" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "%s і %s назад" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" -msgstr "прама цяпер" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "Рэпазітар - няма доступу" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "Рэпазітар - доступ на чытанне" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "Рэпазітар - доступ на запіс" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "Рэпазітар - адміністраванне" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "Група Рэпазітароў - няма доступу" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "Група Рэпазітароў - доступ на чытанне" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "Група Рэпазітароў - доступ на запіс" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "Група Рэпазітароў - адміністраванне" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "Адміністратар Kallithea" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "Стварэнне рэпазітароў адключана" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "Стварэнне рэпазітароў уключана" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "Магчымасць ствараць форк рэпазітара адключана" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "Магчымасць ствараць форк рэпазітара ўключана" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "Рэгістрацыя адключана" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "Рэгістрацыя новага карыстача ў Kallithea з ручной актывацыяй" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "Рэгістрацыя новага карыстача ў Kallithea з аўтаматычнай актывацыяй" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "Не прагледжана" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "Ухвалена" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "Адхілена" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "На разглядзе" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "верхні ўзровень" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "Група Рэпазітароў - няма доступу" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "Група рэпазітароў - доступ на чытанне" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "Група рэпазітароў - доступ на запіс" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "Група рэпазітароў - адміністраванне" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "Група карыстачоў - няма доступу" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "Група карыстачоў - доступ на чытанне" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "Група карыстачоў - доступ на запіс" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "Група карыстачоў - адміністраванне" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "Стварэнне груп рэпазітароў адключана" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "Стварэнне груп рэпазітароў уключана" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "Стварэнне груп карыстачоў адключана" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "Стварэнне груп карыстачоў уключана" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "Рэгістрацыя адключана" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "Рэгістрацыя карыстача з ручной актывацыяй уліковага запісу" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "Рэгістрацыя карыстача з аўтаматычнай актывацыяй" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +msgstr "цяпер" + +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "на радку %s" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "[Згадванне]" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "верхні ўзровень" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "Адміністратар Kallithea" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 #, fuzzy msgid "Default user has read access to new repositories" msgstr "Несанкцыянаваны доступ да рэсурсу" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 #, fuzzy msgid "Default user has write access to new repositories" msgstr "Несанкцыянаваны доступ да рэсурсу" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 msgid "Only admins can create repository groups" -msgstr "" - -#: kallithea/model/db.py:1684 +msgstr "Толькі адміністратары могуць ствараць групы репазітароў" + +#: kallithea/model/db.py:1733 msgid "Non-admins can create repository groups" -msgstr "" - -#: kallithea/model/db.py:1686 +msgstr "Неадміністратары могуць ствараць групы репазітароў" + +#: kallithea/model/db.py:1735 msgid "Only admins can create user groups" -msgstr "" - -#: kallithea/model/db.py:1687 +msgstr "Толькі адміністратары могуць ствараць групы карыстальнікаў" + +#: kallithea/model/db.py:1736 msgid "Non-admins can create user groups" -msgstr "" - -#: kallithea/model/db.py:1689 +msgstr "Неадміністратары могуць ствараць групы карыстальнікаў" + +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" -msgstr "" - -#: kallithea/model/db.py:1690 +msgstr "Толькі адміністратары могуць ствараць рэпазітары верхняга ўзроўню" + +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" -msgstr "" - -#: kallithea/model/db.py:1695 +msgstr "Неадміністратары могуць ствараць рэпазітары верхняга ўзроўню" + +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 msgid "Only admins can fork repositories" -msgstr "" - -#: kallithea/model/db.py:1696 +msgstr "Месцазнаходжанне рэпазітароў" + +#: kallithea/model/db.py:1745 msgid "Non-admins can fork repositories" msgstr "" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "Рэгістрацыя адключаная" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "Рэгістрацыя карыстальніка з ручной актывацыяй уліковага запісу" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" msgstr "Рэгістрацыя карыстальніка з аўтаматычнай актывацыяй" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 msgid "Not reviewed" msgstr "Не прагледжана" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 msgid "Under review" msgstr "На разглядзе" -#: kallithea/model/forms.py:57 +#: kallithea/model/db.py:2278 +#, fuzzy +#| msgid "Approved" +msgid "Not approved" +msgstr "Ухвалена" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "Ухвалена" + +#: kallithea/model/forms.py:58 msgid "Please enter a login" msgstr "Калі ласка, увядзіце лагін" -#: kallithea/model/forms.py:58 +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "Увядзіце значэнне даўжынёй не меней %(min)i знакаў" -#: kallithea/model/forms.py:66 +#: kallithea/model/forms.py:67 msgid "Please enter a password" msgstr "Калі ласка, увядзіце пароль" -#: kallithea/model/forms.py:67 +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "Увядзіце не меней %(min)i знакаў" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "Імя не можа ўтрымліваць толькі лічбы" -#: kallithea/model/notification.py:255 +#: kallithea/model/notification.py:240 #, python-format msgid "%(user)s commented on changeset %(age)s" msgstr "%(user)s пакінуў каментар да набору змен %(age)s" -#: kallithea/model/notification.py:256 +#: kallithea/model/notification.py:241 #, python-format msgid "%(user)s sent message %(age)s" msgstr "%(user)s адправіў паведамленне %(age)s" -#: kallithea/model/notification.py:257 +#: kallithea/model/notification.py:242 #, python-format msgid "%(user)s mentioned you %(age)s" msgstr "%(user)s згадаў вас %(age)s" -#: kallithea/model/notification.py:258 +#: kallithea/model/notification.py:243 #, python-format msgid "%(user)s registered in Kallithea %(age)s" msgstr "%(user)s зарэгістраваўся ў Kallithea %(age)s" -#: kallithea/model/notification.py:259 +#: kallithea/model/notification.py:244 #, python-format msgid "%(user)s opened new pull request %(age)s" msgstr "%(user)s адкрыў новы pull-запыт %(age)s" -#: kallithea/model/notification.py:260 +#: kallithea/model/notification.py:245 #, python-format msgid "%(user)s commented on pull request %(age)s" msgstr "%(user)s пакінуў каментар да pull-запыту %(age)s" -#: kallithea/model/notification.py:267 +#: kallithea/model/notification.py:252 #, python-format msgid "%(user)s commented on changeset at %(when)s" msgstr "%(user)s пакінуў каментар да набору змен %(when)s" -#: kallithea/model/notification.py:268 +#: kallithea/model/notification.py:253 #, python-format msgid "%(user)s sent message at %(when)s" msgstr "%(user)s адправіў паведамленне %(when)s" -#: kallithea/model/notification.py:269 +#: kallithea/model/notification.py:254 #, python-format msgid "%(user)s mentioned you at %(when)s" msgstr "%(user)s згадаў вас %(when)s" -#: kallithea/model/notification.py:270 +#: kallithea/model/notification.py:255 #, python-format msgid "%(user)s registered in Kallithea at %(when)s" msgstr "%(user)s зарэгістраваўся ў Kallithea %(when)s" -#: kallithea/model/notification.py:271 +#: kallithea/model/notification.py:256 #, python-format msgid "%(user)s opened new pull request at %(when)s" msgstr "%(user)s адкрыў новы pull-запыт %(when)s" -#: kallithea/model/notification.py:272 +#: kallithea/model/notification.py:257 #, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "%(user)s пакінуў каментар да pull-запыту %(when)s" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, fuzzy, python-format +#| msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "[пракаментавана] у запыце на занясенне змен для" + +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" -msgstr "Новы карыстач \"%(new_username)s\" зарэгістраваны" - -#: kallithea/model/notification.py:308 -#, fuzzy, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "%(user)s просіць вас разгледзець pull request %(pr_nice_id)s: %(pr_title)s" - -#: kallithea/model/notification.py:309 -#, fuzzy, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "[пракаменціравана] у запыце на занясенне змен для" - -#: kallithea/model/notification.py:322 +msgstr "Новы карыстальнік \"%(new_username)s\" зарэгістраваны" + +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "Зачынены" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "%(user)s просіць вас разгледзець pull request %(pr_nice_id)s: %(pr_title)s" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Cannot create empty pull request" +msgstr "Памылка пры стварэнні pull-запыту: %s" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +#, fuzzy +#| msgid "Confirm to delete this pull request" +msgid "You are not authorized to create the pull request" +msgstr "Пацвердзіце выдаленне гэтага pull-request'а" + +#: kallithea/model/pull_request.py:341 +#, fuzzy +#| msgid "Missing changesets since the previous pull request:" +msgid "Missing changesets since the previous iteration:" +msgstr "Адсутныя рэвізіі адносна папярэдняга pull-запыту:" + +#: kallithea/model/pull_request.py:348 +#, fuzzy, python-format +#| msgid "New changesets on %s %s since the previous pull request:" +msgid "New changesets on %s %s since the previous iteration:" +msgstr "Новыя рэвізіі на %s %s адносна папярэдняга pull-запыту:" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, fuzzy, python-format +#| msgid "" "This pull request is based on another %s revision and there is no +#| simple " "diff." +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "Гэты pull-запыт заснаваны на іншай рэвізіі %s, просты diff немагчымы." + +#: kallithea/model/pull_request.py:364 +#, fuzzy, python-format +#| msgid "No changes found on %s %s since previous version." +msgid "No changes found on %s %s since previous iteration." +msgstr "Няма змен на %s %s адносна папярэдняй версіі." + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "апошняя версія" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" -msgstr "Рэгістрацыя новага карыстача" - -#: kallithea/model/user.py:256 +msgstr "Рэгістрацыя новага карыстальніка" + +#: kallithea/model/user.py:253 msgid "You can't remove this user since it is crucial for the entire application" msgstr "" -"Вы не можаце выдаліць карыстача, паколькі гэта крытычна для працы ўсяго " -"прыкладання" - -#: kallithea/model/user.py:261 +"Вы не можаце выдаліць карыстальніка, паколькі гэта крытычна для працы " +"ўсёй праграмы" + +#: kallithea/model/user.py:258 #, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories: %s" msgstr "" -"Карыстач \"%s\" усё яшчэ з'яўляецца ўладальнікам %s рэпазітароў і таму не" -" можа быць выдалены. Зменіце ўладальніка ці выдаліце гэтыя рэпазітары: %s" - -#: kallithea/model/user.py:266 +"Карыстальнік \"%s\" усё яшчэ з'яўляецца ўладальнікам %s рэпазітароў і " +"таму не можа быць выдалены. Змяніце ўладальніка ці выдаліце гэтыя " +"рэпазітары: %s" + +#: kallithea/model/user.py:263 #, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" " owners or remove those repository groups: %s" msgstr "" -"Карыстач \"%s\" усё яшчэ з'яўляецца ўладальнікам %s груп рэпазітароў і " -"таму не можа быць выдалены. Зменіце ўладальніка ці выдаліце дадзеныя " +"Карыстальнік \"%s\" усё яшчэ з'яўляецца ўладальнікам %s груп рэпазітароў " +"і таму не можа быць выдалены. Змяніце ўладальніка ці выдаліце гэтая " "групы: %s" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " "owners or remove those user groups: %s" msgstr "" -"Карыстач \"%s\" усё яшчэ з'яўляецца ўладальнікам %s груп карыстачоў і " -"таму не можа быць выдалены. Зменіце ўладальніка ці выдаліце дадзеныя " -"групы: %s" - -#: kallithea/model/user.py:360 +"Карыстальнік \"%s\" усё яшчэ з'яўляецца ўладальнікам %s груп " +"карыстальнікаў і таму не можа быць выдалены. Змяніце ўладальніка ці " +"выдаліце гэтыя групы: %s" + +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "Спасылка скіду пароля" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 msgid "Password reset notification" -msgstr "Спасылка скіду пароля" - -#: kallithea/model/user.py:409 +msgstr "Паведамленне пра скіданне пароля" + +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "Значэнне не можа быць пустым спісам" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" -msgstr "Карыстач з імем \"%(username)s\" ужо існуе" - -#: kallithea/model/validators.py:97 +msgstr "Карыстальнік з імем \"%(username)s\" ужо існуе" + +#: kallithea/model/validators.py:75 #, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "Імя \"%(username)s\" недапушчальнае" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with an alphanumeric character or underscore" msgstr "" -"Імя карыстача можа ўтрымоўваць толькі літары, лічбы, знакі падкрэслення, " -"кропкі і працяжнік; а гэтак жа павінна пачынацца з літары, лічбы або са " -"знака падкрэслення" - -#: kallithea/model/validators.py:126 +"Імя карыстальніка можа ўтрымоўваць толькі літары, лічбы, знакі " +"падкрэслення, кропкі і працяжнік; а гэтак жа павінна пачынацца з літары, " +"лічбы або са знака падкрэслення" + +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" -msgstr "Імя \"%(username)s\" недапушчальна" - -#: kallithea/model/validators.py:152 +msgstr "Імя \"%(username)s\" недапушчальнае" + +#: kallithea/model/validators.py:131 msgid "Invalid user group name" -msgstr "Няслушнае імя групы карыстачоў" - -#: kallithea/model/validators.py:153 +msgstr "Няслушнае імя групы карыстальнікаў" + +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" -msgstr "Група карыстачоў \"%(usergroup)s\" ужо існуе" - -#: kallithea/model/validators.py:155 +msgstr "Група карыстальнікаў \"%(usergroup)s\" ужо існуе" + +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" -"імя групы карыстачоў можа ўтрымоўваць толькі літары, лічбы, знакі " +"імя групы карыстальнікаў можа ўтрымоўваць толькі літары, лічбы, знакі " "падкрэслення, кропкі і працяжнік; а гэтак жа павінна пачынацца з літары " "ці лічбы" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "Немагчыма выкарыстоўваць гэту групу як бацькоўскую" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "Група \"%(group_name)s\" ужо існуе" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "Рэпазітар з імем \"%(group_name)s\" ужо існуе" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "Недапушчальныя знакі (не ascii) у паролі" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "Няслушна зададзены стары пароль" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "Паролі не супадаюць" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 msgid "Invalid username or password" msgstr "Няслушнае імя ці пароль" -#: kallithea/model/validators.py:331 +#: kallithea/model/validators.py:310 msgid "Token mismatch" msgstr "Несупадзенне токенаў" -#: kallithea/model/validators.py:345 +#: kallithea/model/validators.py:326 #, python-format msgid "Repository name %(repo)s is not allowed" msgstr "Імя рэпазітара %(repo)s забароненае" -#: kallithea/model/validators.py:347 +#: kallithea/model/validators.py:328 #, python-format msgid "Repository named %(repo)s already exists" msgstr "Рэпазітар %(repo)s ужо існуе" -#: kallithea/model/validators.py:348 +#: kallithea/model/validators.py:329 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "Рэпазітар \"%(repo)s\" ужо існуе ў групе \"%(group)s\"" -#: kallithea/model/validators.py:350 +#: kallithea/model/validators.py:331 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "Група рэпазітароў \"%(repo)s\" ужо існуе" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 msgid "Invalid repository URL" msgstr "Няслушны URL рэпазітара" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" @@ -2145,440 +1879,448 @@ "Няслушны URL рэпазітара. Ён мусіць быць карэктным URL http, https, ssh, " "svn+http ці svn+https" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "Тып форка будзе супадаць з бацькоўскім" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" -msgstr "У вас недастаткова мае рацыю для стварэння рэпазітароў у гэтай групе" - -#: kallithea/model/validators.py:506 +msgstr "У вас недастаткова правоў для стварэння рэпазітароў у гэтай групе" + +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" -msgstr "недастаткова мае рацыю для стварэння рэпазітара ў каранёвым каталогу" - -#: kallithea/model/validators.py:556 +msgstr "недастаткова правоў для стварэння рэпазітара ў каранёвым каталогу" + +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "У Вас недастаткова прывілеяў для стварэння групы ў гэтым месцы" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" -msgstr "Дадзенае імя карыстача ці групы карыстачоў недапушчальна" - -#: kallithea/model/validators.py:690 +msgstr "Дадзенае імя карыстальніка ці групы карыстальнікаў недапушчальна" + +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "Гэты шлях хібны" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 msgid "This email address is already in use" -msgstr "Гэты E-mail ужо заняты" - -#: kallithea/model/validators.py:725 +msgstr "Гэты e-mail ужо ўжываецца" + +#: kallithea/model/validators.py:712 #, python-format msgid "Email address \"%(email)s\" not found" -msgstr "\"%(email)s\" не знойдзены." - -#: kallithea/model/validators.py:762 +msgstr "Email-адрас \"%(email)s\" не знойдзены" + +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "" "Для ўваходу па LDAP павінна быць паказана значэнне атрыбута CN - гэта " -"эквівалент імя карыстача" - -#: kallithea/model/validators.py:774 +"эквівалент імя карыстальніка" + +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "Калі ласка, увядзіце існы IPv4 ці IPv6 адрас" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" "Значэнне маскі падсеткі павінна быць у межах ад 0 да 32 (%(bits)r - " "няслушна)" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" "Ключавое імя можа толькі складацца з літар, знака падкрэслення, працяжнік" " ці лікаў" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "Файла няма ў каталогу" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "Пра праграму" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "Панэль кіравання" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "фільтр..." - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "рэпазітары" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "Дадаць рэпазітар" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "Дадаць групу рэпазітароў" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "Вы маеце адміністратарскія правы на гэту групу і можаце рэдагаваць яе" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "Змяніць групу рэпазітароў" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "Імя групы" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository group" +msgid "Repository Group" +msgstr "Група рэпазітароў" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "Апісанне" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "Імя" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "Рэпазітар" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "Апошняя змена" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "Стан" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "Уладальнік" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "Па ўзрастанні" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "Па змяншэнні" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "Рэпазітары не знойдзены." - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "Памылка дадзеных." - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "Загрузка..." - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "Увайсці" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "Увайсці ў %s" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" -msgstr "Імя карыстача" - -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +msgstr "Імя карыстальніка" + +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "Пароль" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "Запомніць" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" -msgstr "Забыліся пароль?" - -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +msgstr "Забыліся на пароль?" + +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "Няма акаўнта?" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "Увайсці" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" -msgstr "Скід пароля" +msgstr "Скінуць пароль" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, python-format msgid "Reset Your Password to %s" -msgstr "Забыліся пароль для %s?" +msgstr "Забыліся на пароль для %s?" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 msgid "Reset Your Password" msgstr "Скінуць Ваш пароль" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "Паштовы адрас" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "Капча" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" -msgstr "Паслаць спасылку скіду пароля" - -#: kallithea/templates/password_reset.html:47 +msgstr "Паслаць спасылку для скідання пароля" + +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." -msgstr "Спасылка для скіду пароля была адасланая на адпаведны e-mail." - -#: kallithea/templates/password_reset_confirmation.html:19 +msgstr "" +"Спасылка для скіду пароля будзе адпраўленая на адпаведны email-адрас, " +"калі ён зарэгістраваны ў сістэме." + +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 msgid "New Password" msgstr "Новы пароль" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 msgid "Confirm New Password" msgstr "Пацвердзіце новы пароль" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "Рэгістрацыя" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" -msgstr "Рэгістра на %s" - -#: kallithea/templates/register.html:42 +msgstr "Рэгістрацыя на %s" + +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" -msgstr "Паўторыце пароль" - -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +msgstr "Паўтарыце пароль" + +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "Імя" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "Прозвішча" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "E-mail" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "Калі ласка, пачакайце, пакуль адміністратар пацвердзіць Вашу рэгістрацыю." -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "Галінкі яшчэ не створаны" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "Зачыненыя галінкі" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "Пазнакі адсутнічаюць" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "Закладак яшчэ няма" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 msgid "Admin Journal" -msgstr "Часопіс адміністратара" +msgstr "Журнал адміністратара" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." -msgstr "Фільтр часопіса..." +msgstr "Фільтр журнала..." #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 msgid "Filter" msgstr "Адфільтраваць" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2587,197 +2329,243 @@ msgstr[2] "%s запісы" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "Дзеянне" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "Рэпазітар" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "Дата" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "З IP" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" -msgstr "Дзеянні яшчэ не вырабляліся" +msgstr "Няма інфармацыі" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "Налады аўтэнтыфікацыі" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "Аўтэнтыфікацыя" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" -msgstr "Убудовы аўтэнтыфікацыі" - -#: kallithea/templates/admin/auth/auth_settings.html:31 +msgstr "Плагіны аўтэнтыфікацыі" + +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" -msgstr "Уключаныя ўбудовы" - -#: kallithea/templates/admin/auth/auth_settings.html:33 +msgstr "Уключаныя плагіны" + +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -"Спіс убудоў, падзеленых коскі. Kallithea будзе спрабаваць аўтэнтыфікаваць" -" карыстача ў парадку ўказання ўбудоў" - -#: kallithea/templates/admin/auth/auth_settings.html:34 +"Спіс плагінаў, падзеленых коскамі. Kallithea будзе спрабаваць " +"аўтэнтыфікаваць карыстальніка ў парадку ўказання плагінаў" + +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" -msgstr "Даступныя ўбудаваныя ўбудовы" - -#: kallithea/templates/admin/auth/auth_settings.html:51 +msgstr "Даступныя ўбудаваныя плагіны" + +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" -msgstr "Убудова" +msgstr "Плагін" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "Захаваць" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 msgid "Repository Defaults" -msgstr "Значэнні па змаўчанні" - -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +msgstr "Значэнні па змоўчанні" + +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "Тып" -#: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 msgid "Private repository" msgstr "Прыватны рэпазітар" -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." msgstr "Прыватныя рэпазітары бачныя толькі іх удзельнікам." -#: kallithea/templates/admin/defaults/defaults.html:53 -#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 msgid "Enable statistics" msgstr "Уключыць статыстыку" -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 msgid "Enable statistics window on summary page." msgstr "Уключыць акно статыстыкі на старонцы «Агульныя звесткі»." -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 msgid "Enable downloads" msgstr "Уключыць спампоўку" -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 msgid "Enable download menu on summary page." msgstr "Уключыць меню спампоўкі на старонцы «Агульныя звесткі»." -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 msgid "Enable locking" msgstr "Уключыць блакаванне" -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." -msgstr "Уключыць аўтаблакоўку для рэпазітара." +msgstr "Уключыць аўтаблакаванне для рэпазітара." #: kallithea/templates/admin/gists/edit.html:5 #: kallithea/templates/admin/gists/edit.html:18 msgid "Edit Gist" -msgstr "Праўка gist-запісы" - -#: kallithea/templates/admin/gists/edit.html:36 +msgstr "Правіць gist-запіс" + +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "Апісанне..." -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "Мінае" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 msgid "Never" msgstr "Ніколі" @@ -2786,565 +2574,779 @@ msgstr "Абнавіць" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "Адмена" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" -msgstr "Прыватная gist-запіс для карыстача %s" +msgstr "Прыватны gist-запіс для карыстальніка %s" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" -msgstr "Публічная gist-запіс для карыстача %s" +msgstr "Публічны gist-запіс для карыстальніка %s" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "Публічныя gist-запісы" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" -msgstr "Стварыць новую gist-запіс" - -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +msgstr "Стварыць новы gist-запіс" + +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" -msgstr "Створана" - -#: kallithea/templates/admin/gists/index.html:74 +msgstr "Створаны" + +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "Gist-запісы адсутнічаюць" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" -msgstr "" - -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +msgstr "Новы gist-запіс" + +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" -msgstr "Скід" +msgstr "Скінуць" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "URL" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "Выдаліць" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" -msgstr "Пацвердзіце выдаленне гэтай gist-запісы" +msgstr "Пацвердзіце выдаленне гэтага gist-запісу" + +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "Рэдагаваць" #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "Рэдагаваць" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "Паказаць толькі тэкст" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "створана" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "Паказаць толькі тэкст" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "Мой Акаўнт" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "Профіль" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 msgid "Email Addresses" -msgstr "" - -#: kallithea/templates/admin/my_account/my_account.html:38 +msgstr "E-mail адрэсы" + +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "API-ключы" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 msgid "Owned Repositories" -msgstr "" - -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +msgstr "Мае рэпазітары" + +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 +#, fuzzy msgid "Watched Repositories" -msgstr "" - -#: kallithea/templates/admin/my_account/my_account.html:41 +msgstr "Стварыць рэпазітары" + +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 -#, fuzzy +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 msgid "Show Permissions" -msgstr "Скапіяваць прывілеі" - -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +msgstr "Паказаць прывілеі" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "Убудаваны" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, python-format msgid "Confirm to reset this API key: %s" -msgstr "Пацвердзіце скіданне гэтага API-ключа: %s" - -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 -#, fuzzy +msgstr "Пацвердзіць скіданне гэтага API-ключа: %s" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 msgid "Expired" -msgstr "мінае" - -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +msgstr "Ануляваны" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, python-format msgid "Confirm to remove this API key: %s" msgstr "Пацвердзіце выдаленне гэтага API-ключа: %s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 msgid "Remove" msgstr "Выдаліць" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" -msgstr "Няма дадатковых API-ключоў." - -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +msgstr "Дадатковыя API-ключы не пазначаныя" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 msgid "New API key" msgstr "Новы API-ключ" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "Дадаць" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "Асноўны" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "Пацвердзіце выдаленне e-mail: %s" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "Дадатковыя адрасы e-mail не пазначаны." -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" -msgstr "Новы E-mail" +msgstr "Новы e-mail" #: kallithea/templates/admin/my_account/my_account_password.html:1 msgid "Change Your Account Password" msgstr "Змена пароля" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" -msgstr "Дзейны пароль" - -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +msgstr "Цяперашні пароль" + +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "Новы пароль" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "Пацвердзіце новы пароль" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" -msgstr "Зменіце аватар праз сайт" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "Цяперашні IP-адрас" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, fuzzy, python-format +#| msgid "Change your avatar at" +msgid "Change %s avatar at" +msgstr "Змяніць аватар можна праз" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "Выкарыстоўваецца" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" -msgstr "Аватары адключаны" - -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "Не паказаны email. Калі ласка, абновіце ваш email." - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "Цяперашні IP" +msgstr "Аватары адключаныя" #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 msgid "Repositories You Own" msgstr "Рэпазітары, дзе Вы — уладальнік" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." -msgstr "Запісы не знойдзены." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "Імя" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 msgid "Repositories You are Watching" msgstr "Рэпазітары, за якімі Вы назіраеце" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "Мае апавяшчэнні" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" -msgstr "Усё" +msgstr "Усе" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "Каментары" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "Pull-запыты" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" -msgstr "Адзначыць усё як прачытаныя" - -#: kallithea/templates/admin/notifications/notifications_data.html:40 +msgstr "Адзначыць усе як прачытаныя" + +#: kallithea/templates/admin/notifications/notifications_data.html:12 +#, fuzzy +#| msgid "Mark All Read" +msgid "Mark as read" +msgstr "Адзначыць усе як прачытаныя" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "Апавяшчэнняў няма" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "Паказаць апавяшчэнне" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "Апавяшчэнні" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 msgid "Default Permissions" msgstr "Стандартныя прывілеі" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "Глабальныя" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "Белы спіс IP" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "Ананімны доступ" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "" -"Абраныя прывілеі будуць усталяваны па змаўчанні для кожнага рэпазітара. " -"Улічыце, што раней усталяваныя прывілеі па змаўчанні будуць скінуты" - -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +"Выбраныя прывілеі будуць усталяваныя па змоўчанні для кожнага рэпазітара." +" Улічыце, што раней усталяваныя прывілеі па змоўчанні будуць скінутыя" + +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "Імпартаваць існы рэпазітар?" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "Група рэпазітароў" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " "will be lost" msgstr "" -"Абраныя прывілеі будуць усталяваны па змаўчанні для кожнай групы " -"рэпазітароў. Улічыце, што раней усталяваныя прывілеі па змаўчанні для " -"груп рэпазітароў будуць скінуты" - -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +"Выбраныя прывілеі будуць усталяваныя па змоўчанні для кожнай групы " +"рэпазітароў. Улічыце, што раней усталяваныя прывілеі па змоўчанні для " +"груп рэпазітароў будуць скінутыя" + +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 #, fuzzy msgid "Apply to all existing repository groups" msgstr "Імпартаваць існы рэпазітар?" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" -msgstr "Група карыстачоў" - -#: kallithea/templates/admin/permissions/permissions_globals.html:53 -#, fuzzy +msgstr "Група карыстальнікаў" + +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 msgid "" "All default permissions on each user group will be reset to chosen " "permission, note that all custom default permission on user groups will " "be lost" msgstr "" -"Абраныя прывілеі будуць усталяваны па змаўчанні для кожнай групы " -"карыстачоў. Улічыце, што раней усталяваныя прывілеі па змаўчанні для груп" -" карыстачоў будуць скінуты" - -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +"Выбраныя прывілеі будуць усталяваныя па змоўчанні для кожнай групы " +"карыстальнікаў. Улічыце, што раней усталяваныя прывілеі па змоўчанні для " +"груп карыстальнікаў будуць скінутыя" + +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 msgid "Permissions for the Default user on new user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 #, fuzzy msgid "Top level repository creation" msgstr "Стварэнне рэпазітара" -#: kallithea/templates/admin/permissions/permissions_globals.html:64 +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 msgid "Enable this to allow non-admins to create repositories at the top level." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:65 +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 msgid "" "Note: This will also give all users API access to create repositories " "everywhere. That might change in future versions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" -msgstr "Стварэнне груп карыстачоў" - -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +msgstr "Стварэнне груп карыстальнікаў" + +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "Стварэнне форка рэпазітара" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "Рэгістрацыя" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "Актывацыя іншага ўліковага запісу" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 -#, fuzzy, python-format +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 +#, python-format msgid "Confirm to delete this IP address: %s" msgstr "Пацвердзіце выдаленне IP %s" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "Дазволены любыя IP-адрасы." -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "Новы IP-адрас" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "Групы рэпазітароў" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "Імя групы" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "Бацькоўская група" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3353,31 +3355,42 @@ msgid "%s Repository Group Settings" msgstr "Налады групы рэпазітароў %s" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "Дадаць падгрупу" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "Налады" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "Дадаткова" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "Прывілеі" @@ -3401,12 +3414,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "Створана" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3418,55 +3433,74 @@ msgid "Delete this repository group" msgstr "Выдаліць гэту групу рэпазітароў" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#, fuzzy +#| msgid "disabled" +msgid "Visible" +msgstr "адключана" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "Add Repository" +msgid "Add repos" +msgstr "Дадаць рэпазітар" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +#, fuzzy +#| msgid "Add user group" +msgid "Add/Edit groups" +msgstr "Дадаць групу карыстальнікаў" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 -#, fuzzy msgid "User/User Group" -msgstr "групы карыстальнікаў" +msgstr "Карыстальнік/група карыстальнікаў" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 -#, fuzzy msgid "Default" -msgstr "па змаўчанні" +msgstr "Па змоўчанні" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 -#, fuzzy msgid "Revoke" -msgstr "адклікаць" - -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +msgstr "Адклікаць" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "Дадаць новы" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 #, fuzzy msgid "Apply to children" msgstr "дастасаваць да даччыным" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "Абедзьве" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" @@ -3474,71 +3508,83 @@ "Уключыць аўтаблакоўку для групы. Гэта опцыя будзе ўжыта да ўсіх даччыных " "груп і рэпазітарам" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "Выдаліць гэту групу" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Confirm to delete this group" -msgstr "Пацвердзіце выдаленне гэтай групы карыстачоў" +msgstr "Пацвердзіце выдаленне гэтай групы карыстальнікаў" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "Repository Group: %s" +msgid "Repository group %s" +msgstr "Група рэпазітароў: %s" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" -msgstr "Дахаты" +msgstr "Дамоў" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "з" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 msgid "Repository Groups Administration" msgstr "Адміністраванне груп рэпазітароў" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 msgid "Number of Top-level Repositories" msgstr "Лік рэпазітароў верхняга ўзроўня" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "[створаны] рэпазітар" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" "Кароткае і асэнсаванае. Для разгорнутага апісання выкарыстоўвайце файл " "README." -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "Апцыянальна абраць групу, у якую змясціць дадзены рэпазітар." -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "Тып стваранага рэпазітара." -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "Рэвізія для выгрузкі" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3567,93 +3613,114 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, python-format msgid "%s Repository Settings" msgstr "Налады рэпазітара %s" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "Дадатковыя палі" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "Кэшы" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "Выдалены" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "Статыстыка" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 msgid "Parent" msgstr "Бацькоўская група" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "Набор" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." -msgstr "Уручную зрабіць гэты рэпазітар форкам абранага са спісу." - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +msgstr "Уручную зрабіць гэты рэпазітар форкам выбранага са спісу." + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 msgid "Public Journal Visibility" -msgstr "Доступ да публічнага часопіса" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +msgstr "Доступ да публічнага журналу" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" -msgstr "Выдаліць з агульнадаступнага часопіса" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +msgstr "Выдаліць з агульнадаступнага журналу" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 msgid "Add to Public Journal" -msgstr "Дадаць у публічны часопіс" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +msgstr "Дадаць у публічны журнал" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." msgstr "" "Усе выконваемыя з гэтым рэпазітаром дзеянні будуць адлюстроўвацца ў " -"публічным часопісе." - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +"публічным журнал." + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 msgid "Change Locking" msgstr "Уключыць блакаванне" +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 +msgid "Confirm to unlock repository." +msgstr "Пацвердзіце разблакаванне рэпазітара." + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 +msgid "Unlock Repository" +msgstr "Разблакаваць рэпазітар" + #: kallithea/templates/admin/repos/repo_edit_advanced.html:52 -msgid "Confirm to unlock repository." -msgstr "Пацвердзіце здыманне блакавання з рэпазітара." - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 -msgid "Unlock Repository" -msgstr "Разблакаваць рэпазітар" +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 +#, python-format +msgid "Locked by %s on %s" +msgstr "Заблакавана %s %s" #: kallithea/templates/admin/repos/repo_edit_advanced.html:56 -#, python-format -msgid "Locked by %s on %s" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 msgid "Confirm to lock repository." msgstr "Пацвердзіце блакаванне рэпазітара." -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 msgid "Lock Repository" msgstr "Заблакаваць рэпазітар" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "Рэпазітар не заблакаваны" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3661,33 +3728,40 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "Пацвердзіце выдаленне гэтага рэпазітара: %s" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 msgid "Delete this Repository" msgstr "Выдаліць гэты рэпазітар" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" msgstr[0] "Дадзены рэпазітар мае %s копію" msgstr[1] "Дадзены рэпазітар мае %s копіі" -msgstr[2] "Дадзены рэпазітар мае %s дзід" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +msgstr[2] "Дадзены рэпазітар мае %s копій" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" -msgstr "Адлучыць fork'і" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +msgstr "Адлучыць форкі" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" -msgstr "Выдаліць fork'і" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +msgstr "Выдаліць форкі" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3698,110 +3772,111 @@ msgid "Invalidate Repository Cache" msgstr "Скінуць кэш рэпазітара" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -msgid "Confirm to invalidate repository cache." -msgstr "Пацвердзіце скід кэша." - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." -msgstr "Ручны скід кэша рэпазітара. Пры першым доступе кэш адновіцца." - -#: kallithea/templates/admin/repos/repo_edit_caches.html:12 +msgstr "Ручное скіданне кэша рэпазітара. Пры першым доступе кэш адновіцца." + +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 msgid "List of Cached Values" msgstr "Спіс кэшаваных значэнняў" -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 +#: kallithea/templates/admin/repos/repo_edit_caches.html:12 msgid "Prefix" msgstr "Прэфікс" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "Ключ" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "Актыўны" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "Пацвердзіце выдаленне гэтага поля: %s" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "Ключ" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "Імя поля" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "Увядзіце кароткае імя поля" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "Апісанне поля" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "Увядзіце апісанне поля" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." -msgstr "Дадатковыя палі адключаны." - -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +msgstr "Дадатковыя палі адключаныя." + +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 +msgid "Private Repository" +msgstr "Прыватны рэпазітар" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 #, fuzzy -msgid "Private Repository" -msgstr "прыватны рэпазітар" - -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 -#, fuzzy +#| msgid "[forked] repository" +msgid "Fork of repository" +msgstr "[форкнуты] рэпазітар" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 msgid "Remote repository URL" -msgstr "Рэпазітар %s створаны" - -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 -#, fuzzy +msgstr "URL аддаленага рэпазітара" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 msgid "Pull Changes from Remote Repository" -msgstr "[занесены змены з выдаленага рэпазітара] у рэпазітар" - -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 -#, fuzzy -msgid "Confirm to pull changes from remote repository." -msgstr "Пацвердзіце спампоўку змен." +msgstr "Занесці змены з аддаленага рэпазітара" #: kallithea/templates/admin/repos/repo_edit_remote.html:17 +msgid "Confirm to pull changes from remote repository." +msgstr "Пацвердзіце спампоўку змен з аддаленага рэпазітара." + +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 -#, fuzzy +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "Permanent Repository ID" -msgstr "прыватны рэпазітар" - -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +msgstr "Пастаяннае ШВ рэпазітара" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "Што гэта?" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3811,37 +3886,33 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 -#, fuzzy +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 msgid "Remote repository" -msgstr "[створаны] рэпазітар" - -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 -#, fuzzy +msgstr "Аддалены рэпазітар" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 msgid "Repository URL" -msgstr "Рэпазітар" - -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +msgstr "URL рэпазітара" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" -msgstr "" -"Рэвізія па змаўчанні, з якой будзе вырабляцца выгрузка файлаў пры " -"спампоўцы" - -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +msgstr "Рэвізія па змоўчанні, з якой будзе рабіцца выгрузка файлаў пры спампоўцы" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "Змяніць уладальніка рэпазітара." -#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 msgid "Processed commits" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 msgid "Processed progress" msgstr "" @@ -3851,281 +3922,333 @@ #: kallithea/templates/admin/repos/repo_edit_statistics.html:10 msgid "Confirm to remove current statistics." -msgstr "Пацвердзіце скід статыстыкі." +msgstr "Пацвердзіце скіданне статыстыкі." #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 msgid "Repositories Administration" msgstr "Адміністраванне рэпазітароў" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "Стан" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 msgid "Settings Administration" msgstr "Адміністраванне налад" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "Хукі" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "Паўнатэкставы пошук" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "Інфармацыя пра сістэму" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "Адаслаць тэставае паведамленне на" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "Адправіць" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "Брэндынг сайта" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "Прывітанне для HTTP-аўтэнтыфікацыі" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 msgid "Save Settings" msgstr "Захаваць налады" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 msgid "Custom Hooks" -msgstr "Карыстацкія хуки" - -#: kallithea/templates/admin/settings/settings_hooks.html:67 +msgstr "Карыстальніцкія хукі" + +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "Не атрымалася выдаліць хук" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" +#: kallithea/templates/admin/settings/settings_mapping.html:4 +#, fuzzy +#| msgid "Rescan option" +msgid "Rescan options" msgstr "Опцыі перасканіравання" -#: kallithea/templates/admin/settings/settings_mapping.html:11 -#, fuzzy +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" -msgstr "Пошук па рэпазітарах" - -#: kallithea/templates/admin/settings/settings_mapping.html:13 +msgstr "Сцерці запісы пра выдаленыя рэпазітары" + +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "Скінуць кэш для ўсіх рэпазітароў" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "Скінуць кэш для ўсіх рэпазітароў." -#: kallithea/templates/admin/settings/settings_mapping.html:23 +#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 msgid "Install Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "Опцыі стварэння індэксу" -#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 msgid "Build from scratch" msgstr "Зборка з нуля" -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "Перабудаваць індэкс" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "Праверка абнаўленняў..." + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 msgid "Kallithea version" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:4 -#, fuzzy -msgid "Check for updates" -msgstr "праверыць наяўнасць абнаўленняў" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" -msgstr "" +msgstr "Версія Kallithea" #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" -msgstr "Платформа" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" +msgstr "Праверыць наяўнасць абнаўленняў" #: kallithea/templates/admin/settings/settings_system.html:8 -msgid "Git version" -msgstr "Версія Git" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" +msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:10 -msgid "Upgrade info endpoint" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "Платформа" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "Версія Git" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 +msgid "Upgrade info endpoint" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "Праверка абнаўленняў..." - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "Вэб" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "Запытваць SSL для аперацый з VCS" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "Паказваць памер рэпазітара пасля адпраўкі" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" -msgstr "Лагіраваць карыстацкія каманды адпраўкі" - -#: kallithea/templates/admin/settings/settings_vcs.html:32 +msgstr "Лагаваць карыстацкія каманды адпраўкі" + +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" -msgstr "Лагіраваць карыстацкія каманды атрымання" - -#: kallithea/templates/admin/settings/settings_vcs.html:36 +msgstr "Лагаваць карыстацкія каманды атрымання" + +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "Абнаўляць рэпазітар пасля адпраўкі (hg update)" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 msgid "Mercurial extensions" msgstr "Пашырэнні Mercurial" -#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 msgid "Enable largefiles extension" msgstr "Уключыць падтрымку вялікіх файлаў" -#: kallithea/templates/admin/settings/settings_vcs.html:51 +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 msgid "Enable hgsubversion extension" msgstr "Уключыць падтрымку hgsubversion" -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 msgid "Location of repositories" msgstr "Месцазнаходжанне рэпазітароў" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." @@ -4133,37 +4256,44 @@ "Націсніце для разблакавання. Змены набудуць моц пасля перазагрузкі " "Kallithea." -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "Галоўнае" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "Выкарыстоўваць дадатковыя палі ў рэпазітарах" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "Дазваляе захоўваць дадатковыя палі ў рэпазітарах." -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "Адлюстроўваць версію Kallithea" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "Паказвае або хавае нумар версіі Kallithea ў ніжняй частцы старонкі." -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "Выкарыстоўваць Gravatars у Kallithea" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4180,107 +4310,132 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "URL для кланавання" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "Элементы панэлі" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repository Size" +msgid "Repository page size" +msgstr "Памер рэпазітара" + +#: kallithea/templates/admin/settings/settings_visual.html:57 +#, fuzzy +#| msgid "" "Number of items displayed in the main page dashboard before +#| pagination is" " shown." msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." msgstr "" "Колькасць элементаў, што паказваюцца на галоўнай старонцы панэлі " "кіравання перад паказам нумарацыі старонак." +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" +msgstr "" + #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "Абразкі" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "Паказваць абразкі публічных рэпазітароў" -#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 msgid "Show private repository icon on repositories" msgstr "Паказваць абразкі прыватных рэпазітароў" -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "Паказваць абразкі публічных рэпазітароў." -#: kallithea/templates/admin/settings/settings_visual.html:92 -#, fuzzy +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 msgid "Meta Tagging" -msgstr "Метатэгіраванне" - -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +msgstr "Метатэгаванне" + +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" -msgstr "Дадаць групу карыстачоў" +msgstr "Дадаць групу карыстальнікаў" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "Групы карыстальнікаў" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "Дадаць групу карыстальнікаў" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "Кароткае дадатковае апісанне для гэтай групы карыстальнікаў." #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 -#, fuzzy +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 msgid "Show Members" -msgstr "удзельнікі" +msgstr "Паказаць удзельнікаў" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:1 #, python-format @@ -4288,63 +4443,76 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "Удзельнікі" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" -msgstr "Пацвердзіце выдаленне наступнай групы карыстачоў: %s" +msgstr "Пацвердзіце выдаленне наступнай групы карыстальнікаў: %s" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:21 msgid "Delete this user group" msgstr "Выдаліць гэтую групу карыстальнікаў" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "Няма ўдзельнікаў" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "Абраныя ўдзельнікі групы" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "Даступныя ўдзельнікі" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 msgid "User Groups Administration" -msgstr "Адміністраванне груп карыстачоў" +msgstr "Адміністраванне груп карыстальнікаў" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" -msgstr "Дадаць карыстача" +msgstr "Дадаць карыстальніка" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" -msgstr "Карыстачы" +msgstr "Карыстальнікі" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" -msgstr "Дадаць карыстача" - -#: kallithea/templates/admin/users/user_add.html:50 +msgstr "Дадаць карыстальніка" + +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "Пацверджанне пароля" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4354,12 +4522,14 @@ msgstr "Карыстальнік: %s" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "Апошні ўваход" @@ -4368,411 +4538,466 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" -msgstr "Пацвердзіце выдаленне карыстача %s" +msgstr "Пацвердзіце выдаленне карыстальніка %s" #: kallithea/templates/admin/users/user_edit_advanced.html:23 msgid "Delete this user" msgstr "Выдаліць гэтага карыстальніка" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "Не паказаны email. Калі ласка, абнавіце email карыстальніка." - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "Пацвердзіце новы пароль" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 msgid "Users Administration" -msgstr "Адміністраванне карыстачоў" - -#: kallithea/templates/admin/users/users.html:56 +msgstr "Адміністраванне карыстальнікаў" + +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "Асобнік сервера: %s" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "Падтрымка" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "Рэпазітар Mercurial" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "Git рэпазітар" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "Стварыць форк" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "Агульныя звесткі" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "Гісторыя змен" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "Файлы" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "Пераключыцца на" - -#: kallithea/templates/base/base.html:145 -#: kallithea/templates/base/base.html:147 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 msgid "Options" msgstr "Опцыі" +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "Параўнаць форк" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "Параўнаць" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" +msgstr "Пошук" + #: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 -msgid "Compare Fork" -msgstr "Параўнаць форк" - -#: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "Параўнаць" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "Пошук" - -#: kallithea/templates/base/base.html:163 +#: kallithea/tests/data/templates/base/base.html.py:399 msgid "Unlock" msgstr "Разблакаваць" -#: kallithea/templates/base/base.html:165 +#: kallithea/templates/base/base.html:157 +#: kallithea/tests/data/templates/base/base.html.py:405 msgid "Lock" msgstr "Заблакаваць" -#: kallithea/templates/base/base.html:173 +#: kallithea/templates/base/base.html:165 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "Назіраць" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "Не назіраць" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "Форк" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" -msgstr "Стварыць Pull запыт" - -#: kallithea/templates/base/base.html:183 +msgstr "Стварыць pull-запыт" + +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "Паказаць pull-запыты для %s" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "Пераключыцца на" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "Супадзенняў не знойдзена" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "Паказаць апошнюю актыўнасць" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" -msgstr "Агульнадаступны часопіс" - -#: kallithea/templates/base/base.html:233 +msgstr "Агульнадаступны журнал" + +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "Паказаць публічныя запісы" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "Gist" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "Усе публічныя Gist-запісы" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "Мае публічныя Gist-запісы" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "Мае прыватныя Gist-запісы" -#: kallithea/templates/base/base.html:246 +#: kallithea/templates/base/base.html:319 +#: kallithea/tests/data/templates/base/base.html.py:540 msgid "Search in repositories" msgstr "Пошук па рэпазітарах" -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 #: kallithea/templates/pullrequests/pullrequest_show_my.html:6 #: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 msgid "My Pull Requests" -msgstr "Мае Pull-запыты" - -#: kallithea/templates/base/base.html:289 +msgstr "Мае pull-запыты" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 msgid "Not Logged In" msgstr "Не аўтарызаваны" -#: kallithea/templates/base/base.html:296 +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 msgid "Login to Your Account" msgstr "Аўтарызавацца" -#: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" -msgstr "Забыліся пароль?" - -#: kallithea/templates/base/base.html:346 +#: kallithea/templates/base/base.html:385 +#, fuzzy +#| msgid "Forgot password ?" +msgid "Forgot password?" +msgstr "Забыліся на пароль?" + +#: kallithea/templates/base/base.html:389 +#, fuzzy +#| msgid "Don't have an account ?" +msgid "Don't have an account?" +msgstr "Няма акаўнта?" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" -msgstr "Выйсце" - -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "Супадзенняў не знойдзена" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "Гарачыя клавішы" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 -#, fuzzy +msgstr "Выйсці" + +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 msgid "Inherit defaults" -msgstr "Значэнні па змаўчанні" - -#: kallithea/templates/base/default_perms_box.html:19 +msgstr "Ужываць значэнні па змоўчанні" + +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "Стварыць рэпазітары" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "Опцыя дазваляе карыстальніку ствараць рэпазітары" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "Опцыя дазваляе карыстачу ствараць рэпазітары" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" -msgstr "Ствараць групы карыстачоў" - -#: kallithea/templates/base/default_perms_box.html:45 +msgstr "Ствараць групы карыстальнікаў" + +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" -msgstr "Опцыя дазваляе карыстачу ствараць групы карыстачоў" - -#: kallithea/templates/base/default_perms_box.html:52 +msgstr "Опцыя дазваляе карыстальніку ствараць групы карыстальнікаў" + +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "Ствараць fork ад рэпазітароў" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" -"Абярыце гэту опцыю каб дазволіць дадзенаму карыстачу ствараць fork'і " +"Абярыце гэту опцыю каб дазволіць дадзенаму карыстальніку ствараць форкі " "рэпазітароў" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "Паказаць" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" -msgstr "Прывілеі яшчэ не прызначаны" +msgstr "Прывілеі яшчэ не прызначаныя" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "Прывілей" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "Змяніць прывілеі" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 +#: kallithea/templates/base/root.html:25 +#: kallithea/tests/data/templates/base/root.html.py:85 msgid "Add Another Comment" msgstr "Дадаць яшчэ адзін каментар" -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 +#: kallithea/templates/base/root.html:26 +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 msgid "Stop following this repository" msgstr "Адмяніць назіранне за рэпазітаром" -#: kallithea/templates/base/root.html:24 +#: kallithea/templates/base/root.html:27 +#: kallithea/tests/data/templates/base/root.html.py:89 msgid "Start following this repository" msgstr "Назіраць за рэпазітаром" -#: kallithea/templates/base/root.html:25 +#: kallithea/templates/base/root.html:28 +#: kallithea/tests/data/templates/base/root.html.py:91 msgid "Group" msgstr "Група" -#: kallithea/templates/base/root.html:26 +#: kallithea/templates/base/root.html:29 +#: kallithea/tests/data/templates/base/root.html.py:93 msgid "members" msgstr "удзельнікі" -#: kallithea/templates/base/root.html:27 +#: kallithea/templates/base/root.html:30 +#: kallithea/tests/data/templates/base/root.html.py:95 msgid "Loading ..." msgstr "Загрузка..." -#: kallithea/templates/base/root.html:28 +#: kallithea/templates/base/root.html:31 +#: kallithea/tests/data/templates/base/root.html.py:97 msgid "loading ..." msgstr "загрузка..." -#: kallithea/templates/base/root.html:29 +#: kallithea/templates/base/root.html:32 +#: kallithea/tests/data/templates/base/root.html.py:99 msgid "Search truncated" msgstr "Пошук усечаны" -#: kallithea/templates/base/root.html:30 +#: kallithea/templates/base/root.html:33 +#: kallithea/tests/data/templates/base/root.html.py:101 msgid "No matching files" msgstr "Няма супадзенняў" -#: kallithea/templates/base/root.html:31 -#, fuzzy +#: kallithea/templates/base/root.html:34 +#: kallithea/tests/data/templates/base/root.html.py:103 msgid "Open New Pull Request from {0}" -msgstr "Каментар у pull-запыце" - -#: kallithea/templates/base/root.html:32 +msgstr "Стварыць новы pull-запыт з {0}" + +#: kallithea/templates/base/root.html:35 +#: kallithea/tests/data/templates/base/root.html.py:105 msgid "Open New Pull Request for {0} → {1}" -msgstr "" - -#: kallithea/templates/base/root.html:33 -#, fuzzy +msgstr "Стварыць новы pull-запыт для {0} → {1}" + +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 msgid "Show Selected Changesets {0} → {1}" -msgstr "Паказаць абраныя наборы змен: __S → __E" - -#: kallithea/templates/base/root.html:34 +msgstr "Паказаць выбраныя наборы змен: {0} → {1}" + +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 msgid "Selection Link" msgstr "Спасылка выбару" -#: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 +#: kallithea/templates/base/root.html:38 +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 msgid "Collapse Diff" msgstr "Згарнуць параўнанне" -#: kallithea/templates/base/root.html:36 +#: kallithea/templates/base/root.html:39 +#: kallithea/tests/data/templates/base/root.html.py:113 msgid "Expand Diff" -msgstr "Расчыніць параўнанне" - -#: kallithea/templates/base/root.html:37 -msgid "Failed to revoke permission" -msgstr "Не атрымалася адклікаць прывілеі" - -#: kallithea/templates/base/root.html:38 -msgid "Confirm to revoke permission for {0}: {1} ?" -msgstr "Пацвердзіце выдаленне прывілею для {0}: {1} ?" - -#: kallithea/templates/base/root.html:39 -msgid "enabled" -msgstr "уключана" +msgstr "Разгарнуць параўнанне" #: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "адключана" - -#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/base/root.html.py:115 +msgid "Failed to revoke permission" +msgstr "Не атрымалася адклікаць прывілеі" + +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 +msgid "Confirm to revoke permission for {0}: {1} ?" +msgstr "Пацвердзіце выдаленне прывілею для {0}: {1} ?" + +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "Выбраць набор змен" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" -msgstr "Абраць набор змен" - -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "Закладкі %s" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "Аўтар" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "Рэвізія" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "Галінкі %s" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" -msgstr "" +msgstr "Выбраць набор змен" + +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "Па ўзрастанні" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "Па змяншэнні" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "Запісы не знойдзеныя." + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "Памылка дадзеных." + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." +msgstr "Загрузка..." #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "Логі змен %s" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" @@ -4780,324 +5005,437 @@ msgstr[1] "Паказаны %d з %d рэвізій" msgstr[2] "Паказаны %d з %d рэвізій" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "Ачысціць выбар" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 msgid "Go to tip of repository" msgstr "Перайсці на верхавіну рэпазітара" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "Параўнаць fork з %s" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "Параўнаць форк з бацькоўскім рэпазітаром (%s)" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" -msgstr "Адфільтраваць галінку:" - -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 -#, fuzzy, python-format +msgstr "Адфільтраваць галіну:" + +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 +#, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" -"Статут набору змен: %s?\n" -"Клікніце, каб перайсці да адпаведнага pull-request'у #%s" - -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" -msgstr "Статут набору змен: %s" - -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +"Статус набору змен: %s ад %s\n" +"Клікніце, каб адкрыць адпаведны pull-запыт %s" + +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, python-format +msgid "Changeset status: %s by %s" +msgstr "Статус набору змен: %s ад %s" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +msgstr "Разгарнуць паведамленне" + +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "Каментары адсутнічаюць" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "Закладка %s" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" -msgstr "Пазнака %s" - -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +msgstr "Тэг %s" + +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" -msgstr "Галінка %s" - -#: kallithea/templates/changelog/changelog.html:309 +msgstr "Галіна %s" + +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "Змен яшчэ няма" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "Выдалена" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "Зменена" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "Дададзена" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "Закранае %s файлаў" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "Рэвізія" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "Узрост" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "Аўтар" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "Спасылкі" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "Дадаць ці загрузіць файлы праз Kallithea" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "Дадаць новы файл" -#: kallithea/templates/changelog/changelog_summary_data.html:90 -#, fuzzy +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 msgid "Push new repository" msgstr "Адправіць новы рэпазітар" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "Існы рэпазітар?" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "%s Змены" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" -msgstr "Статут змен" +msgstr "Статус змен" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "Адлюстраваць у фармаце diff" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" -msgstr "Ужыць рознаснае выпраўленне (Patch diff)" +msgstr "Patch diff" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" -msgstr "Запампаваць diff" - -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +msgstr "Спампаваць diff" + +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 #, fuzzy msgid "Merge" msgstr "звесці" -#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 msgid "Grafted from:" msgstr "Перанесена з:" +#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" +msgstr "" + #: kallithea/templates/changeset/changeset.html:129 -msgid "Transplanted from:" -msgstr "" - -#: kallithea/templates/changeset/changeset.html:135 -#, fuzzy +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 msgid "Replaced by:" -msgstr "Створана" - -#: kallithea/templates/changeset/changeset.html:149 -#, fuzzy +msgstr "Заменена:" + +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 msgid "Preceded by:" -msgstr "Створана" - -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +msgstr "Замяняе:" + +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "%s файл зменены" -msgstr[1] "%s файлаў зменена" -msgstr[2] "%s файла зменена" - -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +msgstr[1] "%s файлы зменена" +msgstr[2] "%s файлаў зменена" + +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" msgstr[0] "%s файл зменены: %s даданне, %s выдаленне" -msgstr[1] "%s файла зменена: %s даданні, %s выдаленні" +msgstr[1] "%s файлы зменена: %s даданні, %s выдаленні" msgstr[2] "%s файлаў зменена: %s даданняў, %s выдаленняў" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "Паказаць поўны diff" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 -#, fuzzy +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 msgid "No revisions" -msgstr "няма рэвізій" - -#: kallithea/templates/changeset/changeset_file_comment.html:21 -#, fuzzy +msgstr "Няма рэвізій" + +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 msgid "on pull request" -msgstr "Каментар у pull-запыце" +msgstr "у pull-запыце" + +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 +msgid "No title" +msgstr "Няма загалоўка" #: kallithea/templates/changeset/changeset_file_comment.html:22 -msgid "No title" -msgstr "Няма загалоўка" - -#: kallithea/templates/changeset/changeset_file_comment.html:24 -#, fuzzy +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 msgid "on this changeset" -msgstr "Няма змен" - -#: kallithea/templates/changeset/changeset_file_comment.html:30 +msgstr "на змене" + +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 msgid "Delete comment?" msgstr "Выдаліць каментар?" #: kallithea/templates/changeset/changeset_file_comment.html:37 -#, fuzzy +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 msgid "Status change" -msgstr "Апошнія змены" - -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." -msgstr "Каментар да радка {1}." - -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "Парсінг каментароў выкананы з выкарыстаннем сінтаксісу %s з падтрымкай %s." - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" -msgstr "" -"Выкарыстоўвайце @імя_карыстача ў тэксце, каб адправіць абвестку пэўнаму " -"карыстачу" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "Папярэдні прагляд каментара" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +msgstr "Змена статусу" + +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "Каментар да радка." + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +#, fuzzy +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "" +"Выкарыстоўвайце @імя_карыстальніка ў тэксце, каб адправіць паведамленне " +"пэўнаму карыстальніку" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +msgid "Set changeset status" +msgstr "Змяніць статус рэвізіі" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +msgid "No change" +msgstr "Без змен" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +msgid "Finish pull request" +msgstr "Завяршыць pull-запыт" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +msgid "Close" +msgstr "Закрыць" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." -msgstr "Ужыванне..." - -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +msgstr "Адпраўка..." + +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "Каментаваць" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "Прадпрагляд" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "Вам неабходна аўтарызавацца, каб пакідаць каментары." -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" -msgstr "Аўтарызавацца цяпер" - -#: kallithea/templates/changeset/changeset_file_comment.html:94 +msgstr "Аўтарызавацца зараз" + +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "Схаваць" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d каментар" -msgstr[1] "%d каментара" +msgstr[1] "%d каментары" msgstr[2] "%d каментароў" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, python-format msgid "%d inline" msgid_plural "%d inline" -msgstr[0] "%d да радка" -msgstr[1] "%d да радкоў" -msgstr[2] "%d да радкоў" - -#: kallithea/templates/changeset/changeset_file_comment.html:108 +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" @@ -5105,238 +5443,361 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -#, fuzzy -msgid "Use @username inside this text to notify another user." -msgstr "" -"Выкарыстоўвайце @імя_карыстача ў тэксце, каб адправіць абвестку пэўнаму " -"карыстачу" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -msgid "Set changeset status" -msgstr "Змяніць статус рэвізіі" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -msgid "No change" -msgstr "Без змен" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -msgid "Close" -msgstr "Зачыніць" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "%s Змены" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "Статус набору змен: %s" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "Закранутыя файлы" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +#, fuzzy +#| msgid "file removed" +msgid "File before" +msgstr "файл выдалены" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "Без змен" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "Выдалены" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "Пераназваны" + +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Невядомая рэвізія %s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "Безназоўны" + +#: kallithea/templates/changeset/diff_block.html:55 +#, fuzzy +#| msgid "file added" +msgid "File after" +msgstr "файл выдалены" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 msgid "Show full diff for this file" msgstr "Паказаць поўны diff для гэтага файла" -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 msgid "Show full side-by-side diff for this file" msgstr "Паказаць поўны diff для гэтага файла" -#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 msgid "Show inline comments" msgstr "Паказаць каментары ў радках" -#: kallithea/templates/changeset/diff_block.html:86 -msgid "Deleted" -msgstr "Выдалены" - -#: kallithea/templates/changeset/diff_block.html:89 -msgid "Renamed" -msgstr "Пераназваны" - #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "Няма змен" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "Продак" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +#, fuzzy +#| msgid "Common ancestor" +msgid "Merge Ancestor" +msgstr "Агульны продак" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "Паказаць merge diff" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "Агульны продак" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "Паказаць merge diff" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "адстае на" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, python-format msgid "%s changesets" msgstr "%s змен" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 msgid "behind" msgstr "ад" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "%s Параўнаць" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "Параўнаць рэвізіі" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" msgstr[0] "Паказаць %s commit" -msgstr[1] "Паказаць %s commit'а" +msgstr[1] "Паказаць %s commit'ы" msgstr[2] "Паказаць %s commit'аў" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "Паказаць поўны diff" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "Публічны рэпазітар" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "Змен яшчэ не было" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "Падпісацца на стужку RSS %s" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "Падпісацца на стужку Atom %s" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "Ствараецца" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "%(user)s пакінуў каментар да набору змен %(age)s" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "Comment from %s on %s changeset %s" +msgid "Comment on Changeset \"%s\"" msgstr "Каментар ад %s да набору змен %s %s" -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "Стан набору змен зменены на" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "Гэта аўтаматычнае апавяшчэнне. Не адказвайце на гэтае паведамленне." - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset flow" +msgid "Changeset on" +msgstr "Струмень змен" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "Галіна" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "Змена статусу" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "This pull request has been closed and can not be updated." +msgid "The pull request has been closed." +msgstr "Гэты pull-запыт быў зачынены і не можа быць абноўлены." + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "Добры дзень, %s" -#: kallithea/templates/email_templates/password_reset.html:6 -#, fuzzy +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 msgid "We have received a request to reset the password for your account." -msgstr "Мы атрымалі запыт на стварэнне новага пароля для вашага акаўнта." - -#: kallithea/templates/email_templates/password_reset.html:7 +msgstr "Мы атрымалі запыт на скіданне пароля для вашага акаўнта." + +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, fuzzy, python-format +#| msgid "%s mentioned you on %s pull request \"%s\"" +msgid "Mention on Pull Request %s \"%s\" by %s" msgstr "%s згадаў Вас у каментары да pull-запыту %s \"%s\"" -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, fuzzy, python-format +#| msgid "%s requested your review of %s pull request \"%s\"" +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" msgstr "%s запытаў рэцэнзаванне pull-запыту %s \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "у pull-запыце" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +#, fuzzy +#| msgid "Date" +msgid "at" +msgstr "Дата" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" +msgstr "" + #: kallithea/templates/email_templates/pull_request_comment.html:4 -#, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -msgid "The comment closed the pull request with status" -msgstr "Каментар зачыніў pull-запыт са статусам" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "Каментар пакінуты са статусам" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" -msgstr "Падрабязней пра карыстача" +#, fuzzy, python-format +#| msgid "%s mentioned you on %s pull request \"%s\"" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "%s згадаў Вас у каментары да pull-запыту %s \"%s\"" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Pull request %s from %s#%s" +msgid "Pull Request %s \"%s\" Closed" +msgstr "Pull-запыт %s ад %s#%s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "[commented] on pull request for" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "[каментар] у pull-запыце для" + +#: kallithea/templates/email_templates/registration.html:22 +#, fuzzy +#| msgid "Group name" +msgid "Full Name" +msgstr "Імя групы" #: kallithea/templates/files/diff_2way.html:15 #, python-format @@ -5354,82 +5815,104 @@ msgstr "Параўнанне файла %s" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "%s Файлы" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "%s Файлаў дададзена" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "Размяшчэнне" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "Увядзіце імя файла..." -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "ці" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "Адаслаць файл" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "Стварыць новы файл" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "Рэжым новага файла" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +msgid "New file type" +msgstr "Тып новага файла" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 msgid "Commit Changes" -msgstr "Ужыць змены" +msgstr "Захаваць змены" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "Папярэдняя рэвізія" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "Наступная рэвізія" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" -msgstr "Адсочваць дадзеную галінку" - -#: kallithea/templates/files/files_browser.html:44 +msgstr "Адсочваць дадзеную галіну" + +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "Загружаецца спіс файлаў..." -#: kallithea/templates/files/files_browser.html:61 +#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 msgid "Size" msgstr "Памер" -#: kallithea/templates/files/files_browser.html:62 +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 msgid "Last Revision" msgstr "Апошняя версія" -#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 msgid "Last Modified" msgstr "Апошняя змена" -#: kallithea/templates/files/files_browser.html:64 +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 msgid "Last Committer" msgstr "Аўтар апошняй рэвізіі" @@ -5439,7 +5922,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "Выдаліць файл" @@ -5452,25 +5935,24 @@ msgid "Edit file" msgstr "Рэдагаваць файл" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "Зыходны код" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "Рэдагаванне файла" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" @@ -5478,76 +5960,105 @@ msgstr[1] "%s аўтараў" msgstr[2] "%s аўтара" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "Паказаць ўсю гісторыю" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "Паказаць ўсю гісторыю" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "Паказаць аўтараў" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" -msgstr "" +#: kallithea/templates/files/files_source.html:34 +#, fuzzy, python-format +#| msgid "Deleted branch: %s" +msgid "Edit on Branch: %s" +msgstr "Выдаленая галіна: %s" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "Рэдагаванне бінарных файлаў забароненае" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" +msgstr "Рэдагаванне файлаў дазволенае толькі ў HEAD-рэвізіі дадзенай галіны" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "Рэдагаванне бінарных файлаў забаронена" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "Рэдагаванне файлаў дазволена толькі ў HEAD-рэвізіі дадзенай галінкі" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "Бінарны файл (%s)" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +msgid "File is too big to display." +msgstr "Файл занадта вялікі для адлюстравання." + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "Паказаць поўныя анатацыі." + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" -msgstr "Файл занадта вялікай для адлюстравання" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." +msgstr "Паказаць сырым." #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "анатацыя" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "Вярнуцца" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "Па зададзеным шляху файлы адсутнічаюць" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "%s Назіральнікі" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "Назіральнікі" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "Назіраць за рэпазітаром" @@ -5556,78 +6067,88 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "Імя форка" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" "Рэвізія па змаўчанні, з якой будзе вырабляцца выгрузка файлаў пры " "спампоўцы." -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "Прыватны" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "Скапіяваць прывілеі" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "Скапіяваць прывілеі з форкнутага рэпазітара" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "Абнаўляць пасля кланавання" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "Спампоўваць зыходнікі пасля стварэння клона" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "Форкі %s" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "Адгалінаванні" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "Форкнута" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" -msgstr "Форкі яшчэ не створаны" - -#: kallithea/templates/journal/journal.html:21 -msgid "ATOM journal feed" -msgstr "Стужка часопіса ATOM" +msgstr "Форкі яшчэ не створаныя" #: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 +msgid "ATOM journal feed" +msgstr "Стужка часопіса Atom" + +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "Стужка часопіса RSS" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "Мае рэпазітары" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "Запісы адсутнічаюць" #: kallithea/templates/journal/public_journal.html:13 msgid "ATOM public journal feed" -msgstr "Агульная стужка часопіса ATOM" +msgstr "Агульная стужка часопіса Atom" #: kallithea/templates/journal/public_journal.html:14 msgid "RSS public journal feed" @@ -5635,34 +6156,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "Новы pull-запыт" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "Загаловак" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "Напісаць кароткае пісанне па гэтым запыце" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "Струмень змен" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "Першапачатковы рэпазітар" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "Рэпазітар прызначэння" @@ -5671,9 +6203,8 @@ msgstr "Запісы отсуствуют" #: kallithea/templates/pullrequests/pullrequest_data.html:14 -#, fuzzy msgid "Vote" -msgstr "адклікаць" +msgstr "Галасаваць" #: kallithea/templates/pullrequests/pullrequest_data.html:18 msgid "From" @@ -5698,7 +6229,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "Зачынена" @@ -5711,370 +6244,637 @@ msgstr "Пацвердзіце выдаленне гэтага pull-request'а" #: kallithea/templates/pullrequests/pullrequest_data.html:70 -#, fuzzy, python-format +#, python-format msgid "Confirm again to delete this pull request with %s comments" -msgstr "Пацвердзіце выдаленне гэтага pull-request'а" +msgstr "Пацвердзіце выдаленне гэтага pull-запыту з %s каментарамі" #: kallithea/templates/pullrequests/pullrequest_show.html:6 -#, fuzzy, python-format +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 +#, python-format msgid "%s Pull Request %s" -msgstr "%s Pull-запыт #%s" +msgstr "%s зull-запыт %s" #: kallithea/templates/pullrequests/pullrequest_show.html:10 -#, fuzzy, python-format +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 +#, python-format msgid "Pull request %s from %s#%s" -msgstr "Pull-запыты №%s ад %s#%s" - -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +msgstr "Pull-запыт %s ад %s#%s" + +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 msgid "Summarize the changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "Яшчэ не разгледжаны" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "%d рэцэнзент" -msgstr[1] "%d рэцэнзента" +msgstr[1] "%d рэцэнзенты" msgstr[2] "%d рэцэнзентаў" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "Запыт на занясенне змен быў разгледжаны ўсімі рэцэнзентамі" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 msgid "There are no reviewers" msgstr "Няма рэцэнзентаў" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 msgid "on" msgstr "на" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "Цэль" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "Прыняць змены" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -msgid "Update" -msgstr "Абнавіць" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +#, fuzzy +#| msgid "Registration" +msgid "Next iteration" +msgstr "Рэгістрацыя" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "Захаваць змены" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +msgid "Cancel Changes" +msgstr "Адмяніць змены" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 msgid "Pull Request Reviewers" msgstr "Рэцэнзенты pull-запытаў" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 msgid "Remove reviewer" msgstr "Выдаліць рэцэнзента" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 msgid "Potential Reviewers" msgstr "Патэнцыйныя рэцэнзенты" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "Захаваць змены" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -msgid "Save as New Pull Request" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -msgid "Cancel Changes" -msgstr "Адмяніць змены" +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" +msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:296 -msgid "Pull Request Content" -msgstr "" +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" +msgstr "Агульны продак" #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 #, python-format msgid "%s Pull Requests" -msgstr "%s Запыты на занясенне змен" +msgstr "%s pull-запыты" #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 -#, fuzzy, python-format -#| msgid "Pull Requests from %s'" +#, python-format msgid "Pull Requests from '%s'" -msgstr "Pull-запыты ад %s" +msgstr "Pull-запыты ад '%s'" #: kallithea/templates/pullrequests/pullrequest_show_all.html:13 #, python-format msgid "Pull Requests to '%s'" -msgstr "Pull-запыты для %s" - -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +msgstr "Pull-запыты да '%s'" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "Стварыць новы pull-запыт" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, python-format msgid "Show Pull Requests to %s" msgstr "Паказаць pull-запыты да %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, python-format msgid "Show Pull Requests from '%s'" msgstr "Паказаць pull-запыты ад %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 msgid "Pull Requests Created by Me" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +#, fuzzy +#| msgid "Pull Request Reviewers" +msgid "Pull Requests Needing My Review" +msgstr "Рэцэнзенты pull-запытаў" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 msgid "Pull Requests I Participate In" msgstr "" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 msgid "Search in All Repositories" msgstr "Пошук па ўсіх рэпазітарах" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "Фраза для пошуку" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "Крытэр пошуку" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" -msgstr "Змесціва файлаў" - -#: kallithea/templates/search/search.html:66 +msgstr "Змест файлаў" + +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "Паведамленні камітаў" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "Імя файла" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" -msgstr "Недастаткова мае рацыю" +msgstr "Недастаткова правоў" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" -msgstr "ATOM стужка рэпазітара %s" +msgstr "Atom стужка рэпазітара %s" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "RSS стужка рэпазітара %s" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "Уключана" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "Атрыманая статыстыка: " -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "файлы" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "Паказаць яшчэ" -#: kallithea/templates/summary/statistics.html:390 +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 msgid "commits" msgstr "commit'ы" +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "файлы дададзены" + +#: kallithea/templates/summary/statistics.html:390 +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "файлы зменены" + #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "файлы дададзены" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" -msgstr "файлы зменены" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" +msgstr "файлы выдалены" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" -msgstr "файлы выдалены" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "commit" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" +msgstr "файл выдалены" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" -msgstr "commit" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" +msgstr "файл зменены" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "файл выдалены" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "файл зменены" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "файл выдалены" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "%s агульныя звесткі" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "Рэпазітар заблакаваны %s" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "Рэпазітар разблакаваны" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "Форк ад" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "Кланаваць з" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "Паводле ID" + #: kallithea/templates/summary/summary.html:72 -msgid "Clone URL" -msgstr "Спасылка для кланавання" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" -msgstr "Паказаць па імі" - -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "Паказаць па ID" - -#: kallithea/templates/summary/summary.html:92 +msgstr "Паводле імя" + +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "Папулярныя файлы" -#: kallithea/templates/summary/summary.html:108 +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 msgid "Download" -msgstr "Запампаваць" +msgstr "Спампаваць" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "Спамповак яшчэ няма" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "Спампоўванне адключанае ў гэтым рэпазітары" + +#: kallithea/templates/summary/summary.html:108 +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" +msgstr "Спампаваць у zip" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" -msgstr "Спамповак яшчэ няма" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" +msgstr "Адзначце для спампоўкі архіва з даччынымі рэпазітарамі" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "Спампоўка адключана ў гэтым рэпазітары" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "Запампаваць у zip" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "Адзначце для спампоўкі архіва з даччынымі рэпазітарамі" - -#: kallithea/templates/summary/summary.html:125 -#, fuzzy +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" -msgstr "з даччынымі рэпазітарамі" - -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "Памер рэпазітара" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +msgstr "З даччынымі рэпазітарамі" + +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "Стужка навін" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 msgid "Latest Changes" msgstr "Апошнія змены" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 msgid "Quick Start" msgstr "Хуткі старт" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" -msgstr "Запампаваць %s як %s" - -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "%s Пазнак" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" -msgstr "Параўнаць тэгі" +msgstr "Спампаваць %s як %s" + +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "Панэль кіравання" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "Імя групы" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "Запомніць" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "Змяніць аватар можна праз" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "Выкарыстоўваецца" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "Няма email адрэсы, калі ласка, абнавіце ваш email." + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "Опцыі перасканіравання" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "Вэб" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "Запытваць SSL для аперацый з VCS" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "Выкарыстоўваць Gravatars у Kallithea" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "Элементы панэлі" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" +"Колькасць элементаў, што паказваюцца на галоўнай старонцы панэлі " +"кіравання перад паказам нумарацыі старонак." + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "фільтр..." + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "Не паказаны email. Калі ласка, абнавіце email карыстальніка." + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "Гарачыя клавішы" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "Забыліся на пароль?" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "Продак" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "Каментар ад %s да набору змен %s %s" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "Статус набору змен зменены на" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "Гэта аўтаматычнае апавяшчэнне. Не адказвайце на гэтае паведамленне." + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "%s згадаў Вас у каментары да pull-запыту %s \"%s\"" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "%s запытаў рэцэнзаванне pull-запыту %s \"%s\"" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "Каментар зачыніў pull-запыт са статусам" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "Каментар пакінуты са статусам" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "Падрабязней пра карыстальніка" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "Памер рэпазітара" #~ msgid "No comments." #~ msgstr "Няма каментароў." @@ -6101,19 +6901,16 @@ #~ msgstr "Рэпазітар %s" #~ msgid "You can't edit this user" -#~ msgstr "Вы не можаце рэдагаваць дадзенага карыстача" +#~ msgstr "Вы не можаце рэдагаваць дадзенага карыстальніка" #~ msgid "No Files" #~ msgstr "Файлаў няма" -#~ msgid "" -#~ msgstr "" - #~ msgid "Username \"%(username)s\" is forbidden" #~ msgstr "Імя \"%(username)s\" адхілена" #~ msgid "invalid user name" -#~ msgstr "няслушнае імя карыстача" +#~ msgstr "няслушнае імя карыстальніка" #~ msgid "Your account is disabled" #~ msgstr "Ваш акаўнт выключаны" @@ -6121,12 +6918,6 @@ #~ msgid "invalid clone URL" #~ msgstr "няслушны URL для кланавання" -#~ msgid "Invalid clone URL, provide a valid clone http(s)/svn+http(s)/ssh URL" -#~ msgstr "" - -#~ msgid "Revisions %(revs)s are already part of pull request or have set status" -#~ msgstr "Рэвізіі %(revs)s ужо ўключаны ў pull-request ці маюць усталяваны статус" - #~ msgid "Defaults" #~ msgstr "Значэнні па змаўчанні" @@ -6142,15 +6933,6 @@ #~ msgid "reset" #~ msgstr "cкінуць" -#~ msgid "expired" -#~ msgstr "" - -#~ msgid "No additional api keys specified" -#~ msgstr "" - -#~ msgid "New api key" -#~ msgstr "" - #~ msgid "delete" #~ msgstr "выдаліць" @@ -6164,10 +6946,10 @@ #~ msgstr "Перазапісаць існыя налады" #~ msgid "Default IP Whitelist for All Users" -#~ msgstr "Белы спіс IP для ўсіх карыстачоў" +#~ msgstr "Белы спіс IP для ўсіх карыстальнікаў" #~ msgid "Default User Permissions Overview" -#~ msgstr "Агляд мае рацыю карыстачоў па змаўчанні" +#~ msgstr "Агляд мае рацыю карыстальнікаў па змаўчанні" #~ msgid "none" #~ msgstr "нічога" @@ -6181,12 +6963,6 @@ #~ msgid "admin" #~ msgstr "адміністратар" -#~ msgid "user/user group" -#~ msgstr "" - -#~ msgid "delegated admin" -#~ msgstr "" - #~ msgid "Optional URL from which repository should be cloned." #~ msgstr "Апцыянальны URL, з якога патрабуецца скланаваць рэпазітар." @@ -6196,9 +6972,6 @@ #~ msgid "Pull Changes from Remote Location" #~ msgstr "Атрымаць змены з выдаленага боку" -#~ msgid "This repository does not have a remote URL set." -#~ msgstr "" - #~ msgid "Non-changeable id" #~ msgstr "Нязменлівы id" @@ -6208,69 +6981,21 @@ #~ msgid "new value" #~ msgstr "новае значэнне" -#~ msgid "URL used for doing remote pulls." -#~ msgstr "" - -#~ msgid "Email prefix" -#~ msgstr "" - -#~ msgid "Kallithea email from" -#~ msgstr "" - -#~ msgid "Error email from" -#~ msgstr "" - -#~ msgid "Error email recipients" -#~ msgstr "" - #~ msgid "SMTP server" #~ msgstr "SMTP-сервер" -#~ msgid "SMTP username" -#~ msgstr "" - -#~ msgid "SMTP password" -#~ msgstr "" - -#~ msgid "SMTP port" -#~ msgstr "" - -#~ msgid "SMTP use TLS" -#~ msgstr "" - -#~ msgid "SMTP use SSL" -#~ msgstr "" - -#~ msgid "SMTP auth" -#~ msgstr "" - #~ msgid "Destroy old data" #~ msgstr "Знішчыць усе дадзеныя" #~ msgid "Default permissions" #~ msgstr "Стандартныя прывілеі" -#~ msgid "Inherit from defaults" -#~ msgstr "" - #~ msgid "show" #~ msgstr "паказа́ць" -#~ msgid "parent rev." -#~ msgstr "" - -#~ msgid "child rev." -#~ msgstr "" - #~ msgid "Status change from pull request" #~ msgstr "Змена статусу" -#~ msgid "Status change on changeset" -#~ msgstr "" - -#~ msgid "Comment on changeset" -#~ msgstr "" - #~ msgid "revision" #~ msgstr "рэвізія" @@ -6307,9 +7032,259 @@ #~ msgid "You can generate it by clicking following URL" #~ msgstr "Вы можаце нанова згенераваць яго, пяройдучы па наступнай спасылцы" -#~ msgid "Please ignore this email if you did not request a new password ." -#~ msgstr "" - #~ msgid "Created by" #~ msgstr "Створана" +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "Зачынены, заменены %s." + +#~ msgid "Closing." +#~ msgstr "Зачынены." + +#~ msgid "Changeset not found" +#~ msgstr "Набор змен не знойдзены" + +#~ msgid "Repository no access" +#~ msgstr "Рэпазітар - няма доступу" + +#~ msgid "Repository read access" +#~ msgstr "Рэпазітар - доступ на чытанне" + +#~ msgid "Repository write access" +#~ msgstr "Рэпазітар - доступ на запіс" + +#~ msgid "Repository admin access" +#~ msgstr "Рэпазітар - адміністраванне" + +#~ msgid "Repository Group no access" +#~ msgstr "Група Рэпазітароў - няма доступу" + +#~ msgid "Repository Group read access" +#~ msgstr "Група Рэпазітароў - доступ на чытанне" + +#~ msgid "Repository Group write access" +#~ msgstr "Група Рэпазітароў - доступ на запіс" + +#~ msgid "Repository Group admin access" +#~ msgstr "Група Рэпазітароў - адміністраванне" + +#~ msgid "Repository creation disabled" +#~ msgstr "Стварэнне рэпазітароў адключанае" + +#~ msgid "Repository creation enabled" +#~ msgstr "Стварэнне рэпазітароў уключанае" + +#~ msgid "Repository forking disabled" +#~ msgstr "Магчымасць ствараць форк рэпазітара адключаная" + +#~ msgid "Repository forking enabled" +#~ msgstr "Магчымасць ствараць форк рэпазітара ўключаная" + +#~ msgid "Register disabled" +#~ msgstr "Рэгістрацыя адключаная" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "Рэгістрацыя новага карыстальніка ў Kallithea з ручной актывацыяй" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "Рэгістрацыя новага карыстальніка ў Kallithea з аўтаматычнай актывацыяй" + +#~ msgid "Not Reviewed" +#~ msgstr "Не прагледжана" + +#~ msgid "Rejected" +#~ msgstr "Адхілена" + +#~ msgid "Under Review" +#~ msgstr "На разглядзе" + +#~ msgid "Repository group no access" +#~ msgstr "Група Рэпазітароў - няма доступу" + +#~ msgid "Repository group read access" +#~ msgstr "Група рэпазітароў - доступ на чытанне" + +#~ msgid "Repository group write access" +#~ msgstr "Група рэпазітароў - доступ на запіс" + +#~ msgid "Repository group admin access" +#~ msgstr "Група рэпазітароў - адміністраванне" + +#~ msgid "User group no access" +#~ msgstr "Група карыстальнікаў - няма доступу" + +#~ msgid "User group read access" +#~ msgstr "Група карыстальнікаў - доступ на чытанне" + +#~ msgid "User group write access" +#~ msgstr "Група карыстальнікаў - доступ на запіс" + +#~ msgid "User group admin access" +#~ msgstr "Група карыстальнікаў - адміністраванне" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "Стварэнне груп рэпазітароў адключанае" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "Стварэнне груп рэпазітароў уключанае" + +#~ msgid "User Group creation disabled" +#~ msgstr "Стварэнне груп карыстальнікаў адключанае" + +#~ msgid "User Group creation enabled" +#~ msgstr "Стварэнне груп карыстальнікаў уключанае" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "Рэгістрацыя карыстальніка з ручной актывацыяй уліковага запісу" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "Рэгістрацыя карыстальніка з аўтаматычнай актывацыяй" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" +#~ "%(user)s просіць вас разгледзець pull " +#~ "request %(pr_nice_id)s: %(pr_title)s" + +#~ msgid "repositories" +#~ msgstr "рэпазітары" + +#~ msgid "No repositories found." +#~ msgstr "Рэпазітары не знойдзеныя." + +#~ msgid "There are no branches yet" +#~ msgstr "Галіны яшчэ не створаныя" + +#~ msgid "There are no tags yet" +#~ msgstr "Пазнакі адсутнічаюць" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "Закладак яшчэ няма" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "уключана" + +#~ msgid "%s Bookmarks" +#~ msgstr "Закладкі %s" + +#~ msgid "Compare Bookmarks" +#~ msgstr "Параўнаць закладкі" + +#~ msgid "%s Branches" +#~ msgstr "%s Галіны" + +#~ msgid "Compare Branches" +#~ msgstr "Параўнаць галіны" + +#~ msgid "Editing file" +#~ msgstr "Рэдагаванне файла" + +#~ msgid "Update" +#~ msgstr "Абнавіць" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "Захаваць абнаўленні як новы pull-запыт" + +#~ msgid "%s Tags" +#~ msgstr "%s Тэгаў" + +#~ msgid "Compare Tags" +#~ msgstr "Параўнаць тэгі" + +#~ msgid "" +#~ "Changing status on a changeset " +#~ "associated with a closed pull request" +#~ " is not allowed" +#~ msgstr "Нельга рэдагаваць статус змен, злучаных з зачыненымі pull-request'ами" + +#~ msgid "You have successfully registered into Kallithea" +#~ msgstr "Рэгістрацыя ў Kallithea прайшла паспяхова" + +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "Гэты pull-запыт можа быць абноўлены з %s:" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "Пацвердзіце скід кэша." + +#~ msgid "" +#~ "Changeset status: %s\n" +#~ "Click to open associated pull request %s" +#~ msgstr "" +#~ "Статут набору змен: %s?\n" +#~ "Клікніце, каб перайсці да адпаведнага pull-request'у #%s" + +#~ msgid "Commenting on line {1}." +#~ msgstr "Каментар да радка {1}." + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "" +#~ "Парсінг каментароў выкананы з выкарыстаннем" +#~ " сінтаксісу %s з падтрымкай %s." + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" +#~ "Выкарыстоўвайце @імя_карыстача ў тэксце, каб" +#~ " адправіць абвестку пэўнаму карыстачу" + +#~ msgid "Comment preview" +#~ msgstr "Папярэдні прагляд каментара" + +#~ msgid "Preview" +#~ msgstr "Прадпрагляд" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "" +#~ "Выкарыстоўвайце @імя_карыстача ў тэксце, каб" +#~ " адправіць абвестку пэўнаму карыстачу" + +#~ msgid "New file mode" +#~ msgstr "Рэжым новага файла" + +#~ msgid "File is too big to display" +#~ msgstr "Файл занадта вялікай для адлюстравання" + +#~ msgid "Save as New Pull Request" +#~ msgstr "" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/cs/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/cs/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/cs/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -7,11 +7,11 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" "PO-Revision-Date: 2015-11-12 08:51+0000\n" "Last-Translator: Michal Čihař \n" "Language-Team: Czech " -"\n" +"\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,442 +20,478 @@ "X-Generator: Weblate 2.5-dev\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(zavřeno)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "Taková revize neexistuje" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "Prázdný repozitář" + +#: kallithea/controllers/compare.py:73 +msgid "Cannot compare repositories of different types" +msgstr "" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" -#: kallithea/controllers/error.py:71 +#: kallithea/controllers/error.py:70 #, fuzzy msgid "No response" msgstr "Neznámá revize %s" -#: kallithea/controllers/error.py:72 +#: kallithea/controllers/error.py:71 msgid "Unknown error" msgstr "" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "" -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "Nemáte oprávnění k zobrazení této stránky" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." msgstr "" -#: kallithea/controllers/feed.py:55 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "" + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 +#, python-format +msgid "%s %s feed" +msgstr "" + +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 #, python-format msgid "Changes on %s repository" msgstr "Změny na repozitáři %s" -#: kallithea/controllers/feed.py:56 -#, python-format -msgid "%s %s feed" -msgstr "" - -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "" - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "" - -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "Klikněte pro přidání nového souboru" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "Zatím nejsou žádné soubory. %s" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, python-format msgid "%s at %s" msgstr "" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "" -#: kallithea/controllers/files.py:317 +#: kallithea/controllers/files.py:309 msgid "You can only delete files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:328 +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "" -#: kallithea/controllers/files.py:377 +#: kallithea/controllers/files.py:369 msgid "You can only edit files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:391 +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "Žádné změny" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "Přidaný soubor přes Kallithea" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "Žádný obsah" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "Stahování vypnuto" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "Neznámá revize %s" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "Prázdný repozitář" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "Změny" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "Větve" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "Tagy" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "Skupiny" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "Repozitáře" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "Větev" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "Tag" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "Záložka" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "Špatná captcha" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" msgstr "" -#: kallithea/controllers/login.py:246 +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" msgstr "" -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "Úspěšně aktualizované heslo" -#: kallithea/controllers/pullrequests.py:124 +#: kallithea/controllers/pullrequests.py:73 +#, python-format +msgid "Invalid reviewer \"%s\" specified" +msgstr "" + +#: kallithea/controllers/pullrequests.py:135 #, python-format msgid "%s (closed)" msgstr "%s (zavřené)" -#: kallithea/controllers/pullrequests.py:152 +#: kallithea/controllers/pullrequests.py:162 #: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 msgid "Changeset" msgstr "" -#: kallithea/controllers/pullrequests.py:173 +#: kallithea/controllers/pullrequests.py:183 msgid "Special" msgstr "" -#: kallithea/controllers/pullrequests.py:174 +#: kallithea/controllers/pullrequests.py:184 msgid "Peer branches" msgstr "" -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 msgid "Bookmarks" msgstr "Záložky" -#: kallithea/controllers/pullrequests.py:310 +#: kallithea/controllers/pullrequests.py:326 #, python-format msgid "Error creating pull request: %s" msgstr "" -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 -#, python-format -msgid "Invalid reviewer \"%s\" specified" -msgstr "" - -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "" - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "" - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" -msgstr "" - -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "" + +#: kallithea/controllers/pullrequests.py:381 +msgid "New pull request iteration created" +msgstr "" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, python-format +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." -msgstr "" - -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +msgid "No additional changesets found for iterating on this pull request." +msgstr "" + +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "" - -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:571 +msgid "Git pull requests don't support iterating yet." +msgstr "" + +#: kallithea/controllers/pullrequests.py:573 +#, python-format +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "" - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, fuzzy, python-format +msgid "Successfully deleted pull request %s" +msgstr "Úspěšně aktualizované heslo" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "" -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "Došlo k chybě při vyhledávání." -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "" @@ -467,149 +503,153 @@ msgid "error occurred during update of auth settings" msgstr "" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "" +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "" + #: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 -msgid "Forever" -msgstr "" +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" +msgstr "5 minut" #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" -msgstr "5 minut" +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" +msgstr "1 hodina" #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" -msgstr "1 hodina" +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 +msgid "1 day" +msgstr "1 den" #: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 -msgid "1 day" -msgstr "1 den" - -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "1 měsíc" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "Došlo k chybě při vytváření gist" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" msgstr "" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "Došlo k chybě při aktualizaci hesla uživatele" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "Došlo k chybě při ukládání e-mailové adresy" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" msgstr "" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -617,621 +657,641 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "Chyba při vytváření repozitáře %s" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" -msgstr "" - -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "Error occurred during gist creation" +msgid "An error occurred during creation of field: %r" +msgstr "Došlo k chybě při vytváření gist" + +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "Nic" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "" +#: kallithea/controllers/admin/repos.py:480 +msgid "An error occurred during this operation" +msgstr "" + +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 +msgid "Repository has been locked" +msgstr "Repozitář byl uzamčen" + +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 +msgid "Repository has been unlocked" +msgstr "Repozitář byl odemčen" + +#: kallithea/controllers/admin/repos.py:502 #: kallithea/controllers/admin/repos.py:521 -msgid "An error occurred during this operation" +msgid "An error occurred during unlocking" +msgstr "" + +#: kallithea/controllers/admin/repos.py:533 +msgid "Cache invalidation successful" msgstr "" #: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 -msgid "Repository has been locked" -msgstr "Repozitář byl uzamčen" - -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 -msgid "Repository has been unlocked" -msgstr "Repozitář byl odemčen" - -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 -msgid "An error occurred during unlocking" -msgstr "" - -#: kallithea/controllers/admin/repos.py:582 -msgid "Cache invalidation successful" -msgstr "" - -#: kallithea/controllers/admin/repos.py:586 msgid "An error occurred during cache invalidation" msgstr "" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "" +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 +msgid "" +"Unable to activate hgsubversion support. The \"hgsubversion\" library is " +"missing" +msgstr "" + +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 +msgid "Error occurred while updating application settings" +msgstr "" + #: kallithea/controllers/admin/settings.py:174 -msgid "" -"Unable to activate hgsubversion support. The \"hgsubversion\" library is " -"missing" -msgstr "" - -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 -msgid "Error occurred while updating application settings" -msgstr "" - -#: kallithea/controllers/admin/settings.py:211 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "" -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format #| msgid "Watched Repositories" msgid "Invalidated %s repositories" msgstr "Repozitáře" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "" +#: kallithea/controllers/admin/user_groups.py:208 +#, python-format +msgid "Error occurred during update of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:219 +msgid "Successfully deleted user group" +msgstr "" + #: kallithea/controllers/admin/user_groups.py:224 -#, python-format -msgid "Error occurred during update of user group %s" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:242 -msgid "Successfully deleted user group" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:247 msgid "An error occurred during deletion of user group" msgstr "" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, python-format msgid "Changeset for %s %s not found in %s" msgstr "" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format #| msgid "Set changeset status" msgid "Changeset %s not found" msgstr "Změny" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 msgid "Compare view" msgstr "" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, python-format msgid "Fork name %s" msgstr "" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, python-format msgid "Pull request %s" msgstr "" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr "" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1239,7 +1299,7 @@ "repositories" msgstr "" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" @@ -1247,7 +1307,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" @@ -1255,7 +1315,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" @@ -1263,7 +1323,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" @@ -1271,7 +1331,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" @@ -1279,7 +1339,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" @@ -1287,1267 +1347,920 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 msgid "Default user has read access to new repositories" msgstr "" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 msgid "Default user has write access to new repositories" msgstr "" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 msgid "Only admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 msgid "Non-admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 msgid "Only admins can create user groups" msgstr "" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 msgid "Non-admins can create user groups" msgstr "" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 #, fuzzy msgid "Only admins can fork repositories" msgstr "Chyba při vytváření repozitáře %s" -#: kallithea/model/db.py:1696 +#: kallithea/model/db.py:1745 #, fuzzy -#| msgid "Non-admins can can fork repositories" msgid "Non-admins can fork repositories" msgstr "Chyba při vytváření repozitáře %s" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" msgstr "" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 #, fuzzy msgid "Not reviewed" msgstr "" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 #, fuzzy msgid "Under review" msgstr "" -#: kallithea/model/forms.py:57 -msgid "Please enter a login" +#: kallithea/model/db.py:2278 +msgid "Not approved" +msgstr "" + +#: kallithea/model/db.py:2279 +msgid "Approved" msgstr "" #: kallithea/model/forms.py:58 +msgid "Please enter a login" +msgstr "" + +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "" -#: kallithea/model/forms.py:66 -msgid "Please enter a password" -msgstr "" - #: kallithea/model/forms.py:67 +msgid "Please enter a password" +msgstr "" + +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" +#: kallithea/model/notification.py:240 +#, python-format +msgid "%(user)s commented on changeset %(age)s" +msgstr "" + +#: kallithea/model/notification.py:241 +#, python-format +msgid "%(user)s sent message %(age)s" +msgstr "" + +#: kallithea/model/notification.py:242 +#, python-format +msgid "%(user)s mentioned you %(age)s" +msgstr "" + +#: kallithea/model/notification.py:243 +#, python-format +msgid "%(user)s registered in Kallithea %(age)s" +msgstr "" + +#: kallithea/model/notification.py:244 +#, python-format +msgid "%(user)s opened new pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:245 +#, python-format +msgid "%(user)s commented on pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:252 +#, python-format +msgid "%(user)s commented on changeset at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:253 +#, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:254 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + #: kallithea/model/notification.py:255 #, python-format -msgid "%(user)s commented on changeset %(age)s" +msgid "%(user)s registered in Kallithea at %(when)s" msgstr "" #: kallithea/model/notification.py:256 #, python-format -msgid "%(user)s sent message %(age)s" +msgid "%(user)s opened new pull request at %(when)s" msgstr "" #: kallithea/model/notification.py:257 #, python-format -msgid "%(user)s mentioned you %(age)s" -msgstr "" - -#: kallithea/model/notification.py:258 -#, python-format -msgid "%(user)s registered in Kallithea %(age)s" -msgstr "" - -#: kallithea/model/notification.py:259 -#, python-format -msgid "%(user)s opened new pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:260 -#, python-format -msgid "%(user)s commented on pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:267 -#, python-format -msgid "%(user)s commented on changeset at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:268 -#, python-format -msgid "%(user)s sent message at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:269 -#, python-format -msgid "%(user)s mentioned you at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:270 -#, python-format -msgid "%(user)s registered in Kallithea at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:271 -#, python-format -msgid "%(user)s opened new pull request at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:272 -#, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, python-format +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "" + +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" msgstr "" -#: kallithea/model/notification.py:308 -#, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:309 -#, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +msgid "Cannot create empty pull request" +msgstr "" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +msgid "You are not authorized to create the pull request" +msgstr "" + +#: kallithea/model/pull_request.py:341 +msgid "Missing changesets since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:348 +#, python-format +msgid "New changesets on %s %s since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, python-format +msgid "No changes found on %s %s since previous iteration." +msgstr "" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 msgid "You can't remove this user since it is crucial for the entire application" msgstr "" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories: %s" msgstr "" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" " owners or remove those repository groups: %s" msgstr "" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " "owners or remove those user groups: %s" msgstr "" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 msgid "Password reset notification" msgstr "" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with an alphanumeric character or underscore" msgstr "" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 msgid "Invalid username or password" msgstr "" +#: kallithea/model/validators.py:310 +msgid "Token mismatch" +msgstr "" + +#: kallithea/model/validators.py:326 +#, python-format +msgid "Repository name %(repo)s is not allowed" +msgstr "" + +#: kallithea/model/validators.py:328 +#, python-format +msgid "Repository named %(repo)s already exists" +msgstr "" + +#: kallithea/model/validators.py:329 +#, python-format +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "" + #: kallithea/model/validators.py:331 -msgid "Token mismatch" -msgstr "" - -#: kallithea/model/validators.py:345 -#, python-format -msgid "Repository name %(repo)s is not allowed" -msgstr "" - -#: kallithea/model/validators.py:347 -#, python-format -msgid "Repository named %(repo)s already exists" -msgstr "" - -#: kallithea/model/validators.py:348 -#, python-format -msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" -msgstr "" - -#: kallithea/model/validators.py:350 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 #, fuzzy msgid "Invalid repository URL" msgstr "Prázdný repozitář" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 msgid "This email address is already in use" msgstr "" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, python-format msgid "Email address \"%(email)s\" not found" msgstr "" -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "" - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository URL" +msgid "Repository Group" +msgstr "Repozitáře" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "" - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "" - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "" - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, python-format msgid "Reset Your Password to %s" msgstr "" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 msgid "Reset Your Password" msgstr "" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" msgstr "" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 msgid "New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 msgid "Confirm New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 msgid "Admin Journal" msgstr "" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "" #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 msgid "Filter" msgstr "" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, fuzzy, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2556,149 +2269,177 @@ msgstr[2] "" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 #, fuzzy msgid "Repository Defaults" msgstr "Repozitáře" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "" +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 +msgid "Private repository" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" + #: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 -msgid "Private repository" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 +msgid "Enable statistics" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 +msgid "Enable statistics window on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 +msgid "Enable downloads" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 +msgid "Enable download menu on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 +msgid "Enable locking" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:61 #: kallithea/templates/admin/repos/repo_edit_settings.html:84 -msgid "Enable statistics" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 -msgid "Enable statistics window on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 -msgid "Enable downloads" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 -msgid "Enable download menu on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 -msgid "Enable locking" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "" @@ -2707,45 +2448,63 @@ msgid "Edit Gist" msgstr "" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "" -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 msgid "Never" msgstr "" @@ -2754,273 +2513,406 @@ msgstr "" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 msgid "Email Addresses" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 #, fuzzy msgid "Owned Repositories" msgstr "Repozitáře" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 #, fuzzy msgid "Watched Repositories" msgstr "Repozitáře" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 msgid "Show Permissions" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, python-format msgid "Confirm to reset this API key: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 msgid "Expired" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, python-format msgid "Confirm to remove this API key: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 msgid "Remove" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 msgid "New API key" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "" @@ -3028,282 +2920,362 @@ msgid "Change Your Account Password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, python-format +msgid "Change %s avatar at" msgstr "" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 #, fuzzy msgid "Repositories You Own" msgstr "Umístění repozitářů" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" msgstr "" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 #, fuzzy msgid "Repositories You are Watching" msgstr "Umístění repozitářů" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" msgstr "" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +msgid "Mark as read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 msgid "Default Permissions" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "Chyba při vytváření repozitáře %s" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " "will be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 msgid "Apply to all existing repository groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 msgid "" "All default permissions on each user group will be reset to chosen " "permission, note that all custom default permission on user groups will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 +msgid "Permissions for the Default user on new user groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 +msgid "Top level repository creation" +msgstr "" + #: kallithea/templates/admin/permissions/permissions_globals.html:55 -msgid "Permissions for the Default user on new user groups." +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 +msgid "Enable this to allow non-admins to create repositories at the top level." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 +msgid "" +"Note: This will also give all users API access to create repositories " +"everywhere. That might change in future versions." msgstr "" #: kallithea/templates/admin/permissions/permissions_globals.html:60 -msgid "Top level repository creation" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:64 -msgid "Enable this to allow non-admins to create repositories at the top level." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:65 -msgid "" -"Note: This will also give all users API access to create repositories " -"everywhere. That might change in future versions." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3312,31 +3284,42 @@ msgid "%s Repository Group Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "Nastavení" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "Pokročilé" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "" @@ -3360,12 +3343,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3377,16 +3362,34 @@ msgid "Delete this repository group" msgstr "" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +msgid "Visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "No response" +msgid "Add repos" +msgstr "Neznámá revize %s" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +msgid "Add/Edit groups" +msgstr "" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 msgid "User/User Group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 msgid "Default" @@ -3394,103 +3397,115 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 msgid "Revoke" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 msgid "Apply to children" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 #, fuzzy msgid "Confirm to delete this group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "Repository Defaults" +msgid "Repository group %s" +msgstr "Repozitáře" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 msgid "Repository Groups Administration" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 msgid "Number of Top-level Repositories" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3519,94 +3534,115 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, fuzzy, python-format msgid "%s Repository Settings" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 msgid "Parent" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 msgid "Public Journal Visibility" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 msgid "Add to Public Journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 msgid "Change Locking" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 msgid "Confirm to unlock repository." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 #, fuzzy msgid "Unlock Repository" msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 #, python-format msgid "Locked by %s on %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 #, fuzzy msgid "Confirm to lock repository." msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 #, fuzzy msgid "Lock Repository" msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3614,18 +3650,22 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 #, fuzzy msgid "Delete this Repository" msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, fuzzy, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" @@ -3633,15 +3673,18 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3652,110 +3695,116 @@ msgid "Invalidate Repository Cache" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -msgid "Confirm to invalidate repository cache." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 +msgid "List of Cached Values" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_caches.html:12 -msgid "List of Cached Values" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 msgid "Prefix" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 #, fuzzy msgid "Private Repository" msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "Go to tip of repository" +msgid "Fork of repository" +msgstr "Prázdný repozitář" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 #, fuzzy msgid "Remote repository URL" msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 #, fuzzy msgid "Pull Changes from Remote Repository" msgstr "Změny na repozitáři %s" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 #, fuzzy msgid "Confirm to pull changes from remote repository." msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 #, fuzzy msgid "Permanent Repository ID" msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3765,35 +3814,35 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 #, fuzzy msgid "Remote repository" msgstr "Prázdný repozitář" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 #, fuzzy msgid "Repository URL" msgstr "Repozitáře" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_statistics.html:6 -msgid "Processed commits" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 msgid "Processed progress" msgstr "" @@ -3806,315 +3855,374 @@ msgstr "" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 #, fuzzy msgid "Repositories Administration" msgstr "Umístění repozitářů" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 msgid "Settings Administration" msgstr "" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 #, fuzzy msgid "Save Settings" msgstr "Nastavení" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 msgid "Custom Hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" -msgstr "" - -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:4 +msgid "Rescan options" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:23 -msgid "Install Git hooks" -msgstr "" - #: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "" +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + #: kallithea/templates/admin/settings/settings_search.html:12 -msgid "Build from scratch" -msgstr "" - -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 msgid "Kallithea version" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 -msgid "Git version" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Upgrade info endpoint" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 msgid "Mercurial extensions" msgstr "" +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 +msgid "Enable largefiles extension" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 +msgid "Enable hgsubversion extension" +msgstr "" + #: kallithea/templates/admin/settings/settings_vcs.html:47 -msgid "Enable largefiles extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:51 -msgid "Enable hgsubversion extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 #, fuzzy msgid "Location of repositories" msgstr "Chyba při vytváření repozitáře %s" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4131,102 +4239,126 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repositories" +msgid "Repository page size" +msgstr "Repozitáře" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "" + #: kallithea/templates/admin/settings/settings_visual.html:84 -msgid "Show private repository icon on repositories" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 #, fuzzy msgid "Meta Tagging" msgstr "Nastavení" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 msgid "Show Members" msgstr "" @@ -4236,13 +4368,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "" @@ -4251,48 +4385,59 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 msgid "User Groups Administration" msgstr "" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4302,12 +4447,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4316,7 +4463,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "" @@ -4325,400 +4473,453 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 msgid "Users Administration" msgstr "" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "" - -#: kallithea/templates/base/base.html:145 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 +msgid "Options" +msgstr "" + #: kallithea/templates/base/base.html:147 -msgid "Options" +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" msgstr "" #: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 -msgid "Compare Fork" +#: kallithea/tests/data/templates/base/base.html.py:399 +msgid "Unlock" msgstr "" #: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "" - -#: kallithea/templates/base/base.html:163 -msgid "Unlock" +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" msgstr "" #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "" -#: kallithea/templates/base/base.html:246 -msgid "Search in repositories" -msgstr "" - -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 -msgid "My Pull Requests" -msgstr "" - -#: kallithea/templates/base/base.html:289 -msgid "Not Logged In" -msgstr "" - -#: kallithea/templates/base/base.html:296 -msgid "Login to Your Account" -msgstr "" - #: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" -msgstr "" - -#: kallithea/templates/base/base.html:346 +#: kallithea/tests/data/templates/base/base.html.py:540 +msgid "Search in repositories" +msgstr "" + +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 +msgid "My Pull Requests" +msgstr "" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 +msgid "Not Logged In" +msgstr "" + +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 +msgid "Login to Your Account" +msgstr "" + +#: kallithea/templates/base/base.html:385 +msgid "Forgot password?" +msgstr "" + +#: kallithea/templates/base/base.html:389 +msgid "Don't have an account?" +msgstr "" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 #, fuzzy msgid "Inherit defaults" msgstr "Repozitáře" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 -#, fuzzy -msgid "Add Another Comment" -msgstr "" - -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 -msgid "Stop following this repository" -msgstr "" - -#: kallithea/templates/base/root.html:24 -msgid "Start following this repository" -msgstr "" - #: kallithea/templates/base/root.html:25 -msgid "Group" +#: kallithea/tests/data/templates/base/root.html.py:85 +#, fuzzy +msgid "Add Another Comment" msgstr "" #: kallithea/templates/base/root.html:26 -msgid "members" +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 +msgid "Stop following this repository" msgstr "" #: kallithea/templates/base/root.html:27 -msgid "Loading ..." +#: kallithea/tests/data/templates/base/root.html.py:89 +msgid "Start following this repository" msgstr "" #: kallithea/templates/base/root.html:28 -msgid "loading ..." +#: kallithea/tests/data/templates/base/root.html.py:91 +msgid "Group" msgstr "" #: kallithea/templates/base/root.html:29 -msgid "Search truncated" +#: kallithea/tests/data/templates/base/root.html.py:93 +msgid "members" msgstr "" #: kallithea/templates/base/root.html:30 -msgid "No matching files" +#: kallithea/tests/data/templates/base/root.html.py:95 +msgid "Loading ..." msgstr "" #: kallithea/templates/base/root.html:31 -#, fuzzy -msgid "Open New Pull Request from {0}" -msgstr "Změna stavu-> %s" +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." +msgstr "" #: kallithea/templates/base/root.html:32 -msgid "Open New Pull Request for {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" msgstr "" #: kallithea/templates/base/root.html:33 -msgid "Show Selected Changesets {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" msgstr "" #: kallithea/templates/base/root.html:34 -msgid "Selection Link" -msgstr "" +#: kallithea/tests/data/templates/base/root.html.py:103 +#, fuzzy +msgid "Open New Pull Request from {0}" +msgstr "Změna stavu-> %s" #: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 -msgid "Collapse Diff" +#: kallithea/tests/data/templates/base/root.html.py:105 +msgid "Open New Pull Request for {0} → {1}" msgstr "" #: kallithea/templates/base/root.html:36 -msgid "Expand Diff" +#: kallithea/tests/data/templates/base/root.html.py:107 +msgid "Show Selected Changesets {0} → {1}" msgstr "" #: kallithea/templates/base/root.html:37 -msgid "Failed to revoke permission" +#: kallithea/tests/data/templates/base/root.html.py:109 +msgid "Selection Link" msgstr "" #: kallithea/templates/base/root.html:38 -msgid "Confirm to revoke permission for {0}: {1} ?" +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 +msgid "Collapse Diff" msgstr "" #: kallithea/templates/base/root.html:39 -msgid "enabled" +#: kallithea/tests/data/templates/base/root.html.py:113 +msgid "Expand Diff" msgstr "" #: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "" - -#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/base/root.html.py:115 +msgid "Failed to revoke permission" +msgstr "" + +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 +msgid "Confirm to revoke permission for {0}: {1} ?" +msgstr "" + +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" msgstr "" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." msgstr "" #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" @@ -4726,203 +4927,286 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 #, fuzzy msgid "Go to tip of repository" msgstr "Prázdný repozitář" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" msgstr "" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, fuzzy, python-format +msgid "Changeset status: %s by %s" +msgstr "Změny" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 #, fuzzy msgid "Push new repository" msgstr "Prázdný repozitář" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 msgid "Merge" msgstr "" +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 +msgid "Grafted from:" +msgstr "" + #: kallithea/templates/changeset/changeset.html:123 -msgid "Grafted from:" +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" msgstr "" #: kallithea/templates/changeset/changeset.html:129 -msgid "Transplanted from:" -msgstr "" - -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 msgid "Replaced by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 msgid "Preceded by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" @@ -4930,9 +5214,12 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" @@ -4940,89 +5227,124 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 #, fuzzy msgid "No revisions" msgstr "Neznámá revize %s" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 #, fuzzy msgid "on pull request" msgstr "Změna stavu-> %s" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 msgid "No title" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "Žádné změny" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 #, fuzzy msgid "Delete comment?" msgstr "" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "Změna stavu-> %s" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +#, fuzzy +msgid "Set changeset status" +msgstr "Změny" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +#, fuzzy +msgid "No change" +msgstr "Žádné změny" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "Změna stavu-> %s" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +#, fuzzy +msgid "Close" +msgstr "(zavřeno)" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" @@ -5030,7 +5352,8 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, fuzzy, python-format msgid "%d inline" msgid_plural "%d inline" @@ -5038,7 +5361,8 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" @@ -5046,128 +5370,161 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -msgid "Use @username inside this text to notify another user." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -#, fuzzy -msgid "Set changeset status" -msgstr "Změny" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -#, fuzzy -msgid "No change" -msgstr "Žádné změny" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -#, fuzzy -msgid "Close" -msgstr "(zavřeno)" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +msgid "File before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:40 +msgid "Modified" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Neznámá revize %s" + +#: kallithea/templates/changeset/diff_block.html:52 +msgid "No file after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:55 +msgid "File after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 msgid "Show full diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 msgid "Show full side-by-side diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 msgid "Show inline comments" msgstr "" -#: kallithea/templates/changeset/diff_block.html:86 -msgid "Deleted" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:89 -msgid "Renamed" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, fuzzy, python-format msgid "%s changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 msgid "behind" msgstr "" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" @@ -5175,107 +5532,179 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "Set changeset status" +msgid "Comment on Changeset \"%s\"" +msgstr "Změny" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changesets" +msgid "Changeset on" +msgstr "Změny" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "Větev" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "Změna stavu-> %s" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "Repository has been locked" +msgid "The pull request has been closed." +msgstr "Repozitář byl uzamčen" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 msgid "We have received a request to reset the password for your account." msgstr "" -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "Změna stavu-> %s" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +msgid "at" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 #, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -msgid "The comment closed the pull request with status" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "Pull Request %s \"%s\" Closed" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "on pull request" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "Změna stavu-> %s" + +#: kallithea/templates/email_templates/registration.html:22 +msgid "Full Name" msgstr "" #: kallithea/templates/files/diff_2way.html:15 @@ -5294,83 +5723,105 @@ msgstr "" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +msgid "New file type" +msgstr "" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 #, fuzzy msgid "Commit Changes" msgstr "Žádné změny" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "" -#: kallithea/templates/files/files_browser.html:61 -msgid "Size" -msgstr "" - -#: kallithea/templates/files/files_browser.html:62 -msgid "Last Revision" -msgstr "" - #: kallithea/templates/files/files_browser.html:63 -msgid "Last Modified" +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 +msgid "Size" msgstr "" #: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 +msgid "Last Revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 +msgid "Last Modified" +msgstr "" + +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 msgid "Last Committer" msgstr "" @@ -5380,7 +5831,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "" @@ -5393,25 +5844,24 @@ msgid "Edit file" msgstr "" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" @@ -5419,76 +5869,104 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" +#: kallithea/templates/files/files_source.html:34 +#, python-format +msgid "Edit on Branch: %s" +msgstr "" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" msgstr "" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +msgid "File is too big to display." +msgstr "" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." msgstr "" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "" @@ -5497,70 +5975,80 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "" -#: kallithea/templates/journal/journal.html:21 -msgid "ATOM journal feed" -msgstr "" - #: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 +msgid "ATOM journal feed" +msgstr "" + +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "" @@ -5574,34 +6062,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "" @@ -5636,7 +6135,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "" @@ -5654,33 +6155,41 @@ msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, python-format msgid "%s Pull Request %s" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, python-format msgid "Pull request %s from %s#%s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 msgid "Summarize the changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" @@ -5688,82 +6197,113 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 #, fuzzy msgid "There are no reviewers" msgstr "Zatím nejsou žádné soubory. %s" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 msgid "on" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -msgid "Update" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +msgid "Next iteration" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 -msgid "Pull Request Reviewers" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:238 -#, fuzzy -msgid "Remove reviewer" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:250 -msgid "Type name of reviewer to add" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:258 -#, fuzzy -msgid "Potential Reviewers" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:261 -msgid "Click to add the repository owner as reviewer:" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:284 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 msgid "Save Changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -msgid "Save as New Pull Request" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 #, fuzzy msgid "Cancel Changes" msgstr "Žádné změny" +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 +msgid "Pull Request Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 +#, fuzzy +msgid "Remove reviewer" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 +msgid "Type name of reviewer to add" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 +#, fuzzy +msgid "Potential Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 +msgid "Click to add the repository owner as reviewer:" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:296 -msgid "Pull Request Content" +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 @@ -5773,7 +6313,6 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Open New Pull Request from {0}" msgid "Pull Requests from '%s'" msgstr "Změna stavu-> %s" @@ -5782,240 +6321,464 @@ msgid "Pull Requests to '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, python-format msgid "Show Pull Requests to %s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, python-format msgid "Show Pull Requests from '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 msgid "Pull Requests Created by Me" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +msgid "Pull Requests Needing My Review" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 msgid "Pull Requests I Participate In" msgstr "" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 msgid "Search in All Repositories" msgstr "" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "" -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "" +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "" + #: kallithea/templates/summary/statistics.html:390 -msgid "commits" +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" msgstr "" #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" msgstr "" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" msgstr "" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" msgstr "" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "" + #: kallithea/templates/summary/summary.html:72 -msgid "Clone URL" -msgstr "" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" msgstr "" -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "" - -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "" +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "" + #: kallithea/templates/summary/summary.html:108 -msgid "Download" +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" msgstr "" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" msgstr "" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" msgstr "" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 #, fuzzy msgid "Latest Changes" msgstr "Změna stavu-> %s" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 msgid "Quick Start" msgstr "" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" msgstr "" #~ msgid "increase diff context to %(num)s lines" @@ -6069,9 +6832,6 @@ #~ msgid "No Files" #~ msgstr "" -#~ msgid "" -#~ msgstr "" - #~ msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" #~ msgstr "" @@ -6378,9 +7138,271 @@ #~ msgid "You can only edit files with revision being a valid branch " #~ msgstr "" -#~ msgid "Changeset not found" +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "" + +#~ msgid "Commenting on line {1}." +#~ msgstr "" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" + +#~ msgid "Comment preview" +#~ msgstr "" + +#~ msgid "Preview" +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "" + +#~ msgid "New file mode" +#~ msgstr "" + +#~ msgid "File is too big to display" +#~ msgstr "" + +#~ msgid "Save as New Pull Request" #~ msgstr "" #~ msgid "Pull Requests from %s'" #~ msgstr "" +#~ msgid "Missing changesets since the previous pull request:" +#~ msgstr "" + +#~ msgid "New changesets on %s %s since the previous pull request:" +#~ msgstr "" + +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "" +#~ "This pull request is based on " +#~ "another %s revision and there is " +#~ "no simple diff." +#~ msgstr "" + +#~ msgid "No changes found on %s %s since previous version." +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "" + +#~ msgid "Pull request update created" +#~ msgstr "" + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "No changesets found for updating this pull request." +#~ msgstr "" + +#~ msgid "Git pull requests don't support updates yet." +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "" + +#~ msgid "An error occurred during creation of field" +#~ msgstr "" + +#~ msgid "Changeset not found" +#~ msgstr "" + +#~ msgid "Repository no access" +#~ msgstr "" + +#~ msgid "Repository read access" +#~ msgstr "" + +#~ msgid "Repository write access" +#~ msgstr "" + +#~ msgid "Repository admin access" +#~ msgstr "" + +#~ msgid "Repository Group no access" +#~ msgstr "" + +#~ msgid "Repository Group read access" +#~ msgstr "" + +#~ msgid "Repository Group write access" +#~ msgstr "" + +#~ msgid "Repository Group admin access" +#~ msgstr "" + +#~ msgid "Repository creation disabled" +#~ msgstr "" + +#~ msgid "Repository creation enabled" +#~ msgstr "" + +#~ msgid "Repository forking disabled" +#~ msgstr "" + +#~ msgid "Repository forking enabled" +#~ msgstr "" + +#~ msgid "Register disabled" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "" + +#~ msgid "Not Reviewed" +#~ msgstr "" + +#~ msgid "Rejected" +#~ msgstr "" + +#~ msgid "Under Review" +#~ msgstr "" + +#~ msgid "Repository group no access" +#~ msgstr "" + +#~ msgid "Repository group read access" +#~ msgstr "" + +#~ msgid "Repository group write access" +#~ msgstr "" + +#~ msgid "Repository group admin access" +#~ msgstr "" + +#~ msgid "User group no access" +#~ msgstr "" + +#~ msgid "User group read access" +#~ msgstr "" + +#~ msgid "User group write access" +#~ msgstr "" + +#~ msgid "User group admin access" +#~ msgstr "" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "" + +#~ msgid "User Group creation disabled" +#~ msgstr "" + +#~ msgid "User Group creation enabled" +#~ msgstr "" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "repositories" +#~ msgstr "" + +#~ msgid "No repositories found." +#~ msgstr "" + +#~ msgid "There are no branches yet" +#~ msgstr "" + +#~ msgid "There are no tags yet" +#~ msgstr "" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "" + +#~ msgid "Update" +#~ msgstr "" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "" + +#~ msgid "%s Tags" +#~ msgstr "" + +#~ msgid "Compare Tags" +#~ msgstr "" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/de/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/de/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/de/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -7,103 +7,118 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" -"PO-Revision-Date: 2015-09-08 10:56+0200\n" -"Last-Translator: Robert Rauch \n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" +"PO-Revision-Date: 2017-07-27 14:30+0000\n" +"Last-Translator: Holger Schramm \n" "Language-Team: German " -"\n" +"\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.4-dev\n" +"X-Generator: Weblate 2.16-dev\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "Es gibt noch keine Änderungssätze" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "Keine" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(geschlossen)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "Zeige unsichtbare Zeichen" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "Ignoriere unsichtbare Zeichen" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "Erhöhe diff-Kontext auf %(num)s Zeilen" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "Die angegebene Version existiert nicht in diesem Repository" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "" -"Eine Änderung des Status eines Änderungssatzes, der mit einem geschlossen" -" Pull-Request assoziert ist, ist nicht erlaubt" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "Änderungssätze auswählen" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "Gehe zum Tip des Repositorys" + +#: kallithea/controllers/compare.py:73 +#, fuzzy +#| msgid "Cannot compare repositories without using common ancestor" +msgid "Cannot compare repositories of different types" +msgstr "" +"Ohne einen gemeinsamen Vorfahren ist ein Vergleich der Repositories nicht" +" möglich" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "Kann leeren diff nicht anzeigen" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "Es konnte kein Vorfahre für den merge diff gefunden werden" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "Es wurden mehrere merge Vorfahren für den merge Vergleich gefunden" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" "Ohne einen gemeinsamen Vorfahren ist ein Vergleich der Repositories nicht" " möglich" -#: kallithea/controllers/error.py:71 +#: kallithea/controllers/error.py:70 msgid "No response" msgstr "Keine Rückmeldung" -#: kallithea/controllers/error.py:72 +#: kallithea/controllers/error.py:71 msgid "Unknown error" msgstr "Unbekannter Fehler" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "" "Die Anfrage konnte wegen ungültiger Syntax vom Server nicht ausgewertet " "werden." -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "Unauthorisierter Zugang zur Ressource" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "Du hast keine Rechte, um diese Seite zu betrachten" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "Die Ressource konnte nicht gefunden werden" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." @@ -111,370 +126,396 @@ "Aufgrund einer unerwarteten Gegebenheit konnte der Server diese Anfrage " "nicht vollenden." -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "Änderungen im %s Repository" - -#: kallithea/controllers/feed.py:56 -#, python-format -msgid "%s %s feed" -msgstr "%s %s Feed" - -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 msgid "Changeset was too big and was cut off..." msgstr "Der Änderungssatz war zu groß und wurde abgeschnitten..." -#: kallithea/controllers/feed.py:91 +#: kallithea/controllers/feed.py:84 #, python-format msgid "%s committed on %s" msgstr "%s committed am %s" -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 +#, python-format +msgid "%s %s feed" +msgstr "%s %s Feed" + +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "Änderungen im %s Repository" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "Hier klicken, um eine neue Datei hinzuzufügen" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "Es gibt hier noch keine Dateien. %s" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, python-format msgid "%s at %s" msgstr "%s auf %s" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "Dieses Repository ist von %s am %s gesperrt worden" -#: kallithea/controllers/files.py:317 +#: kallithea/controllers/files.py:309 #, fuzzy -#| msgid "You can only delete files with revision being a valid branch " msgid "You can only delete files with revision being a valid branch" -msgstr "Du kannst nur Dateien löschen, deren Revision ein gültiger Branch ist " - -#: kallithea/controllers/files.py:328 +msgstr "Dateien können nur gelöscht werden, deren Revision ein gültiger Branch ist" + +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "Datei %s via Kallithea gelöscht" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "Datei %s erfolgreich gelöscht" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "Während des Commits trat ein Fehler auf" -#: kallithea/controllers/files.py:377 +#: kallithea/controllers/files.py:369 #, fuzzy -#| msgid "You can only edit files with revision being a valid branch " msgid "You can only edit files with revision being a valid branch" -msgstr "Du kannst nur Dateien bearbeiten, deren Revision ein gültiger Branch ist " - -#: kallithea/controllers/files.py:391 +msgstr "Dateien können nur editiert werden, deren Revision ein gültiger Branch ist" + +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "Datei %s via Kallithea editiert" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "Keine Änderungen" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "Der Commit zu %s war erfolgreich" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "Datei via Kallithea hinzugefügt" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "Kein Inhalt" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "Kein Dateiname" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "Der Ort muss ein relativer Pfad sein und darf nicht .. enthalten" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "Downloads gesperrt" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "Unbekannte Revision %s" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "Leeres Repository" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "Unbekannter Archivtyp" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "Änderungssätze" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "Entwicklungszweige" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "Tags" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "Während des Forkens des Repositorys trat ein Fehler auf: %s" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "Gruppen" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "Repositories" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "Zweig" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "Geschlossene Branches" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "Marke" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "Lesezeichen" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "Öffentliches Logbuch" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "Logbuch" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "Falsches Captcha" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "Sie haben sich erfolgreich bei Kallithea registriert" - -#: kallithea/controllers/login.py:197 -#, fuzzy -#| msgid "Your password reset link was sent" +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "Sie haben sich erfolgreich bei %s registriert" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" -msgstr "Ihr Passwort Zurücksetzen link wurde versendet" - -#: kallithea/controllers/login.py:246 -#, fuzzy -#| msgid "Password reset link" +msgstr "Ihr Link um das Passwort zurückzusetzen wurde versendet" + +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" -msgstr "Link zum Zurücksetzen des Passworts" - -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +msgstr "Ungültiges Token zum Zurücksetzen des Passworts." + +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "Erfolgreich Kennwort geändert" -#: kallithea/controllers/pullrequests.py:124 +#: kallithea/controllers/pullrequests.py:73 +#, python-format +msgid "Invalid reviewer \"%s\" specified" +msgstr "Ungültigen Begutachter \"%s\" angegeben" + +#: kallithea/controllers/pullrequests.py:135 #, python-format msgid "%s (closed)" msgstr "%s (geschlossen)" -#: kallithea/controllers/pullrequests.py:152 +#: kallithea/controllers/pullrequests.py:162 #: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 msgid "Changeset" msgstr "Änderungssatz" -#: kallithea/controllers/pullrequests.py:173 +#: kallithea/controllers/pullrequests.py:183 msgid "Special" msgstr "Spezial" -#: kallithea/controllers/pullrequests.py:174 +#: kallithea/controllers/pullrequests.py:184 msgid "Peer branches" -msgstr "" - -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 +msgstr "Branches anderer" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 msgid "Bookmarks" msgstr "Lesezeichen" -#: kallithea/controllers/pullrequests.py:310 +#: kallithea/controllers/pullrequests.py:326 #, python-format msgid "Error creating pull request: %s" msgstr "Fehler beim Erstellen des Pull-Requests: %s" -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "Keine Beschreibung" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "Es wurde erfolgreich ein neuer Pullrequest eröffnet" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 -#, python-format -msgid "Invalid reviewer \"%s\" specified" -msgstr "" - -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "Während des Erstellens des Pull Requests trat ein Fehler auf" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "Fehlende Changesets seit letztem Pull Request:" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "Neue Changesets in %s %s seit dem letzten Pull Request:" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" -"Dieser Pull Request basiert auf einer anderen %s Revision. Daher ist kein" -" Simple Diff verfügbar." - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "Keine Änderungen seit der letzten Version gefunden in %s %s." - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "Geschlossen, ersetzt durch %s." - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "Es wurde erfolgreich ein neuer Pullrequest eröffnet" + +#: kallithea/controllers/pullrequests.py:381 +#, fuzzy +#| msgid "Pull request update created" +msgid "New pull request iteration created" msgstr "Pull Request Update erstellt" -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "Es wurden inzwischen folgende Begutachter hinzugefügt: %s" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "Es wurden inzwischen folgende Begutachter entfernt: %s" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "Keine Beschreibung" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "Pull Request aktualisiert" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "Erfolgreich Pull-Request gelöscht" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "Die Revision %s konnte in %s nicht gefunden werden" + +#: kallithea/controllers/pullrequests.py:518 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "Keine Changesets gefunden, um den Pull Request zu aktualisieren." + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "Dieser Pull Request wurde bereits in %s integriert." -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" "Dieser Pull Request wurde geschlossen und kann daher nicht aktualisiert " "werden." -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "Dieser Pull Request kann mit Änderungen in %s aktualisiert werden:" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." +#: kallithea/controllers/pullrequests.py:552 +#, fuzzy, python-format +#| msgid "The following changes are available on %s:" +msgid "The following additional changes are available on %s:" +msgstr "Die folgenden Änderungen sind verfügbar unter %s:" + +#: kallithea/controllers/pullrequests.py:556 +#, fuzzy +#| msgid "No changesets found for updating this pull request." +msgid "No additional changesets found for iterating on this pull request." msgstr "Keine Changesets gefunden, um den Pull Request zu aktualisieren." -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "Hinweis: Branch %s hat einen anderen Head: %s." -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." +#: kallithea/controllers/pullrequests.py:571 +#, fuzzy +#| msgid "Git pull requests don't support updates yet." +msgid "Git pull requests don't support iterating yet." msgstr "Git Pull Request unterstützen bisher keine Updates." -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:573 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "Keine Changesets gefunden, um den Pull Request zu aktualisieren." + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" +"Der diff kann nicht angezeigt werden. Die Pull Request Revisionen konnten " +"nicht gefunden werden." + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" -msgstr "" - -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "Schließen." - -#: kallithea/controllers/search.py:135 +msgstr "Keine Berechtigung zum Ändern des Pull Request Status" + +#: kallithea/controllers/pullrequests.py:676 +#, python-format +msgid "Successfully deleted pull request %s" +msgstr "Pull-Request %s erfolgreich gelöscht" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "Ungültige Suchanfrage. Versuchen sie es in Anführungzeichen zu setzen." -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "Es gibt keinen durchsuchbaren Index. Bitte den Whoosh Indizierer ausführen" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "Während der Suchoperation trat ein Fehler auf." -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "Es stehen noch keine Daten zur Verfügung" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "Statistiken sind deaktiviert für dieses Repository" @@ -486,151 +527,155 @@ msgid "error occurred during update of auth settings" msgstr "Fehler bei der Änderung der Anmeldeeinstellungen aufgetreten" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "Standardeinstellungen erfolgreich geupdated" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "Ein Fehler trat beim updaten der Standardeinstellungen auf" +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "Immer" + #: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 -msgid "Forever" -msgstr "Immer" +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" +msgstr "5 Minuten" #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" -msgstr "5 Minuten" - -#: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 msgid "1 hour" msgstr "1 Stunde" -#: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 +#: kallithea/controllers/admin/gists.py:61 +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 msgid "1 day" msgstr "1 Tag" -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/gists.py:62 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "1 Monat" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "Lebenszeit" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "Ein fehler trat auf bei der Erstellung des gist" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "gist %s gelöscht" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" msgstr "Ungeändert" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "Erfolgreich Kerninhalt aktualisiert" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "Erfolgreich Kerndaten aktualisiert" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "Fehler beim Aktualisieren der Kerndaten %s" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" "Sie können diesen Benutzer nicht editieren, da er von entscheidender " "Bedeutung für die ganze Applikation ist" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "Ihr Account wurde erfolgreich aktualisiert" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "Fehler beim Aktualisieren der Benutzer %s" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "Fehler bei der Änderung des Kennworts" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "Die EMail Addresse %s wurde zum Benutzer hinzugefügt" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "Währen der Speicherung der EMail Addresse trat ein Fehler auf" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "Die EMail Addresse wurde vom Benutzer entfernt" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "API Key wurde erfolgreich erstellt" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "API-Schlüssel erfolgreich zurückgesetzt" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "API-Schlüssel erfolgreich gelöscht" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "Lesen" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" -msgstr "Schreiben" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "Lesen" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "Schreiben" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -638,281 +683,298 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "Admin" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "Deaktiviert" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "Erlaubt mit manueller Kontoaktivierung" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "Erlaubt mit automatischer Kontoaktivierung" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "Manuelle Aktivierung externen Kontos" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "Automatische Aktivierung externen Kontos" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "Deaktiviert" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "Erlaubt mit manueller Kontoaktivierung" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "Erlaubt mit automatischer Kontoaktivierung" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "Manuelle Aktivierung externen Kontos" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "Automatische Aktivierung externen Kontos" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "Aktiviert" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "Globale Berechtigungen erfolgreich geändert" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "Fehler bei der Änderung der globalen Berechtigungen" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "Fehler bei der Erstellung der Repositoriumsgruppe %s" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "Repositoriumsgruppe %s erstellt" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "Repositoriumsgruppe %s aktualisiert" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "Fehler bei der Aktualisierung der Repositoriumsgruppe %s" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "Die Gruppe enthält %s Repositorys und kann nicht gelöscht werden" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "Diese Gruppe enthält %s Untergruppen und kann nicht gelöscht werden" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "Repositoriumsgruppe %s entfernt" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "Fehler beim Löschen der Repositoriumsgruppe %s" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "Als Administrator kann man sich keine Berechtigungen entziehen" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "Berechtigungen der Repositoriumsgruppe aktualisiert" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "Fehler beim Entzug der Berechtigungen" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "Fehler beim Erstellen des Repositoriums %s" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "Repositorium %s von %s erstellt" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "Aufgespaltenes Repositorium %s zu %s" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "Repositorium erzeugt %s" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "Repository %s wurde erfolgreich aktualisiert" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "Fehler bei der Aktualisierung des Repositoriums %s" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "%s Spaltung abgetrennt" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "%s Spaltung gelöscht" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "Repositorium %s gelöscht" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "%s konnte nicht gelöscht werden, da es noch Forks besitzt" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "Beim Löschen von %s trat ein Fehler auf" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "Repositoriumsberechtigungen aktualisiert" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "Feldvalidierung fehlgeschlagen: %s" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during creation of field" +msgid "An error occurred during creation of field: %r" msgstr "Fehler während der Erzeugung des Feldes" -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "Fehler beim Entfernen des Feldes" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "-- Keine Abspaltung --" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "Sichtbarkeit des Repositorys im Öffentlichen Logbuch aktualisiert" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "" "Es trat ein Fehler während der Aktualisierung der Sicherbarkeit dieses " "Repositorys im Öffentlichen Logbuch auf" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "Nichts" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "Markiere Repository %s als Abzweig von Repository %s" -#: kallithea/controllers/admin/repos.py:521 +#: kallithea/controllers/admin/repos.py:480 msgid "An error occurred during this operation" msgstr "Während dieser operation trat ein Fehler auf" -#: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 msgid "Repository has been locked" msgstr "Repository wurde gesperrt" -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 msgid "Repository has been unlocked" msgstr "Repository nicht mehr gesperrt" -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 +#: kallithea/controllers/admin/repos.py:502 +#: kallithea/controllers/admin/repos.py:521 msgid "An error occurred during unlocking" msgstr "Fehler beim Entsperren" -#: kallithea/controllers/admin/repos.py:582 +#: kallithea/controllers/admin/repos.py:533 msgid "Cache invalidation successful" msgstr "Cache Entfernung war erfolgreich" -#: kallithea/controllers/admin/repos.py:586 +#: kallithea/controllers/admin/repos.py:537 msgid "An error occurred during cache invalidation" msgstr "Währen der Cache Invalidierung trat ein Fehler auf" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "Von entferntem Ort übertragen" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "" "Es trat ein Fehler auf während das Repository von einem Entfernten " "Speicherort übertragen wurde" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "Während des löschens der Repository Statistiken trat ein Fehler auf" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "VCS-Einstellungen aktualisiert" -#: kallithea/controllers/admin/settings.py:174 +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 msgid "" "Unable to activate hgsubversion support. The \"hgsubversion\" library is " "missing" @@ -920,354 +982,357 @@ "hgsubversion-Unterstützung konnte nicht aktiviert werden. Die " "\"hgsubversion\"-Bibliothek fehlt" -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 msgid "Error occurred while updating application settings" msgstr "" "Ein Fehler ist während der Aktualisierung der Applikationseinstellungen " "aufgetreten" -#: kallithea/controllers/admin/settings.py:211 +#: kallithea/controllers/admin/settings.py:174 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "" "Die Repositories wurden erfolgreich überprüft. Hinzugefügt: %s. Entfernt:" " %s." -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format #| msgid "Invalidate Repository Cache" msgid "Invalidated %s repositories" msgstr "Ungültiger Repositorycache" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "Anwendungseinstellungen aktualisiert" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "Visualisierungseinstellungen aktualisiert" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "" "Es ist ein Fehler während der Aktualisierung der Layouteinstellung " "aufgetreten" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "Bitte gebe eine E-Mailadresse an" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "Task zum Versenden von E-Mails erstellt" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "Neuer Hook hinzugefügt" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "Die Hooks wurden aktutalisiert" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "Während der Erzeugung des Hooks ist ein Fehler aufgetreten" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "Whoosh Reindizierungs Aufgabe wurde zur Ausführung geplant" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "Nutzergruppe %s erstellt" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "Es ist ein Fehler während der Erstellung der Nutzergruppe %s aufgetreten" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "Aktualisierte Nutzergruppe %s" -#: kallithea/controllers/admin/user_groups.py:224 +#: kallithea/controllers/admin/user_groups.py:208 #, python-format msgid "Error occurred during update of user group %s" msgstr "Während des Updates der Benutzergruppe %s ist ein Fehler aufgetreten" -#: kallithea/controllers/admin/user_groups.py:242 +#: kallithea/controllers/admin/user_groups.py:219 msgid "Successfully deleted user group" msgstr "Die Nutzergruppe wurde erfolgreich entfernt" -#: kallithea/controllers/admin/user_groups.py:247 +#: kallithea/controllers/admin/user_groups.py:224 msgid "An error occurred during deletion of user group" msgstr "Während des Löschens der Benutzergruppe ist ein Fehler aufgetreten" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "Zielgruppe kann nicht die gleiche Gruppe sein" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "Berechtigungen der Benutzergruppe wurden aktualisiert" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "Berechtigungen wurden aktualisiert" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "Es ist ein Fehler während des Speicherns der Berechtigungen aufgetreten" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "Nutzer %s erstellt" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "Während des Erstellens des Benutzers %s ist ein Fehler aufgetreten" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "Der Benutzer wurde erfolgreich aktualisiert" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "Der Nutzer wurde erfolgreich gelöscht" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "Während der Löschen des Benutzers trat ein Fehler auf" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "Der Standard-Benutzer kann nicht bearbeitet werden" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "Die IP-Adresse %s wurde zur Nutzerwhitelist hinzugefügt" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "Während des Speicherns der IP-Adresse ist ein Fehler aufgetreten" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "IP-Adresse wurde von der Nutzerwhitelist entfernt" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "IP-Adresse %s ist nicht erlaubt" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "Ungültiger API Key" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "Sie müssen ein Registrierter Nutzer sein um diese Aktion durchzuführen" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "Sie müssen sich anmelden um diese Seite aufzurufen" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "Ungültiger API Key" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "Es wurde ein CSRF Leck entdeckt. Alle Formular Token sind abgelaufen" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "Das Repository konnte nicht im Filesystem gefunden werden" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, fuzzy, python-format #| msgid "Changeset not found" msgid "Changeset for %s %s not found in %s" msgstr "Änderungssatz nicht gefunden" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "Binäre Datei" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" "Der Änderungssatz war zu groß und wurde abgeschnitten, benutzen sie das " "Diff Menü um die Unterschiede anzuzeigen" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "Keine Änderungen erkannt" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "Branch %s gelöscht" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "Tag %s erstellt" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format #| msgid "Changeset not found" msgid "Changeset %s not found" msgstr "Änderungssatz nicht gefunden" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Zeige alle Kombinierten Änderungensätze %s->%s" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 msgid "Compare view" msgstr "Vergleichsansicht" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "und" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "%s mehr" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "revisionen" -#: kallithea/lib/helpers.py:723 -#, fuzzy, python-format +#: kallithea/lib/helpers.py:713 +#, python-format msgid "Fork name %s" msgstr "Fork Name %s" -#: kallithea/lib/helpers.py:743 -#, fuzzy, python-format +#: kallithea/lib/helpers.py:734 +#, python-format msgid "Pull request %s" -msgstr "Pull Request #%s" - -#: kallithea/lib/helpers.py:753 +msgstr "Pull Request %s" + +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "[gelöscht] Repository" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "[erstellt] Repository" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "[erstellt] Repository als Fork" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "[forked] Repository" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "[aktualisiert] Repository" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "Archiv von Repository [heruntergeladen]" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "Repository [gelöscht]" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "Benutzer [erstellt]" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "Benutzer [akutalisiert]" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "Benutzergruppe [erstellt]" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "Benutzergruppe [aktualisiert]" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "Revision [kommentiert] in Repository" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "Pull Request [kommentiert] für" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "Pull Request [geschlossen] für" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "[Pushed] in" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "[via Kallithea] in Repository [committed]" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "[Pulled von Remote] in Repository" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "[Pulled] von" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "[Following gestartet] für Repository" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "[Following gestoppt] für Repository" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr " und %s weitere" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "Keine Dateien" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "neue Datei" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "mod" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "entf" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "umbenennen" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "chmod" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1278,760 +1343,403 @@ "es im Dateisystem erstellt oder umbenannt. Bitte starten sie die " "Applikation erneut um die Repositories neu zu Indizieren" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d Jahr" msgstr[1] "%d Jahre" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d Monat" msgstr[1] "%d Monate" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d Tag" msgstr[1] "%d Tage" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d Stunde" msgstr[1] "%d Stunden" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d Minute" msgstr[1] "%d Minuten" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d Sekunde" msgstr[1] "%d Sekunden" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "in %s" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "vor %s" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "in %s und %s" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "%s und %s her" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "jetzt gerade" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "Kein Zugriff auf Repository" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "Lesender Zugriff auf Repository" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "Schreibdender Zugriff auf Repository" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "Administrativer Zugang zum Repository" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "Repository Gruppe hat Keinen Zugriff" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "Repository Gruppe hat lesenden Zugriff" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "Repository Gruppe hat schreibenden Zugriff" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "Repository Gruppe hat Administrativen Zugriff" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 +#: kallithea/model/comment.py:68 +#, python-format +msgid "on line %s" +msgstr "in Zeile %s" + +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 +msgid "[Mention]" +msgstr "[Mention]" + +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "höchste Ebene" + +#: kallithea/model/db.py:1715 msgid "Kallithea Administrator" msgstr "Kallithea Administrator" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "Erstellung eines Repositorys deaktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "Erstellung eines Repositorys aktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "Forking eines Repositorys deaktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "Forking eines Repositorys aktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "Registrierung deaktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "Registrierung neuer Benutzer in Kallithea mit manueller Aktivierung" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "Registrierung neuer Benutzer in Kallithea mit Automatischer Aktivierung" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "Nicht Begutachtet" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "Akzeptiert" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "Abgelehnt" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "In Begutachtung" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "höchste Ebene" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "Kein Zugriff für Repositorygruppe" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "Lesezugriff für Repositorygruppe" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "Schreibzugriff für Repositorygruppe" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "Administrativer Zugriff für Repositorygruppe" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "Kein Zugriff für Benutzergruppe" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "Lesezugriff für Benutzergruppe" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "Nutzergruppe Schreibzugriff" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "Administrativer Zugriff für Benutzergruppe" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "Erstellung von Repositorygruppen deaktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "Erstellung von Repositorygruppen aktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "Erstellung von Benutzergruppen deaktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "Erstellung von Benutzergruppen aktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "Registrierung deaktiviert" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "Benutzerregistrierung mit manueller Kontoaktivierung" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "Benutzerregistrierung mit automatische Kontoaktivierung" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 +#: kallithea/model/db.py:1717 +msgid "Default user has no access to new repositories" +msgstr "Der Standard-Benutzer hat keinen Zugriff auf neue Repositories" + +#: kallithea/model/db.py:1718 +msgid "Default user has read access to new repositories" +msgstr "Der Standard-Benutzer hat Leserechte auf neuen Repositories" + +#: kallithea/model/db.py:1719 +msgid "Default user has write access to new repositories" +msgstr "Der Standard-Benutzer hat Schreibrechte auf neuen Repositories" + +#: kallithea/model/db.py:1720 +msgid "Default user has admin access to new repositories" +msgstr "Der Standard-Benutzer hat Admin-Rechte auf neuen Repositories" + +#: kallithea/model/db.py:1722 +msgid "Default user has no access to new repository groups" +msgstr "Der Standard-Benutzer hat keinen Zugriff auf neue Repository-Gruppen" + +#: kallithea/model/db.py:1723 +msgid "Default user has read access to new repository groups" +msgstr "Der Standard-Benutzer hat Leserechte auf neuen Repository-Gruppen" + +#: kallithea/model/db.py:1724 +msgid "Default user has write access to new repository groups" +msgstr "Der Standard-Benutzer Schreibrechte auf neuen Repository-Gruppen" + +#: kallithea/model/db.py:1725 +msgid "Default user has admin access to new repository groups" +msgstr "Der Standard-Benutzer Admin-Rechte auf neuen Repository-Gruppen" + +#: kallithea/model/db.py:1727 +msgid "Default user has no access to new user groups" +msgstr "Der Standard-Benutzer hat keinen Zugriff auf neue Benutzer-Gruppen" + +#: kallithea/model/db.py:1728 +msgid "Default user has read access to new user groups" +msgstr "Der Standard-Benutzer hat Leserechte auf neuen Benutzer-Gruppen" + +#: kallithea/model/db.py:1729 +msgid "Default user has write access to new user groups" +msgstr "Der Standard-Benutzer hat Schreibrechte auf neuen Benutzer-Gruppen" + +#: kallithea/model/db.py:1730 +msgid "Default user has admin access to new user groups" +msgstr "Der Standard-Benutzer hat Admin-Rechte auf neuen Benutzer-Gruppen" + +#: kallithea/model/db.py:1732 +msgid "Only admins can create repository groups" +msgstr "Nur Admins können Repository-Gruppen erstellen" + +#: kallithea/model/db.py:1733 +msgid "Non-admins can create repository groups" +msgstr "Nicht-Admins können Repository-Gruppen erstellen" + +#: kallithea/model/db.py:1735 +msgid "Only admins can create user groups" +msgstr "Nur Admins können Benutzer-Gruppen erstellen" + +#: kallithea/model/db.py:1736 +msgid "Non-admins can create user groups" +msgstr "Nicht-Admins können Benutzer-Gruppen erstellen" + +#: kallithea/model/db.py:1738 +msgid "Only admins can create top level repositories" +msgstr "Nur Admins können Repositories auf oberster Ebene erstellen" + +#: kallithea/model/db.py:1739 +msgid "Non-admins can create top level repositories" +msgstr "Nicht-Admins können Repositories oberster Ebene erstellen" + +#: kallithea/model/db.py:1741 msgid "Repository creation enabled with write permission to a repository group" msgstr "" "Erstellung von Repositories mit Schreibzugriff für Repositorygruppe " "aktiviert" -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 +#: kallithea/model/db.py:1742 msgid "Repository creation disabled with write permission to a repository group" msgstr "" "Erstellung von Repositories mit Schreibzugriff für Repositorygruppe " "deaktiviert" -#: kallithea/model/comment.py:72 -#, python-format -msgid "on line %s" -msgstr "in Zeile %s" - -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 -msgid "[Mention]" -msgstr "[Mention]" - -#: kallithea/model/db.py:1668 -msgid "Default user has no access to new repositories" -msgstr "Der Standard-Benutzer hat keinen Zugriff auf neue Repositories" - -#: kallithea/model/db.py:1669 -msgid "Default user has read access to new repositories" -msgstr "Der Standard-Benutzer hat Leserechte auf neuen Repositories" - -#: kallithea/model/db.py:1670 -msgid "Default user has write access to new repositories" -msgstr "Der Standard-Benutzer hat Schreibrechte auf neuen Repositories" - -#: kallithea/model/db.py:1671 -msgid "Default user has admin access to new repositories" -msgstr "Der Standard-Benutzer hat Admin-Rechte auf neuen Repositories" - -#: kallithea/model/db.py:1673 -msgid "Default user has no access to new repository groups" -msgstr "Der Standard-Benutzer hat keinen Zugriff auf neue Repository-Gruppen" - -#: kallithea/model/db.py:1674 -msgid "Default user has read access to new repository groups" -msgstr "Der Standard-Benutzer hat Leserechte auf neuen Repository-Gruppen" - -#: kallithea/model/db.py:1675 -msgid "Default user has write access to new repository groups" -msgstr "Der Standard-Benutzer Schreibrechte auf neuen Repository-Gruppen" - -#: kallithea/model/db.py:1676 -msgid "Default user has admin access to new repository groups" -msgstr "Der Standard-Benutzer Admin-Rechte auf neuen Repository-Gruppen" - -#: kallithea/model/db.py:1678 -msgid "Default user has no access to new user groups" -msgstr "Der Standard-Benutzer hat keinen Zugriff auf neue Benutzer-Gruppen" - -#: kallithea/model/db.py:1679 -msgid "Default user has read access to new user groups" -msgstr "Der Standard-Benutzer hat Leserechte auf neuen Benutzer-Gruppen" - -#: kallithea/model/db.py:1680 -msgid "Default user has write access to new user groups" -msgstr "Der Standard-Benutzer hat Schreibrechte auf neuen Benutzer-Gruppen" - -#: kallithea/model/db.py:1681 -msgid "Default user has admin access to new user groups" -msgstr "Der Standard-Benutzer hat Admin-Rechte auf neuen Benutzer-Gruppen" - -#: kallithea/model/db.py:1683 -msgid "Only admins can create repository groups" -msgstr "Nur Admins können Repository-Gruppen erstellen" - -#: kallithea/model/db.py:1684 -#, fuzzy -msgid "Non-admins can create repository groups" -msgstr "Nicht-Admins können Repository-Gruppen erstellen" - -#: kallithea/model/db.py:1686 -msgid "Only admins can create user groups" -msgstr "Nur Admins können Benutzer-Gruppen erstellen" - -#: kallithea/model/db.py:1687 -msgid "Non-admins can create user groups" -msgstr "Nicht-Admins können Benutzer-Gruppen erstellen" - -#: kallithea/model/db.py:1689 -#, fuzzy -msgid "Only admins can create top level repositories" -msgstr "Repositories oberster Ebene" - -#: kallithea/model/db.py:1690 -#, fuzzy -msgid "Non-admins can create top level repositories" -msgstr "Repositories oberster Ebene" - -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1744 msgid "Only admins can fork repositories" msgstr "Nur Admins können Repositories forken" -#: kallithea/model/db.py:1696 -#, fuzzy -#| msgid "Non-admins can can fork repositories" +#: kallithea/model/db.py:1745 msgid "Non-admins can fork repositories" -msgstr "Nicht-Admins können Repositories forken" - -#: kallithea/model/db.py:1699 -#, fuzzy +msgstr "Nicht-Admins können Repositorys forken" + +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "Registrierung deaktiviert" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "Benutzerregistrierung mit manueller Kontoaktivierung" -#: kallithea/model/db.py:1700 -#, fuzzy +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" -msgstr "Benutzerregistrierung mit automatische Kontoaktivierung" - -#: kallithea/model/db.py:2238 -#, fuzzy +msgstr "Benutzerregistrierung mit automatischer Kontoaktivierung" + +#: kallithea/model/db.py:2276 msgid "Not reviewed" msgstr "Nicht Begutachtet" -#: kallithea/model/db.py:2241 -#, fuzzy +#: kallithea/model/db.py:2277 msgid "Under review" msgstr "In Begutachtung" -#: kallithea/model/forms.py:57 +#: kallithea/model/db.py:2278 +#, fuzzy +#| msgid "Approved" +msgid "Not approved" +msgstr "Akzeptiert" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "Akzeptiert" + +#: kallithea/model/forms.py:58 msgid "Please enter a login" msgstr "Bitte einen Benutzernamen eingeben" -#: kallithea/model/forms.py:58 +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "Bitte einen Wert mit mindestens %(min)i Zeichen eingeben" -#: kallithea/model/forms.py:66 +#: kallithea/model/forms.py:67 msgid "Please enter a password" msgstr "Bitte ein Passwort eingeben" -#: kallithea/model/forms.py:67 +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "Bitte mindestens %(min)i Zeichen eingeben" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "Name darf nicht nur Ziffern enthalten" -#: kallithea/model/notification.py:255 +#: kallithea/model/notification.py:240 #, fuzzy, python-format msgid "%(user)s commented on changeset %(age)s" msgstr "%(user)s hat am %(when)s ein Changeset kommentiert" -#: kallithea/model/notification.py:256 +#: kallithea/model/notification.py:241 #, fuzzy, python-format msgid "%(user)s sent message %(age)s" msgstr "%(user)s hat am %(when)s eine Nachricht gesendet" -#: kallithea/model/notification.py:257 +#: kallithea/model/notification.py:242 #, fuzzy, python-format msgid "%(user)s mentioned you %(age)s" msgstr "%(user)s hat Sie am %(when)s erwähnt" -#: kallithea/model/notification.py:258 +#: kallithea/model/notification.py:243 #, fuzzy, python-format msgid "%(user)s registered in Kallithea %(age)s" msgstr "%(user)s hat sich am %(when)s bei Kallithea registriert" -#: kallithea/model/notification.py:259 +#: kallithea/model/notification.py:244 #, fuzzy, python-format msgid "%(user)s opened new pull request %(age)s" msgstr "%(user)s hat am %(when)s einen neuen Pull Request eröffnet" -#: kallithea/model/notification.py:260 +#: kallithea/model/notification.py:245 #, fuzzy, python-format msgid "%(user)s commented on pull request %(age)s" msgstr "%(user)s hat am %(when)s einen Pull Request kommentiert" -#: kallithea/model/notification.py:267 +#: kallithea/model/notification.py:252 #, python-format msgid "%(user)s commented on changeset at %(when)s" msgstr "%(user)s hat am %(when)s ein Changeset kommentiert" -#: kallithea/model/notification.py:268 +#: kallithea/model/notification.py:253 #, python-format msgid "%(user)s sent message at %(when)s" msgstr "%(user)s hat am %(when)s eine Nachricht gesendet" -#: kallithea/model/notification.py:269 +#: kallithea/model/notification.py:254 #, python-format msgid "%(user)s mentioned you at %(when)s" msgstr "%(user)s hat Sie am %(when)s erwähnt" -#: kallithea/model/notification.py:270 +#: kallithea/model/notification.py:255 #, python-format msgid "%(user)s registered in Kallithea at %(when)s" msgstr "%(user)s hat sich am %(when)s bei Kallithea registriert" -#: kallithea/model/notification.py:271 +#: kallithea/model/notification.py:256 #, python-format msgid "%(user)s opened new pull request at %(when)s" msgstr "%(user)s hat am %(when)s einen neuen Pull Request eröffnet" -#: kallithea/model/notification.py:272 +#: kallithea/model/notification.py:257 #, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "%(user)s hat am %(when)s einen Pull Request kommentiert" -#: kallithea/model/notification.py:303 +#: kallithea/model/notification.py:288 #, fuzzy, python-format -#| msgid "" "[Comment from %(comment_username)s] %(repo_name)s changeset -#| %(short_id)s " "on %(branch)s" -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#| msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" msgstr "" "Kommentar für %(repo_name)s Changeset %(short_id)s in %(branch)s erstellt" " von %(comment_username)s" -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" msgstr "Neuer Benutzer %(new_username)s registriert" -#: kallithea/model/notification.py:308 -#, fuzzy, python-format -#| msgid "" "[Added by %(pr_username)s] %(repo_name)s pull request -#| %(pr_nice_id)s from" " %(ref)s" -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" -"Review Request für %(repo_name)s Pull Request #%(pr_id)s von %(ref)s " -"erstellt von %(pr_username)s" - -#: kallithea/model/notification.py:309 -#, fuzzy, python-format -#| msgid "" "[Comment from %(comment_username)s] %(repo_name)s pull request " -#| "%(pr_nice_id)s from %(ref)s" -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" -"Kommentar von %(comment_username)s für %(repo_name)s Pull Request " -"#%(pr_id)s von %(ref)s" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "Schließen" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, fuzzy, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "%(user)s möchte ein Review des Pull Request #%(pr_id)s: %(pr_title)s" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Cannot create empty pull request" +msgstr "Fehler beim Erstellen des Pull-Requests: %s" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +msgid "You are not authorized to create the pull request" +msgstr "" + +#: kallithea/model/pull_request.py:341 +#, fuzzy +#| msgid "Missing changesets since the previous pull request:" +msgid "Missing changesets since the previous iteration:" +msgstr "Fehlende Changesets seit letztem Pull Request:" + +#: kallithea/model/pull_request.py:348 +#, fuzzy, python-format +#| msgid "New changesets on %s %s since the previous pull request:" +msgid "New changesets on %s %s since the previous iteration:" +msgstr "Neue Changesets in %s %s seit dem letzten Pull Request:" + +#: kallithea/model/pull_request.py:355 +#, fuzzy +#| msgid "Ancestor didn't change - show diff since previous version:" +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "Vorgänger unverändert - zeige Diff zu lezter Version:" + +#: kallithea/model/pull_request.py:362 +#, fuzzy, python-format +#| msgid "" " +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" +"Dieser Pull Request basiert auf einer anderen %s Revision. Daher ist kein" +" Simple Diff verfügbar." + +#: kallithea/model/pull_request.py:364 +#, fuzzy, python-format +#| msgid "No changes found on %s %s since previous version." +msgid "No changes found on %s %s since previous iteration." +msgstr "Keine Änderungen seit der letzten Version gefunden in %s %s." + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "Letzter Tip" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "Neue Benutzerregistrierung" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 #, fuzzy msgid "You can't remove this user since it is crucial for the entire application" msgstr "" "Sie können diesen Benutzer nicht löschen, da er von entscheidender " "Bedeutung für die gesamte Applikation ist" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " @@ -2041,7 +1749,7 @@ "nicht entfernt werden. Entweder muss der Besitzer geändert oder das " "Repository entfernt werden: %s" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" @@ -2051,7 +1759,7 @@ "kann daher nicht entfernt werden. Entweder muss der Besitzer geändert " "oder die Repositorygruppen müssen entfernt werden: %s" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " @@ -2061,38 +1769,37 @@ "nicht entfernt werden. Entweder muss der Besitzer geändert oder die " "Benutzergruppen müssen gelöscht werden: %s" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "Link zum Zurücksetzen des Passworts" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 #, fuzzy -#| msgid "Password reset link" msgid "Password reset notification" msgstr "Link zum Zurücksetzen des Passworts" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "Eine leere Liste ist kein gültiger Wert" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "Benutezrname \"%(username)s\" existiert bereits" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, fuzzy, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "Benutzername \"%(username)s\" ist ungültig" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 #, fuzzy msgid "" "Username may only contain alphanumeric characters underscores, periods or" @@ -2102,25 +1809,25 @@ "oder Bindestriche enthalten und muss mit einem alphanumerischen Zeichen " "oder einem Unterstrich beginnen" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "Die Eingabe ist nicht gültig" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "Benutzername \"%(username)s\" ist ungültig" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "Ungültiger Benutzergruppenname" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "Benutzergruppe \"%(usergroup)s\" existiert bereits" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" @@ -2129,111 +1836,110 @@ "Unterstriche, Punkte oder Bindestriche enthalten und muss mit einem " "alphanumerischen Zeichen beginnen" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "Kann diese Gruppe nicht als vorgesetzt setzen" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "Gruppe \"%(group_name)s\" existiert bereits" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "Es gibt bereits ein Repository mit \"%(group_name)s\"" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "Üngültige(nicht ASCII) Zeichen im Passwort" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "Ungültiges altes Passwort" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "Die Passwörter stimmen nicht überein" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 #, fuzzy msgid "Invalid username or password" msgstr "Ungültiges Passwort" -#: kallithea/model/validators.py:331 +#: kallithea/model/validators.py:310 msgid "Token mismatch" msgstr "Schlüssel stimmt nicht überein" -#: kallithea/model/validators.py:345 -#, fuzzy, python-format +#: kallithea/model/validators.py:326 +#, python-format msgid "Repository name %(repo)s is not allowed" -msgstr "Repository Name \"%(repo)s\" ist verboten" - -#: kallithea/model/validators.py:347 +msgstr "Repository Name \"%(repo)s\" ist nicht erlaubt" + +#: kallithea/model/validators.py:328 #, python-format msgid "Repository named %(repo)s already exists" msgstr "Es gibt bereits ein Repository mit \"%(repo)s\"" -#: kallithea/model/validators.py:348 +#: kallithea/model/validators.py:329 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "" "Es gibt bereits ein Repository mit \"%(repo)s\" in der Gruppe " "\"%(group)s\"" -#: kallithea/model/validators.py:350 +#: kallithea/model/validators.py:331 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "Eine Repositorygruppe mit dem Namen \"%(repo)s\" existiert bereits" -#: kallithea/model/validators.py:465 -#, fuzzy +#: kallithea/model/validators.py:449 msgid "Invalid repository URL" -msgstr "privates Repository" - -#: kallithea/model/validators.py:466 +msgstr "Ungültige Repository-URL" + +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "Forke um den selben typ wie der Vorgesetze zu haben" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "" "Du hast nicht die erforderlichen Berechtigungen, um in dieser Gruppe ein " "Repository zu erzeugen" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "keine Berechtigung, um ein Repository auf höchster Ebene anzulegen" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "Sie haben keine Berechtigung, um an diesem Ort ein Repository anzulegen" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "Dieser Benutzername oder Benutzergruppenname ist nicht gültig" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "Dies ist ein Ungültiger Pfad" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 #, fuzzy msgid "This email address is already in use" msgstr "Diese E-Mailaddresse ist bereits in Benutzung" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, fuzzy, python-format msgid "Email address \"%(email)s\" not found" msgstr "E-MailAddresse \"%(email)s\" existiert nicht." -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" @@ -2241,290 +1947,275 @@ "Das LDAP-Login-Attribut des CN muss angeben werden - Es ist der Name des " "Attributes äquivalent zu \"Benutzername\"" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "Bitte eine gültige IPv4- oder IPv6-Adresse angeben" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" "Die Größe (in Bits) des Netzwerks muss im Bereich 0-32 liegen (nicht " "%(bits)r)" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" "Der Name eines Schlüssels darf nur aus Buchstaben, Ziffern, Unterstrich " "und Bindestrich bestehen" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "Dateiname darf kein Unterverzeichnis enthalten" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" "Die Plug-Ins %(loaded)s und %(next_to_load)s exportieren beide den selben" " Namen" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "Über" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "Übersichtsseite" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "Schnellfilter..." - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "Repositories" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "Repository hinzufügen" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "Repositorygruppe hinzufügen" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "Du hast Adminrechte für diese Gruppe und kannst sie editieren" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "Repositorygruppe bearbeiten" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "Gruppenname" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository group" +msgid "Repository Group" +msgstr "Repository Gruppe" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "Beschreibung" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "Name" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "Repository" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "Letzte Änderung" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "Tipp" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "Besitzer" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "Klicken um Aufsteigend zu Sortieren" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "Klicken um Absteigend zu Sortieren" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "Keine Repositories gefunden." - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "Datenfehler." - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "Lade..." - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "Log In" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "Log In in %s" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "Benutzername" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "Passwort" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "Login Speichern" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "Passowrt Vergessen?" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "Kein Account?" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "Einloggen" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "Passwort zurücksetzen" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, python-format msgid "Reset Your Password to %s" msgstr "Setze dein Passwort auf %s zurück" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 msgid "Reset Your Password" msgstr "Setze dein Passwort zurück" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "E-Mailadresse" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "Captcha" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" msgstr "E-Mail zum Zurücksetzen des Passworts anfordern" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 #, fuzzy -#| msgid "" "Password reset link will be sent to the email address matching -#| your " "username." msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." @@ -2532,121 +2223,138 @@ "Der Link zum Zurücksetzen des Passworts wird an die zum Benutzernamen " "zugehörige E-Mailaddresse gesendet." -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 #, fuzzy -#| msgid "New password" msgid "New Password" msgstr "Neues Passwort" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 #, fuzzy -#| msgid "Confirm new password" msgid "Confirm New Password" msgstr "Bestätige neues Passwort" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" -msgstr "" - -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +msgstr "Bestätigen" + +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "Registrieren" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "Registrieren für %s" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "Passwort erneut eingeben" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "Vorname" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "Nachname" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "E-Mail" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "Registrierte Konten können ohne weitere Aktion genutzt werden." -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" "Bitte warten Sie auf die Aktivierung Ihres Benutzerkontos durch einen " "Administrator." -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "Es gibt bisher keine Branches" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "Geschlossene Branches" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "Es gibt bisher keine Tags" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "Es gibt bisher keine Lesezeichen" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 msgid "Admin Journal" msgstr "Admin-Logbuch" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "Logbuch filter..." #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 msgid "Filter" msgstr "Filter" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2654,59 +2362,60 @@ msgstr[1] "%s Einträge" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "Aktion" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "Repository" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "Datum" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "Von IP" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "Es sind bisher keine Aktionen passiert" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "Authentifizierungseinstellungen" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "Authentifizierung" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "Plug-Ins zur Authentifizierung" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "Aktivierte Plugins" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 #, fuzzy msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " @@ -2716,57 +2425,78 @@ "der Reihenfolge, in der Kallithea die Plug-Ins zur Authentifizierung des " "Benutzers verwendet" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "Verfügbare mitgelieferte Plug-Ins" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "Plugin" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "Speichern" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 msgid "Repository Defaults" msgstr "Repositorystandards" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "Typ" -#: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 msgid "Private repository" msgstr "Privates Repository" -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -2774,34 +2504,40 @@ "Private Repositories sind nur für explizit hinzugefügte Mitarbeiter " "sichtbar." -#: kallithea/templates/admin/defaults/defaults.html:53 -#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 msgid "Enable statistics" msgstr "Aktiviere Statistiken" -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 msgid "Enable statistics window on summary page." msgstr "Statistik-Fenster in der Zusammenfassungsseite aktivieren." -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 msgid "Enable downloads" msgstr "Aktiviere Downloads" -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 msgid "Enable download menu on summary page." msgstr "Download-Menü auf der Zusammenfassungsseite aktivieren." -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 msgid "Enable locking" msgstr "Locking aktivieren" -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "" @@ -2810,7 +2546,7 @@ msgid "Edit Gist" msgstr "Gist editieren" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " @@ -2819,38 +2555,56 @@ "Gist wurde während der Änderung aktualisiert. Änderungen kopieren und " "%(here)s klicken um die neue Version nachzuladen." -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "Gist Beschreibung ..." -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "Gist Lebenszeit" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "Verfällt" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 #, fuzzy msgid "Never" msgstr "nie" @@ -2860,279 +2614,414 @@ msgstr "Gist aktualisieren" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "Abbrechen" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "Privater Gist für Benutzer %s" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "Öffentlicher Gist für Benutzer %s" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "Öffentliche Gists" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "Neuen Gist erstellen" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "Erstellt" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "Bisher sind keine Gists vorhanden" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "Neuer Gist" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." +#: kallithea/templates/admin/gists/new.html:45 +#, fuzzy +#| msgid "name this file..." +msgid "Name this gist ..." msgstr "benenne diese Datei..." -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "Privaten Gist erstellen" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "Öffentlichen Gist erstellen" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "Zurücksetzen" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "Gist" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "URL" -#: kallithea/templates/admin/gists/show.html:37 +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 msgid "Public Gist" msgstr "Öffentlicher Gist" -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/templates/admin/gists/show.html:37 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "Privater Gist" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "Löschen" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "Löschen des Gists bestätigen" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "Bearbeiten" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "Bearbeiten" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "erstellt" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "Mein Account" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "Profil" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 #, fuzzy msgid "Email Addresses" msgstr "Neue E-Mailadresse" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "API Keys" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 #, fuzzy msgid "Owned Repositories" msgstr "Repositories" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 #, fuzzy msgid "Watched Repositories" msgstr "Repositories" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 #, fuzzy msgid "Show Permissions" msgstr "Berechtigungen kopieren" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "Mitgeliefert" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, fuzzy, python-format msgid "Confirm to reset this API key: %s" msgstr "Zurücksetzen des API Keys \"%s\" bestätigen" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 #, fuzzy msgid "Expired" msgstr "verfallen" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, fuzzy, python-format msgid "Confirm to remove this API key: %s" msgstr "Entfernen des API Keys \"%s\" bestätigen" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 #, fuzzy msgid "Remove" msgstr "entfernen" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 #, fuzzy msgid "No additional API keys specified" msgstr "Keine weiteren API Keys spezifiziert" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 #, fuzzy msgid "New API key" msgstr "Neuer API Key" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "Hinzufügen" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "Primär" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "Löschen der E-Mail \"%s\" bestätigen" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "Keine weiteren E-Mails spezifiziert." -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "Neue E-Mailadresse" @@ -3140,124 +3029,166 @@ msgid "Change Your Account Password" msgstr "Passwort des Benutzerkontos ändern" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "Aktuelles Passwort" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "Neues Passwort" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "Bestätige neues Passwort" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +#, fuzzy +msgid "Current IP" +msgstr "Aktuelle IP-Adresse" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, fuzzy, python-format +#| msgid "Change your avatar at" +msgid "Change %s avatar at" msgstr "Benutzerbild ändern unter" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "Avatare sind deaktiviert" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "E-Mailadresse fehlt, bitte aktualisieren." - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -#, fuzzy -msgid "Current IP" -msgstr "Aktuelle IP-Adresse" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 msgid "Repositories You Own" msgstr "Repositories in Ihrem Besitz" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." -msgstr "Keine Datensätze gefunden." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "Name" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 msgid "Repositories You are Watching" msgstr "Repositories, denen Sie folgen" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "Meine Benachrichtigungen" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "Alle" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "Kommentare" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "Pull Requests" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" msgstr "Markiere alle als gelesen" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +#, fuzzy +#| msgid "Mark All Read" +msgid "Mark as read" +msgstr "Markiere alle als gelesen" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "Bisher gibt es keine Benachrichtigungen" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "Zeige Benachrichtigung" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "Benachrichtigungen" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 msgid "Default Permissions" msgstr "Standardrechte" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "Global" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "IP Whitelist" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "Anonymer Zugang" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " @@ -3266,7 +3197,8 @@ "Unauthentifizierten Zugriff auf Kallithea erlauben. Anonyme Benutzer " "verwenden %s Benutzerrechte." -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " @@ -3276,24 +3208,30 @@ "gesetzt. Beachten Sie, dass alle spezifischen Standardrechte der " "Repositories verloren gehen" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "Bestehendes Repository importieren?" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "Repository Gruppe" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " @@ -3303,22 +3241,27 @@ "Rechte gesetzt. Beachten Sie, dass all spezifischen Standardrechte der " "Repositorygruppen verloren gehen" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 #, fuzzy msgid "Apply to all existing repository groups" msgstr "Bestehendes Repository importieren?" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 #, fuzzy msgid "Permissions for the Default user on new repository groups." msgstr "Rechte der übergeordneten Repositorygruppe kopieren." -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "Benutzergruppe" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 #, fuzzy msgid "" "All default permissions on each user group will be reset to chosen " @@ -3329,34 +3272,41 @@ "gesetzt. Beachten Sie, dass alle spezifischen Standardrechte der " "Benutzergruppen verloren gehen" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:55 +msgstr "Auf alle bestehenden Benutzergruppen anwenden" + +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 msgid "Permissions for the Default user on new user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 #, fuzzy msgid "Top level repository creation" msgstr "Repository erstellung" -#: kallithea/templates/admin/permissions/permissions_globals.html:64 +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 msgid "Enable this to allow non-admins to create repositories at the top level." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:65 +msgstr "Aktiviere dies, um Nicht-Admins" + +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 msgid "" "Note: This will also give all users API access to create repositories " "everywhere. That might change in future versions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 #, fuzzy msgid "" "With this, write permission to a repository group allows creating " @@ -3366,73 +3316,95 @@ "Schreibrechte einer Repository Gruppe erlauben innerhalb der Gruppe neue " "Repositorys zu erstellen." -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "Benutzergruppen Erstellung" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "Registrierung" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "Bestätigen diese IP zu löschen: %s" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "Alle IP-Adressen sind zulässig." -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "Neue IP-Adresse" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "Repositorygruppen" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "Gruppen name" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "Übergeordnete Gruppe" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "Rechte der übergeordneten Gruppe kopieren" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "Rechte der übergeordneten Repositorygruppe kopieren." @@ -3441,31 +3413,42 @@ msgid "%s Repository Group Settings" msgstr "%s Einstellungen für Repositorygruppen" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "Untergruppe hinzufügen" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "Einstellungen" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "Erweitert" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "Rechte" @@ -3489,12 +3472,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "Erstellt am" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3505,8 +3490,30 @@ msgid "Delete this repository group" msgstr "Diese Repositorygruppe löschen" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#, fuzzy +#| msgid "disabled" +msgid "Visible" +msgstr "Deaktiviert" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "Add Repository" +msgid "Add repos" +msgstr "Repository hinzufügen" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +#, fuzzy +#| msgid "Add user group" +msgid "Add/Edit groups" +msgstr "Benutzergruppe hinzufügen" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 #, fuzzy msgid "User/User Group" @@ -3514,8 +3521,8 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 #, fuzzy @@ -3524,105 +3531,117 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 #, fuzzy msgid "Revoke" msgstr "entziehen" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 msgid "Apply to children" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "Beide" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "Diese Gruppe löschen" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Confirm to delete this group" msgstr "Löschen der Gruppe bestätigen" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "Repository Group: %s" +msgid "Repository group %s" +msgstr "Repositorygruppe: %s" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "mit" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 msgid "Repository Groups Administration" msgstr "Repositorygruppenverwaltung" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 msgid "Number of Top-level Repositories" msgstr "Anzahl der Repositories oberster Ebene" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "[erstellt] Repository" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" "Halten Sie es kurz und prägnant. Benutzen Sie eine README-Datei für " "längere Beschreibungen." -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "Repository Typ der erstellt werden soll." -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "Start Revision" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3651,56 +3670,69 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, python-format msgid "%s Repository Settings" msgstr "%s Repositoryeinstellungen" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "Entfernt" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "Statistiken" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 msgid "Parent" msgstr "Übergeordnet" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 msgid "Public Journal Visibility" msgstr "Sichtbarkeit des öffentlichen Logbuches" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "Entferne aus dem Öffentlichen Logbuch" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 msgid "Add to Public Journal" msgstr "Zum öffentlichen Logbuch hinzufügen" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." @@ -3708,36 +3740,44 @@ "Alle Aktionen, die in diesem Repository ausgeführt wurden, sind im " "öffentlichen Logbuch für jeden einsehbar." -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 msgid "Change Locking" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 msgid "Confirm to unlock repository." msgstr "Entsperren des Repositorys bestätigen." -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 msgid "Unlock Repository" msgstr "Repository entsperren" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 #, python-format msgid "Locked by %s on %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 msgid "Confirm to lock repository." msgstr "Sperren des Repositorys bestätigen." -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 msgid "Lock Repository" msgstr "Repository sperren" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "Repository ist nicht gesperrt" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3745,32 +3785,39 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "Löschen des Repositorys bestätigen: %s" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 msgid "Delete this Repository" msgstr "Dieses Repository löschen" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" msgstr[0] "Dieses Repository hat %s Fork" msgstr[1] "Dieses Repository hat %s Forks" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "Fork abtrennen" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "Forks löschen" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3781,110 +3828,116 @@ msgid "Invalidate Repository Cache" msgstr "Ungültiger Repositorycache" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -msgid "Confirm to invalidate repository cache." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 +msgid "List of Cached Values" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_caches.html:12 -msgid "List of Cached Values" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 msgid "Prefix" msgstr "Präfix" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "Schlüssel" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "Aktiv" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "Löschen des Felds bestätigen: %s" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." msgstr "Zusatzfelder sind deaktiviert." -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 #, fuzzy msgid "Private Repository" msgstr "privates Repository" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "[forked] repository" +msgid "Fork of repository" +msgstr "[forked] Repository" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 #, fuzzy msgid "Remote repository URL" msgstr "Repositorium erzeugt %s" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 #, fuzzy msgid "Pull Changes from Remote Repository" msgstr "[Pulled von Remote] in Repository" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 -#, fuzzy -msgid "Confirm to pull changes from remote repository." -msgstr "[Pulled von Remote] in Repository" - #: kallithea/templates/admin/repos/repo_edit_remote.html:17 +#, fuzzy +msgid "Confirm to pull changes from remote repository." +msgstr "[Pulled von Remote] in Repository" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 #, fuzzy msgid "Permanent Repository ID" msgstr "privates Repository" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3894,35 +3947,35 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 #, fuzzy msgid "Remote repository" msgstr "[erstellt] Repository" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 #, fuzzy msgid "Repository URL" msgstr "Repository" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "Besitzer des Repositorys ändern." -#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 msgid "Processed commits" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 msgid "Processed progress" msgstr "" @@ -3935,315 +3988,376 @@ msgstr "" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 msgid "Repositories Administration" msgstr "Repositoryverwaltung" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 msgid "Settings Administration" msgstr "Einstellungsverwaltung" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "VCS" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "Hooks" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "Volltextsuche" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "Systeminfo" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "Senden" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 msgid "Save Settings" msgstr "Einstellungen speichern" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 msgid "Custom Hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" -msgstr "" - -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:4 +#, fuzzy +#| msgid "Description" +msgid "Rescan options" +msgstr "Beschreibung" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:23 -msgid "Install Git hooks" -msgstr "" - #: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "" +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + #: kallithea/templates/admin/settings/settings_search.html:12 -msgid "Build from scratch" -msgstr "" - -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "Erneut Indizieren" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "Prüfe auf Updates..." + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 msgid "Kallithea version" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 #, fuzzy msgid "Check for updates" msgstr "Auf Updates prüfen" -#: kallithea/templates/admin/settings/settings_system.html:5 +#: kallithea/templates/admin/settings/settings_system.html:8 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 msgid "Kallithea configuration file" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:6 +#: kallithea/templates/admin/settings/settings_system.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 msgid "Python version" msgstr "Python-Version" -#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 msgid "Platform" msgstr "Plattform" -#: kallithea/templates/admin/settings/settings_system.html:8 +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 msgid "Git version" msgstr "Git-Version" -#: kallithea/templates/admin/settings/settings_system.html:9 +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 msgid "Git path" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Upgrade info endpoint" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" "Hinweis: Bitte stellen Sie sicher, dass der Server auf die URL zugreifen " "kann" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "Prüfe auf Updates..." - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "Web" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 msgid "Mercurial extensions" msgstr "Mercurial-Erweiterungen" -#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 msgid "Enable largefiles extension" msgstr "Erweiterung largefiles aktivieren" -#: kallithea/templates/admin/settings/settings_vcs.html:51 +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 msgid "Enable hgsubversion extension" msgstr "Erweiterung hgsubversion aktivieren" -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 msgid "Location of repositories" msgstr "Ort der Repositories" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "Allgemein" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "Zeige Kallithea-Version" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4260,102 +4374,126 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "Clone-URL" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repository Size" +msgid "Repository page size" +msgstr "Repository Größe" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "Icons" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "" + #: kallithea/templates/admin/settings/settings_visual.html:84 -msgid "Show private repository icon on repositories" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 #, fuzzy msgid "Meta Tagging" msgstr "Einstellungen" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "Benutzergruppe hinzufügen" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "Benutzergruppen" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "Benutzergruppe hinzufügen" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "Kurze, optionale Beschreibung für diese Benutzergruppe." #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 #, fuzzy msgid "Show Members" msgstr "mitglieder" @@ -4366,13 +4504,15 @@ msgstr "Benutzergruppe: %s" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "Mitglieder" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "" @@ -4381,48 +4521,59 @@ msgid "Delete this user group" msgstr "Diese Benutzergruppe löschen" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "Noch keine Mitglieder" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "Ausgewählte Grppenmitglieder" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "Verfügbare Mitglieder" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 msgid "User Groups Administration" msgstr "Benutzergruppenverwaltung" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "Benutzer hinzufügen" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "Benutzer" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "Benutzer hinzufügen" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4432,12 +4583,14 @@ msgstr "Benutzer: %s" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "Letzter Login" @@ -4446,7 +4599,8 @@ msgstr "Mitglieder der Benutzergruppe" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "" @@ -4455,954 +4609,1254 @@ msgid "Delete this user" msgstr "Diesen Benutzer löschen" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 msgid "Users Administration" msgstr "Benutzerverwaltung" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "Authentifizierungsart" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "Support" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "Mercurial Repository" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "Git Repository" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "Fork erstellen" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "Zusammenfassung" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "Dateien" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "" - -#: kallithea/templates/base/base.html:145 -#: kallithea/templates/base/base.html:147 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 msgid "Options" msgstr "Optionen" -#: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 msgid "Compare Fork" msgstr "Fork vergleichen" +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" +msgstr "" + +#: kallithea/templates/base/base.html:155 +#: kallithea/tests/data/templates/base/base.html.py:399 +msgid "Unlock" +msgstr "" + #: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "" - -#: kallithea/templates/base/base.html:163 -msgid "Unlock" +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" msgstr "" #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "Keine Übereinstimmungen gefunden" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "Öffentliches Logbuch" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "" -#: kallithea/templates/base/base.html:246 -msgid "Search in repositories" -msgstr "" - -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 -msgid "My Pull Requests" -msgstr "Meine Pull Requests" - -#: kallithea/templates/base/base.html:289 -msgid "Not Logged In" -msgstr "Nicht eingeloggt" - -#: kallithea/templates/base/base.html:296 -msgid "Login to Your Account" -msgstr "" - #: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" +#: kallithea/tests/data/templates/base/base.html.py:540 +msgid "Search in repositories" +msgstr "" + +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 +msgid "My Pull Requests" +msgstr "Meine Pull Requests" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 +msgid "Not Logged In" +msgstr "Nicht eingeloggt" + +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 +msgid "Login to Your Account" +msgstr "" + +#: kallithea/templates/base/base.html:385 +#, fuzzy +#| msgid "Forgot password ?" +msgid "Forgot password?" msgstr "Passwort vergessen?" -#: kallithea/templates/base/base.html:346 +#: kallithea/templates/base/base.html:389 +#, fuzzy +#| msgid "Don't have an account ?" +msgid "Don't have an account?" +msgstr "Kein Account?" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "Keine Übereinstimmungen gefunden" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 #, fuzzy msgid "Inherit defaults" msgstr "Repositorystandards" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "Rechte" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "Berechtigungen editieren" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 -msgid "Add Another Comment" -msgstr "Einen weiteren Kommentar hinzufügen" - -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 -msgid "Stop following this repository" -msgstr "" - -#: kallithea/templates/base/root.html:24 -msgid "Start following this repository" -msgstr "" - #: kallithea/templates/base/root.html:25 -msgid "Group" -msgstr "Gruppe" +#: kallithea/tests/data/templates/base/root.html.py:85 +msgid "Add Another Comment" +msgstr "Einen weiteren Kommentar hinzufügen" #: kallithea/templates/base/root.html:26 -msgid "members" -msgstr "mitglieder" +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 +msgid "Stop following this repository" +msgstr "" #: kallithea/templates/base/root.html:27 -msgid "Loading ..." +#: kallithea/tests/data/templates/base/root.html.py:89 +msgid "Start following this repository" msgstr "" #: kallithea/templates/base/root.html:28 -msgid "loading ..." -msgstr "" +#: kallithea/tests/data/templates/base/root.html.py:91 +msgid "Group" +msgstr "Gruppe" #: kallithea/templates/base/root.html:29 -msgid "Search truncated" -msgstr "" +#: kallithea/tests/data/templates/base/root.html.py:93 +msgid "members" +msgstr "mitglieder" #: kallithea/templates/base/root.html:30 -msgid "No matching files" +#: kallithea/tests/data/templates/base/root.html.py:95 +msgid "Loading ..." msgstr "" #: kallithea/templates/base/root.html:31 -#, fuzzy -#| msgid "on pull request" -msgid "Open New Pull Request from {0}" -msgstr "Kommentar von Pull Request" +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." +msgstr "" #: kallithea/templates/base/root.html:32 -msgid "Open New Pull Request for {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" msgstr "" #: kallithea/templates/base/root.html:33 -#, fuzzy -#| msgid "Show Selected Changeset __S" -msgid "Show Selected Changesets {0} → {1}" -msgstr "Ausgewähltes Changeset anzeigen __S" +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" +msgstr "" #: kallithea/templates/base/root.html:34 -msgid "Selection Link" -msgstr "" +#: kallithea/tests/data/templates/base/root.html.py:103 +#, fuzzy +msgid "Open New Pull Request from {0}" +msgstr "Kommentar von Pull Request" #: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 -msgid "Collapse Diff" +#: kallithea/tests/data/templates/base/root.html.py:105 +msgid "Open New Pull Request for {0} → {1}" msgstr "" #: kallithea/templates/base/root.html:36 -msgid "Expand Diff" -msgstr "" +#: kallithea/tests/data/templates/base/root.html.py:107 +#, fuzzy +msgid "Show Selected Changesets {0} → {1}" +msgstr "Ausgewähltes Changeset anzeigen __S" #: kallithea/templates/base/root.html:37 -msgid "Failed to revoke permission" +#: kallithea/tests/data/templates/base/root.html.py:109 +msgid "Selection Link" msgstr "" #: kallithea/templates/base/root.html:38 -msgid "Confirm to revoke permission for {0}: {1} ?" -msgstr "Widerruf der Rechte für {0}: {1} bestätigen?" +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 +msgid "Collapse Diff" +msgstr "" #: kallithea/templates/base/root.html:39 -msgid "enabled" -msgstr "Aktiviert" +#: kallithea/tests/data/templates/base/root.html.py:113 +msgid "Expand Diff" +msgstr "" #: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "Deaktiviert" - -#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/base/root.html.py:115 +msgid "Failed to revoke permission" +msgstr "" + +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 +msgid "Confirm to revoke permission for {0}: {1} ?" +msgstr "Widerruf der Rechte für {0}: {1} bestätigen?" + +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "Änderungssätze auswählen" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" msgstr "Changeset angeben" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "Autor" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "Revision" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" -msgstr "" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "Klicken um Aufsteigend zu Sortieren" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "Klicken um Absteigend zu Sortieren" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "Keine Datensätze gefunden." + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "Datenfehler." + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." +msgstr "Lade..." #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 msgid "Go to tip of repository" msgstr "Gehe zum Tip des Repositorys" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" msgstr "" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, fuzzy, python-format +msgid "Changeset status: %s by %s" +msgstr "Setze Changesetstatus" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "Branch %s" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "Bisher gibt es keine Änderungen" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "Revision" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "Alter" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "Autor" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 #, fuzzy msgid "Push new repository" msgstr "privates Repository" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 msgid "Merge" msgstr "" +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 +msgid "Grafted from:" +msgstr "" + #: kallithea/templates/changeset/changeset.html:123 -msgid "Grafted from:" +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" msgstr "" #: kallithea/templates/changeset/changeset.html:129 -msgid "Transplanted from:" -msgstr "" - -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 #, fuzzy msgid "Replaced by:" msgstr "Erstellt von" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 #, fuzzy msgid "Preceded by:" msgstr "Erstellt von" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 #, fuzzy msgid "No revisions" msgstr "revisionen" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 #, fuzzy msgid "on pull request" msgstr "Kommentar von Pull Request" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 msgid "No title" msgstr "Kein Titel" -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "%s Changesets" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 msgid "Delete comment?" msgstr "Kommentar löschen?" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "Letzte Änderungen" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "Kommentarvorschau" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +msgid "Set changeset status" +msgstr "Setze Changesetstatus" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +msgid "No change" +msgstr "Keine Änderungen" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "Kommentar von Pull Request" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +msgid "Close" +msgstr "Schließen" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "Kommentar" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "Vorschau" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d Kommentar" msgstr[1] "%d Kommentare" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, python-format msgid "%d inline" msgid_plural "%d inline" msgstr[0] "%d inline" msgstr[1] "%d inline" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" msgstr[0] "%d generell" msgstr[1] "%d generell" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -msgid "Use @username inside this text to notify another user." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -msgid "Set changeset status" -msgstr "Setze Changesetstatus" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -msgid "No change" -msgstr "Keine Änderungen" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -msgid "Close" -msgstr "Schließen" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 -msgid "Show full diff for this file" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 -msgid "Show full side-by-side diff for this file" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:38 -msgid "Show inline comments" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:86 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +#, fuzzy +#| msgid "file removed" +msgid "File before" +msgstr "Datei entfernt" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "Ungeändert" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 msgid "Deleted" msgstr "Gelöscht" -#: kallithea/templates/changeset/diff_block.html:89 +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 msgid "Renamed" msgstr "Umbenannt" +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Unbekannte Revision %s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "Kein Dateiname" + +#: kallithea/templates/changeset/diff_block.html:55 +#, fuzzy +#| msgid "file added" +msgid "File after" +msgstr "Datei hinzugefügt" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 +msgid "Show full diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 +msgid "Show full side-by-side diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 +msgid "Show inline comments" +msgstr "" + #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, python-format msgid "%s changesets" msgstr "%s Changesets" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 msgid "behind" msgstr "zurück" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "Öffenentliches Repository" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "Abonniere den %s RSS Feed" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "Abonniere den %s ATOM Feed" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "%(user)s hat am %(when)s ein Changeset kommentiert" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Comment on Changeset \"%s\"" +msgstr "%(user)s hat am %(when)s ein Changeset kommentiert" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset" +msgid "Changeset on" +msgstr "Änderungssatz" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "Zweig" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "Letzte Änderungen" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "This pull request has been closed and can not be updated." +msgid "The pull request has been closed." +msgstr "" +"Dieser Pull Request wurde geschlossen und kann daher nicht aktualisiert " +"werden." + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "Hallo %s" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 #, fuzzy -#| msgid "We received a request to create a new password for your account." msgid "We have received a request to reset the password for your account." msgstr "" "Wir haben eine Anforderung erhalten, für deinen Account ein neues " "Passwort zu erstellen." -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, fuzzy, python-format +#| msgid "[commented] on pull request for" +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "Pull Request [kommentiert] für" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "Kommentar von Pull Request" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +#, fuzzy +#| msgid "Date" +msgid "at" +msgstr "Datum" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 -#, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -msgid "The comment closed the pull request with status" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" -msgstr "" +#, fuzzy, python-format +#| msgid "%(user)s commented on pull request %(age)s" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "%(user)s hat am %(when)s einen Pull Request kommentiert" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Pull request %s from %s#%s" +msgid "Pull Request %s \"%s\" Closed" +msgstr "Pull Request #%s von %s#%s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "[commented] on pull request for" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "Pull Request [kommentiert] für" + +#: kallithea/templates/email_templates/registration.html:22 +#, fuzzy +#| msgid "Group name" +msgid "Full Name" +msgstr "Gruppen name" #: kallithea/templates/files/diff_2way.html:15 #, python-format @@ -5420,82 +5874,105 @@ msgstr "" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "oder" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +#, fuzzy +msgid "New file type" +msgstr "neue Datei" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 msgid "Commit Changes" msgstr "Änderungen einchecken" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "" -#: kallithea/templates/files/files_browser.html:61 -msgid "Size" -msgstr "Größe" - -#: kallithea/templates/files/files_browser.html:62 -msgid "Last Revision" -msgstr "" - #: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 +msgid "Size" +msgstr "Größe" + +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 +msgid "Last Revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 msgid "Last Modified" msgstr "Zuletzt geändert" -#: kallithea/templates/files/files_browser.html:64 +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 msgid "Last Committer" msgstr "" @@ -5505,7 +5982,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "Datei löschen" @@ -5518,101 +5995,130 @@ msgid "Edit file" msgstr "" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "%s Autor" msgstr[1] "%s Autoren" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" +#: kallithea/templates/files/files_source.html:34 +#, fuzzy, python-format +#| msgid "Deleted branch: %s" +msgid "Edit on Branch: %s" +msgstr "Branch %s gelöscht" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" msgstr "" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +#, fuzzy +msgid "File is too big to display." +msgstr "Die Datei ist zu groß, um sie anzuzeigen" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" -msgstr "Die Datei ist zu groß, um sie anzuzeigen" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." +msgstr "" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "Zurück" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "" @@ -5621,70 +6127,80 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "Privat" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "Berechtigungen kopieren" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "" -#: kallithea/templates/journal/journal.html:21 +#: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 msgid "ATOM journal feed" msgstr "ATOM Logbuch Feed" -#: kallithea/templates/journal/journal.html:22 +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "RSS Logbuch Feed" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "Meine Repositories" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "" @@ -5698,34 +6214,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "Neuer Pull Request" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "Titel" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "" @@ -5761,7 +6288,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "" @@ -5779,112 +6308,153 @@ msgstr "Löschen der Gruppe bestätigen: %s mit %s Repository" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, fuzzy, python-format msgid "%s Pull Request %s" msgstr "Pull Request #%s" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, fuzzy, python-format msgid "Pull request %s from %s#%s" msgstr "Pull Request #%s von %s#%s" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 msgid "Summarize the changes" msgstr "Zusammenfassung der Änderungen" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 msgid "There are no reviewers" msgstr "Es gibt keine Reviewers" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 msgid "on" msgstr "in" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -msgid "Update" -msgstr "Aktualisierung" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +#, fuzzy +#| msgid "Registration" +msgid "Next iteration" +msgstr "Registrierung" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +msgid "Cancel Changes" +msgstr "Änderungen verwerfen" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 msgid "Pull Request Reviewers" msgstr "Pull Request Reviewers" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 msgid "Remove reviewer" msgstr "Reviewer entfernen" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 msgid "Potential Reviewers" msgstr "Potentielle Reviewer" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -msgid "Save as New Pull Request" -msgstr "Als neuen Pull Request speichern" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -msgid "Cancel Changes" -msgstr "Änderungen verwerfen" +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" +msgstr "Inhalt des Pull Requests" #: kallithea/templates/pullrequests/pullrequest_show.html:296 -msgid "Pull Request Content" -msgstr "Inhalt des Pull Requests" +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" +msgstr "" #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 #, python-format @@ -5893,7 +6463,6 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Pull Requests from %s'" msgid "Pull Requests from '%s'" msgstr "Pull Requests von '%s'" @@ -5902,240 +6471,466 @@ msgid "Pull Requests to '%s'" msgstr "Pull Requests für '%s'" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "Einen neuen Pull Request eröffnen" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, python-format msgid "Show Pull Requests to %s" msgstr "Zeige Pull Requests für '%s'" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, python-format msgid "Show Pull Requests from '%s'" msgstr "Zeige Pull Requests von '%s'" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 msgid "Pull Requests Created by Me" msgstr "Von mir erstellte Pull Requests" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +#, fuzzy +#| msgid "Pull Request Reviewers" +msgid "Pull Requests Needing My Review" +msgstr "Pull Request Reviewers" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 msgid "Pull Requests I Participate In" msgstr "" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 msgid "Search in All Repositories" msgstr "Suche in allen Repositories" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" -msgstr "" - -#: kallithea/templates/search/search.html:62 +msgstr "Suchbegriff" + +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" -msgstr "" - -#: kallithea/templates/search/search.html:65 +msgstr "Suchen in" + +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" -msgstr "" - -#: kallithea/templates/search/search.html:66 +msgstr "Dateiinhalt" + +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" -msgstr "" - -#: kallithea/templates/search/search.html:67 +msgstr "Commit Nachrichten" + +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" -msgstr "" - -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +msgstr "Dateinamen" + +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "Zugriff verweigert" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" -msgstr "" - -#: kallithea/templates/summary/statistics.html:39 +msgstr "Aktiviere" + +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "" -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" -msgstr "" - -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +msgstr "Dateien" + +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" -msgstr "" +msgstr "Mehr anzeigen" + +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "Commits" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "Dateien hinzugefügt" #: kallithea/templates/summary/statistics.html:390 -msgid "commits" -msgstr "" +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "Dateien geändert" #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" -msgstr "" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" +msgstr "Dateien entfernt" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" -msgstr "" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "Commit" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" +msgstr "Datei hinzugefügt" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" -msgstr "" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" +msgstr "Datei geändert" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" -msgstr "" +msgstr "Datei entfernt" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "Clone von" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "" + #: kallithea/templates/summary/summary.html:72 -msgid "Clone URL" -msgstr "Clone-URL" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" msgstr "" -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "" - -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "" +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "" + #: kallithea/templates/summary/summary.html:108 -msgid "Download" -msgstr "" +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" +msgstr "Herunterladen als zip" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" msgstr "" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" msgstr "" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" -msgstr "" - -#: kallithea/templates/summary/summary.html:186 +msgstr "Feed" + +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 msgid "Latest Changes" msgstr "Letzte Änderungen" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 msgid "Quick Start" msgstr "Schnelleinstieg" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" -msgstr "" - -#: kallithea/templates/summary/summary.html:293 +msgstr "Liesmich-Datei von Revision %s:%s" + +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" -msgstr "" - -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "%s Tags" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" -msgstr "Tags vergleichen" +msgstr "%s als %s herunterladen" + +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "Übersichtsseite" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "Gruppenname" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "Login Speichern" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "benenne diese Datei..." + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "Benutzerbild ändern unter" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "E-Mailadresse fehlt, bitte aktualisieren." + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "Web" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "Schnellfilter..." + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "Passwort vergessen?" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "Repository Größe" #~ msgid "No comments." #~ msgstr "Keine Kommentare." @@ -6206,9 +7001,6 @@ #~ msgid "delete" #~ msgstr "löschen" -#~ msgid "" -#~ msgstr "" - #~ msgid "Permissions Administration" #~ msgstr "Rechteverwaltung" @@ -6371,14 +7163,8 @@ #~ msgid "with subrepos" #~ msgstr "" -#~ msgid "" -#~ "Your password reset was successful, new" -#~ " password has been sent to your " -#~ "email" -#~ msgstr "" -#~ "Das Zurücksetzen des Passworted war " -#~ "erfolgreich, ein neues Passwort wurde an" -#~ " ihre EMail Addresse gesendet" +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "Dieser Pull Request kann mit Änderungen in %s aktualisiert werden:" #~ msgid "Your new password" #~ msgstr "Dein neues Passwort" @@ -6386,20 +7172,237 @@ #~ msgid "Your new Kallithea password:%s" #~ msgstr "Ihr neues Kallithea-Passwort: %s" +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "" + #~ msgid "Open New Pull Request for Selected Changesets" #~ msgstr "" #~ msgid "Show Selected Changesets __S → __E" #~ msgstr "" +#~ msgid "Commenting on line {1}." +#~ msgstr "" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" + +#~ msgid "Comment preview" +#~ msgstr "Kommentarvorschau" + +#~ msgid "Preview" +#~ msgstr "Vorschau" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "" + #~ msgid "You can generate it by clicking following URL" #~ msgstr "Du kannst es über die folgende URL erstellen" #~ msgid "Please ignore this email if you did not request a new password ." #~ msgstr "" -#~ "Bitte ignoriere diese E-Mail, wenn du" -#~ " kein neues Passwort angefordert hast." + +#~ msgid "New file mode" +#~ msgstr "" #~ msgid "Created by" #~ msgstr "Erstellt von" +#~ msgid "Closed, replaced by %s ." +#~ msgstr "Geschlossen, ersetzt durch %s." + +#~ msgid "Closing." +#~ msgstr "Schließen." + +#~ msgid "Repository no access" +#~ msgstr "Kein Zugriff auf Repository" + +#~ msgid "Repository read access" +#~ msgstr "Lesender Zugriff auf Repository" + +#~ msgid "Repository write access" +#~ msgstr "Schreibdender Zugriff auf Repository" + +#~ msgid "Repository admin access" +#~ msgstr "Administrativer Zugang zum Repository" + +#~ msgid "Repository Group no access" +#~ msgstr "Repository Gruppe hat Keinen Zugriff" + +#~ msgid "Repository Group read access" +#~ msgstr "Repository Gruppe hat lesenden Zugriff" + +#~ msgid "Repository Group write access" +#~ msgstr "Repository Gruppe hat schreibenden Zugriff" + +#~ msgid "Repository Group admin access" +#~ msgstr "Repository Gruppe hat Administrativen Zugriff" + +#~ msgid "Repository creation disabled" +#~ msgstr "Erstellung eines Repositorys deaktiviert" + +#~ msgid "Repository creation enabled" +#~ msgstr "Erstellung eines Repositorys aktiviert" + +#~ msgid "Repository forking disabled" +#~ msgstr "Forking eines Repositorys deaktiviert" + +#~ msgid "Repository forking enabled" +#~ msgstr "Forking eines Repositorys aktiviert" + +#~ msgid "Register disabled" +#~ msgstr "Registrierung deaktiviert" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "Registrierung neuer Benutzer in Kallithea mit manueller Aktivierung" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "Registrierung neuer Benutzer in Kallithea mit Automatischer Aktivierung" + +#~ msgid "Not Reviewed" +#~ msgstr "Nicht Begutachtet" + +#~ msgid "Rejected" +#~ msgstr "Abgelehnt" + +#~ msgid "Under Review" +#~ msgstr "In Begutachtung" + +#~ msgid "Repository group no access" +#~ msgstr "Kein Zugriff für Repositorygruppe" + +#~ msgid "Repository group read access" +#~ msgstr "Lesezugriff für Repositorygruppe" + +#~ msgid "Repository group write access" +#~ msgstr "Schreibzugriff für Repositorygruppe" + +#~ msgid "Repository group admin access" +#~ msgstr "Administrativer Zugriff für Repositorygruppe" + +#~ msgid "User group no access" +#~ msgstr "Kein Zugriff für Benutzergruppe" + +#~ msgid "User group read access" +#~ msgstr "Lesezugriff für Benutzergruppe" + +#~ msgid "User group write access" +#~ msgstr "Nutzergruppe Schreibzugriff" + +#~ msgid "User group admin access" +#~ msgstr "Administrativer Zugriff für Benutzergruppe" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "Erstellung von Repositorygruppen deaktiviert" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "Erstellung von Repositorygruppen aktiviert" + +#~ msgid "User Group creation disabled" +#~ msgstr "Erstellung von Benutzergruppen deaktiviert" + +#~ msgid "User Group creation enabled" +#~ msgstr "Erstellung von Benutzergruppen aktiviert" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "Benutzerregistrierung mit manueller Kontoaktivierung" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "Benutzerregistrierung mit automatische Kontoaktivierung" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" +#~ "Review Request für %(repo_name)s Pull " +#~ "Request #%(pr_id)s von %(ref)s erstellt " +#~ "von %(pr_username)s" + +#~ msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" +#~ "Kommentar von %(comment_username)s für " +#~ "%(repo_name)s Pull Request #%(pr_id)s von " +#~ "%(ref)s" + +#~ msgid "repositories" +#~ msgstr "Repositories" + +#~ msgid "No repositories found." +#~ msgstr "Keine Repositories gefunden." + +#~ msgid "There are no branches yet" +#~ msgstr "Es gibt bisher keine Branches" + +#~ msgid "There are no tags yet" +#~ msgstr "Es gibt bisher keine Tags" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "Es gibt bisher keine Lesezeichen" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "Aktiviert" + +#~ msgid "%s Bookmarks" +#~ msgstr "" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "" + +#~ msgid "Update" +#~ msgstr "Aktualisierung" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "Als neuen Pull Request speichern" + +#~ msgid "%s Tags" +#~ msgstr "%s Tags" + +#~ msgid "Compare Tags" +#~ msgstr "Tags vergleichen" diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/el/LC_MESSAGES/kallithea.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/i18n/el/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,7005 @@ +# Greek translations for Kallithea. +# Copyright (C) 2015 Various authors, licensing as GPLv3 +# This file is distributed under the same license as the Kallithea project. +# Automatically generated, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: Kallithea 0.3\n" +"Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" +"PO-Revision-Date: 2017-06-14 18:51+0000\n" +"Last-Translator: Asterios Dimitriou \n" +"Language-Team: Greek " +"\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.15-dev\n" + +#: kallithea/controllers/changelog.py:86 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 +msgid "There are no changesets yet" +msgstr "Δεν υπάρχουν σετ αλλαγών ακόμα" + +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 +#: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 +msgid "None" +msgstr "Χωρίς" + +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 +msgid "(closed)" +msgstr "(κλειστό)" + +#: kallithea/controllers/changeset.py:85 +msgid "Show whitespace" +msgstr "Εμφάνιση κενού" + +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 +msgid "Ignore whitespace" +msgstr "Αγνόηση κενού" + +#: kallithea/controllers/changeset.py:165 +#, python-format +msgid "Increase diff context to %(num)s lines" +msgstr "Αύξηση του diff πλαισίου σε %(num)s γραμμές" + +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 +msgid "Such revision does not exist for this repository" +msgstr "Δεν υπάρχει τέτοια αναθεώρηση για αυτό το αποθετήριο" + +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Error creating repository %s" +msgid "Could not find other repository %s" +msgstr "Βλάβη κατά τη δημιουργία του αποθετηρίου %s" + +#: kallithea/controllers/compare.py:73 +#, fuzzy +#| msgid "Cannot compare repositories without using common ancestor" +msgid "Cannot compare repositories of different types" +msgstr "" +"Δεν μπορεί να γίνει σύγκριση αποθετηρίων χωρίς να χρησιμοποιηθεί κοινός " +"πρόγονος" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 +msgid "Cannot compare repositories without using common ancestor" +msgstr "" +"Δεν μπορεί να γίνει σύγκριση αποθετηρίων χωρίς να χρησιμοποιηθεί κοινός " +"πρόγονος" + +#: kallithea/controllers/error.py:70 +msgid "No response" +msgstr "Χωρίς απόκριση" + +#: kallithea/controllers/error.py:71 +msgid "Unknown error" +msgstr "Άγνωστο λάθος" + +#: kallithea/controllers/error.py:84 +msgid "The request could not be understood by the server due to malformed syntax." +msgstr "" +"Η αίτηση δεν μπόρεσε να ερμηνευτεί από τον εξυπηρετητή λόγω κακής " +"διατύπωσης." + +#: kallithea/controllers/error.py:87 +msgid "Unauthorized access to resource" +msgstr "Ανεξουσιοδοτημένη πρόσβαση στον πόρο" + +#: kallithea/controllers/error.py:89 +msgid "You don't have permission to view this page" +msgstr "Δεν έχετε άδεια για να εμφανίσετε αυτή τη σελίδα" + +#: kallithea/controllers/error.py:91 +msgid "The resource could not be found" +msgstr "Ο πόρος δεν μπορεί να βρεθεί" + +#: kallithea/controllers/error.py:93 +msgid "" +"The server encountered an unexpected condition which prevented it from " +"fulfilling the request." +msgstr "" +"Ο εξυπηρετητής συνάντησε μια απρόσμενη κατάσταση που τον απέτρεψαν να " +"πραγματοποιήσει την αίτηση." + +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "Το σετ αλλαγών ήταν πολύ μεγάλο και περικόπηκε..." + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "%s συνέβαλε στο %s" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 +#, python-format +msgid "%s %s feed" +msgstr "%s %s τροφοδοσία" + +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "Αλλαγές στο αποθετήριο %s" + +#: kallithea/controllers/files.py:93 +msgid "Click here to add new file" +msgstr "Κλικ εδώ για προθήκη νέου αρχείου" + +#: kallithea/controllers/files.py:94 +#, python-format +msgid "There are no files yet. %s" +msgstr "Δεν υπάρχουν αρχεία ακόμα. %s" + +#: kallithea/controllers/files.py:191 +#, python-format +msgid "%s at %s" +msgstr "%s την %s" + +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 +#, python-format +msgid "This repository has been locked by %s on %s" +msgstr "Το αποθετήριο κλειδώθηκε από %s την %s" + +#: kallithea/controllers/files.py:309 +#, fuzzy +msgid "You can only delete files with revision being a valid branch" +msgstr "" +"Μπορείτε να διαγράψετε μόνο αρχεία σε αναθεώρηση που βρίσκονται σε έγκυρη" +" διακλάδωση " + +#: kallithea/controllers/files.py:320 +#, python-format +msgid "Deleted file %s via Kallithea" +msgstr "Διαγραφή αρχείου %s μέσω του Kallithea" + +#: kallithea/controllers/files.py:342 +#, python-format +msgid "Successfully deleted file %s" +msgstr "Επιτυχής διαγραφή αρχείου %s" + +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 +msgid "Error occurred during commit" +msgstr "Συνέβη λάθος κατά το commit" + +#: kallithea/controllers/files.py:369 +msgid "You can only edit files with revision being a valid branch" +msgstr "" +"Μπορείτε να επεξεργαστείτε μόνο αρχεία σε αναθεώρηση που βρίσκονται σε " +"έγκυρη διακλάδωση" + +#: kallithea/controllers/files.py:383 +#, python-format +msgid "Edited file %s via Kallithea" +msgstr "Επεξεργασία αρχείου %s μέσω του Kallithea" + +#: kallithea/controllers/files.py:399 +msgid "No changes" +msgstr "Καμία αλλαγή" + +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 +#, python-format +msgid "Successfully committed to %s" +msgstr "Επιτυχής παράδοση σε %s" + +#: kallithea/controllers/files.py:435 +msgid "Added file via Kallithea" +msgstr "Προσθήκη αρχείου μέσω Kallithea" + +#: kallithea/controllers/files.py:456 +msgid "No content" +msgstr "Χωρίς περιεχόμενο" + +#: kallithea/controllers/files.py:460 +msgid "No filename" +msgstr "Χωρίς όνομα αρχείου" + +#: kallithea/controllers/files.py:485 +msgid "Location must be relative path and must not contain .. in path" +msgstr "" +"Η τοποθεσία πρέπει να είναι σχετική διαδρομή και να μην περιέχει .. μέσα " +"της" + +#: kallithea/controllers/files.py:517 +msgid "Downloads disabled" +msgstr "Οι μεταφορτώσεις απενεργοποιήθηκαν" + +#: kallithea/controllers/files.py:528 +#, python-format +msgid "Unknown revision %s" +msgstr "Άγνωστη αναθεώρηση %s" + +#: kallithea/controllers/files.py:530 +msgid "Empty repository" +msgstr "Άδειο αποθετήριο" + +#: kallithea/controllers/files.py:532 +msgid "Unknown archive type" +msgstr "Άγνωστος τύπος αρχειοθέτησης" + +#: kallithea/controllers/files.py:755 +#: kallithea/templates/changeset/changeset_range.html:9 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 +msgid "Changesets" +msgstr "Σετ αλλαγών" + +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 +msgid "Branches" +msgstr "Κλάδοι" + +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 +msgid "Tags" +msgstr "Ετικέτες" + +#: kallithea/controllers/forks.py:176 +#, python-format +msgid "An error occurred during repository forking %s" +msgstr "Συνέβει ένα λάθος κατά την διακλάδωση του αποθετηρίου %s" + +#: kallithea/controllers/home.py:77 +msgid "Groups" +msgstr "Ομάδες" + +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 +#: kallithea/templates/admin/repos/repo_add.html:12 +#: kallithea/templates/admin/repos/repo_add.html:16 +#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/users/user_edit_advanced.html:6 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 +msgid "Repositories" +msgstr "Αποθετήρια" + +#: kallithea/controllers/home.py:120 +#: kallithea/templates/files/files_add.html:32 +#: kallithea/templates/files/files_delete.html:23 +#: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 +msgid "Branch" +msgstr "Κλάδος" + +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "Κλειστοί Κλάδοι" + +#: kallithea/controllers/home.py:132 +msgid "Tag" +msgstr "Ετικέτα" + +#: kallithea/controllers/home.py:138 +msgid "Bookmark" +msgstr "Σελιδοδείκτης" + +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 +#: kallithea/templates/journal/public_journal.html:4 +#: kallithea/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "Δημόσιο Ημερολόγιο" + +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 +msgid "Journal" +msgstr "Ημερολόγιο" + +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 +msgid "Bad captcha" +msgstr "Λάθος captcha" + +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "Εγγραφήκατε επιτυχώς στο %s" + +#: kallithea/controllers/login.py:193 +msgid "A password reset confirmation code has been sent" +msgstr "Στάλθηκε ένας κωδικός επιβεβαίωσης επαναφοράς του συνθηματικού" + +#: kallithea/controllers/login.py:242 +msgid "Invalid password reset token" +msgstr "Άκυρο τεκμήριο (token) επαναφοράς του συνθηματικού" + +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 +msgid "Successfully updated password" +msgstr "Το συνθηματικό ενημερώθηκε επιτυχώς" + +#: kallithea/controllers/pullrequests.py:73 +#, python-format +msgid "Invalid reviewer \"%s\" specified" +msgstr "Καθορίστηκε άκυρος σχολιαστής \"%s\"" + +#: kallithea/controllers/pullrequests.py:135 +#, python-format +msgid "%s (closed)" +msgstr "%s (κλειστό)" + +#: kallithea/controllers/pullrequests.py:162 +#: kallithea/templates/changeset/changeset.html:12 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 +msgid "Changeset" +msgstr "Σετ αλλαγών" + +#: kallithea/controllers/pullrequests.py:183 +msgid "Special" +msgstr "Ειδικός" + +#: kallithea/controllers/pullrequests.py:184 +msgid "Peer branches" +msgstr "Ομότιμοι κλάδοι" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 +msgid "Bookmarks" +msgstr "Σελιδοδείκτες" + +#: kallithea/controllers/pullrequests.py:326 +#, python-format +msgid "Error creating pull request: %s" +msgstr "Λάθος στη δημιουργία αιτήματος έλξης - pull request: %s" + +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 +msgid "Error occurred while creating pull request" +msgstr "Λάθος κατά τη δημιουργία αιτήματος έλξης (pull request)" + +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "Ένα νέο αίτημα έλξης (pull request) δημιουργήθηκε επιτυχώς" + +#: kallithea/controllers/pullrequests.py:381 +#, fuzzy +#| msgid "Pull request update created" +msgid "New pull request iteration created" +msgstr "Δημιουργήθηκε ενημέρωση αιτήματος έλξης" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "Χωρίς περιγραφή" + +#: kallithea/controllers/pullrequests.py:439 +msgid "Pull request updated" +msgstr "Ενημερώθηκε η αίτηση έλξης" + +#: kallithea/controllers/pullrequests.py:453 +msgid "Successfully deleted pull request" +msgstr "Επιτυχής διαγραφή αιτήματος έλξης" + +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "Δεν βρέθηκαν σετ αλλαγών για ενημέρωση αυτού του αιτήματος έλξης." + +#: kallithea/controllers/pullrequests.py:532 +#, python-format +msgid "This pull request has already been merged to %s." +msgstr "Το αίτημα έλξης έχει ήδη συγχωνευτεί με το %s." + +#: kallithea/controllers/pullrequests.py:534 +msgid "This pull request has been closed and can not be updated." +msgstr "Αυτό το αίτημα έλξης έχει κλείσει και δεν μπορεί να ενημερωθεί." + +#: kallithea/controllers/pullrequests.py:552 +#, fuzzy, python-format +#| msgid "The following changes are available on %s:" +msgid "The following additional changes are available on %s:" +msgstr "Οι ακόλουθες αλλαγές είναι διαθέσιμες στο %s:" + +#: kallithea/controllers/pullrequests.py:556 +#, fuzzy +#| msgid "No changesets found for updating this pull request." +msgid "No additional changesets found for iterating on this pull request." +msgstr "Δεν βρέθηκαν σετ αλλαγών για ενημέρωση αυτού του αιτήματος έλξης." + +#: kallithea/controllers/pullrequests.py:564 +#, python-format +msgid "Note: Branch %s has another head: %s." +msgstr "Σημείωση: Ο κλάδος %s έχει άλλη κεφαλή (head): %s." + +#: kallithea/controllers/pullrequests.py:571 +#, fuzzy +#| msgid "Git pull requests don't support updates yet." +msgid "Git pull requests don't support iterating yet." +msgstr "Αιτήματα έλξης του git δεν υποστηρίζουν ακόμα ενημερώσεις." + +#: kallithea/controllers/pullrequests.py:573 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "Δεν βρέθηκαν σετ αλλαγών για ενημέρωση αυτού του αιτήματος έλξης." + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 +msgid "No permission to change pull request status" +msgstr "Χωρίς δικαιώματα αλλαγής της κατάστασης του αιτήματος έλξης" + +#: kallithea/controllers/pullrequests.py:676 +#, python-format +msgid "Successfully deleted pull request %s" +msgstr "Επιτυχής διαγραφή αιτήματος έλξης %s" + +#: kallithea/controllers/search.py:134 +msgid "Invalid search query. Try quoting it." +msgstr "Άκυρο αίτημα αναζήτησης. Δοκιμάστε με εισαγωγικά." + +#: kallithea/controllers/search.py:139 +msgid "There is no index to search in. Please run whoosh indexer" +msgstr "" +"Δεν υπάρχει ευρετήριο για την αναζήτηση. Παρακαλώ τρέξτε τον whoosh για " +"την δημιουργία του" + +#: kallithea/controllers/search.py:143 +msgid "An error occurred during search operation." +msgstr "Ένα λάθος συνέβη κατά την διαδικασία αναζήτησης." + +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 +msgid "No data ready yet" +msgstr "Δεν υπάρχουν ακόμα έτοιμα δεδομένα" + +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 +msgid "Statistics are disabled for this repository" +msgstr "Τα στατιστικά είναι απενεργοποιημένα για αυτό το αποθετήριο" + +#: kallithea/controllers/admin/auth_settings.py:135 +msgid "Auth settings updated successfully" +msgstr "Οι ρυθμίσεις εξουσιοδότησης ενημερώθηκαν επιτυχώς" + +#: kallithea/controllers/admin/auth_settings.py:146 +msgid "error occurred during update of auth settings" +msgstr "παρουσιάστηκε βλάβη κατά την ενημέρωση των ρυθμίσεων εξουσιοδότησης" + +#: kallithea/controllers/admin/defaults.py:75 +msgid "Default settings updated successfully" +msgstr "Οι προεπιλεγμένες ρυθμίσεις ενημερώθηκαν επιτυχώς" + +#: kallithea/controllers/admin/defaults.py:90 +msgid "Error occurred during update of defaults" +msgstr "Συνέβη μία βλάβη κατά την ενημέρωση των προεπιλογών" + +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "Πάντα" + +#: kallithea/controllers/admin/gists.py:59 +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" +msgstr "5 λεπτά" + +#: kallithea/controllers/admin/gists.py:60 +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" +msgstr "1 ώρα" + +#: kallithea/controllers/admin/gists.py:61 +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 +msgid "1 day" +msgstr "1 ημέρα" + +#: kallithea/controllers/admin/gists.py:62 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 +msgid "1 month" +msgstr "1 μήνας" + +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 +msgid "Lifetime" +msgstr "Διάρκεια ζωής" + +#: kallithea/controllers/admin/gists.py:141 +msgid "Error occurred during gist creation" +msgstr "Συνέβη μία βλάβη κατά τη δημιουργία του gist" + +#: kallithea/controllers/admin/gists.py:159 +#, python-format +msgid "Deleted gist %s" +msgstr "Διαγράφηκε το gist %s" + +#: kallithea/controllers/admin/gists.py:200 +msgid "Unmodified" +msgstr "Mη τροποποιημένo" + +#: kallithea/controllers/admin/gists.py:229 +msgid "Successfully updated gist content" +msgstr "Το περιεχόμενο του gist ενημερώθηκε επιτυχώς" + +#: kallithea/controllers/admin/gists.py:234 +msgid "Successfully updated gist data" +msgstr "Τα δεδομένα του gist ενημερώθηκαν επιτυχώς" + +#: kallithea/controllers/admin/gists.py:237 +#, python-format +msgid "Error occurred during update of gist %s" +msgstr "Σφάλμα συνέβη κατά την ενημέρωση του gist %s" + +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 +msgid "You can't edit this user since it's crucial for entire application" +msgstr "" +"Δεν μπορείτε να επεξεργαστείτε αυτόν το χρήστη καθώς είναι κρίσιμος για " +"όλη την εφαρμογή" + +#: kallithea/controllers/admin/my_account.py:119 +msgid "Your account was updated successfully" +msgstr "Ο λογαριασμός σας ενημερώθηκε επιτυχώς" + +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 +#, python-format +msgid "Error occurred during update of user %s" +msgstr "Συνέβη ένα σφάλμα κατά την ενημέρωση του χρήστη %s" + +#: kallithea/controllers/admin/my_account.py:168 +msgid "Error occurred during update of user password" +msgstr "Συνέβη ένα σφάλμα κατά την ενημέρωση του κωδικού του χρήστη" + +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 +#, python-format +msgid "Added email %s to user" +msgstr "Προστέθηκε το email %s στον χρήστη" + +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 +msgid "An error occurred during email saving" +msgstr "Συνέβη ένα σφάλμα κατά την αποθήκευση του email" + +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 +msgid "Removed email from user" +msgstr "Αφαιρέθηκε το email από τον χρήστη" + +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 +msgid "API key successfully created" +msgstr "Το API κλειδί δημιουργήθηκε επιτυχώς" + +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 +msgid "API key successfully reset" +msgstr "Το API κλειδί επαναφέρθηκε επιτυχώς" + +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 +msgid "API key successfully deleted" +msgstr "Το API κλειδί διαγράφηκε επιτυχώς" + +#: kallithea/controllers/admin/permissions.py:63 +#: kallithea/controllers/admin/permissions.py:67 +#: kallithea/controllers/admin/permissions.py:71 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "Ανάγνωση" + +#: kallithea/controllers/admin/permissions.py:64 +#: kallithea/controllers/admin/permissions.py:68 +#: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "Εγγραφή" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 +#: kallithea/templates/admin/auth/auth_settings.html:9 +#: kallithea/templates/admin/defaults/defaults.html:9 +#: kallithea/templates/admin/permissions/permissions.html:9 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:9 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/admin/repos/repo_add.html:10 +#: kallithea/templates/admin/repos/repo_add.html:14 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 +#: kallithea/templates/admin/settings/settings.html:9 +#: kallithea/templates/admin/user_groups/user_group_add.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/admin/users/user_add.html:8 +#: kallithea/templates/admin/users/user_edit.html:9 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 +#: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 +msgid "Admin" +msgstr "Διαχειριστής" + +#: kallithea/controllers/admin/permissions.py:76 +#: kallithea/controllers/admin/permissions.py:87 +#: kallithea/controllers/admin/permissions.py:92 +#: kallithea/controllers/admin/permissions.py:95 +#: kallithea/controllers/admin/permissions.py:98 +#: kallithea/controllers/admin/permissions.py:101 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "Απενεργοποιημένο" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "Επιτρέπεται με χειροποίητη ενεργοποίηση του λογαριασμού" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "Επιτρέπεται με αυτόματη ενεργοποίηση του λογαριασμού" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "Χειροποίητη ενεργοποίηση εξωτερικού λογαριασμού" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "Αυτόματη ενεργοποίηση εξωτερικού λογαριασμού" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 +msgid "Enabled" +msgstr "Ενεργό" + +#: kallithea/controllers/admin/permissions.py:125 +msgid "Global permissions updated successfully" +msgstr "Τα καθολικά δικαιώματα ενημερώθηκαν επιτυχώς" + +#: kallithea/controllers/admin/permissions.py:140 +msgid "Error occurred during update of permissions" +msgstr "Συνέβει μια βλάβη κατά την ενημέρωση των δικαιωμάτων" + +#: kallithea/controllers/admin/repo_groups.py:180 +#, python-format +msgid "Error occurred during creation of repository group %s" +msgstr "Συνέβει μια βλάβη κατά την δημιουργία της ομάδας αποθετηρίου %s" + +#: kallithea/controllers/admin/repo_groups.py:185 +#, python-format +msgid "Created repository group %s" +msgstr "Δημιουργήθηκε η ομάδα αποθετηρίου %s" + +#: kallithea/controllers/admin/repo_groups.py:232 +#, python-format +msgid "Updated repository group %s" +msgstr "Ενημερώθηκε η ομάδα αποθετηρίου %s" + +#: kallithea/controllers/admin/repo_groups.py:248 +#, python-format +msgid "Error occurred during update of repository group %s" +msgstr "Συνέβει μια βλάβη κατά την ενημέρωση της ομάδας αποθετηρίου %s" + +#: kallithea/controllers/admin/repo_groups.py:258 +#, python-format +msgid "This group contains %s repositories and cannot be deleted" +msgstr "Αυτή η ομάδα περιέχει %s αποθετήρια και δε μπορεί να διαγραφεί" + +#: kallithea/controllers/admin/repo_groups.py:265 +#, python-format +msgid "This group contains %s subgroups and cannot be deleted" +msgstr "Αυτή η ομάδα περιέχει %s υποομάδες και δε μπορεί να διαγραφεί" + +#: kallithea/controllers/admin/repo_groups.py:271 +#, python-format +msgid "Removed repository group %s" +msgstr "Αφαιρέθηκε η ομάδα αποθετηρίου %s" + +#: kallithea/controllers/admin/repo_groups.py:276 +#, python-format +msgid "Error occurred during deletion of repository group %s" +msgstr "Συνέβει μια βλάβη κατά την διαγραφή της ομάδας αποθετηρίου %s" + +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 +msgid "Cannot revoke permission for yourself as admin" +msgstr "Δεν μπορείτε να ανακαλέσετε την άδεια σας ως διαχειριστής" + +#: kallithea/controllers/admin/repo_groups.py:376 +msgid "Repository group permissions updated" +msgstr "Τα δικαιώματα της ομάδας αποθετηρίου ενημερώθηκαν" + +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 +msgid "An error occurred during revoking of permission" +msgstr "Συνέβει μια βλάβη κατά την ανάκληση της άδειας" + +#: kallithea/controllers/admin/repos.py:138 +#, python-format +msgid "Error creating repository %s" +msgstr "Βλάβη κατά τη δημιουργία του αποθετηρίου %s" + +#: kallithea/controllers/admin/repos.py:198 +#, python-format +msgid "Created repository %s from %s" +msgstr "Δημιουργήθηκε το αποθετήριο %s από το %s" + +#: kallithea/controllers/admin/repos.py:207 +#, python-format +msgid "Forked repository %s as %s" +msgstr "Κλωνοποιήθηκε το αποθετηρίο %s ως %s" + +#: kallithea/controllers/admin/repos.py:210 +#, python-format +msgid "Created repository %s" +msgstr "Δημιουργήθηκε το αποθετήριο %s" + +#: kallithea/controllers/admin/repos.py:239 +#, python-format +msgid "Repository %s updated successfully" +msgstr "Το αποθετήριο %s ενημερώθηκε επιτυχώς" + +#: kallithea/controllers/admin/repos.py:260 +#, python-format +msgid "Error occurred during update of repository %s" +msgstr "Συνέβει μια βλάβη κατά την ενημέρωση του αποθετηρίου %s" + +#: kallithea/controllers/admin/repos.py:278 +#, python-format +msgid "Detached %s forks" +msgstr "Αποσυνδέθηκαν %s κλώνοι" + +#: kallithea/controllers/admin/repos.py:281 +#, python-format +msgid "Deleted %s forks" +msgstr "Διαγράφηκαν %s κλώνοι" + +#: kallithea/controllers/admin/repos.py:286 +#, python-format +msgid "Deleted repository %s" +msgstr "Διαγράφηκε το αποθετήριο %s" + +#: kallithea/controllers/admin/repos.py:289 +#, python-format +msgid "Cannot delete repository %s which still has forks" +msgstr "Δε μπορεί να διαγραφεί το αποθετήριο %s που ακόμα έχει κλώνους" + +#: kallithea/controllers/admin/repos.py:294 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "Συνέβει μια βλάβη κατά την διαγραφή του %s" + +#: kallithea/controllers/admin/repos.py:338 +msgid "Repository permissions updated" +msgstr "Τα δικαιώματα του αποθετηρίου ενημερώθηκαν" + +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during creation of field" +msgid "An error occurred during creation of field: %r" +msgstr "Συνέβει μια βλάβη κατά τη δημιουργία του πεδίου" + +#: kallithea/controllers/admin/repos.py:405 +msgid "An error occurred during removal of field" +msgstr "Συνέβει μια βλάβη κατά την απομάκρυνση του πεδίου" + +#: kallithea/controllers/admin/repos.py:419 +msgid "-- Not a fork --" +msgstr "-- Όχι κλώνος --" + +#: kallithea/controllers/admin/repos.py:450 +msgid "Updated repository visibility in public journal" +msgstr "Ενημερώθηκε η ορατότητα του αποθετηρίου στο δημόσιο ημερολόγιο" + +#: kallithea/controllers/admin/repos.py:454 +msgid "An error occurred during setting this repository in public journal" +msgstr "" +"Συνέβει μια βλάβη κατά την τοποθέτηση αυτού το αποθετηρίου στο δημόσιο " +"ημερολόγιο" + +#: kallithea/controllers/admin/repos.py:471 +msgid "Nothing" +msgstr "Χωρίς" + +#: kallithea/controllers/admin/repos.py:473 +#, python-format +msgid "Marked repository %s as fork of %s" +msgstr "Σημειώθηκε το αποθετήριο %s σαν κλώνος του %s" + +#: kallithea/controllers/admin/repos.py:480 +msgid "An error occurred during this operation" +msgstr "Παρουσιάστηκε ένα σφάλμα κατά τη διάρκεια αυτής της λειτουργίας" + +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 +msgid "Repository has been locked" +msgstr "Το αποθετήριο έχει κλειδωθεί" + +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 +msgid "Repository has been unlocked" +msgstr "Το αποθετήριο έχει ξεκλειδωθεί" + +#: kallithea/controllers/admin/repos.py:502 +#: kallithea/controllers/admin/repos.py:521 +msgid "An error occurred during unlocking" +msgstr "Παρουσιάστηκε ένα σφάλμα κατά το ξεκλείδωμα" + +#: kallithea/controllers/admin/repos.py:533 +msgid "Cache invalidation successful" +msgstr "Η ακύρωση της cache ήταν επιτυχής" + +#: kallithea/controllers/admin/repos.py:537 +msgid "An error occurred during cache invalidation" +msgstr "Παρουσιάστηκε ένα σφάλμα κατά τη διάρκεια ακύρωσης της cache" + +#: kallithea/controllers/admin/repos.py:550 +msgid "Pulled from remote location" +msgstr "" + +#: kallithea/controllers/admin/repos.py:553 +msgid "An error occurred during pull from remote location" +msgstr "" + +#: kallithea/controllers/admin/repos.py:584 +msgid "An error occurred during deletion of repository stats" +msgstr "" + +#: kallithea/controllers/admin/settings.py:135 +msgid "Updated VCS settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 +msgid "" +"Unable to activate hgsubversion support. The \"hgsubversion\" library is " +"missing" +msgstr "" + +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 +msgid "Error occurred while updating application settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:174 +#, python-format +msgid "Repositories successfully rescanned. Added: %s. Removed: %s." +msgstr "" + +#: kallithea/controllers/admin/settings.py:189 +#, fuzzy, python-format +#| msgid "Deleted repository %s" +msgid "Invalidated %s repositories" +msgstr "Διαγράφηκε το αποθετήριο %s" + +#: kallithea/controllers/admin/settings.py:230 +msgid "Updated application settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:283 +msgid "Updated visualisation settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:288 +msgid "Error occurred during updating visualisation settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:312 +msgid "Please enter email address" +msgstr "" + +#: kallithea/controllers/admin/settings.py:327 +msgid "Send email task created" +msgstr "" + +#: kallithea/controllers/admin/settings.py:356 +msgid "Added new hook" +msgstr "" + +#: kallithea/controllers/admin/settings.py:370 +msgid "Updated hooks" +msgstr "" + +#: kallithea/controllers/admin/settings.py:374 +msgid "Error occurred during hook creation" +msgstr "" + +#: kallithea/controllers/admin/settings.py:398 +msgid "Whoosh reindex task scheduled" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:145 +#, python-format +msgid "Created user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:158 +#, python-format +msgid "Error occurred during creation of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:186 +#, python-format +msgid "Updated user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:208 +#, python-format +msgid "Error occurred during update of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:219 +msgid "Successfully deleted user group" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:224 +msgid "An error occurred during deletion of user group" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:284 +msgid "Target group cannot be the same" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:290 +msgid "User group permissions updated" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 +msgid "Updated permissions" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 +msgid "An error occurred during permissions saving" +msgstr "" + +#: kallithea/controllers/admin/users.py:125 +#, python-format +msgid "Created user %s" +msgstr "" + +#: kallithea/controllers/admin/users.py:140 +#, python-format +msgid "Error occurred during creation of user %s" +msgstr "" + +#: kallithea/controllers/admin/users.py:164 +msgid "User updated successfully" +msgstr "" + +#: kallithea/controllers/admin/users.py:192 +msgid "Successfully deleted user" +msgstr "" + +#: kallithea/controllers/admin/users.py:197 +msgid "An error occurred during deletion of user" +msgstr "" + +#: kallithea/controllers/admin/users.py:205 +msgid "The default user cannot be edited" +msgstr "" + +#: kallithea/controllers/admin/users.py:414 +#, python-format +msgid "Added IP address %s to user whitelist" +msgstr "" + +#: kallithea/controllers/admin/users.py:420 +msgid "An error occurred while adding IP address" +msgstr "" + +#: kallithea/controllers/admin/users.py:432 +msgid "Removed IP address from user whitelist" +msgstr "" + +#: kallithea/lib/auth.py:777 +#, python-format +msgid "IP %s not allowed" +msgstr "" + +#: kallithea/lib/auth.py:829 +msgid "You need to be a registered user to perform this action" +msgstr "" + +#: kallithea/lib/auth.py:857 +msgid "You need to be signed in to view this page" +msgstr "" + +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 +msgid "Repository not found in the filesystem" +msgstr "" + +#: kallithea/lib/base.py:617 +#, python-format +msgid "Changeset for %s %s not found in %s" +msgstr "" + +#: kallithea/lib/diffs.py:68 +msgid "Binary file" +msgstr "" + +#: kallithea/lib/diffs.py:89 +msgid "Changeset was too big and was cut off, use diff menu to display this diff" +msgstr "" + +#: kallithea/lib/diffs.py:99 +msgid "No changes detected" +msgstr "" + +#: kallithea/lib/helpers.py:600 +#, python-format +msgid "Deleted branch: %s" +msgstr "" + +#: kallithea/lib/helpers.py:602 +#, python-format +msgid "Created tag: %s" +msgstr "" + +#: kallithea/lib/helpers.py:613 +#, python-format +msgid "Changeset %s not found" +msgstr "" + +#: kallithea/lib/helpers.py:662 +#, python-format +msgid "Show all combined changesets %s->%s" +msgstr "" + +#: kallithea/lib/helpers.py:668 +msgid "Compare view" +msgstr "" + +#: kallithea/lib/helpers.py:687 +msgid "and" +msgstr "" + +#: kallithea/lib/helpers.py:688 +#, python-format +msgid "%s more" +msgstr "" + +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 +msgid "revisions" +msgstr "" + +#: kallithea/lib/helpers.py:713 +#, python-format +msgid "Fork name %s" +msgstr "" + +#: kallithea/lib/helpers.py:734 +#, python-format +msgid "Pull request %s" +msgstr "" + +#: kallithea/lib/helpers.py:744 +msgid "[deleted] repository" +msgstr "" + +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 +msgid "[created] repository" +msgstr "" + +#: kallithea/lib/helpers.py:748 +msgid "[created] repository as fork" +msgstr "" + +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 +msgid "[forked] repository" +msgstr "" + +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 +msgid "[updated] repository" +msgstr "" + +#: kallithea/lib/helpers.py:754 +msgid "[downloaded] archive from repository" +msgstr "" + +#: kallithea/lib/helpers.py:756 +msgid "[delete] repository" +msgstr "" + +#: kallithea/lib/helpers.py:764 +msgid "[created] user" +msgstr "" + +#: kallithea/lib/helpers.py:766 +msgid "[updated] user" +msgstr "" + +#: kallithea/lib/helpers.py:768 +msgid "[created] user group" +msgstr "" + +#: kallithea/lib/helpers.py:770 +msgid "[updated] user group" +msgstr "" + +#: kallithea/lib/helpers.py:772 +msgid "[commented] on revision in repository" +msgstr "" + +#: kallithea/lib/helpers.py:774 +msgid "[commented] on pull request for" +msgstr "" + +#: kallithea/lib/helpers.py:776 +msgid "[closed] pull request for" +msgstr "" + +#: kallithea/lib/helpers.py:778 +msgid "[pushed] into" +msgstr "" + +#: kallithea/lib/helpers.py:780 +msgid "[committed via Kallithea] into repository" +msgstr "" + +#: kallithea/lib/helpers.py:782 +msgid "[pulled from remote] into repository" +msgstr "" + +#: kallithea/lib/helpers.py:784 +msgid "[pulled] from" +msgstr "" + +#: kallithea/lib/helpers.py:786 +msgid "[started following] repository" +msgstr "" + +#: kallithea/lib/helpers.py:788 +msgid "[stopped following] repository" +msgstr "" + +#: kallithea/lib/helpers.py:913 +#, python-format +msgid " and %s more" +msgstr "" + +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 +msgid "No files" +msgstr "" + +#: kallithea/lib/helpers.py:942 +msgid "new file" +msgstr "" + +#: kallithea/lib/helpers.py:945 +msgid "mod" +msgstr "" + +#: kallithea/lib/helpers.py:948 +msgid "del" +msgstr "" + +#: kallithea/lib/helpers.py:951 +msgid "rename" +msgstr "" + +#: kallithea/lib/helpers.py:956 +msgid "chmod" +msgstr "" + +#: kallithea/lib/helpers.py:1230 +#, python-format +msgid "" +"%s repository is not mapped to db perhaps it was created or renamed from " +"the filesystem please run the application again in order to rescan " +"repositories" +msgstr "" + +#: kallithea/lib/utils2.py:387 +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:388 +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:389 +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:390 +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:391 +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:392 +#, python-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:408 +#, python-format +msgid "in %s" +msgstr "" + +#: kallithea/lib/utils2.py:410 +#, python-format +msgid "%s ago" +msgstr "" + +#: kallithea/lib/utils2.py:412 +#, python-format +msgid "in %s and %s" +msgstr "" + +#: kallithea/lib/utils2.py:415 +#, python-format +msgid "%s and %s ago" +msgstr "" + +#: kallithea/lib/utils2.py:418 +msgid "just now" +msgstr "" + +#: kallithea/model/comment.py:68 +#, python-format +msgid "on line %s" +msgstr "" + +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 +msgid "[Mention]" +msgstr "" + +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "" + +#: kallithea/model/db.py:1717 +msgid "Default user has no access to new repositories" +msgstr "" + +#: kallithea/model/db.py:1718 +msgid "Default user has read access to new repositories" +msgstr "" + +#: kallithea/model/db.py:1719 +msgid "Default user has write access to new repositories" +msgstr "" + +#: kallithea/model/db.py:1720 +msgid "Default user has admin access to new repositories" +msgstr "" + +#: kallithea/model/db.py:1722 +msgid "Default user has no access to new repository groups" +msgstr "" + +#: kallithea/model/db.py:1723 +msgid "Default user has read access to new repository groups" +msgstr "" + +#: kallithea/model/db.py:1724 +msgid "Default user has write access to new repository groups" +msgstr "" + +#: kallithea/model/db.py:1725 +msgid "Default user has admin access to new repository groups" +msgstr "" + +#: kallithea/model/db.py:1727 +msgid "Default user has no access to new user groups" +msgstr "" + +#: kallithea/model/db.py:1728 +msgid "Default user has read access to new user groups" +msgstr "" + +#: kallithea/model/db.py:1729 +msgid "Default user has write access to new user groups" +msgstr "" + +#: kallithea/model/db.py:1730 +msgid "Default user has admin access to new user groups" +msgstr "" + +#: kallithea/model/db.py:1732 +msgid "Only admins can create repository groups" +msgstr "" + +#: kallithea/model/db.py:1733 +msgid "Non-admins can create repository groups" +msgstr "" + +#: kallithea/model/db.py:1735 +msgid "Only admins can create user groups" +msgstr "" + +#: kallithea/model/db.py:1736 +msgid "Non-admins can create user groups" +msgstr "" + +#: kallithea/model/db.py:1738 +msgid "Only admins can create top level repositories" +msgstr "" + +#: kallithea/model/db.py:1739 +msgid "Non-admins can create top level repositories" +msgstr "" + +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 +msgid "Only admins can fork repositories" +msgstr "" + +#: kallithea/model/db.py:1745 +msgid "Non-admins can fork repositories" +msgstr "" + +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "" + +#: kallithea/model/db.py:1748 +msgid "User registration with manual account activation" +msgstr "" + +#: kallithea/model/db.py:1749 +msgid "User registration with automatic account activation" +msgstr "" + +#: kallithea/model/db.py:2276 +msgid "Not reviewed" +msgstr "" + +#: kallithea/model/db.py:2277 +msgid "Under review" +msgstr "" + +#: kallithea/model/db.py:2278 +msgid "Not approved" +msgstr "" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "" + +#: kallithea/model/forms.py:58 +msgid "Please enter a login" +msgstr "" + +#: kallithea/model/forms.py:59 +#, python-format +msgid "Enter a value %(min)i characters long or more" +msgstr "" + +#: kallithea/model/forms.py:67 +msgid "Please enter a password" +msgstr "" + +#: kallithea/model/forms.py:68 +#, python-format +msgid "Enter %(min)i characters or more" +msgstr "" + +#: kallithea/model/forms.py:167 +msgid "Name must not contain only digits" +msgstr "" + +#: kallithea/model/notification.py:240 +#, python-format +msgid "%(user)s commented on changeset %(age)s" +msgstr "" + +#: kallithea/model/notification.py:241 +#, python-format +msgid "%(user)s sent message %(age)s" +msgstr "" + +#: kallithea/model/notification.py:242 +#, python-format +msgid "%(user)s mentioned you %(age)s" +msgstr "" + +#: kallithea/model/notification.py:243 +#, python-format +msgid "%(user)s registered in Kallithea %(age)s" +msgstr "" + +#: kallithea/model/notification.py:244 +#, python-format +msgid "%(user)s opened new pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:245 +#, python-format +msgid "%(user)s commented on pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:252 +#, python-format +msgid "%(user)s commented on changeset at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:253 +#, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:254 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:255 +#, python-format +msgid "%(user)s registered in Kallithea at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:256 +#, python-format +msgid "%(user)s opened new pull request at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:257 +#, python-format +msgid "%(user)s commented on pull request at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:288 +#, python-format +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "" + +#: kallithea/model/notification.py:291 +#, python-format +msgid "New user %(new_username)s registered" +msgstr "" + +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 +msgid "Closing" +msgstr "" + +#: kallithea/model/pull_request.py:76 +#, python-format +msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" +msgstr "" + +#: kallithea/model/pull_request.py:211 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Cannot create empty pull request" +msgstr "Λάθος στη δημιουργία αιτήματος έλξης - pull request: %s" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +msgid "You are not authorized to create the pull request" +msgstr "" + +#: kallithea/model/pull_request.py:341 +#, fuzzy +#| msgid "Missing changesets since the previous pull request:" +msgid "Missing changesets since the previous iteration:" +msgstr "Ελλιπή σετ αλλαγών από την προηγούμενη αίτηση έλξης:" + +#: kallithea/model/pull_request.py:348 +#, fuzzy, python-format +#| msgid "New changesets on %s %s since the previous pull request:" +msgid "New changesets on %s %s since the previous iteration:" +msgstr "Καινούρια σετ αλλαγών στα %s %s από την προηγούμενη αίτηση έλξης:" + +#: kallithea/model/pull_request.py:355 +#, fuzzy +#| msgid "Ancestor didn't change - show diff since previous version:" +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "Το γονικό δεν άλλαξε - εμφάνισε τις διαφορές από την προηγούμενη έκδοση:" + +#: kallithea/model/pull_request.py:362 +#, fuzzy, python-format +#| msgid "" "This pull request is based on another %s revision and there is no +#| simple " "diff." +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" +"Αυτή η αίτηση έλξης είναι βασισμένη σε μία άλλη %s αναθεώρηση και δεν " +"υπάρχει ένα απλό diff." + +#: kallithea/model/pull_request.py:364 +#, fuzzy, python-format +#| msgid "No changes found on %s %s since previous version." +msgid "No changes found on %s %s since previous iteration." +msgstr "Δεν βρέθηκαν αλλαγές στο %s %s από την προηγούμενη έκδοση." + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 +msgid "latest tip" +msgstr "" + +#: kallithea/model/user.py:189 +msgid "New user registration" +msgstr "" + +#: kallithea/model/user.py:253 +msgid "You can't remove this user since it is crucial for the entire application" +msgstr "" + +#: kallithea/model/user.py:258 +#, python-format +msgid "" +"User \"%s\" still owns %s repositories and cannot be removed. Switch " +"owners or remove those repositories: %s" +msgstr "" + +#: kallithea/model/user.py:263 +#, python-format +msgid "" +"User \"%s\" still owns %s repository groups and cannot be removed. Switch" +" owners or remove those repository groups: %s" +msgstr "" + +#: kallithea/model/user.py:270 +#, python-format +msgid "" +"User \"%s\" still owns %s user groups and cannot be removed. Switch " +"owners or remove those user groups: %s" +msgstr "" + +#: kallithea/model/user.py:364 +msgid "Password reset link" +msgstr "" + +#: kallithea/model/user.py:413 +msgid "Password reset notification" +msgstr "" + +#: kallithea/model/user.py:414 +#, python-format +msgid "" +"The password to your account %s has been changed using password reset " +"form." +msgstr "" + +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 +msgid "Value cannot be an empty list" +msgstr "" + +#: kallithea/model/validators.py:73 +#, python-format +msgid "Username \"%(username)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:75 +#, python-format +msgid "Username \"%(username)s\" cannot be used" +msgstr "" + +#: kallithea/model/validators.py:77 +msgid "" +"Username may only contain alphanumeric characters underscores, periods or" +" dashes and must begin with an alphanumeric character or underscore" +msgstr "" + +#: kallithea/model/validators.py:104 +msgid "The input is not valid" +msgstr "" + +#: kallithea/model/validators.py:111 +#, python-format +msgid "Username %(username)s is not valid" +msgstr "" + +#: kallithea/model/validators.py:131 +msgid "Invalid user group name" +msgstr "" + +#: kallithea/model/validators.py:132 +#, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:134 +msgid "" +"user group name may only contain alphanumeric characters underscores, " +"periods or dashes and must begin with alphanumeric character" +msgstr "" + +#: kallithea/model/validators.py:174 +msgid "Cannot assign this group as parent" +msgstr "" + +#: kallithea/model/validators.py:175 +#, python-format +msgid "Group \"%(group_name)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:177 +#, python-format +msgid "Repository with name \"%(group_name)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:233 +msgid "Invalid characters (non-ascii) in password" +msgstr "" + +#: kallithea/model/validators.py:248 +msgid "Invalid old password" +msgstr "" + +#: kallithea/model/validators.py:264 +msgid "Passwords do not match" +msgstr "" + +#: kallithea/model/validators.py:279 +msgid "Invalid username or password" +msgstr "" + +#: kallithea/model/validators.py:310 +msgid "Token mismatch" +msgstr "" + +#: kallithea/model/validators.py:326 +#, python-format +msgid "Repository name %(repo)s is not allowed" +msgstr "" + +#: kallithea/model/validators.py:328 +#, python-format +msgid "Repository named %(repo)s already exists" +msgstr "" + +#: kallithea/model/validators.py:329 +#, python-format +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "" + +#: kallithea/model/validators.py:331 +#, python-format +msgid "Repository group with name \"%(repo)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:449 +msgid "Invalid repository URL" +msgstr "" + +#: kallithea/model/validators.py:450 +msgid "" +"Invalid repository URL. It must be a valid http, https, ssh, svn+http or " +"svn+https URL" +msgstr "" + +#: kallithea/model/validators.py:475 +msgid "Fork has to be the same type as parent" +msgstr "" + +#: kallithea/model/validators.py:490 +msgid "You don't have permissions to create repository in this group" +msgstr "" + +#: kallithea/model/validators.py:492 +msgid "no permission to create repository in root location" +msgstr "" + +#: kallithea/model/validators.py:542 +msgid "You don't have permissions to create a group in this location" +msgstr "" + +#: kallithea/model/validators.py:582 +msgid "This username or user group name is not valid" +msgstr "" + +#: kallithea/model/validators.py:675 +msgid "This is not a valid path" +msgstr "" + +#: kallithea/model/validators.py:692 +msgid "This email address is already in use" +msgstr "" + +#: kallithea/model/validators.py:712 +#, python-format +msgid "Email address \"%(email)s\" not found" +msgstr "" + +#: kallithea/model/validators.py:749 +msgid "" +"The LDAP Login attribute of the CN must be specified - this is the name " +"of the attribute that is equivalent to \"username\"" +msgstr "" + +#: kallithea/model/validators.py:761 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "" + +#: kallithea/model/validators.py:762 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" +msgstr "" + +#: kallithea/model/validators.py:795 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "" + +#: kallithea/model/validators.py:809 +msgid "Filename cannot be inside a directory" +msgstr "" + +#: kallithea/model/validators.py:825 +#, python-format +msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" +msgstr "" + +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 +msgid "About" +msgstr "" + +#: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 +#: kallithea/templates/admin/repos/repo_add.html:5 +#: kallithea/templates/admin/repos/repo_add.html:19 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 +msgid "Add Repository" +msgstr "" + +#: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 +msgid "Add Repository Group" +msgstr "" + +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 +msgid "You have admin right to this group, and can edit it" +msgstr "" + +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 +msgid "Edit Repository Group" +msgstr "" + +#: kallithea/templates/index_base.html:47 +#, fuzzy, python-format +#| msgid "Updated repository group %s" +msgid "Repository Group" +msgstr "Ενημερώθηκε η ομάδα αποθετηρίου %s" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 +#: kallithea/templates/pullrequests/pullrequest_show.html:38 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 +msgid "Description" +msgstr "" + +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 +msgid "Last Change" +msgstr "" + +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 +msgid "Tip" +msgstr "" + +#: kallithea/templates/index_base.html:95 +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 +#: kallithea/templates/admin/user_groups/user_groups.html:42 +#: kallithea/templates/pullrequests/pullrequest_data.html:16 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 +msgid "Owner" +msgstr "" + +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 +msgid "Log In" +msgstr "" + +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 +#, python-format +msgid "Log In to %s" +msgstr "" + +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 +#: kallithea/templates/admin/admin_log.html:5 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 +msgid "Username" +msgstr "" + +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 +msgid "Password" +msgstr "" + +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 +msgid "Forgot your password ?" +msgstr "" + +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 +msgid "Don't have an account ?" +msgstr "" + +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 +msgid "Sign In" +msgstr "" + +#: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 +msgid "Password Reset" +msgstr "" + +#: kallithea/templates/password_reset.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 +#, python-format +msgid "Reset Your Password to %s" +msgstr "" + +#: kallithea/templates/password_reset.html:14 +#: kallithea/templates/password_reset_confirmation.html:5 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 +msgid "Reset Your Password" +msgstr "" + +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 +msgid "Email Address" +msgstr "" + +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 +msgid "Captcha" +msgstr "" + +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 +msgid "Send Password Reset Email" +msgstr "" + +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 +msgid "" +"A password reset link will be sent to the specified email address if it " +"is registered in the system." +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 +#, python-format +msgid "You are about to set a new password for the email address %s." +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 +msgid "" +"Note that you must use the same browser session for this as the one used " +"to request the password reset." +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 +msgid "Code you received in the email" +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 +msgid "New Password" +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 +msgid "Confirm New Password" +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 +msgid "Confirm" +msgstr "" + +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 +msgid "Sign Up" +msgstr "" + +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 +#, python-format +msgid "Sign Up to %s" +msgstr "" + +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 +msgid "Re-enter password" +msgstr "" + +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 +msgid "First Name" +msgstr "" + +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 +msgid "Last Name" +msgstr "" + +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 +#: kallithea/templates/admin/settings/settings.html:31 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 +msgid "Email" +msgstr "" + +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 +msgid "Registered accounts are ready to use and need no further action." +msgstr "" + +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 +msgid "Please wait for an administrator to activate your account." +msgstr "" + +#: kallithea/templates/admin/admin.html:5 +#: kallithea/templates/admin/admin.html:13 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 +msgid "Admin Journal" +msgstr "" + +#: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 +msgid "journal filter..." +msgstr "" + +#: kallithea/templates/admin/admin.html:12 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 +msgid "Filter" +msgstr "" + +#: kallithea/templates/admin/admin.html:13 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 +#, python-format +msgid "%s Entry" +msgid_plural "%s Entries" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/admin/admin_log.html:6 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 +msgid "Action" +msgstr "" + +#: kallithea/templates/admin/admin_log.html:8 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 +msgid "Date" +msgstr "" + +#: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 +msgid "From IP" +msgstr "" + +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 +msgid "No actions yet" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 +msgid "Authentication Settings" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:11 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 +msgid "Authentication" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 +msgid "Authentication Plugins" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 +msgid "Enabled Plugins" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 +msgid "" +"Comma-separated list of plugins; Kallithea will try user authentication " +"in plugin order" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 +msgid "Available built-in plugins" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 +msgid "Plugin" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:101 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 +msgid "Save" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:5 +#: kallithea/templates/admin/defaults/defaults.html:11 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 +msgid "Repository Defaults" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 +msgid "Type" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 +msgid "Private repository" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 +msgid "Enable statistics" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 +msgid "Enable statistics window on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 +msgid "Enable downloads" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 +msgid "Enable download menu on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 +msgid "Enable locking" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 +msgid "Enable lock-by-pulling on repository." +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:5 +#: kallithea/templates/admin/gists/edit.html:18 +msgid "Edit Gist" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:35 +#, python-format +msgid "" +"Gist was update since you started editing. Copy your changes and click " +"%(here)s to reload new version." +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 +msgid "Gist description ..." +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 +msgid "Gist lifetime" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/edit.html:61 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/gists/show.html:47 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 +msgid "Expires" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 +msgid "Never" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:145 +msgid "Update Gist" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:146 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 +msgid "Cancel" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:6 +#: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 +#, python-format +msgid "Private Gists for User %s" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:8 +#: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 +#, python-format +msgid "Public Gists for User %s" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:10 +#: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 +msgid "Public Gists" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:37 +#: kallithea/templates/admin/gists/show.html:25 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 +msgid "Create New Gist" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 +msgid "Created" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 +msgid "There are no gists yet" +msgstr "" + +#: kallithea/templates/admin/gists/new.html:5 +#: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 +msgid "New Gist" +msgstr "" + +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 +msgid "Create Private Gist" +msgstr "" + +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 +msgid "Create Public Gist" +msgstr "" + +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 +msgid "Reset" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:5 +#: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 +msgid "Gist" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:10 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 +msgid "URL" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:37 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 +msgid "Private Gist" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 +#: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 +msgid "Delete" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +msgid "Confirm to delete this Gist" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:63 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 +msgid "Show as Raw" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 +msgid "created" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 +msgid "Show as raw" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:5 +#: kallithea/templates/admin/my_account/my_account.html:9 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 +msgid "My Account" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:25 +#: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 +msgid "Profile" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 +msgid "Email Addresses" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:28 +#: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 +msgid "API Keys" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 +msgid "Owned Repositories" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 +msgid "Watched Repositories" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:31 +#: kallithea/templates/admin/permissions/permissions.html:30 +#: kallithea/templates/admin/user_groups/user_group_edit.html:32 +#: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 +msgid "Show Permissions" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 +msgid "Built-in" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 +#, python-format +msgid "Confirm to reset this API key: %s" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 +msgid "Expired" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 +#, python-format +msgid "Confirm to remove this API key: %s" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 +msgid "Remove" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 +msgid "No additional API keys specified" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 +msgid "New API key" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 +msgid "Add" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 +msgid "Primary" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 +#, python-format +msgid "Confirm to delete this email: %s" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 +msgid "No additional emails specified." +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 +msgid "New email address" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:1 +msgid "Change Your Account Password" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:8 +msgid "Current password" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 +msgid "New password" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:22 +msgid "Confirm new password" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:39 +#, python-format +msgid "This account is managed with %s and the password cannot be changed here" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, python-format +msgid "Change %s avatar at" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:12 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 +msgid "Avatars are disabled" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 +msgid "Repositories You Own" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 +msgid "Repositories You are Watching" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:5 +#: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 +msgid "My Notifications" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 +msgid "All" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 +msgid "Comments" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:26 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 +msgid "Pull Requests" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 +msgid "Mark All Read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:12 +msgid "Mark as read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 +msgid "No notifications here yet" +msgstr "" + +#: kallithea/templates/admin/notifications/show_notification.html:5 +#: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 +msgid "Show Notification" +msgstr "" + +#: kallithea/templates/admin/notifications/show_notification.html:9 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 +msgid "Notifications" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions.html:5 +#: kallithea/templates/admin/permissions/permissions.html:11 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 +msgid "Default Permissions" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions.html:28 +#: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 +msgid "Global" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions.html:29 +#: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 +msgid "IP Whitelist" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 +msgid "Anonymous access" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 +#, python-format +msgid "" +"Allow access to Kallithea without needing to log in. Anonymous users use " +"%s user permissions." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 +msgid "" +"All default permissions on each repository will be reset to chosen " +"permission, note that all custom default permission on repositories will " +"be lost" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 +msgid "Apply to all existing repositories" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 +msgid "Permissions for the Default user on new repositories." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 +msgid "Repository group" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 +msgid "" +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups " +"will be lost" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 +msgid "Apply to all existing repository groups" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 +msgid "Permissions for the Default user on new repository groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 +msgid "User group" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 +msgid "" +"All default permissions on each user group will be reset to chosen " +"permission, note that all custom default permission on user groups will " +"be lost" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 +msgid "Apply to all existing user groups" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 +msgid "Permissions for the Default user on new user groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 +msgid "Top level repository creation" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 +msgid "Enable this to allow non-admins to create repositories at the top level." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 +msgid "" +"Note: This will also give all users API access to create repositories " +"everywhere. That might change in future versions." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 +msgid "Repository creation with group write access" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 +msgid "" +"With this, write permission to a repository group allows creating " +"repositories inside that group. Without this, group write permissions " +"mean nothing." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 +msgid "User group creation" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 +msgid "Enable this to allow non-admins to create user groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 +msgid "Repository forking" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 +msgid "Enable this to allow non-admins to fork repositories." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 +msgid "Registration" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 +msgid "External auth account activation" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 +#, python-format +msgid "Confirm to delete this IP address: %s" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 +msgid "All IP addresses are allowed." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 +msgid "New IP address" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:11 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 +msgid "Repository Groups" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 +msgid "Group name" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 +msgid "Group parent" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 +msgid "Copy parent group permissions" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 +msgid "Copy permission set from parent repository group." +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:5 +#, python-format +msgid "%s Repository Group Settings" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 +msgid "Add Child Group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 +#: kallithea/templates/admin/repos/repo_edit.html:12 +#: kallithea/templates/admin/repos/repo_edit.html:25 +#: kallithea/templates/admin/settings/settings.html:11 +#: kallithea/templates/admin/user_groups/user_group_edit.html:29 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 +msgid "Settings" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 +#: kallithea/templates/admin/user_groups/user_group_edit.html:30 +#: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 +msgid "Advanced" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 +#: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 +msgid "Permissions" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:1 +#, python-format +msgid "Repository Group: %s" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:6 +msgid "Top level repositories" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:7 +msgid "Total repositories" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:8 +msgid "Children groups" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 +#: kallithea/templates/admin/users/user_edit_advanced.html:8 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 +msgid "Created on" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 +#, python-format +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:25 +msgid "Delete this repository group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#, fuzzy +#| msgid "Disabled" +msgid "Visible" +msgstr "Απενεργοποιημένο" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "No response" +msgid "Add repos" +msgstr "Χωρίς απόκριση" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +msgid "Add/Edit groups" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 +msgid "User/User Group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 +msgid "Default" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 +msgid "Revoke" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 +msgid "Add new" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 +msgid "Apply to children" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 +msgid "Both" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 +msgid "" +"Set or revoke permission to all children of that group, including non-" +"private repositories and other groups if selected." +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 +msgid "" +"Enable lock-by-pulling on group. This option will be applied to all other" +" groups and repositories inside" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 +msgid "Remove this group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 +msgid "Confirm to delete this group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_show.html:4 +#, fuzzy, python-format +#| msgid "Updated repository group %s" +msgid "Repository group %s" +msgstr "Ενημερώθηκε η ομάδα αποθετηρίου %s" + +#: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 +msgid "Home" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 +msgid "with" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 +msgid "Repository Groups Administration" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 +msgid "Number of Top-level Repositories" +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 +msgid "Clone remote repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 +msgid "" +"Optional: URL of a remote repository. If set, the repository will be " +"created as a clone from this URL." +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 +msgid "Keep it short and to the point. Use a README file for longer descriptions." +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 +msgid "Optionally select a group to put this repository into." +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 +msgid "Type of repository to create." +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 +msgid "Landing revision" +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 +msgid "" +"Default revision for files page, downloads, full text search index and " +"readme generation" +msgstr "" + +#: kallithea/templates/admin/repos/repo_creating.html:9 +#, python-format +msgid "%s Creating Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_creating.html:13 +msgid "Creating repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_creating.html:27 +#, python-format +msgid "" +"Repository \"%(repo_name)s\" is being created, you will be redirected " +"when this process is finished.repo_name" +msgstr "" + +#: kallithea/templates/admin/repos/repo_creating.html:39 +msgid "" +"We're sorry but error occurred during this operation. Please check your " +"Kallithea server logs, or contact administrator." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 +#, python-format +msgid "%s Repository Settings" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 +msgid "Extra Fields" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 +msgid "Caches" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 +msgid "Remote" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/summary/statistics.html:8 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 +msgid "Statistics" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 +msgid "Parent" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 +msgid "Set" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 +msgid "Manually set this repository as a fork of another from the list." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 +msgid "Public Journal Visibility" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 +msgid "Remove from public journal" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 +msgid "Add to Public Journal" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 +msgid "" +"All actions done in this repository will be visible to everyone in the " +"public journal." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 +msgid "Change Locking" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 +msgid "Confirm to unlock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 +msgid "Unlock Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 +#, python-format +msgid "Locked by %s on %s" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 +msgid "Confirm to lock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 +msgid "Lock Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 +msgid "Repository is not locked" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 +msgid "" +"Force locking on the repository. Works only when anonymous access is " +"disabled. Triggering a pull locks the repository. The user who is " +"pulling locks the repository; only the user who pulled and locked it can " +"unlock it by doing a push." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 +#, python-format +msgid "Confirm to delete this repository: %s" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 +msgid "Delete this Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 +#, python-format +msgid "This repository has %s fork" +msgid_plural "This repository has %s forks" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 +msgid "Detach forks" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 +msgid "Delete forks" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 +msgid "" +"The deleted repository will be moved away and hidden until the " +"administrator expires it. The administrator can both permanently delete " +"it or restore it." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:4 +msgid "Invalidate Repository Cache" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 +msgid "" +"Manually invalidate cache for this repository. On first access, the " +"repository will be cached again." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 +msgid "List of Cached Values" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:12 +msgid "Prefix" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +msgid "Key" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 +msgid "Active" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +msgid "Label" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 +#, python-format +msgid "Confirm to delete this field: %s" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 +msgid "New field key" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 +msgid "New field label" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 +msgid "Enter short label" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 +msgid "New field description" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 +msgid "Enter description of a field" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 +msgid "Extra fields are disabled." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 +msgid "Private Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "Empty repository" +msgid "Fork of repository" +msgstr "Άδειο αποθετήριο" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 +msgid "Remote repository URL" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 +msgid "Pull Changes from Remote Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +msgid "Confirm to pull changes from remote repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 +msgid "This repository does not have a remote repository URL." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 +msgid "Permanent Repository ID" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 +msgid "What is that?" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 +msgid "URL by id" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 +msgid "" +"In case this repository is renamed or moved into another group the " +"repository URL changes.\n" +" Using the above permanent URL guarantees " +"that this repository always will be accessible on that URL.\n" +" This is useful for CI systems, or any " +"other cases that you need to hardcode the URL into a 3rd party service." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 +msgid "Remote repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 +msgid "Repository URL" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 +msgid "" +"Optional: URL of a remote repository. If set, the repository can be " +"pulled from this URL." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 +msgid "Default revision for files page, downloads, whoosh and readme" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 +msgid "Change owner of this repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 +msgid "Processed progress" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_statistics.html:10 +msgid "Reset Statistics" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_statistics.html:10 +msgid "Confirm to remove current statistics." +msgstr "" + +#: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 +msgid "Repositories Administration" +msgstr "" + +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 +msgid "State" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 +msgid "Settings Administration" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 +msgid "VCS" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 +msgid "Remap and Rescan" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 +msgid "Visual" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 +msgid "Hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 +msgid "Full Text Search" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 +msgid "System Info" +msgstr "" + +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 +msgid "Send test email to" +msgstr "" + +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 +msgid "Send" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 +msgid "Site branding" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 +msgid "HTTP authentication realm" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 +msgid "" +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 +msgid "ReCaptcha public key" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 +msgid "Public key for reCaptcha system." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 +msgid "ReCaptcha private key" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 +msgid "" +"Private key for reCaptcha system. Setting this value will enable captcha " +"on registration." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 +msgid "Save Settings" +msgstr "" + +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 +msgid "Built-in Mercurial Hooks (Read-Only)" +msgstr "" + +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 +msgid "" +"Hooks can be used to trigger actions on certain events such as push / " +"pull. They can trigger Python functions or external applications." +msgstr "" + +#: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 +msgid "Custom Hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 +msgid "Failed to remove hook" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:4 +msgid "Rescan options" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 +msgid "Delete records of missing repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 +msgid "" +"Check this option to remove all comments, pull requests and other records" +" related to repositories that no longer exist in the filesystem." +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 +msgid "Invalidate cache for all repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 +msgid "Check this to reload data and clear cache keys for all repositories." +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 +msgid "" +"Verify if Kallithea's Git hooks are installed for each repository. " +"Current hooks will be updated to the latest version." +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 +msgid "Overwrite existing Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 +msgid "" +"If installing Git hooks, overwrite any existing hooks, even if they do " +"not seem to come from Kallithea. WARNING: This operation will destroy any" +" custom git hooks you may have deployed by hand!" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 +msgid "Rescan Repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 +msgid "Index build option" +msgstr "" + +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + +#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 +msgid "" +"This option completely reindexeses all of the repositories for proper " +"fulltext search capabilities." +msgstr "" + +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 +msgid "Reindex" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Kallithea version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:8 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 +msgid "Upgrade info endpoint" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 +msgid "Note: please make sure this server can access this URL" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 +msgid "Python Packages" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 +msgid "Show repository size after push" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 +msgid "Log user push commands" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 +msgid "Log user pull commands" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 +msgid "Update repository after push (hg update)" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 +msgid "Mercurial extensions" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 +msgid "Enable largefiles extension" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 +msgid "Enable hgsubversion extension" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 +msgid "" +"Requires hgsubversion library to be installed. Enables cloning of remote " +"Subversion repositories while converting them to Mercurial." +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 +msgid "Location of repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 +msgid "" +"Click to unlock. You must restart Kallithea in order to make this setting" +" take effect." +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 +msgid "" +"Filesystem location where repositories are stored. After changing this " +"value, a restart and rescan of the repository folder are both required." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 +msgid "General" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 +msgid "Use repository extra fields" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 +msgid "Allows storing additional customized fields per repository." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 +msgid "Show Kallithea version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 +msgid "Shows or hides a version number of Kallithea displayed in the footer." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 +msgid "" +"Gravatar URL allows you to use another avatar server application.\n" +" The following " +"variables of the URL will be replaced accordingly.\n" +" {scheme} " +"'http' or 'https' sent from running Kallithea server,\n" +" {email} user " +"email,\n" +" {md5email} md5 " +"hash of the user email (like at gravatar.com),\n" +" {size} size " +"of the image that is expected from the server application,\n" +" {netloc} " +"network location/server host of running Kallithea server" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:43 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repositories" +msgid "Repository page size" +msgstr "Αποθετήρια" + +#: kallithea/templates/admin/settings/settings_visual.html:57 +msgid "" +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:65 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 +msgid "" +"Number of items displayed in the admin pages grids before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 +msgid "Icons" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 +msgid "Show public repository icon on repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 +msgid "Show public/private icons next to repository names." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 +msgid "Meta Tagging" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 +msgid "" +"Parses meta tags from the repository description field and turns them " +"into colored tags." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_add.html:5 +msgid "Add user group" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_add.html:10 +#: kallithea/templates/admin/user_groups/user_group_edit.html:11 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 +msgid "User Groups" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_add.html:12 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 +msgid "Add User Group" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 +msgid "Short, optional description for this user group." +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 +#, python-format +msgid "%s user group settings" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 +msgid "Show Members" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:1 +#, python-format +msgid "User Group: %s" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 +msgid "Members" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 +#, python-format +msgid "Confirm to delete this user group: %s" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:21 +msgid "Delete this user group" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 +msgid "No members yet" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 +msgid "Chosen group members" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 +msgid "Available members" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 +msgid "User Groups Administration" +msgstr "" + +#: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 +msgid "Add user" +msgstr "" + +#: kallithea/templates/admin/users/user_add.html:10 +#: kallithea/templates/admin/users/user_edit.html:11 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 +msgid "Users" +msgstr "" + +#: kallithea/templates/admin/users/user_add.html:12 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 +msgid "Add User" +msgstr "" + +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 +msgid "Password confirmation" +msgstr "" + +#: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 +#, python-format +msgid "%s user settings" +msgstr "" + +#: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 +msgid "Emails" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:1 +#, python-format +msgid "User: %s" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:7 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 +msgid "Source of Record" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:9 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 +msgid "Last Login" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:10 +msgid "Member of User Groups" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:21 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 +#, python-format +msgid "Confirm to delete this user: %s" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:23 +msgid "Delete this user" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 +#, python-format +msgid "Inherited from %s" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 +msgid "Name in Source of Record" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 +msgid "New password confirmation" +msgstr "" + +#: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 +msgid "Users Administration" +msgstr "" + +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 +msgid "Auth Type" +msgstr "" + +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 +#, python-format +msgid "Server instance: %s" +msgstr "" + +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 +msgid "Support" +msgstr "" + +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 +msgid "Mercurial repository" +msgstr "" + +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 +msgid "Git repository" +msgstr "" + +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 +msgid "Create Fork" +msgstr "" + +#: kallithea/templates/base/base.html:125 +#: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 +msgid "Summary" +msgstr "" + +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 +#: kallithea/templates/changelog/changelog.html:14 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 +msgid "Changelog" +msgstr "" + +#: kallithea/templates/base/base.html:131 +#: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 +msgid "Files" +msgstr "" + +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 +msgid "Options" +msgstr "" + +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" +msgstr "" + +#: kallithea/templates/base/base.html:155 +#: kallithea/tests/data/templates/base/base.html.py:399 +msgid "Unlock" +msgstr "" + +#: kallithea/templates/base/base.html:157 +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" +msgstr "" + +#: kallithea/templates/base/base.html:165 +#: kallithea/tests/data/templates/base/base.html.py:413 +msgid "Follow" +msgstr "" + +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 +msgid "Unfollow" +msgstr "" + +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 +msgid "Fork" +msgstr "" + +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 +msgid "Create Pull Request" +msgstr "" + +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 +#, python-format +msgid "Show Pull Requests for %s" +msgstr "" + +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 +msgid "Show recent activity" +msgstr "" + +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 +msgid "Public journal" +msgstr "" + +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 +msgid "Show public gists" +msgstr "" + +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 +msgid "Gists" +msgstr "" + +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 +msgid "All Public Gists" +msgstr "" + +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 +msgid "My Public Gists" +msgstr "" + +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 +msgid "My Private Gists" +msgstr "" + +#: kallithea/templates/base/base.html:319 +#: kallithea/tests/data/templates/base/base.html.py:540 +msgid "Search in repositories" +msgstr "" + +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 +msgid "My Pull Requests" +msgstr "" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 +msgid "Not Logged In" +msgstr "" + +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 +msgid "Login to Your Account" +msgstr "" + +#: kallithea/templates/base/base.html:385 +msgid "Forgot password?" +msgstr "" + +#: kallithea/templates/base/base.html:389 +msgid "Don't have an account?" +msgstr "" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 +msgid "Log Out" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 +msgid "Inherit defaults" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 +#, python-format +msgid "" +"Select to inherit global settings, IP whitelist and permissions from the " +"%s." +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 +msgid "Create repositories" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:33 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 +msgid "Create user groups" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 +msgid "Select this option to allow user group creation for this user" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 +msgid "Fork repositories" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 +msgid "Select this option to allow repository forking for this user" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:13 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 +msgid "Show" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 +msgid "No permissions defined yet" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:30 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 +msgid "Permission" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:32 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 +msgid "Edit Permission" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 +msgid "No permission defined" +msgstr "" + +#: kallithea/templates/base/root.html:25 +#: kallithea/tests/data/templates/base/root.html.py:85 +msgid "Add Another Comment" +msgstr "" + +#: kallithea/templates/base/root.html:26 +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 +msgid "Stop following this repository" +msgstr "" + +#: kallithea/templates/base/root.html:27 +#: kallithea/tests/data/templates/base/root.html.py:89 +msgid "Start following this repository" +msgstr "" + +#: kallithea/templates/base/root.html:28 +#: kallithea/tests/data/templates/base/root.html.py:91 +msgid "Group" +msgstr "" + +#: kallithea/templates/base/root.html:29 +#: kallithea/tests/data/templates/base/root.html.py:93 +msgid "members" +msgstr "" + +#: kallithea/templates/base/root.html:30 +#: kallithea/tests/data/templates/base/root.html.py:95 +msgid "Loading ..." +msgstr "" + +#: kallithea/templates/base/root.html:31 +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." +msgstr "" + +#: kallithea/templates/base/root.html:32 +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" +msgstr "" + +#: kallithea/templates/base/root.html:33 +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" +msgstr "" + +#: kallithea/templates/base/root.html:34 +#: kallithea/tests/data/templates/base/root.html.py:103 +msgid "Open New Pull Request from {0}" +msgstr "" + +#: kallithea/templates/base/root.html:35 +#: kallithea/tests/data/templates/base/root.html.py:105 +msgid "Open New Pull Request for {0} → {1}" +msgstr "" + +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 +msgid "Show Selected Changesets {0} → {1}" +msgstr "" + +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 +msgid "Selection Link" +msgstr "" + +#: kallithea/templates/base/root.html:38 +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 +msgid "Collapse Diff" +msgstr "" + +#: kallithea/templates/base/root.html:39 +#: kallithea/tests/data/templates/base/root.html.py:113 +msgid "Expand Diff" +msgstr "" + +#: kallithea/templates/base/root.html:40 +#: kallithea/tests/data/templates/base/root.html.py:115 +msgid "Failed to revoke permission" +msgstr "" + +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 +msgid "Confirm to revoke permission for {0}: {1} ?" +msgstr "" + +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "Επιλογή σετ αλλαγών" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 +msgid "Specify changeset" +msgstr "" + +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." +msgstr "" + +#: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 +#, python-format +msgid "%s Changelog" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 +#, python-format +msgid "showing %d out of %d revision" +msgid_plural "showing %d out of %d revisions" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 +msgid "Clear selection" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 +msgid "Go to tip of repository" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 +#, python-format +msgid "Compare fork with %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 +#, python-format +msgid "Compare fork with parent repository (%s)" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:63 +#: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 +msgid "Branch filter:" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 +#, python-format +msgid "" +"Changeset status: %s by %s\n" +"Click to open associated pull request %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, python-format +msgid "Changeset status: %s by %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 +msgid "Expand commit message" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 +msgid "Changeset has comments" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 +#, python-format +msgid "Bookmark %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 +#, python-format +msgid "Tag %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 +#, python-format +msgid "Branch %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 +msgid "There are no changes yet" +msgstr "" + +#: kallithea/templates/changelog/changelog_details.html:4 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 +msgid "Removed" +msgstr "" + +#: kallithea/templates/changelog/changelog_details.html:5 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 +msgid "Changed" +msgstr "" + +#: kallithea/templates/changelog/changelog_details.html:6 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 +msgid "Added" +msgstr "" + +#: kallithea/templates/changelog/changelog_details.html:8 +#: kallithea/templates/changelog/changelog_details.html:9 +#: kallithea/templates/changelog/changelog_details.html:10 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 +#, python-format +msgid "Affected %s files" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:8 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 +msgid "Commit Message" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:9 +#: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 +msgid "Age" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 +msgid "Refs" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 +msgid "Add or upload files directly via Kallithea" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:82 +#: kallithea/templates/files/files_add.html:21 +#: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 +msgid "Add New File" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 +msgid "Push new repository" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 +msgid "Existing repository?" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 +#, python-format +msgid "%s Changeset" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 +msgid "Parent rev." +msgstr "" + +#: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 +msgid "Child rev." +msgstr "" + +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 +msgid "Changeset status" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:54 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 +msgid "Raw diff" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 +msgid "Patch diff" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:60 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 +msgid "Download diff" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 +msgid "Merge" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 +msgid "Grafted from:" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 +msgid "Replaced by:" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 +msgid "Preceded by:" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 +#, python-format +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 +#, python-format +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 +msgid "Show full diff anyway" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 +msgid "No revisions" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 +msgid "on pull request" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 +msgid "No title" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 +msgid "on this changeset" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 +msgid "Delete comment?" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 +msgid "Status change" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +msgid "Set changeset status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +msgid "No change" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "Λάθος στη δημιουργία αιτήματος έλξης - pull request: %s" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +msgid "Close" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 +msgid "Submitting ..." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 +msgid "Comment" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 +msgid "You need to be logged in to comment." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 +msgid "Login now" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 +msgid "Hide" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 +#, python-format +msgid "%d comment" +msgid_plural "%d comments" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 +#, python-format +msgid "%d inline" +msgid_plural "%d inline" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 +#, python-format +msgid "%d general" +msgid_plural "%d general" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 +#, python-format +msgid "%s Changesets" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 +msgid "Files affected" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +msgid "File before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "Mη τροποποιημένo" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Άγνωστη αναθεώρηση %s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "Χωρίς όνομα αρχείου" + +#: kallithea/templates/changeset/diff_block.html:55 +#, fuzzy +#| msgid "New file type" +msgid "File after" +msgstr "Άγνωστος τύπος αρχειοθέτησης" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 +msgid "Show full diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 +msgid "Show full side-by-side diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 +msgid "Show inline comments" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 +msgid "No changesets" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 +msgid "First (oldest) changeset in this list" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 +msgid "Last (most recent) changeset in this list" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 +msgid "Position in this list of changesets" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 +msgid "is" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 +#, python-format +msgid "%s changesets" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 +msgid "behind" +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:6 +#: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 +#, python-format +msgid "%s Compare" +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:13 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 +msgid "Compare Revisions" +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 +msgid "Swap" +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 +msgid "Compare revisions, branches, bookmarks, or tags." +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 +#, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 +msgid "Show full diff" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 +msgid "Public repository" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 +msgid "Repository creation in progress..." +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 +msgid "No changesets yet" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 +msgid "Creating" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset" +msgid "Changeset on" +msgstr "Σετ αλλαγών" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "Κλάδος" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +msgid "Status change:" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "This pull request has been closed and can not be updated." +msgid "The pull request has been closed." +msgstr "Αυτό το αίτημα έλξης έχει κλείσει και δεν μπορεί να ενημερωθεί." + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 +#, python-format +msgid "Hello %s" +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 +msgid "We have received a request to reset the password for your account." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 +msgid "To set a new password, click the following link" +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 +msgid "" +"Should you not be able to use the link above, please type the following " +"code into the password reset form" +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 +msgid "" +"If it weren't you who requested the password reset, just disregard this " +"message." +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "Finish pull request" +msgid "Pull request from" +msgstr "Λάθος στη δημιουργία αιτήματος έλξης - pull request: %s" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +msgid "at" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "Λάθος στη δημιουργία αιτήματος έλξης - pull request: %s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "Pull Request %s \"%s\" Closed" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "Λάθος στη δημιουργία αιτήματος έλξης - pull request: %s" + +#: kallithea/templates/email_templates/registration.html:22 +msgid "Full Name" +msgstr "" + +#: kallithea/templates/files/diff_2way.html:15 +#, python-format +msgid "%s File side-by-side diff" +msgstr "" + +#: kallithea/templates/files/diff_2way.html:19 +#: kallithea/templates/files/file_diff.html:8 +msgid "File diff" +msgstr "" + +#: kallithea/templates/files/file_diff.html:4 +#, python-format +msgid "%s File Diff" +msgstr "" + +#: kallithea/templates/files/files.html:4 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 +#, python-format +msgid "%s Files" +msgstr "" + +#: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 +#, python-format +msgid "%s Files Add" +msgstr "" + +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 +#: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 +msgid "Location" +msgstr "" + +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 +msgid "Enter filename..." +msgstr "" + +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 +msgid "or" +msgstr "" + +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 +msgid "Upload File" +msgstr "" + +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 +msgid "Create New File" +msgstr "" + +#: kallithea/templates/files/files_add.html:53 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +#, fuzzy +msgid "New file type" +msgstr "Άγνωστος τύπος αρχειοθέτησης" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 +msgid "Commit Changes" +msgstr "" + +#: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 +msgid "Previous revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 +msgid "Next revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 +msgid "Follow current branch" +msgstr "" + +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 +msgid "Search File List" +msgstr "" + +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 +msgid "Loading file list..." +msgstr "" + +#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 +msgid "Size" +msgstr "" + +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 +msgid "Last Revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 +msgid "Last Modified" +msgstr "" + +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 +msgid "Last Committer" +msgstr "" + +#: kallithea/templates/files/files_delete.html:4 +#, python-format +msgid "%s Files Delete" +msgstr "" + +#: kallithea/templates/files/files_delete.html:12 +#: kallithea/templates/files/files_delete.html:30 +msgid "Delete file" +msgstr "" + +#: kallithea/templates/files/files_edit.html:4 +#, python-format +msgid "%s File Edit" +msgstr "" + +#: kallithea/templates/files/files_edit.html:21 +msgid "Edit file" +msgstr "" + +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 +msgid "Show Annotation" +msgstr "" + +#: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 +msgid "Source" +msgstr "" + +#: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 +#, python-format +msgid "%s author" +msgid_plural "%s authors" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 +msgid "Diff to Revision" +msgstr "" + +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 +msgid "Show at Revision" +msgstr "" + +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + +#: kallithea/templates/files/files_source.html:10 +#: kallithea/tests/data/templates/files/files_source.html.py:52 +msgid "Show Authors" +msgstr "" + +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 +msgid "Show Source" +msgstr "" + +#: kallithea/templates/files/files_source.html:34 +#, python-format +msgid "Edit on Branch: %s" +msgstr "" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" +msgstr "" + +#: kallithea/templates/files/files_source.html:41 +#: kallithea/tests/data/templates/files/files_source.html.py:94 +msgid "Deleting files allowed only when on branch head revision" +msgstr "" + +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 +#, python-format +msgid "Binary file (%s)" +msgstr "" + +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +msgid "File is too big to display." +msgstr "" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + +#: kallithea/templates/files/files_source.html:73 +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." +msgstr "" + +#: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 +msgid "annotation" +msgstr "" + +#: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 +msgid "Go Back" +msgstr "" + +#: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 +msgid "No files at given path" +msgstr "" + +#: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 +#, python-format +msgid "%s Followers" +msgstr "" + +#: kallithea/templates/followers/followers.html:9 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 +msgid "Followers" +msgstr "" + +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 +msgid "Started following -" +msgstr "" + +#: kallithea/templates/forks/fork.html:5 +#, python-format +msgid "Fork repository %s" +msgstr "" + +#: kallithea/templates/forks/fork.html:25 +msgid "Fork name" +msgstr "" + +#: kallithea/templates/forks/fork.html:53 +msgid "Default revision for files page, downloads, whoosh, and readme." +msgstr "" + +#: kallithea/templates/forks/fork.html:58 +msgid "Private" +msgstr "" + +#: kallithea/templates/forks/fork.html:66 +msgid "Copy permissions" +msgstr "" + +#: kallithea/templates/forks/fork.html:69 +msgid "Copy permissions from forked repository" +msgstr "" + +#: kallithea/templates/forks/fork.html:75 +msgid "Update after clone" +msgstr "" + +#: kallithea/templates/forks/fork.html:78 +msgid "Checkout source after making a clone" +msgstr "" + +#: kallithea/templates/forks/fork.html:85 +msgid "Fork this Repository" +msgstr "" + +#: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 +#, python-format +msgid "%s Forks" +msgstr "" + +#: kallithea/templates/forks/forks.html:9 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 +msgid "Forks" +msgstr "" + +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 +msgid "Forked" +msgstr "" + +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 +msgid "There are no forks yet" +msgstr "" + +#: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 +msgid "ATOM journal feed" +msgstr "" + +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 +msgid "RSS journal feed" +msgstr "" + +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 +msgid "My Repositories" +msgstr "" + +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 +msgid "No entries yet" +msgstr "" + +#: kallithea/templates/journal/public_journal.html:13 +msgid "ATOM public journal feed" +msgstr "" + +#: kallithea/templates/journal/public_journal.html:14 +msgid "RSS public journal feed" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:4 +#: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 +msgid "New Pull Request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:26 +#: kallithea/templates/pullrequests/pullrequest_data.html:15 +#: kallithea/templates/pullrequests/pullrequest_show.html:29 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 +msgid "Title" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 +msgid "Summarize the changes - or leave empty" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 +msgid "Write a short description on this pull request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 +msgid "Changeset flow" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 +msgid "Origin repository" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 +msgid "Destination repository" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:6 +msgid "No entries" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:14 +msgid "Vote" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:18 +msgid "From" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:19 +msgid "To" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:28 +#, python-format +msgid "You voted: %s" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:30 +msgid "You didn't vote" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:35 +msgid "(no title)" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:37 +#: kallithea/templates/pullrequests/pullrequest_show.html:31 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 +msgid "Closed" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:67 +msgid "Delete Pull Request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:68 +msgid "Confirm to delete this pull request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:70 +#, python-format +msgid "Confirm again to delete this pull request with %s comments" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 +#, python-format +msgid "%s Pull Request %s" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 +#, python-format +msgid "Pull request %s from %s#%s" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 +msgid "Summarize the changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 +msgid "Reviewer voting result" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:80 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 +msgid "Still not reviewed by" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 +#, python-format +msgid "%d reviewer" +msgid_plural "%d reviewers" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 +msgid "Pull request was reviewed by all reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 +msgid "There are no reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 +msgid "Origin" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 +msgid "on" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 +msgid "Target" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 +msgid "" +"This is just a range of changesets and doesn't have a target or a real " +"merge ancestor." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 +msgid "Pull changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +msgid "Next iteration" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 +msgid "Current revision - no change" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +msgid "Cancel Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 +msgid "Pull Request Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 +msgid "Remove reviewer" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 +msgid "Type name of reviewer to add" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 +msgid "Potential Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 +msgid "Click to add the repository owner as reviewer:" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:6 +#, python-format +msgid "%s Pull Requests" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:11 +#, python-format +msgid "Pull Requests from '%s'" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:13 +#, python-format +msgid "Pull Requests to '%s'" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 +msgid "Open New Pull Request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 +#, python-format +msgid "Show Pull Requests to %s" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 +#, python-format +msgid "Show Pull Requests from '%s'" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:28 +msgid "Hide closed pull requests (only show open pull requests)" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:30 +msgid "Show closed pull requests (in addition to open pull requests)" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 +msgid "Pull Requests Created by Me" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +msgid "Pull Requests Needing My Review" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 +msgid "Pull Requests I Participate In" +msgstr "" + +#: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 +#, python-format +msgid "%s Search" +msgstr "" + +#: kallithea/templates/search/search.html:8 +#: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 +msgid "Search in All Repositories" +msgstr "" + +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 +msgid "Search term" +msgstr "" + +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 +msgid "Search in" +msgstr "" + +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 +msgid "File contents" +msgstr "" + +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 +msgid "Commit messages" +msgstr "" + +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 +msgid "File names" +msgstr "" + +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 +msgid "Permission denied" +msgstr "" + +#: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 +#, python-format +msgid "%s Statistics" +msgstr "" + +#: kallithea/templates/summary/statistics.html:16 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 +#, python-format +msgid "%s ATOM feed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:17 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 +#, python-format +msgid "%s RSS feed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 +msgid "Enable" +msgstr "" + +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 +msgid "Stats gathered: " +msgstr "" + +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 +msgid "files" +msgstr "" + +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 +msgid "Show more" +msgstr "" + +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "" + +#: kallithea/templates/summary/statistics.html:390 +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:391 +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:393 +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" +msgstr "" + +#: kallithea/templates/summary/statistics.html:395 +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:396 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 +msgid "file removed" +msgstr "" + +#: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 +#, python-format +msgid "%s Summary" +msgstr "" + +#: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 +#, python-format +msgid "Repository locked by %s" +msgstr "" + +#: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 +msgid "Repository unlocked" +msgstr "" + +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 +msgid "Fork of" +msgstr "" + +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 +msgid "Clone from" +msgstr "" + +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "" + +#: kallithea/templates/summary/summary.html:72 +#: kallithea/tests/data/templates/summary/summary.html.py:143 +msgid "Show by Name" +msgstr "" + +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 +msgid "Trending files" +msgstr "" + +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "" + +#: kallithea/templates/summary/summary.html:108 +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" +msgstr "" + +#: kallithea/templates/summary/summary.html:112 +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" +msgstr "" + +#: kallithea/templates/summary/summary.html:114 +#: kallithea/tests/data/templates/summary/summary.html.py:196 +msgid "With subrepos" +msgstr "" + +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 +msgid "Feed" +msgstr "" + +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 +msgid "Latest Changes" +msgstr "" + +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 +msgid "Quick Start" +msgstr "" + +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 +#, python-format +msgid "Readme file from revision %s:%s" +msgstr "" + +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 +#, python-format +msgid "Download %s as %s" +msgstr "" + +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "" + +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "Αυτό το αίτημα έλξης μπορεί να ενημερωθεί με αλλαγές στο %s:" + +#~ msgid "Non-admins can can fork repositories" +#~ msgstr "" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "" + +#~ msgid "Commenting on line {1}." +#~ msgstr "" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" + +#~ msgid "Comment preview" +#~ msgstr "" + +#~ msgid "Preview" +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "" + +#~ msgid "New file mode" +#~ msgstr "" + +#~ msgid "File is too big to display" +#~ msgstr "" + +#~ msgid "Save as New Pull Request" +#~ msgstr "" + +#~ msgid "Pull Requests from %s'" +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "Κλειστό, αντικαταστάθηκε από %s." + +#~ msgid "Closing." +#~ msgstr "Κλείνει." + +#~ msgid "Changeset not found" +#~ msgstr "" + +#~ msgid "Repository no access" +#~ msgstr "" + +#~ msgid "Repository read access" +#~ msgstr "" + +#~ msgid "Repository write access" +#~ msgstr "" + +#~ msgid "Repository admin access" +#~ msgstr "" + +#~ msgid "Repository Group no access" +#~ msgstr "" + +#~ msgid "Repository Group read access" +#~ msgstr "" + +#~ msgid "Repository Group write access" +#~ msgstr "" + +#~ msgid "Repository Group admin access" +#~ msgstr "" + +#~ msgid "Repository creation disabled" +#~ msgstr "" + +#~ msgid "Repository creation enabled" +#~ msgstr "" + +#~ msgid "Repository forking disabled" +#~ msgstr "" + +#~ msgid "Repository forking enabled" +#~ msgstr "" + +#~ msgid "Register disabled" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "" + +#~ msgid "Not Reviewed" +#~ msgstr "" + +#~ msgid "Rejected" +#~ msgstr "" + +#~ msgid "Under Review" +#~ msgstr "" + +#~ msgid "Repository group no access" +#~ msgstr "" + +#~ msgid "Repository group read access" +#~ msgstr "" + +#~ msgid "Repository group write access" +#~ msgstr "" + +#~ msgid "Repository group admin access" +#~ msgstr "" + +#~ msgid "User group no access" +#~ msgstr "" + +#~ msgid "User group read access" +#~ msgstr "" + +#~ msgid "User group write access" +#~ msgstr "" + +#~ msgid "User group admin access" +#~ msgstr "" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "" + +#~ msgid "User Group creation disabled" +#~ msgstr "" + +#~ msgid "User Group creation enabled" +#~ msgstr "" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "repositories" +#~ msgstr "" + +#~ msgid "No repositories found." +#~ msgstr "" + +#~ msgid "There are no branches yet" +#~ msgstr "" + +#~ msgid "There are no tags yet" +#~ msgstr "" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "" + +#~ msgid "Update" +#~ msgstr "" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "Ένα νέο αίτημα έλξης (pull request) δημιουργήθηκε επιτυχώς" + +#~ msgid "%s Tags" +#~ msgstr "" + +#~ msgid "Compare Tags" +#~ msgstr "" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/en/LC_MESSAGES/kallithea.mo Binary file kallithea/i18n/en/LC_MESSAGES/kallithea.mo has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/es/LC_MESSAGES/kallithea.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/i18n/es/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,6953 @@ +# Spanish translations for Kallithea. +# Copyright (C) 2016 Various authors, licensing as GPLv3 +# This file is distributed under the same license as the Kallithea project. +# FIRST AUTHOR , 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: Kallithea 0.3\n" +"Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" +"PO-Revision-Date: 2016-03-08 09:09+0000\n" +"Last-Translator: Oscar Curero \n" +"Language-Team: Spanish " +"\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.5-dev\n" + +#: kallithea/controllers/changelog.py:86 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 +msgid "There are no changesets yet" +msgstr "Aún no hay cambios" + +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 +#: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 +msgid "None" +msgstr "Ninguno" + +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 +msgid "(closed)" +msgstr "(cerrado)" + +#: kallithea/controllers/changeset.py:85 +msgid "Show whitespace" +msgstr "Mostrar espacios en blanco" + +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 +msgid "Ignore whitespace" +msgstr "Ignorar espacios en blanco" + +#: kallithea/controllers/changeset.py:165 +#, python-format +msgid "Increase diff context to %(num)s lines" +msgstr "Aumentar el contexto del diff a %(num)s lineas" + +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 +#, fuzzy +msgid "Such revision does not exist for this repository" +msgstr "La revisión no existe en este repositorio" + +#: kallithea/controllers/compare.py:67 +#, python-format +msgid "Could not find other repository %s" +msgstr "" + +#: kallithea/controllers/compare.py:73 +#, fuzzy +#| msgid "Cannot compare repositories without using common ancestor" +msgid "Cannot compare repositories of different types" +msgstr "No se pueden comparar repositorios sin usar un ancestro común" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 +msgid "Cannot compare repositories without using common ancestor" +msgstr "No se pueden comparar repositorios sin usar un ancestro común" + +#: kallithea/controllers/error.py:70 +msgid "No response" +msgstr "No hay respuesta" + +#: kallithea/controllers/error.py:71 +msgid "Unknown error" +msgstr "Error desconocido" + +#: kallithea/controllers/error.py:84 +msgid "The request could not be understood by the server due to malformed syntax." +msgstr "" +"La petición no ha podido ser atendida por el servidor debido un error de " +"sintaxis." + +#: kallithea/controllers/error.py:87 +msgid "Unauthorized access to resource" +msgstr "Acceso no autorizado al recurso" + +#: kallithea/controllers/error.py:89 +msgid "You don't have permission to view this page" +msgstr "No tiene permiso para ver esta página" + +#: kallithea/controllers/error.py:91 +msgid "The resource could not be found" +msgstr "No se ha encontrado el recurso" + +#: kallithea/controllers/error.py:93 +msgid "" +"The server encountered an unexpected condition which prevented it from " +"fulfilling the request." +msgstr "" +"La petición no se ha podido completar debido a que el servidor encontró " +"un problema inesperado." + +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "El cambio era demasiado grande y se redució..." + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "%s anotó en %s" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 +#, python-format +msgid "%s %s feed" +msgstr "%s%s canal" + +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, fuzzy, python-format +msgid "Changes on %s repository" +msgstr "Cambios en %s repositorio" + +#: kallithea/controllers/files.py:93 +msgid "Click here to add new file" +msgstr "Haga clic aquí para añadir un archivo nuevo" + +#: kallithea/controllers/files.py:94 +#, python-format +msgid "There are no files yet. %s" +msgstr "Aún no hay archivos. %s" + +#: kallithea/controllers/files.py:191 +#, python-format +msgid "%s at %s" +msgstr "%s en %s" + +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 +#, python-format +msgid "This repository has been locked by %s on %s" +msgstr "Este repositorio ha sido bloqueado por %s en %s" + +#: kallithea/controllers/files.py:309 +msgid "You can only delete files with revision being a valid branch" +msgstr "Sólo puede borrar archivos si la revisión pertenece a una rama válida" + +#: kallithea/controllers/files.py:320 +#, python-format +msgid "Deleted file %s via Kallithea" +msgstr "Archivo %s eliminado mediante Kallithea" + +#: kallithea/controllers/files.py:342 +#, python-format +msgid "Successfully deleted file %s" +msgstr "El archivo %s se eliminó correctamente" + +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 +msgid "Error occurred during commit" +msgstr "Ocurrió un error al anotar los cambios" + +#: kallithea/controllers/files.py:369 +msgid "You can only edit files with revision being a valid branch" +msgstr "Sólo puede editar archivos si la revisión pertenece a una rama válida" + +#: kallithea/controllers/files.py:383 +#, python-format +msgid "Edited file %s via Kallithea" +msgstr "Archivo %s editado mediante Kallithea" + +#: kallithea/controllers/files.py:399 +msgid "No changes" +msgstr "No hay cambios" + +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 +#, python-format +msgid "Successfully committed to %s" +msgstr "Anotado correctamente a %s" + +#: kallithea/controllers/files.py:435 +msgid "Added file via Kallithea" +msgstr "Archivo añadido mediante Kallithea" + +#: kallithea/controllers/files.py:456 +msgid "No content" +msgstr "Sin contenido" + +#: kallithea/controllers/files.py:460 +msgid "No filename" +msgstr "Sin nombre de archivo" + +#: kallithea/controllers/files.py:485 +#, fuzzy +msgid "Location must be relative path and must not contain .. in path" +msgstr "La ruta debe ser relativa y no debe contener .. en la ruta" + +#: kallithea/controllers/files.py:517 +msgid "Downloads disabled" +msgstr "Descargas deshabilitadas" + +#: kallithea/controllers/files.py:528 +#, python-format +msgid "Unknown revision %s" +msgstr "Revisión desconocida %s" + +#: kallithea/controllers/files.py:530 +msgid "Empty repository" +msgstr "Repositorio vacío" + +#: kallithea/controllers/files.py:532 +msgid "Unknown archive type" +msgstr "Tipo de archivo desconocido" + +#: kallithea/controllers/files.py:755 +#: kallithea/templates/changeset/changeset_range.html:9 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 +msgid "Changesets" +msgstr "Cambios" + +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 +msgid "Branches" +msgstr "Ramas" + +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 +msgid "Tags" +msgstr "Etiquetas" + +#: kallithea/controllers/forks.py:176 +#, python-format +msgid "An error occurred during repository forking %s" +msgstr "Ocurrió un error mientras se bifurcaba el repositorio %s" + +#: kallithea/controllers/home.py:77 +msgid "Groups" +msgstr "Grupos" + +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 +#: kallithea/templates/admin/repos/repo_add.html:12 +#: kallithea/templates/admin/repos/repo_add.html:16 +#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/users/user_edit_advanced.html:6 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 +msgid "Repositories" +msgstr "Repositorios" + +#: kallithea/controllers/home.py:120 +#: kallithea/templates/files/files_add.html:32 +#: kallithea/templates/files/files_delete.html:23 +#: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 +msgid "Branch" +msgstr "Rama" + +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "Ramas cerradas" + +#: kallithea/controllers/home.py:132 +msgid "Tag" +msgstr "Etiqueta" + +#: kallithea/controllers/home.py:138 +msgid "Bookmark" +msgstr "Marcador" + +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 +#: kallithea/templates/journal/public_journal.html:4 +#: kallithea/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "Registro público" + +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 +msgid "Journal" +msgstr "Registro" + +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 +msgid "Bad captcha" +msgstr "CAPTCHA erróneo" + +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "El registro en %s se ha efectuado correctamente" + +#: kallithea/controllers/login.py:193 +msgid "A password reset confirmation code has been sent" +msgstr "Se ha enviado una confirmación de restauración de contraseña" + +#: kallithea/controllers/login.py:242 +msgid "Invalid password reset token" +msgstr "Señal de restauración de contraseña inválida" + +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 +msgid "Successfully updated password" +msgstr "Contraseña actualizada correctamente" + +#: kallithea/controllers/pullrequests.py:73 +#, python-format +msgid "Invalid reviewer \"%s\" specified" +msgstr "El validador \"%s\" no es correcto" + +#: kallithea/controllers/pullrequests.py:135 +#, python-format +msgid "%s (closed)" +msgstr "%s (cerrado)" + +#: kallithea/controllers/pullrequests.py:162 +#: kallithea/templates/changeset/changeset.html:12 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 +msgid "Changeset" +msgstr "Cambio" + +#: kallithea/controllers/pullrequests.py:183 +msgid "Special" +msgstr "Especial" + +#: kallithea/controllers/pullrequests.py:184 +#, fuzzy +msgid "Peer branches" +msgstr "Ramas de los pares" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 +msgid "Bookmarks" +msgstr "Marcadores" + +#: kallithea/controllers/pullrequests.py:326 +#, python-format +msgid "Error creating pull request: %s" +msgstr "Error al crear la petición de pull: %s" + +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 +msgid "Error occurred while creating pull request" +msgstr "Ocurrió un error al crear la petición de pull" + +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "La petición de pull se ha creado correctamente" + +#: kallithea/controllers/pullrequests.py:381 +#, fuzzy +#| msgid "Pull request update created" +msgid "New pull request iteration created" +msgstr "Actualización de la petición pull creada" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "No hay descripción" + +#: kallithea/controllers/pullrequests.py:439 +msgid "Pull request updated" +msgstr "Petición pull actualizada" + +#: kallithea/controllers/pullrequests.py:453 +msgid "Successfully deleted pull request" +msgstr "Petición pull eliminada correctamente" + +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "No se encontraron cambios para actualizar la petición pull." + +#: kallithea/controllers/pullrequests.py:532 +#, python-format +msgid "This pull request has already been merged to %s." +msgstr "La petición pull ya ha sido incluida a %s." + +#: kallithea/controllers/pullrequests.py:534 +msgid "This pull request has been closed and can not be updated." +msgstr "La petición pull esta cerrada y no se puede actualizar." + +#: kallithea/controllers/pullrequests.py:552 +#, fuzzy, python-format +#| msgid "The following changes are available on %s:" +msgid "The following additional changes are available on %s:" +msgstr "Los siguientes cambios están disponibles en %s:" + +#: kallithea/controllers/pullrequests.py:556 +#, fuzzy +#| msgid "No changesets found for updating this pull request." +msgid "No additional changesets found for iterating on this pull request." +msgstr "No se encontraron cambios para actualizar la petición pull." + +#: kallithea/controllers/pullrequests.py:564 +#, fuzzy, python-format +msgid "Note: Branch %s has another head: %s." +msgstr "Nota: la rama %s tiene otro head: %s." + +#: kallithea/controllers/pullrequests.py:571 +#, fuzzy +#| msgid "Git pull requests don't support updates yet." +msgid "Git pull requests don't support iterating yet." +msgstr "La peticiones pull de Git aún no soportan actualizaciones." + +#: kallithea/controllers/pullrequests.py:573 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "No se encontraron cambios para actualizar la petición pull." + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 +msgid "No permission to change pull request status" +msgstr "No tene permiso para cambiar el estado de la petición pull" + +#: kallithea/controllers/pullrequests.py:676 +#, python-format +msgid "Successfully deleted pull request %s" +msgstr "Petición de pull %s eliminada correctamente" + +#: kallithea/controllers/search.py:134 +msgid "Invalid search query. Try quoting it." +msgstr "Consulta de búsqueda inválida. Inténtelo entre comillas." + +#: kallithea/controllers/search.py:139 +msgid "There is no index to search in. Please run whoosh indexer" +msgstr "No hay ningún indice para buscar. Por favor, ejecute el indexador whoosh" + +#: kallithea/controllers/search.py:143 +msgid "An error occurred during search operation." +msgstr "Ocurrió un error mientras se ejecutaba la búsqueda." + +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 +msgid "No data ready yet" +msgstr "Todavía no hay datos disponibles" + +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 +msgid "Statistics are disabled for this repository" +msgstr "Las estadísticas están deshabilitadas en este repositorio" + +#: kallithea/controllers/admin/auth_settings.py:135 +msgid "Auth settings updated successfully" +msgstr "Los ajustes de autentificación se han actualizado correctamente" + +#: kallithea/controllers/admin/auth_settings.py:146 +msgid "error occurred during update of auth settings" +msgstr "ocurrió un error al actualizar los ajustes de autentificación" + +#: kallithea/controllers/admin/defaults.py:75 +msgid "Default settings updated successfully" +msgstr "Los ajustes predeterminados se han actualizado correctamente" + +#: kallithea/controllers/admin/defaults.py:90 +msgid "Error occurred during update of defaults" +msgstr "Ocurrió un error al actualizar los ajustes predeterminados" + +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "Para siempre" + +#: kallithea/controllers/admin/gists.py:59 +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" +msgstr "5 minutos" + +#: kallithea/controllers/admin/gists.py:60 +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" +msgstr "1 hora" + +#: kallithea/controllers/admin/gists.py:61 +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 +msgid "1 day" +msgstr "1 día" + +#: kallithea/controllers/admin/gists.py:62 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 +msgid "1 month" +msgstr "1 mes" + +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 +msgid "Lifetime" +msgstr "Tiempo de vida" + +#: kallithea/controllers/admin/gists.py:141 +msgid "Error occurred during gist creation" +msgstr "Ocurrió un error mientras se creaba el gist" + +#: kallithea/controllers/admin/gists.py:159 +#, python-format +msgid "Deleted gist %s" +msgstr "Gist %s eliminado" + +#: kallithea/controllers/admin/gists.py:200 +msgid "Unmodified" +msgstr "Sin modificar" + +#: kallithea/controllers/admin/gists.py:229 +msgid "Successfully updated gist content" +msgstr "Gist actualizado correctamente" + +#: kallithea/controllers/admin/gists.py:234 +msgid "Successfully updated gist data" +msgstr "" + +#: kallithea/controllers/admin/gists.py:237 +#, python-format +msgid "Error occurred during update of gist %s" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 +msgid "You can't edit this user since it's crucial for entire application" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:119 +msgid "Your account was updated successfully" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 +#, python-format +msgid "Error occurred during update of user %s" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:168 +msgid "Error occurred during update of user password" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 +#, python-format +msgid "Added email %s to user" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 +msgid "An error occurred during email saving" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 +msgid "Removed email from user" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 +msgid "API key successfully created" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 +msgid "API key successfully reset" +msgstr "" + +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 +msgid "API key successfully deleted" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:63 +#: kallithea/controllers/admin/permissions.py:67 +#: kallithea/controllers/admin/permissions.py:71 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:64 +#: kallithea/controllers/admin/permissions.py:68 +#: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 +#: kallithea/templates/admin/auth/auth_settings.html:9 +#: kallithea/templates/admin/defaults/defaults.html:9 +#: kallithea/templates/admin/permissions/permissions.html:9 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:9 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/admin/repos/repo_add.html:10 +#: kallithea/templates/admin/repos/repo_add.html:14 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 +#: kallithea/templates/admin/settings/settings.html:9 +#: kallithea/templates/admin/user_groups/user_group_add.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/admin/users/user_add.html:8 +#: kallithea/templates/admin/users/user_edit.html:9 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 +#: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 +msgid "Admin" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:76 +#: kallithea/controllers/admin/permissions.py:87 +#: kallithea/controllers/admin/permissions.py:92 +#: kallithea/controllers/admin/permissions.py:95 +#: kallithea/controllers/admin/permissions.py:98 +#: kallithea/controllers/admin/permissions.py:101 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 +msgid "Enabled" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:125 +msgid "Global permissions updated successfully" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:140 +msgid "Error occurred during update of permissions" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:180 +#, python-format +msgid "Error occurred during creation of repository group %s" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:185 +#, python-format +msgid "Created repository group %s" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:232 +#, python-format +msgid "Updated repository group %s" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:248 +#, python-format +msgid "Error occurred during update of repository group %s" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:258 +#, python-format +msgid "This group contains %s repositories and cannot be deleted" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:265 +#, python-format +msgid "This group contains %s subgroups and cannot be deleted" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:271 +#, python-format +msgid "Removed repository group %s" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:276 +#, python-format +msgid "Error occurred during deletion of repository group %s" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 +msgid "Cannot revoke permission for yourself as admin" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:376 +msgid "Repository group permissions updated" +msgstr "" + +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 +msgid "An error occurred during revoking of permission" +msgstr "" + +#: kallithea/controllers/admin/repos.py:138 +#, python-format +msgid "Error creating repository %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:198 +#, python-format +msgid "Created repository %s from %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:207 +#, python-format +msgid "Forked repository %s as %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:210 +#, python-format +msgid "Created repository %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:239 +#, python-format +msgid "Repository %s updated successfully" +msgstr "" + +#: kallithea/controllers/admin/repos.py:260 +#, python-format +msgid "Error occurred during update of repository %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:278 +#, python-format +msgid "Detached %s forks" +msgstr "" + +#: kallithea/controllers/admin/repos.py:281 +#, python-format +msgid "Deleted %s forks" +msgstr "" + +#: kallithea/controllers/admin/repos.py:286 +#, python-format +msgid "Deleted repository %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:289 +#, python-format +msgid "Cannot delete repository %s which still has forks" +msgstr "" + +#: kallithea/controllers/admin/repos.py:294 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:338 +msgid "Repository permissions updated" +msgstr "" + +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during repository forking %s" +msgid "An error occurred during creation of field: %r" +msgstr "Ocurrió un error mientras se bifurcaba el repositorio %s" + +#: kallithea/controllers/admin/repos.py:405 +msgid "An error occurred during removal of field" +msgstr "" + +#: kallithea/controllers/admin/repos.py:419 +msgid "-- Not a fork --" +msgstr "" + +#: kallithea/controllers/admin/repos.py:450 +msgid "Updated repository visibility in public journal" +msgstr "" + +#: kallithea/controllers/admin/repos.py:454 +msgid "An error occurred during setting this repository in public journal" +msgstr "" + +#: kallithea/controllers/admin/repos.py:471 +msgid "Nothing" +msgstr "" + +#: kallithea/controllers/admin/repos.py:473 +#, python-format +msgid "Marked repository %s as fork of %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:480 +msgid "An error occurred during this operation" +msgstr "" + +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 +msgid "Repository has been locked" +msgstr "" + +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 +msgid "Repository has been unlocked" +msgstr "" + +#: kallithea/controllers/admin/repos.py:502 +#: kallithea/controllers/admin/repos.py:521 +msgid "An error occurred during unlocking" +msgstr "" + +#: kallithea/controllers/admin/repos.py:533 +msgid "Cache invalidation successful" +msgstr "" + +#: kallithea/controllers/admin/repos.py:537 +msgid "An error occurred during cache invalidation" +msgstr "" + +#: kallithea/controllers/admin/repos.py:550 +msgid "Pulled from remote location" +msgstr "" + +#: kallithea/controllers/admin/repos.py:553 +msgid "An error occurred during pull from remote location" +msgstr "" + +#: kallithea/controllers/admin/repos.py:584 +msgid "An error occurred during deletion of repository stats" +msgstr "" + +#: kallithea/controllers/admin/settings.py:135 +msgid "Updated VCS settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 +msgid "" +"Unable to activate hgsubversion support. The \"hgsubversion\" library is " +"missing" +msgstr "" + +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 +msgid "Error occurred while updating application settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:174 +#, python-format +msgid "Repositories successfully rescanned. Added: %s. Removed: %s." +msgstr "" + +#: kallithea/controllers/admin/settings.py:189 +#, python-format +msgid "Invalidated %s repositories" +msgstr "" + +#: kallithea/controllers/admin/settings.py:230 +msgid "Updated application settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:283 +msgid "Updated visualisation settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:288 +msgid "Error occurred during updating visualisation settings" +msgstr "" + +#: kallithea/controllers/admin/settings.py:312 +msgid "Please enter email address" +msgstr "" + +#: kallithea/controllers/admin/settings.py:327 +msgid "Send email task created" +msgstr "" + +#: kallithea/controllers/admin/settings.py:356 +msgid "Added new hook" +msgstr "" + +#: kallithea/controllers/admin/settings.py:370 +msgid "Updated hooks" +msgstr "" + +#: kallithea/controllers/admin/settings.py:374 +msgid "Error occurred during hook creation" +msgstr "" + +#: kallithea/controllers/admin/settings.py:398 +msgid "Whoosh reindex task scheduled" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:145 +#, python-format +msgid "Created user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:158 +#, python-format +msgid "Error occurred during creation of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:186 +#, python-format +msgid "Updated user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:208 +#, python-format +msgid "Error occurred during update of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:219 +msgid "Successfully deleted user group" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:224 +msgid "An error occurred during deletion of user group" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:284 +msgid "Target group cannot be the same" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:290 +msgid "User group permissions updated" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 +msgid "Updated permissions" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 +msgid "An error occurred during permissions saving" +msgstr "" + +#: kallithea/controllers/admin/users.py:125 +#, python-format +msgid "Created user %s" +msgstr "" + +#: kallithea/controllers/admin/users.py:140 +#, python-format +msgid "Error occurred during creation of user %s" +msgstr "" + +#: kallithea/controllers/admin/users.py:164 +msgid "User updated successfully" +msgstr "" + +#: kallithea/controllers/admin/users.py:192 +msgid "Successfully deleted user" +msgstr "" + +#: kallithea/controllers/admin/users.py:197 +msgid "An error occurred during deletion of user" +msgstr "" + +#: kallithea/controllers/admin/users.py:205 +msgid "The default user cannot be edited" +msgstr "" + +#: kallithea/controllers/admin/users.py:414 +#, python-format +msgid "Added IP address %s to user whitelist" +msgstr "" + +#: kallithea/controllers/admin/users.py:420 +msgid "An error occurred while adding IP address" +msgstr "" + +#: kallithea/controllers/admin/users.py:432 +msgid "Removed IP address from user whitelist" +msgstr "" + +#: kallithea/lib/auth.py:777 +#, python-format +msgid "IP %s not allowed" +msgstr "" + +#: kallithea/lib/auth.py:829 +msgid "You need to be a registered user to perform this action" +msgstr "" + +#: kallithea/lib/auth.py:857 +msgid "You need to be signed in to view this page" +msgstr "" + +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 +msgid "Repository not found in the filesystem" +msgstr "" + +#: kallithea/lib/base.py:617 +#, python-format +msgid "Changeset for %s %s not found in %s" +msgstr "" + +#: kallithea/lib/diffs.py:68 +msgid "Binary file" +msgstr "" + +#: kallithea/lib/diffs.py:89 +msgid "Changeset was too big and was cut off, use diff menu to display this diff" +msgstr "" + +#: kallithea/lib/diffs.py:99 +msgid "No changes detected" +msgstr "" + +#: kallithea/lib/helpers.py:600 +#, python-format +msgid "Deleted branch: %s" +msgstr "" + +#: kallithea/lib/helpers.py:602 +#, python-format +msgid "Created tag: %s" +msgstr "" + +#: kallithea/lib/helpers.py:613 +#, python-format +msgid "Changeset %s not found" +msgstr "" + +#: kallithea/lib/helpers.py:662 +#, python-format +msgid "Show all combined changesets %s->%s" +msgstr "" + +#: kallithea/lib/helpers.py:668 +msgid "Compare view" +msgstr "" + +#: kallithea/lib/helpers.py:687 +msgid "and" +msgstr "" + +#: kallithea/lib/helpers.py:688 +#, python-format +msgid "%s more" +msgstr "" + +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 +msgid "revisions" +msgstr "" + +#: kallithea/lib/helpers.py:713 +#, python-format +msgid "Fork name %s" +msgstr "" + +#: kallithea/lib/helpers.py:734 +#, python-format +msgid "Pull request %s" +msgstr "" + +#: kallithea/lib/helpers.py:744 +msgid "[deleted] repository" +msgstr "" + +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 +msgid "[created] repository" +msgstr "" + +#: kallithea/lib/helpers.py:748 +msgid "[created] repository as fork" +msgstr "" + +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 +msgid "[forked] repository" +msgstr "" + +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 +msgid "[updated] repository" +msgstr "" + +#: kallithea/lib/helpers.py:754 +msgid "[downloaded] archive from repository" +msgstr "" + +#: kallithea/lib/helpers.py:756 +msgid "[delete] repository" +msgstr "" + +#: kallithea/lib/helpers.py:764 +msgid "[created] user" +msgstr "" + +#: kallithea/lib/helpers.py:766 +msgid "[updated] user" +msgstr "" + +#: kallithea/lib/helpers.py:768 +msgid "[created] user group" +msgstr "" + +#: kallithea/lib/helpers.py:770 +msgid "[updated] user group" +msgstr "" + +#: kallithea/lib/helpers.py:772 +msgid "[commented] on revision in repository" +msgstr "" + +#: kallithea/lib/helpers.py:774 +msgid "[commented] on pull request for" +msgstr "" + +#: kallithea/lib/helpers.py:776 +msgid "[closed] pull request for" +msgstr "" + +#: kallithea/lib/helpers.py:778 +msgid "[pushed] into" +msgstr "" + +#: kallithea/lib/helpers.py:780 +msgid "[committed via Kallithea] into repository" +msgstr "" + +#: kallithea/lib/helpers.py:782 +msgid "[pulled from remote] into repository" +msgstr "" + +#: kallithea/lib/helpers.py:784 +msgid "[pulled] from" +msgstr "" + +#: kallithea/lib/helpers.py:786 +msgid "[started following] repository" +msgstr "" + +#: kallithea/lib/helpers.py:788 +msgid "[stopped following] repository" +msgstr "" + +#: kallithea/lib/helpers.py:913 +#, python-format +msgid " and %s more" +msgstr "" + +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 +msgid "No files" +msgstr "" + +#: kallithea/lib/helpers.py:942 +msgid "new file" +msgstr "" + +#: kallithea/lib/helpers.py:945 +msgid "mod" +msgstr "" + +#: kallithea/lib/helpers.py:948 +msgid "del" +msgstr "" + +#: kallithea/lib/helpers.py:951 +msgid "rename" +msgstr "" + +#: kallithea/lib/helpers.py:956 +msgid "chmod" +msgstr "" + +#: kallithea/lib/helpers.py:1230 +#, python-format +msgid "" +"%s repository is not mapped to db perhaps it was created or renamed from " +"the filesystem please run the application again in order to rescan " +"repositories" +msgstr "" + +#: kallithea/lib/utils2.py:387 +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:388 +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:389 +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:390 +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:391 +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:392 +#, python-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/lib/utils2.py:408 +#, python-format +msgid "in %s" +msgstr "" + +#: kallithea/lib/utils2.py:410 +#, python-format +msgid "%s ago" +msgstr "" + +#: kallithea/lib/utils2.py:412 +#, python-format +msgid "in %s and %s" +msgstr "" + +#: kallithea/lib/utils2.py:415 +#, python-format +msgid "%s and %s ago" +msgstr "" + +#: kallithea/lib/utils2.py:418 +msgid "just now" +msgstr "" + +#: kallithea/model/comment.py:68 +#, python-format +msgid "on line %s" +msgstr "" + +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 +msgid "[Mention]" +msgstr "" + +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "" + +#: kallithea/model/db.py:1717 +msgid "Default user has no access to new repositories" +msgstr "" + +#: kallithea/model/db.py:1718 +msgid "Default user has read access to new repositories" +msgstr "" + +#: kallithea/model/db.py:1719 +msgid "Default user has write access to new repositories" +msgstr "" + +#: kallithea/model/db.py:1720 +msgid "Default user has admin access to new repositories" +msgstr "" + +#: kallithea/model/db.py:1722 +msgid "Default user has no access to new repository groups" +msgstr "" + +#: kallithea/model/db.py:1723 +msgid "Default user has read access to new repository groups" +msgstr "" + +#: kallithea/model/db.py:1724 +msgid "Default user has write access to new repository groups" +msgstr "" + +#: kallithea/model/db.py:1725 +msgid "Default user has admin access to new repository groups" +msgstr "" + +#: kallithea/model/db.py:1727 +msgid "Default user has no access to new user groups" +msgstr "" + +#: kallithea/model/db.py:1728 +msgid "Default user has read access to new user groups" +msgstr "" + +#: kallithea/model/db.py:1729 +msgid "Default user has write access to new user groups" +msgstr "" + +#: kallithea/model/db.py:1730 +msgid "Default user has admin access to new user groups" +msgstr "" + +#: kallithea/model/db.py:1732 +msgid "Only admins can create repository groups" +msgstr "" + +#: kallithea/model/db.py:1733 +msgid "Non-admins can create repository groups" +msgstr "" + +#: kallithea/model/db.py:1735 +msgid "Only admins can create user groups" +msgstr "" + +#: kallithea/model/db.py:1736 +msgid "Non-admins can create user groups" +msgstr "" + +#: kallithea/model/db.py:1738 +msgid "Only admins can create top level repositories" +msgstr "" + +#: kallithea/model/db.py:1739 +msgid "Non-admins can create top level repositories" +msgstr "" + +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 +msgid "Only admins can fork repositories" +msgstr "" + +#: kallithea/model/db.py:1745 +msgid "Non-admins can fork repositories" +msgstr "" + +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "" + +#: kallithea/model/db.py:1748 +msgid "User registration with manual account activation" +msgstr "" + +#: kallithea/model/db.py:1749 +msgid "User registration with automatic account activation" +msgstr "" + +#: kallithea/model/db.py:2276 +msgid "Not reviewed" +msgstr "" + +#: kallithea/model/db.py:2277 +msgid "Under review" +msgstr "" + +#: kallithea/model/db.py:2278 +msgid "Not approved" +msgstr "" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "" + +#: kallithea/model/forms.py:58 +msgid "Please enter a login" +msgstr "" + +#: kallithea/model/forms.py:59 +#, python-format +msgid "Enter a value %(min)i characters long or more" +msgstr "" + +#: kallithea/model/forms.py:67 +msgid "Please enter a password" +msgstr "" + +#: kallithea/model/forms.py:68 +#, python-format +msgid "Enter %(min)i characters or more" +msgstr "" + +#: kallithea/model/forms.py:167 +msgid "Name must not contain only digits" +msgstr "" + +#: kallithea/model/notification.py:240 +#, python-format +msgid "%(user)s commented on changeset %(age)s" +msgstr "" + +#: kallithea/model/notification.py:241 +#, python-format +msgid "%(user)s sent message %(age)s" +msgstr "" + +#: kallithea/model/notification.py:242 +#, python-format +msgid "%(user)s mentioned you %(age)s" +msgstr "" + +#: kallithea/model/notification.py:243 +#, python-format +msgid "%(user)s registered in Kallithea %(age)s" +msgstr "" + +#: kallithea/model/notification.py:244 +#, python-format +msgid "%(user)s opened new pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:245 +#, python-format +msgid "%(user)s commented on pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:252 +#, python-format +msgid "%(user)s commented on changeset at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:253 +#, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:254 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:255 +#, python-format +msgid "%(user)s registered in Kallithea at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:256 +#, python-format +msgid "%(user)s opened new pull request at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:257 +#, python-format +msgid "%(user)s commented on pull request at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:288 +#, python-format +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "" + +#: kallithea/model/notification.py:291 +#, python-format +msgid "New user %(new_username)s registered" +msgstr "" + +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 +msgid "Closing" +msgstr "" + +#: kallithea/model/pull_request.py:76 +#, python-format +msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" +msgstr "" + +#: kallithea/model/pull_request.py:211 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Cannot create empty pull request" +msgstr "Error al crear la petición de pull: %s" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +msgid "You are not authorized to create the pull request" +msgstr "" + +#: kallithea/model/pull_request.py:341 +#, fuzzy +#| msgid "Missing changesets since the previous pull request:" +msgid "Missing changesets since the previous iteration:" +msgstr "Cambios que faltan desde la ultima petición de pull:" + +#: kallithea/model/pull_request.py:348 +#, fuzzy, python-format +#| msgid "New changesets on %s %s since the previous pull request:" +msgid "New changesets on %s %s since the previous iteration:" +msgstr "Cambios nuevos en %s %s desde la ultima petición pull:" + +#: kallithea/model/pull_request.py:355 +#, fuzzy +#| msgid "Ancestor didn't change - show diff since previous version:" +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "El ascendente no ha cambiado - ver diferencias desde la versión anterior:" + +#: kallithea/model/pull_request.py:362 +#, fuzzy, python-format +#| msgid "" "This pull request is based on another %s revision and there is no +#| simple " "diff." +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" +"La petición de pull está basada en otra %s revisión y no hay un diff " +"simple." + +#: kallithea/model/pull_request.py:364 +#, fuzzy, python-format +#| msgid "No changes found on %s %s since previous version." +msgid "No changes found on %s %s since previous iteration." +msgstr "No se encontró ningún cambio en %s %s desde la versión anterior." + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 +msgid "latest tip" +msgstr "" + +#: kallithea/model/user.py:189 +msgid "New user registration" +msgstr "" + +#: kallithea/model/user.py:253 +msgid "You can't remove this user since it is crucial for the entire application" +msgstr "" + +#: kallithea/model/user.py:258 +#, python-format +msgid "" +"User \"%s\" still owns %s repositories and cannot be removed. Switch " +"owners or remove those repositories: %s" +msgstr "" + +#: kallithea/model/user.py:263 +#, python-format +msgid "" +"User \"%s\" still owns %s repository groups and cannot be removed. Switch" +" owners or remove those repository groups: %s" +msgstr "" + +#: kallithea/model/user.py:270 +#, python-format +msgid "" +"User \"%s\" still owns %s user groups and cannot be removed. Switch " +"owners or remove those user groups: %s" +msgstr "" + +#: kallithea/model/user.py:364 +msgid "Password reset link" +msgstr "" + +#: kallithea/model/user.py:413 +msgid "Password reset notification" +msgstr "" + +#: kallithea/model/user.py:414 +#, python-format +msgid "" +"The password to your account %s has been changed using password reset " +"form." +msgstr "" + +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 +msgid "Value cannot be an empty list" +msgstr "" + +#: kallithea/model/validators.py:73 +#, python-format +msgid "Username \"%(username)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:75 +#, python-format +msgid "Username \"%(username)s\" cannot be used" +msgstr "" + +#: kallithea/model/validators.py:77 +msgid "" +"Username may only contain alphanumeric characters underscores, periods or" +" dashes and must begin with an alphanumeric character or underscore" +msgstr "" + +#: kallithea/model/validators.py:104 +msgid "The input is not valid" +msgstr "" + +#: kallithea/model/validators.py:111 +#, python-format +msgid "Username %(username)s is not valid" +msgstr "" + +#: kallithea/model/validators.py:131 +msgid "Invalid user group name" +msgstr "" + +#: kallithea/model/validators.py:132 +#, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:134 +msgid "" +"user group name may only contain alphanumeric characters underscores, " +"periods or dashes and must begin with alphanumeric character" +msgstr "" + +#: kallithea/model/validators.py:174 +msgid "Cannot assign this group as parent" +msgstr "" + +#: kallithea/model/validators.py:175 +#, python-format +msgid "Group \"%(group_name)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:177 +#, python-format +msgid "Repository with name \"%(group_name)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:233 +msgid "Invalid characters (non-ascii) in password" +msgstr "" + +#: kallithea/model/validators.py:248 +msgid "Invalid old password" +msgstr "" + +#: kallithea/model/validators.py:264 +msgid "Passwords do not match" +msgstr "" + +#: kallithea/model/validators.py:279 +msgid "Invalid username or password" +msgstr "" + +#: kallithea/model/validators.py:310 +msgid "Token mismatch" +msgstr "" + +#: kallithea/model/validators.py:326 +#, python-format +msgid "Repository name %(repo)s is not allowed" +msgstr "" + +#: kallithea/model/validators.py:328 +#, python-format +msgid "Repository named %(repo)s already exists" +msgstr "" + +#: kallithea/model/validators.py:329 +#, python-format +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "" + +#: kallithea/model/validators.py:331 +#, python-format +msgid "Repository group with name \"%(repo)s\" already exists" +msgstr "" + +#: kallithea/model/validators.py:449 +msgid "Invalid repository URL" +msgstr "" + +#: kallithea/model/validators.py:450 +msgid "" +"Invalid repository URL. It must be a valid http, https, ssh, svn+http or " +"svn+https URL" +msgstr "" + +#: kallithea/model/validators.py:475 +msgid "Fork has to be the same type as parent" +msgstr "" + +#: kallithea/model/validators.py:490 +msgid "You don't have permissions to create repository in this group" +msgstr "" + +#: kallithea/model/validators.py:492 +msgid "no permission to create repository in root location" +msgstr "" + +#: kallithea/model/validators.py:542 +msgid "You don't have permissions to create a group in this location" +msgstr "" + +#: kallithea/model/validators.py:582 +msgid "This username or user group name is not valid" +msgstr "" + +#: kallithea/model/validators.py:675 +msgid "This is not a valid path" +msgstr "" + +#: kallithea/model/validators.py:692 +msgid "This email address is already in use" +msgstr "" + +#: kallithea/model/validators.py:712 +#, python-format +msgid "Email address \"%(email)s\" not found" +msgstr "" + +#: kallithea/model/validators.py:749 +msgid "" +"The LDAP Login attribute of the CN must be specified - this is the name " +"of the attribute that is equivalent to \"username\"" +msgstr "" + +#: kallithea/model/validators.py:761 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "" + +#: kallithea/model/validators.py:762 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" +msgstr "" + +#: kallithea/model/validators.py:795 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "" + +#: kallithea/model/validators.py:809 +msgid "Filename cannot be inside a directory" +msgstr "" + +#: kallithea/model/validators.py:825 +#, python-format +msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" +msgstr "" + +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 +msgid "About" +msgstr "" + +#: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 +#: kallithea/templates/admin/repos/repo_add.html:5 +#: kallithea/templates/admin/repos/repo_add.html:19 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 +msgid "Add Repository" +msgstr "" + +#: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 +msgid "Add Repository Group" +msgstr "" + +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 +msgid "You have admin right to this group, and can edit it" +msgstr "" + +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 +msgid "Edit Repository Group" +msgstr "" + +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Empty repository" +msgid "Repository Group" +msgstr "Repositorio vacío" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 +#: kallithea/templates/pullrequests/pullrequest_show.html:38 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 +msgid "Description" +msgstr "" + +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 +msgid "Last Change" +msgstr "" + +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 +msgid "Tip" +msgstr "" + +#: kallithea/templates/index_base.html:95 +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 +#: kallithea/templates/admin/user_groups/user_groups.html:42 +#: kallithea/templates/pullrequests/pullrequest_data.html:16 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 +msgid "Owner" +msgstr "" + +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 +msgid "Log In" +msgstr "" + +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 +#, python-format +msgid "Log In to %s" +msgstr "" + +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 +#: kallithea/templates/admin/admin_log.html:5 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 +msgid "Username" +msgstr "" + +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 +msgid "Password" +msgstr "" + +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 +msgid "Forgot your password ?" +msgstr "" + +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 +msgid "Don't have an account ?" +msgstr "" + +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 +msgid "Sign In" +msgstr "" + +#: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 +msgid "Password Reset" +msgstr "" + +#: kallithea/templates/password_reset.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 +#, python-format +msgid "Reset Your Password to %s" +msgstr "" + +#: kallithea/templates/password_reset.html:14 +#: kallithea/templates/password_reset_confirmation.html:5 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 +msgid "Reset Your Password" +msgstr "" + +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 +msgid "Email Address" +msgstr "" + +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 +msgid "Captcha" +msgstr "" + +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 +msgid "Send Password Reset Email" +msgstr "" + +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 +msgid "" +"A password reset link will be sent to the specified email address if it " +"is registered in the system." +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 +#, python-format +msgid "You are about to set a new password for the email address %s." +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 +msgid "" +"Note that you must use the same browser session for this as the one used " +"to request the password reset." +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 +msgid "Code you received in the email" +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 +msgid "New Password" +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 +msgid "Confirm New Password" +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 +msgid "Confirm" +msgstr "" + +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 +msgid "Sign Up" +msgstr "" + +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 +#, python-format +msgid "Sign Up to %s" +msgstr "" + +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 +msgid "Re-enter password" +msgstr "" + +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 +msgid "First Name" +msgstr "" + +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 +msgid "Last Name" +msgstr "" + +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 +#: kallithea/templates/admin/settings/settings.html:31 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 +msgid "Email" +msgstr "" + +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 +msgid "Registered accounts are ready to use and need no further action." +msgstr "" + +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 +msgid "Please wait for an administrator to activate your account." +msgstr "" + +#: kallithea/templates/admin/admin.html:5 +#: kallithea/templates/admin/admin.html:13 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 +msgid "Admin Journal" +msgstr "" + +#: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 +msgid "journal filter..." +msgstr "" + +#: kallithea/templates/admin/admin.html:12 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 +msgid "Filter" +msgstr "" + +#: kallithea/templates/admin/admin.html:13 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 +#, python-format +msgid "%s Entry" +msgid_plural "%s Entries" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/admin/admin_log.html:6 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 +msgid "Action" +msgstr "" + +#: kallithea/templates/admin/admin_log.html:8 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 +msgid "Date" +msgstr "" + +#: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 +msgid "From IP" +msgstr "" + +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 +msgid "No actions yet" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 +msgid "Authentication Settings" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:11 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 +msgid "Authentication" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 +msgid "Authentication Plugins" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 +msgid "Enabled Plugins" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 +msgid "" +"Comma-separated list of plugins; Kallithea will try user authentication " +"in plugin order" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 +msgid "Available built-in plugins" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 +msgid "Plugin" +msgstr "" + +#: kallithea/templates/admin/auth/auth_settings.html:101 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 +msgid "Save" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:5 +#: kallithea/templates/admin/defaults/defaults.html:11 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 +msgid "Repository Defaults" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 +msgid "Type" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 +msgid "Private repository" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 +msgid "Enable statistics" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 +msgid "Enable statistics window on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 +msgid "Enable downloads" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 +msgid "Enable download menu on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 +msgid "Enable locking" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 +msgid "Enable lock-by-pulling on repository." +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:5 +#: kallithea/templates/admin/gists/edit.html:18 +msgid "Edit Gist" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:35 +#, python-format +msgid "" +"Gist was update since you started editing. Copy your changes and click " +"%(here)s to reload new version." +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 +msgid "Gist description ..." +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 +msgid "Gist lifetime" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/edit.html:61 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/gists/show.html:47 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 +msgid "Expires" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 +msgid "Never" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:145 +msgid "Update Gist" +msgstr "" + +#: kallithea/templates/admin/gists/edit.html:146 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 +msgid "Cancel" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:6 +#: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 +#, python-format +msgid "Private Gists for User %s" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:8 +#: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 +#, python-format +msgid "Public Gists for User %s" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:10 +#: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 +msgid "Public Gists" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:37 +#: kallithea/templates/admin/gists/show.html:25 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 +msgid "Create New Gist" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 +msgid "Created" +msgstr "" + +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 +msgid "There are no gists yet" +msgstr "" + +#: kallithea/templates/admin/gists/new.html:5 +#: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 +msgid "New Gist" +msgstr "" + +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 +msgid "Create Private Gist" +msgstr "" + +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 +msgid "Create Public Gist" +msgstr "" + +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 +msgid "Reset" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:5 +#: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 +msgid "Gist" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:10 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 +msgid "URL" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:37 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 +msgid "Private Gist" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 +#: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 +msgid "Delete" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +msgid "Confirm to delete this Gist" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:63 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 +msgid "Show as Raw" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 +msgid "created" +msgstr "" + +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 +msgid "Show as raw" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:5 +#: kallithea/templates/admin/my_account/my_account.html:9 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 +msgid "My Account" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:25 +#: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 +msgid "Profile" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 +msgid "Email Addresses" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:28 +#: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 +msgid "API Keys" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 +msgid "Owned Repositories" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 +msgid "Watched Repositories" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account.html:31 +#: kallithea/templates/admin/permissions/permissions.html:30 +#: kallithea/templates/admin/user_groups/user_group_edit.html:32 +#: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 +msgid "Show Permissions" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 +msgid "Built-in" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 +#, python-format +msgid "Confirm to reset this API key: %s" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 +msgid "Expired" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 +#, python-format +msgid "Confirm to remove this API key: %s" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 +msgid "Remove" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 +msgid "No additional API keys specified" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 +msgid "New API key" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 +msgid "Add" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 +msgid "Primary" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 +#, python-format +msgid "Confirm to delete this email: %s" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 +msgid "No additional emails specified." +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 +msgid "New email address" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:1 +msgid "Change Your Account Password" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:8 +msgid "Current password" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 +msgid "New password" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:22 +msgid "Confirm new password" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_password.html:39 +#, python-format +msgid "This account is managed with %s and the password cannot be changed here" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, python-format +msgid "Change %s avatar at" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:12 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 +msgid "Avatars are disabled" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 +msgid "Repositories You Own" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 +msgid "Repositories You are Watching" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:5 +#: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 +msgid "My Notifications" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 +msgid "All" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 +msgid "Comments" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:26 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 +msgid "Pull Requests" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 +msgid "Mark All Read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:12 +msgid "Mark as read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 +msgid "No notifications here yet" +msgstr "" + +#: kallithea/templates/admin/notifications/show_notification.html:5 +#: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 +msgid "Show Notification" +msgstr "" + +#: kallithea/templates/admin/notifications/show_notification.html:9 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 +msgid "Notifications" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions.html:5 +#: kallithea/templates/admin/permissions/permissions.html:11 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 +msgid "Default Permissions" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions.html:28 +#: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 +msgid "Global" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions.html:29 +#: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 +msgid "IP Whitelist" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 +msgid "Anonymous access" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 +#, python-format +msgid "" +"Allow access to Kallithea without needing to log in. Anonymous users use " +"%s user permissions." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 +msgid "" +"All default permissions on each repository will be reset to chosen " +"permission, note that all custom default permission on repositories will " +"be lost" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 +msgid "Apply to all existing repositories" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 +msgid "Permissions for the Default user on new repositories." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 +msgid "Repository group" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 +msgid "" +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups " +"will be lost" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 +msgid "Apply to all existing repository groups" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 +msgid "Permissions for the Default user on new repository groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 +msgid "User group" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 +msgid "" +"All default permissions on each user group will be reset to chosen " +"permission, note that all custom default permission on user groups will " +"be lost" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 +msgid "Apply to all existing user groups" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 +msgid "Permissions for the Default user on new user groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 +msgid "Top level repository creation" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 +msgid "Enable this to allow non-admins to create repositories at the top level." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 +msgid "" +"Note: This will also give all users API access to create repositories " +"everywhere. That might change in future versions." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 +msgid "Repository creation with group write access" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 +msgid "" +"With this, write permission to a repository group allows creating " +"repositories inside that group. Without this, group write permissions " +"mean nothing." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 +msgid "User group creation" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 +msgid "Enable this to allow non-admins to create user groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 +msgid "Repository forking" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 +msgid "Enable this to allow non-admins to fork repositories." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 +msgid "Registration" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 +msgid "External auth account activation" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 +#, python-format +msgid "Confirm to delete this IP address: %s" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 +msgid "All IP addresses are allowed." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 +msgid "New IP address" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:11 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 +msgid "Repository Groups" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 +msgid "Group name" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 +msgid "Group parent" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 +msgid "Copy parent group permissions" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 +msgid "Copy permission set from parent repository group." +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:5 +#, python-format +msgid "%s Repository Group Settings" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 +msgid "Add Child Group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 +#: kallithea/templates/admin/repos/repo_edit.html:12 +#: kallithea/templates/admin/repos/repo_edit.html:25 +#: kallithea/templates/admin/settings/settings.html:11 +#: kallithea/templates/admin/user_groups/user_group_edit.html:29 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 +msgid "Settings" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 +#: kallithea/templates/admin/user_groups/user_group_edit.html:30 +#: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 +msgid "Advanced" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 +#: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 +msgid "Permissions" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:1 +#, python-format +msgid "Repository Group: %s" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:6 +msgid "Top level repositories" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:7 +msgid "Total repositories" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:8 +msgid "Children groups" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 +#: kallithea/templates/admin/users/user_edit_advanced.html:8 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 +msgid "Created on" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 +#, python-format +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:25 +msgid "Delete this repository group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +msgid "Visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "No response" +msgid "Add repos" +msgstr "No hay respuesta" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +msgid "Add/Edit groups" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 +msgid "User/User Group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 +msgid "Default" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 +msgid "Revoke" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 +msgid "Add new" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 +msgid "Apply to children" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 +msgid "Both" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 +msgid "" +"Set or revoke permission to all children of that group, including non-" +"private repositories and other groups if selected." +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 +msgid "" +"Enable lock-by-pulling on group. This option will be applied to all other" +" groups and repositories inside" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 +msgid "Remove this group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 +msgid "Confirm to delete this group" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_show.html:4 +#, fuzzy, python-format +#| msgid "This repository has %s fork" +#| msgid_plural "This repository has %s forks" +msgid "Repository group %s" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 +msgid "Home" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 +msgid "with" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 +msgid "Repository Groups Administration" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 +msgid "Number of Top-level Repositories" +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 +msgid "Clone remote repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 +msgid "" +"Optional: URL of a remote repository. If set, the repository will be " +"created as a clone from this URL." +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 +msgid "Keep it short and to the point. Use a README file for longer descriptions." +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 +msgid "Optionally select a group to put this repository into." +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 +msgid "Type of repository to create." +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 +msgid "Landing revision" +msgstr "" + +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 +msgid "" +"Default revision for files page, downloads, full text search index and " +"readme generation" +msgstr "" + +#: kallithea/templates/admin/repos/repo_creating.html:9 +#, python-format +msgid "%s Creating Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_creating.html:13 +msgid "Creating repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_creating.html:27 +#, python-format +msgid "" +"Repository \"%(repo_name)s\" is being created, you will be redirected " +"when this process is finished.repo_name" +msgstr "" + +#: kallithea/templates/admin/repos/repo_creating.html:39 +msgid "" +"We're sorry but error occurred during this operation. Please check your " +"Kallithea server logs, or contact administrator." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 +#, python-format +msgid "%s Repository Settings" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 +msgid "Extra Fields" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 +msgid "Caches" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 +msgid "Remote" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/summary/statistics.html:8 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 +msgid "Statistics" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 +msgid "Parent" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 +msgid "Set" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 +msgid "Manually set this repository as a fork of another from the list." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 +msgid "Public Journal Visibility" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 +msgid "Remove from public journal" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 +msgid "Add to Public Journal" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 +msgid "" +"All actions done in this repository will be visible to everyone in the " +"public journal." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 +msgid "Change Locking" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 +msgid "Confirm to unlock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 +msgid "Unlock Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 +#, python-format +msgid "Locked by %s on %s" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 +msgid "Confirm to lock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 +msgid "Lock Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 +msgid "Repository is not locked" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 +msgid "" +"Force locking on the repository. Works only when anonymous access is " +"disabled. Triggering a pull locks the repository. The user who is " +"pulling locks the repository; only the user who pulled and locked it can " +"unlock it by doing a push." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 +#, python-format +msgid "Confirm to delete this repository: %s" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 +msgid "Delete this Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 +#, python-format +msgid "This repository has %s fork" +msgid_plural "This repository has %s forks" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 +msgid "Detach forks" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 +msgid "Delete forks" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 +msgid "" +"The deleted repository will be moved away and hidden until the " +"administrator expires it. The administrator can both permanently delete " +"it or restore it." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:4 +msgid "Invalidate Repository Cache" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 +msgid "" +"Manually invalidate cache for this repository. On first access, the " +"repository will be cached again." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 +msgid "List of Cached Values" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:12 +msgid "Prefix" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +msgid "Key" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 +msgid "Active" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +msgid "Label" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 +#, python-format +msgid "Confirm to delete this field: %s" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 +msgid "New field key" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 +msgid "New field label" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 +msgid "Enter short label" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 +msgid "New field description" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 +msgid "Enter description of a field" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 +msgid "Extra fields are disabled." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 +msgid "Private Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "Empty repository" +msgid "Fork of repository" +msgstr "Repositorio vacío" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 +msgid "Remote repository URL" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 +msgid "Pull Changes from Remote Repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +msgid "Confirm to pull changes from remote repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 +msgid "This repository does not have a remote repository URL." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 +msgid "Permanent Repository ID" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 +msgid "What is that?" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 +msgid "URL by id" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 +msgid "" +"In case this repository is renamed or moved into another group the " +"repository URL changes.\n" +" Using the above permanent URL guarantees " +"that this repository always will be accessible on that URL.\n" +" This is useful for CI systems, or any " +"other cases that you need to hardcode the URL into a 3rd party service." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 +msgid "Remote repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 +msgid "Repository URL" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 +msgid "" +"Optional: URL of a remote repository. If set, the repository can be " +"pulled from this URL." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 +msgid "Default revision for files page, downloads, whoosh and readme" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 +msgid "Change owner of this repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 +msgid "Processed progress" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_statistics.html:10 +msgid "Reset Statistics" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_statistics.html:10 +msgid "Confirm to remove current statistics." +msgstr "" + +#: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 +msgid "Repositories Administration" +msgstr "" + +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 +msgid "State" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 +msgid "Settings Administration" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 +msgid "VCS" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 +msgid "Remap and Rescan" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 +msgid "Visual" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 +msgid "Hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 +msgid "Full Text Search" +msgstr "" + +#: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 +msgid "System Info" +msgstr "" + +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 +msgid "Send test email to" +msgstr "" + +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 +msgid "Send" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 +msgid "Site branding" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 +msgid "HTTP authentication realm" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 +msgid "" +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 +msgid "ReCaptcha public key" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 +msgid "Public key for reCaptcha system." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 +msgid "ReCaptcha private key" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 +msgid "" +"Private key for reCaptcha system. Setting this value will enable captcha " +"on registration." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 +msgid "Save Settings" +msgstr "" + +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 +msgid "Built-in Mercurial Hooks (Read-Only)" +msgstr "" + +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 +msgid "" +"Hooks can be used to trigger actions on certain events such as push / " +"pull. They can trigger Python functions or external applications." +msgstr "" + +#: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 +msgid "Custom Hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 +msgid "Failed to remove hook" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:4 +msgid "Rescan options" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 +msgid "Delete records of missing repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 +msgid "" +"Check this option to remove all comments, pull requests and other records" +" related to repositories that no longer exist in the filesystem." +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 +msgid "Invalidate cache for all repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 +msgid "Check this to reload data and clear cache keys for all repositories." +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 +msgid "" +"Verify if Kallithea's Git hooks are installed for each repository. " +"Current hooks will be updated to the latest version." +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 +msgid "Overwrite existing Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 +msgid "" +"If installing Git hooks, overwrite any existing hooks, even if they do " +"not seem to come from Kallithea. WARNING: This operation will destroy any" +" custom git hooks you may have deployed by hand!" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 +msgid "Rescan Repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 +msgid "Index build option" +msgstr "" + +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + +#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 +msgid "" +"This option completely reindexeses all of the repositories for proper " +"fulltext search capabilities." +msgstr "" + +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 +msgid "Reindex" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Kallithea version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:8 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 +msgid "Upgrade info endpoint" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 +msgid "Note: please make sure this server can access this URL" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 +msgid "Python Packages" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 +msgid "Show repository size after push" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 +msgid "Log user push commands" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 +msgid "Log user pull commands" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 +msgid "Update repository after push (hg update)" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 +msgid "Mercurial extensions" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 +msgid "Enable largefiles extension" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 +msgid "Enable hgsubversion extension" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 +msgid "" +"Requires hgsubversion library to be installed. Enables cloning of remote " +"Subversion repositories while converting them to Mercurial." +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 +msgid "Location of repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 +msgid "" +"Click to unlock. You must restart Kallithea in order to make this setting" +" take effect." +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 +msgid "" +"Filesystem location where repositories are stored. After changing this " +"value, a restart and rescan of the repository folder are both required." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 +msgid "General" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 +msgid "Use repository extra fields" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 +msgid "Allows storing additional customized fields per repository." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 +msgid "Show Kallithea version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 +msgid "Shows or hides a version number of Kallithea displayed in the footer." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 +msgid "" +"Gravatar URL allows you to use another avatar server application.\n" +" The following " +"variables of the URL will be replaced accordingly.\n" +" {scheme} " +"'http' or 'https' sent from running Kallithea server,\n" +" {email} user " +"email,\n" +" {md5email} md5 " +"hash of the user email (like at gravatar.com),\n" +" {size} size " +"of the image that is expected from the server application,\n" +" {netloc} " +"network location/server host of running Kallithea server" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:43 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repositories" +msgid "Repository page size" +msgstr "Repositorios" + +#: kallithea/templates/admin/settings/settings_visual.html:57 +msgid "" +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:65 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 +msgid "" +"Number of items displayed in the admin pages grids before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 +msgid "Icons" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 +msgid "Show public repository icon on repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 +msgid "Show public/private icons next to repository names." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 +msgid "Meta Tagging" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 +msgid "" +"Parses meta tags from the repository description field and turns them " +"into colored tags." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_add.html:5 +msgid "Add user group" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_add.html:10 +#: kallithea/templates/admin/user_groups/user_group_edit.html:11 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 +msgid "User Groups" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_add.html:12 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 +msgid "Add User Group" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 +msgid "Short, optional description for this user group." +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 +#, python-format +msgid "%s user group settings" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 +msgid "Show Members" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:1 +#, python-format +msgid "User Group: %s" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 +msgid "Members" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 +#, python-format +msgid "Confirm to delete this user group: %s" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:21 +msgid "Delete this user group" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 +msgid "No members yet" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 +msgid "Chosen group members" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 +msgid "Available members" +msgstr "" + +#: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 +msgid "User Groups Administration" +msgstr "" + +#: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 +msgid "Add user" +msgstr "" + +#: kallithea/templates/admin/users/user_add.html:10 +#: kallithea/templates/admin/users/user_edit.html:11 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 +msgid "Users" +msgstr "" + +#: kallithea/templates/admin/users/user_add.html:12 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 +msgid "Add User" +msgstr "" + +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 +msgid "Password confirmation" +msgstr "" + +#: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 +#, python-format +msgid "%s user settings" +msgstr "" + +#: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 +msgid "Emails" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:1 +#, python-format +msgid "User: %s" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:7 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 +msgid "Source of Record" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:9 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 +msgid "Last Login" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:10 +msgid "Member of User Groups" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:21 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 +#, python-format +msgid "Confirm to delete this user: %s" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_advanced.html:23 +msgid "Delete this user" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 +#, python-format +msgid "Inherited from %s" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 +msgid "Name in Source of Record" +msgstr "" + +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 +msgid "New password confirmation" +msgstr "" + +#: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 +msgid "Users Administration" +msgstr "" + +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 +msgid "Auth Type" +msgstr "" + +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 +#, python-format +msgid "Server instance: %s" +msgstr "" + +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 +msgid "Support" +msgstr "" + +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 +msgid "Mercurial repository" +msgstr "" + +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 +msgid "Git repository" +msgstr "" + +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 +msgid "Create Fork" +msgstr "" + +#: kallithea/templates/base/base.html:125 +#: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 +msgid "Summary" +msgstr "" + +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 +#: kallithea/templates/changelog/changelog.html:14 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 +msgid "Changelog" +msgstr "" + +#: kallithea/templates/base/base.html:131 +#: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 +msgid "Files" +msgstr "" + +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 +msgid "Options" +msgstr "" + +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" +msgstr "" + +#: kallithea/templates/base/base.html:155 +#: kallithea/tests/data/templates/base/base.html.py:399 +msgid "Unlock" +msgstr "" + +#: kallithea/templates/base/base.html:157 +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" +msgstr "" + +#: kallithea/templates/base/base.html:165 +#: kallithea/tests/data/templates/base/base.html.py:413 +msgid "Follow" +msgstr "" + +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 +msgid "Unfollow" +msgstr "" + +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 +msgid "Fork" +msgstr "" + +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 +msgid "Create Pull Request" +msgstr "" + +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 +#, python-format +msgid "Show Pull Requests for %s" +msgstr "" + +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 +msgid "Show recent activity" +msgstr "" + +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 +msgid "Public journal" +msgstr "" + +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 +msgid "Show public gists" +msgstr "" + +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 +msgid "Gists" +msgstr "" + +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 +msgid "All Public Gists" +msgstr "" + +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 +msgid "My Public Gists" +msgstr "" + +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 +msgid "My Private Gists" +msgstr "" + +#: kallithea/templates/base/base.html:319 +#: kallithea/tests/data/templates/base/base.html.py:540 +msgid "Search in repositories" +msgstr "" + +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 +msgid "My Pull Requests" +msgstr "" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 +msgid "Not Logged In" +msgstr "" + +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 +msgid "Login to Your Account" +msgstr "" + +#: kallithea/templates/base/base.html:385 +msgid "Forgot password?" +msgstr "" + +#: kallithea/templates/base/base.html:389 +msgid "Don't have an account?" +msgstr "" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 +msgid "Log Out" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 +msgid "Inherit defaults" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 +#, python-format +msgid "" +"Select to inherit global settings, IP whitelist and permissions from the " +"%s." +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 +msgid "Create repositories" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:33 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 +msgid "Create user groups" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 +msgid "Select this option to allow user group creation for this user" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 +msgid "Fork repositories" +msgstr "" + +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 +msgid "Select this option to allow repository forking for this user" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:13 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 +msgid "Show" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 +msgid "No permissions defined yet" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:30 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 +msgid "Permission" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:32 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 +msgid "Edit Permission" +msgstr "" + +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 +msgid "No permission defined" +msgstr "" + +#: kallithea/templates/base/root.html:25 +#: kallithea/tests/data/templates/base/root.html.py:85 +msgid "Add Another Comment" +msgstr "" + +#: kallithea/templates/base/root.html:26 +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 +msgid "Stop following this repository" +msgstr "" + +#: kallithea/templates/base/root.html:27 +#: kallithea/tests/data/templates/base/root.html.py:89 +msgid "Start following this repository" +msgstr "" + +#: kallithea/templates/base/root.html:28 +#: kallithea/tests/data/templates/base/root.html.py:91 +msgid "Group" +msgstr "" + +#: kallithea/templates/base/root.html:29 +#: kallithea/tests/data/templates/base/root.html.py:93 +msgid "members" +msgstr "" + +#: kallithea/templates/base/root.html:30 +#: kallithea/tests/data/templates/base/root.html.py:95 +msgid "Loading ..." +msgstr "" + +#: kallithea/templates/base/root.html:31 +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." +msgstr "" + +#: kallithea/templates/base/root.html:32 +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" +msgstr "" + +#: kallithea/templates/base/root.html:33 +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" +msgstr "" + +#: kallithea/templates/base/root.html:34 +#: kallithea/tests/data/templates/base/root.html.py:103 +msgid "Open New Pull Request from {0}" +msgstr "" + +#: kallithea/templates/base/root.html:35 +#: kallithea/tests/data/templates/base/root.html.py:105 +msgid "Open New Pull Request for {0} → {1}" +msgstr "" + +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 +msgid "Show Selected Changesets {0} → {1}" +msgstr "" + +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 +msgid "Selection Link" +msgstr "" + +#: kallithea/templates/base/root.html:38 +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 +msgid "Collapse Diff" +msgstr "" + +#: kallithea/templates/base/root.html:39 +#: kallithea/tests/data/templates/base/root.html.py:113 +msgid "Expand Diff" +msgstr "" + +#: kallithea/templates/base/root.html:40 +#: kallithea/tests/data/templates/base/root.html.py:115 +msgid "Failed to revoke permission" +msgstr "" + +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 +msgid "Confirm to revoke permission for {0}: {1} ?" +msgstr "" + +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "Seleccionar cambios" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 +msgid "Specify changeset" +msgstr "" + +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." +msgstr "" + +#: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 +#, python-format +msgid "%s Changelog" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 +#, python-format +msgid "showing %d out of %d revision" +msgid_plural "showing %d out of %d revisions" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 +msgid "Clear selection" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 +msgid "Go to tip of repository" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 +#, python-format +msgid "Compare fork with %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 +#, python-format +msgid "Compare fork with parent repository (%s)" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:63 +#: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 +msgid "Branch filter:" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 +#, python-format +msgid "" +"Changeset status: %s by %s\n" +"Click to open associated pull request %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, python-format +msgid "Changeset status: %s by %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 +msgid "Expand commit message" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 +msgid "Changeset has comments" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 +#, python-format +msgid "Bookmark %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 +#, python-format +msgid "Tag %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 +#, python-format +msgid "Branch %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 +msgid "There are no changes yet" +msgstr "" + +#: kallithea/templates/changelog/changelog_details.html:4 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 +msgid "Removed" +msgstr "" + +#: kallithea/templates/changelog/changelog_details.html:5 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 +msgid "Changed" +msgstr "" + +#: kallithea/templates/changelog/changelog_details.html:6 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 +msgid "Added" +msgstr "" + +#: kallithea/templates/changelog/changelog_details.html:8 +#: kallithea/templates/changelog/changelog_details.html:9 +#: kallithea/templates/changelog/changelog_details.html:10 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 +#, python-format +msgid "Affected %s files" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:8 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 +msgid "Commit Message" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:9 +#: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 +msgid "Age" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 +msgid "Refs" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 +msgid "Add or upload files directly via Kallithea" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:82 +#: kallithea/templates/files/files_add.html:21 +#: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 +msgid "Add New File" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 +msgid "Push new repository" +msgstr "" + +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 +msgid "Existing repository?" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 +#, python-format +msgid "%s Changeset" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 +msgid "Parent rev." +msgstr "" + +#: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 +msgid "Child rev." +msgstr "" + +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 +msgid "Changeset status" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:54 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 +msgid "Raw diff" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 +msgid "Patch diff" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:60 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 +msgid "Download diff" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 +msgid "Merge" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 +msgid "Grafted from:" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 +msgid "Replaced by:" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 +msgid "Preceded by:" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 +#, python-format +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 +#, python-format +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 +msgid "Show full diff anyway" +msgstr "" + +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 +msgid "No revisions" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 +msgid "on pull request" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 +msgid "No title" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 +msgid "on this changeset" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 +msgid "Delete comment?" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 +msgid "Status change" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +msgid "Set changeset status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +msgid "No change" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +msgid "Finish pull request" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +msgid "Close" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 +msgid "Submitting ..." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 +msgid "Comment" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 +msgid "You need to be logged in to comment." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 +msgid "Login now" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 +msgid "Hide" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 +#, python-format +msgid "%d comment" +msgid_plural "%d comments" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 +#, python-format +msgid "%d inline" +msgid_plural "%d inline" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 +#, python-format +msgid "%d general" +msgid_plural "%d general" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 +#, python-format +msgid "%s Changesets" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 +msgid "Files affected" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +msgid "File before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "Sin modificar" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Revisión desconocida %s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "Sin nombre de archivo" + +#: kallithea/templates/changeset/diff_block.html:55 +msgid "File after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 +msgid "Show full diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 +msgid "Show full side-by-side diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 +msgid "Show inline comments" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 +msgid "No changesets" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 +msgid "First (oldest) changeset in this list" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 +msgid "Last (most recent) changeset in this list" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 +msgid "Position in this list of changesets" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 +msgid "is" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 +#, python-format +msgid "%s changesets" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 +msgid "behind" +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:6 +#: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 +#, python-format +msgid "%s Compare" +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:13 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 +msgid "Compare Revisions" +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 +msgid "Swap" +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 +msgid "Compare revisions, branches, bookmarks, or tags." +msgstr "" + +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 +#, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 +msgid "Show full diff" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 +msgid "Public repository" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 +msgid "Repository creation in progress..." +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 +msgid "No changesets yet" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "" + +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 +msgid "Creating" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset" +msgid "Changeset on" +msgstr "Cambio" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "Rama" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +msgid "Status change:" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "This pull request has been closed and can not be updated." +msgid "The pull request has been closed." +msgstr "La petición pull esta cerrada y no se puede actualizar." + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 +#, python-format +msgid "Hello %s" +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 +msgid "We have received a request to reset the password for your account." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 +msgid "To set a new password, click the following link" +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 +msgid "" +"Should you not be able to use the link above, please type the following " +"code into the password reset form" +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 +msgid "" +"If it weren't you who requested the password reset, just disregard this " +"message." +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "Pull request updated" +msgid "Pull request from" +msgstr "Petición pull actualizada" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +msgid "at" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "Error al crear la petición de pull: %s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "Pull Request %s \"%s\" Closed" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "Error al crear la petición de pull: %s" + +#: kallithea/templates/email_templates/registration.html:22 +msgid "Full Name" +msgstr "" + +#: kallithea/templates/files/diff_2way.html:15 +#, python-format +msgid "%s File side-by-side diff" +msgstr "" + +#: kallithea/templates/files/diff_2way.html:19 +#: kallithea/templates/files/file_diff.html:8 +msgid "File diff" +msgstr "" + +#: kallithea/templates/files/file_diff.html:4 +#, python-format +msgid "%s File Diff" +msgstr "" + +#: kallithea/templates/files/files.html:4 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 +#, python-format +msgid "%s Files" +msgstr "" + +#: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 +#, python-format +msgid "%s Files Add" +msgstr "" + +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 +#: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 +msgid "Location" +msgstr "" + +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 +msgid "Enter filename..." +msgstr "" + +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 +msgid "or" +msgstr "" + +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 +msgid "Upload File" +msgstr "" + +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 +msgid "Create New File" +msgstr "" + +#: kallithea/templates/files/files_add.html:53 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +msgid "New file type" +msgstr "" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 +msgid "Commit Changes" +msgstr "" + +#: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 +msgid "Previous revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 +msgid "Next revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 +msgid "Follow current branch" +msgstr "" + +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 +msgid "Search File List" +msgstr "" + +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 +msgid "Loading file list..." +msgstr "" + +#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 +msgid "Size" +msgstr "" + +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 +msgid "Last Revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 +msgid "Last Modified" +msgstr "" + +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 +msgid "Last Committer" +msgstr "" + +#: kallithea/templates/files/files_delete.html:4 +#, python-format +msgid "%s Files Delete" +msgstr "" + +#: kallithea/templates/files/files_delete.html:12 +#: kallithea/templates/files/files_delete.html:30 +msgid "Delete file" +msgstr "" + +#: kallithea/templates/files/files_edit.html:4 +#, python-format +msgid "%s File Edit" +msgstr "" + +#: kallithea/templates/files/files_edit.html:21 +msgid "Edit file" +msgstr "" + +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 +msgid "Show Annotation" +msgstr "" + +#: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 +msgid "Source" +msgstr "" + +#: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 +#, python-format +msgid "%s author" +msgid_plural "%s authors" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 +msgid "Diff to Revision" +msgstr "" + +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 +msgid "Show at Revision" +msgstr "" + +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + +#: kallithea/templates/files/files_source.html:10 +#: kallithea/tests/data/templates/files/files_source.html.py:52 +msgid "Show Authors" +msgstr "" + +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 +msgid "Show Source" +msgstr "" + +#: kallithea/templates/files/files_source.html:34 +#, python-format +msgid "Edit on Branch: %s" +msgstr "" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" +msgstr "" + +#: kallithea/templates/files/files_source.html:41 +#: kallithea/tests/data/templates/files/files_source.html.py:94 +msgid "Deleting files allowed only when on branch head revision" +msgstr "" + +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 +#, python-format +msgid "Binary file (%s)" +msgstr "" + +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +msgid "File is too big to display." +msgstr "" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + +#: kallithea/templates/files/files_source.html:73 +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." +msgstr "" + +#: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 +msgid "annotation" +msgstr "" + +#: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 +msgid "Go Back" +msgstr "" + +#: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 +msgid "No files at given path" +msgstr "" + +#: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 +#, python-format +msgid "%s Followers" +msgstr "" + +#: kallithea/templates/followers/followers.html:9 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 +msgid "Followers" +msgstr "" + +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 +msgid "Started following -" +msgstr "" + +#: kallithea/templates/forks/fork.html:5 +#, python-format +msgid "Fork repository %s" +msgstr "" + +#: kallithea/templates/forks/fork.html:25 +msgid "Fork name" +msgstr "" + +#: kallithea/templates/forks/fork.html:53 +msgid "Default revision for files page, downloads, whoosh, and readme." +msgstr "" + +#: kallithea/templates/forks/fork.html:58 +msgid "Private" +msgstr "" + +#: kallithea/templates/forks/fork.html:66 +msgid "Copy permissions" +msgstr "" + +#: kallithea/templates/forks/fork.html:69 +msgid "Copy permissions from forked repository" +msgstr "" + +#: kallithea/templates/forks/fork.html:75 +msgid "Update after clone" +msgstr "" + +#: kallithea/templates/forks/fork.html:78 +msgid "Checkout source after making a clone" +msgstr "" + +#: kallithea/templates/forks/fork.html:85 +msgid "Fork this Repository" +msgstr "" + +#: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 +#, python-format +msgid "%s Forks" +msgstr "" + +#: kallithea/templates/forks/forks.html:9 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 +msgid "Forks" +msgstr "" + +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 +msgid "Forked" +msgstr "" + +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 +msgid "There are no forks yet" +msgstr "" + +#: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 +msgid "ATOM journal feed" +msgstr "" + +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 +msgid "RSS journal feed" +msgstr "" + +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 +msgid "My Repositories" +msgstr "" + +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 +msgid "No entries yet" +msgstr "" + +#: kallithea/templates/journal/public_journal.html:13 +msgid "ATOM public journal feed" +msgstr "" + +#: kallithea/templates/journal/public_journal.html:14 +msgid "RSS public journal feed" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:4 +#: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 +msgid "New Pull Request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:26 +#: kallithea/templates/pullrequests/pullrequest_data.html:15 +#: kallithea/templates/pullrequests/pullrequest_show.html:29 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 +msgid "Title" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 +msgid "Summarize the changes - or leave empty" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 +msgid "Write a short description on this pull request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 +msgid "Changeset flow" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 +msgid "Origin repository" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 +msgid "Destination repository" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:6 +msgid "No entries" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:14 +msgid "Vote" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:18 +msgid "From" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:19 +msgid "To" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:28 +#, python-format +msgid "You voted: %s" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:30 +msgid "You didn't vote" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:35 +msgid "(no title)" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:37 +#: kallithea/templates/pullrequests/pullrequest_show.html:31 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 +msgid "Closed" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:67 +msgid "Delete Pull Request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:68 +msgid "Confirm to delete this pull request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_data.html:70 +#, python-format +msgid "Confirm again to delete this pull request with %s comments" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 +#, python-format +msgid "%s Pull Request %s" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 +#, python-format +msgid "Pull request %s from %s#%s" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 +msgid "Summarize the changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 +msgid "Reviewer voting result" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:80 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 +msgid "Still not reviewed by" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 +#, python-format +msgid "%d reviewer" +msgid_plural "%d reviewers" +msgstr[0] "" +msgstr[1] "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 +msgid "Pull request was reviewed by all reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 +msgid "There are no reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 +msgid "Origin" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 +msgid "on" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 +msgid "Target" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 +msgid "" +"This is just a range of changesets and doesn't have a target or a real " +"merge ancestor." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 +msgid "Pull changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +msgid "Next iteration" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 +msgid "Current revision - no change" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +msgid "Cancel Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 +msgid "Pull Request Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 +msgid "Remove reviewer" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 +msgid "Type name of reviewer to add" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 +msgid "Potential Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 +msgid "Click to add the repository owner as reviewer:" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:6 +#, python-format +msgid "%s Pull Requests" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:11 +#, python-format +msgid "Pull Requests from '%s'" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:13 +#, python-format +msgid "Pull Requests to '%s'" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 +msgid "Open New Pull Request" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 +#, python-format +msgid "Show Pull Requests to %s" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 +#, python-format +msgid "Show Pull Requests from '%s'" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:28 +msgid "Hide closed pull requests (only show open pull requests)" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:30 +msgid "Show closed pull requests (in addition to open pull requests)" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 +msgid "Pull Requests Created by Me" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +msgid "Pull Requests Needing My Review" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 +msgid "Pull Requests I Participate In" +msgstr "" + +#: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 +#, python-format +msgid "%s Search" +msgstr "" + +#: kallithea/templates/search/search.html:8 +#: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 +msgid "Search in All Repositories" +msgstr "" + +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 +msgid "Search term" +msgstr "" + +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 +msgid "Search in" +msgstr "" + +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 +msgid "File contents" +msgstr "" + +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 +msgid "Commit messages" +msgstr "" + +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 +msgid "File names" +msgstr "" + +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 +msgid "Permission denied" +msgstr "" + +#: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 +#, python-format +msgid "%s Statistics" +msgstr "" + +#: kallithea/templates/summary/statistics.html:16 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 +#, python-format +msgid "%s ATOM feed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:17 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 +#, python-format +msgid "%s RSS feed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 +msgid "Enable" +msgstr "" + +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 +msgid "Stats gathered: " +msgstr "" + +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 +msgid "files" +msgstr "" + +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 +msgid "Show more" +msgstr "" + +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "" + +#: kallithea/templates/summary/statistics.html:390 +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:391 +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:393 +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" +msgstr "" + +#: kallithea/templates/summary/statistics.html:395 +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" +msgstr "" + +#: kallithea/templates/summary/statistics.html:396 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 +msgid "file removed" +msgstr "" + +#: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 +#, python-format +msgid "%s Summary" +msgstr "" + +#: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 +#, python-format +msgid "Repository locked by %s" +msgstr "" + +#: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 +msgid "Repository unlocked" +msgstr "" + +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 +msgid "Fork of" +msgstr "" + +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 +msgid "Clone from" +msgstr "" + +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "" + +#: kallithea/templates/summary/summary.html:72 +#: kallithea/tests/data/templates/summary/summary.html.py:143 +msgid "Show by Name" +msgstr "" + +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 +msgid "Trending files" +msgstr "" + +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "" + +#: kallithea/templates/summary/summary.html:108 +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" +msgstr "" + +#: kallithea/templates/summary/summary.html:112 +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" +msgstr "" + +#: kallithea/templates/summary/summary.html:114 +#: kallithea/tests/data/templates/summary/summary.html.py:196 +msgid "With subrepos" +msgstr "" + +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 +msgid "Feed" +msgstr "" + +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 +msgid "Latest Changes" +msgstr "" + +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 +msgid "Quick Start" +msgstr "" + +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 +#, python-format +msgid "Readme file from revision %s:%s" +msgstr "" + +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 +#, python-format +msgid "Download %s as %s" +msgstr "" + +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "Cerrado, reemplazado por %s." + +#~ msgid "Closing." +#~ msgstr "Cerrado." + +#~ msgid "An error occurred during creation of field" +#~ msgstr "" + +#~ msgid "Changeset not found" +#~ msgstr "" + +#~ msgid "Repository no access" +#~ msgstr "" + +#~ msgid "Repository read access" +#~ msgstr "" + +#~ msgid "Repository write access" +#~ msgstr "" + +#~ msgid "Repository admin access" +#~ msgstr "" + +#~ msgid "Repository Group no access" +#~ msgstr "" + +#~ msgid "Repository Group read access" +#~ msgstr "" + +#~ msgid "Repository Group write access" +#~ msgstr "" + +#~ msgid "Repository Group admin access" +#~ msgstr "" + +#~ msgid "Repository creation disabled" +#~ msgstr "" + +#~ msgid "Repository creation enabled" +#~ msgstr "" + +#~ msgid "Repository forking disabled" +#~ msgstr "" + +#~ msgid "Repository forking enabled" +#~ msgstr "" + +#~ msgid "Register disabled" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "" + +#~ msgid "Not Reviewed" +#~ msgstr "" + +#~ msgid "Rejected" +#~ msgstr "" + +#~ msgid "Under Review" +#~ msgstr "" + +#~ msgid "Repository group no access" +#~ msgstr "" + +#~ msgid "Repository group read access" +#~ msgstr "" + +#~ msgid "Repository group write access" +#~ msgstr "" + +#~ msgid "Repository group admin access" +#~ msgstr "" + +#~ msgid "User group no access" +#~ msgstr "" + +#~ msgid "User group read access" +#~ msgstr "" + +#~ msgid "User group write access" +#~ msgstr "" + +#~ msgid "User group admin access" +#~ msgstr "" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "" + +#~ msgid "User Group creation disabled" +#~ msgstr "" + +#~ msgid "User Group creation enabled" +#~ msgstr "" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "repositories" +#~ msgstr "" + +#~ msgid "No repositories found." +#~ msgstr "" + +#~ msgid "There are no branches yet" +#~ msgstr "" + +#~ msgid "There are no tags yet" +#~ msgstr "" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "" +#~ "Changeset status: %s\n" +#~ "Click to open associated pull request %s" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "" + +#~ msgid "Update" +#~ msgstr "" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "" + +#~ msgid "%s Tags" +#~ msgstr "" + +#~ msgid "Compare Tags" +#~ msgstr "" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/fr/LC_MESSAGES/kallithea.po diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/how_to --- a/kallithea/i18n/how_to Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/how_to Thu Jun 07 01:46:02 2018 +0200 @@ -94,4 +94,7 @@ Run Kallithea tests by executing:: - nosetests + py.test + + +.. _Weblate: http://weblate.org/ diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/hu/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/hu/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/hu/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" "PO-Revision-Date: 2015-04-11 00:59+0200\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian " @@ -20,441 +20,476 @@ "X-Generator: Weblate 2.3-dev\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, python-format +msgid "Could not find other repository %s" +msgstr "" + +#: kallithea/controllers/compare.py:73 +msgid "Cannot compare repositories of different types" +msgstr "" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" +#: kallithea/controllers/error.py:70 +msgid "No response" +msgstr "" + #: kallithea/controllers/error.py:71 -msgid "No response" -msgstr "" - -#: kallithea/controllers/error.py:72 msgid "Unknown error" msgstr "" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "" -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." msgstr "" -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "" - -#: kallithea/controllers/feed.py:56 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "" + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 #, python-format msgid "%s %s feed" msgstr "" -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "" - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "" - -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, python-format msgid "%s at %s" msgstr "" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "" -#: kallithea/controllers/files.py:317 +#: kallithea/controllers/files.py:309 msgid "You can only delete files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:328 +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "" -#: kallithea/controllers/files.py:377 +#: kallithea/controllers/files.py:369 msgid "You can only edit files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:391 +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" msgstr "" -#: kallithea/controllers/login.py:246 +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" msgstr "" -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "" -#: kallithea/controllers/pullrequests.py:124 -#, python-format -msgid "%s (closed)" -msgstr "" - -#: kallithea/controllers/pullrequests.py:152 -#: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 -msgid "Changeset" -msgstr "" - -#: kallithea/controllers/pullrequests.py:173 -msgid "Special" -msgstr "" - -#: kallithea/controllers/pullrequests.py:174 -msgid "Peer branches" -msgstr "" - -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 -msgid "Bookmarks" -msgstr "" - -#: kallithea/controllers/pullrequests.py:310 -#, python-format -msgid "Error creating pull request: %s" -msgstr "" - -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 +#: kallithea/controllers/pullrequests.py:73 #, python-format msgid "Invalid reviewer \"%s\" specified" msgstr "" -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:135 +#, python-format +msgid "%s (closed)" +msgstr "" + +#: kallithea/controllers/pullrequests.py:162 +#: kallithea/templates/changeset/changeset.html:12 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 +msgid "Changeset" +msgstr "" + +#: kallithea/controllers/pullrequests.py:183 +msgid "Special" +msgstr "" + +#: kallithea/controllers/pullrequests.py:184 +msgid "Peer branches" +msgstr "" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 +msgid "Bookmarks" +msgstr "" + +#: kallithea/controllers/pullrequests.py:326 +#, python-format +msgid "Error creating pull request: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "" - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "" - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" -msgstr "" - -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "" + +#: kallithea/controllers/pullrequests.py:381 +msgid "New pull request iteration created" +msgstr "" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, python-format +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." -msgstr "" - -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +msgid "No additional changesets found for iterating on this pull request." +msgstr "" + +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "" - -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:571 +msgid "Git pull requests don't support iterating yet." +msgstr "" + +#: kallithea/controllers/pullrequests.py:573 +#, python-format +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "" - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, python-format +msgid "Successfully deleted pull request %s" +msgstr "" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "" -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "" -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "" @@ -466,149 +501,153 @@ msgid "error occurred during update of auth settings" msgstr "" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "" +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "" + #: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 -msgid "Forever" +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" msgstr "" #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" msgstr "" #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 +msgid "1 day" msgstr "" #: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 -msgid "1 day" -msgstr "" - -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" msgstr "" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" msgstr "" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -616,622 +655,641 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" -msgstr "" - -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, python-format +msgid "An error occurred during creation of field: %r" +msgstr "" + +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "" +#: kallithea/controllers/admin/repos.py:480 +msgid "An error occurred during this operation" +msgstr "" + +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 +#, fuzzy +msgid "Repository has been locked" +msgstr "Ennek a tárolónak %s elágazása van" + +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 +#, fuzzy +msgid "Repository has been unlocked" +msgstr "Ennek a tárolónak %s elágazása van" + +#: kallithea/controllers/admin/repos.py:502 #: kallithea/controllers/admin/repos.py:521 -msgid "An error occurred during this operation" +msgid "An error occurred during unlocking" +msgstr "" + +#: kallithea/controllers/admin/repos.py:533 +msgid "Cache invalidation successful" msgstr "" #: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 -#, fuzzy -msgid "Repository has been locked" -msgstr "Ennek a tárolónak %s elágazása van" - -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 -#, fuzzy -msgid "Repository has been unlocked" -msgstr "Ennek a tárolónak %s elágazása van" - -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 -msgid "An error occurred during unlocking" -msgstr "" - -#: kallithea/controllers/admin/repos.py:582 -msgid "Cache invalidation successful" -msgstr "" - -#: kallithea/controllers/admin/repos.py:586 msgid "An error occurred during cache invalidation" msgstr "" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "" +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 +msgid "" +"Unable to activate hgsubversion support. The \"hgsubversion\" library is " +"missing" +msgstr "" + +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 +msgid "Error occurred while updating application settings" +msgstr "" + #: kallithea/controllers/admin/settings.py:174 -msgid "" -"Unable to activate hgsubversion support. The \"hgsubversion\" library is " -"missing" -msgstr "" - -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 -msgid "Error occurred while updating application settings" -msgstr "" - -#: kallithea/controllers/admin/settings.py:211 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "" -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format #| msgid "Private Repository" msgid "Invalidated %s repositories" msgstr "Tároló törlése" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "" +#: kallithea/controllers/admin/user_groups.py:208 +#, python-format +msgid "Error occurred during update of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:219 +msgid "Successfully deleted user group" +msgstr "" + #: kallithea/controllers/admin/user_groups.py:224 -#, python-format -msgid "Error occurred during update of user group %s" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:242 -msgid "Successfully deleted user group" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:247 msgid "An error occurred during deletion of user group" msgstr "" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, python-format msgid "Changeset for %s %s not found in %s" msgstr "" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, python-format msgid "Changeset %s not found" msgstr "" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 msgid "Compare view" msgstr "" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, python-format msgid "Fork name %s" msgstr "" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, python-format msgid "Pull request %s" msgstr "" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr "" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1239,1305 +1297,959 @@ "repositories" msgstr "" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 msgid "Default user has read access to new repositories" msgstr "" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 msgid "Default user has write access to new repositories" msgstr "" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 msgid "Only admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 msgid "Non-admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 msgid "Only admins can create user groups" msgstr "" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 msgid "Non-admins can create user groups" msgstr "" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 msgid "Only admins can fork repositories" msgstr "" -#: kallithea/model/db.py:1696 +#: kallithea/model/db.py:1745 msgid "Non-admins can fork repositories" msgstr "" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" msgstr "" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 #, fuzzy msgid "Not reviewed" msgstr "" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 #, fuzzy msgid "Under review" msgstr "" -#: kallithea/model/forms.py:57 -msgid "Please enter a login" +#: kallithea/model/db.py:2278 +msgid "Not approved" +msgstr "" + +#: kallithea/model/db.py:2279 +msgid "Approved" msgstr "" #: kallithea/model/forms.py:58 +msgid "Please enter a login" +msgstr "" + +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "" -#: kallithea/model/forms.py:66 -msgid "Please enter a password" -msgstr "" - #: kallithea/model/forms.py:67 +msgid "Please enter a password" +msgstr "" + +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" +#: kallithea/model/notification.py:240 +#, python-format +msgid "%(user)s commented on changeset %(age)s" +msgstr "" + +#: kallithea/model/notification.py:241 +#, python-format +msgid "%(user)s sent message %(age)s" +msgstr "" + +#: kallithea/model/notification.py:242 +#, python-format +msgid "%(user)s mentioned you %(age)s" +msgstr "" + +#: kallithea/model/notification.py:243 +#, python-format +msgid "%(user)s registered in Kallithea %(age)s" +msgstr "" + +#: kallithea/model/notification.py:244 +#, python-format +msgid "%(user)s opened new pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:245 +#, python-format +msgid "%(user)s commented on pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:252 +#, python-format +msgid "%(user)s commented on changeset at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:253 +#, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:254 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + #: kallithea/model/notification.py:255 #, python-format -msgid "%(user)s commented on changeset %(age)s" +msgid "%(user)s registered in Kallithea at %(when)s" msgstr "" #: kallithea/model/notification.py:256 #, python-format -msgid "%(user)s sent message %(age)s" +msgid "%(user)s opened new pull request at %(when)s" msgstr "" #: kallithea/model/notification.py:257 #, python-format -msgid "%(user)s mentioned you %(age)s" -msgstr "" - -#: kallithea/model/notification.py:258 -#, python-format -msgid "%(user)s registered in Kallithea %(age)s" -msgstr "" - -#: kallithea/model/notification.py:259 -#, python-format -msgid "%(user)s opened new pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:260 -#, python-format -msgid "%(user)s commented on pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:267 -#, python-format -msgid "%(user)s commented on changeset at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:268 -#, python-format -msgid "%(user)s sent message at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:269 -#, python-format -msgid "%(user)s mentioned you at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:270 -#, python-format -msgid "%(user)s registered in Kallithea at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:271 -#, python-format -msgid "%(user)s opened new pull request at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:272 -#, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, python-format +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "" + +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" msgstr "" -#: kallithea/model/notification.py:308 -#, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:309 -#, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +msgid "Cannot create empty pull request" +msgstr "" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +msgid "You are not authorized to create the pull request" +msgstr "" + +#: kallithea/model/pull_request.py:341 +msgid "Missing changesets since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:348 +#, python-format +msgid "New changesets on %s %s since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, python-format +msgid "No changes found on %s %s since previous iteration." +msgstr "" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 msgid "You can't remove this user since it is crucial for the entire application" msgstr "" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories: %s" msgstr "" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" " owners or remove those repository groups: %s" msgstr "" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " "owners or remove those user groups: %s" msgstr "" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 msgid "Password reset notification" msgstr "" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with an alphanumeric character or underscore" msgstr "" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 msgid "Invalid username or password" msgstr "" +#: kallithea/model/validators.py:310 +msgid "Token mismatch" +msgstr "" + +#: kallithea/model/validators.py:326 +#, python-format +msgid "Repository name %(repo)s is not allowed" +msgstr "" + +#: kallithea/model/validators.py:328 +#, python-format +msgid "Repository named %(repo)s already exists" +msgstr "" + +#: kallithea/model/validators.py:329 +#, python-format +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "" + #: kallithea/model/validators.py:331 -msgid "Token mismatch" -msgstr "" - -#: kallithea/model/validators.py:345 -#, python-format -msgid "Repository name %(repo)s is not allowed" -msgstr "" - -#: kallithea/model/validators.py:347 -#, python-format -msgid "Repository named %(repo)s already exists" -msgstr "" - -#: kallithea/model/validators.py:348 -#, python-format -msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" -msgstr "" - -#: kallithea/model/validators.py:350 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 msgid "Invalid repository URL" msgstr "" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 msgid "This email address is already in use" msgstr "" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, python-format msgid "Email address \"%(email)s\" not found" msgstr "" -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "" - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Remote repository" +msgid "Repository Group" +msgstr "Tároló törlése" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "" - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "" - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "" - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, python-format msgid "Reset Your Password to %s" msgstr "" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 msgid "Reset Your Password" msgstr "" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" msgstr "" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 msgid "New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 msgid "Confirm New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 msgid "Admin Journal" msgstr "" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "" #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 msgid "Filter" msgstr "" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2545,148 +2257,176 @@ msgstr[1] "%s bejegyzés" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 msgid "Repository Defaults" msgstr "" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "" +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 +msgid "Private repository" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" + #: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 -msgid "Private repository" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 +msgid "Enable statistics" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 +msgid "Enable statistics window on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 +msgid "Enable downloads" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 +msgid "Enable download menu on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 +msgid "Enable locking" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:61 #: kallithea/templates/admin/repos/repo_edit_settings.html:84 -msgid "Enable statistics" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 -msgid "Enable statistics window on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 -msgid "Enable downloads" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 -msgid "Enable download menu on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 -msgid "Enable locking" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "" @@ -2695,45 +2435,63 @@ msgid "Edit Gist" msgstr "" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "" -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 msgid "Never" msgstr "" @@ -2742,271 +2500,404 @@ msgstr "" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 msgid "Email Addresses" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 msgid "Owned Repositories" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 msgid "Watched Repositories" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 msgid "Show Permissions" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, fuzzy, python-format msgid "Confirm to reset this API key: %s" msgstr "A csoport törlésének megerősítése" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 msgid "Expired" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, fuzzy, python-format msgid "Confirm to remove this API key: %s" msgstr "A csoport törlésének megerősítése" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 msgid "Remove" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 msgid "New API key" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "" @@ -3014,279 +2905,359 @@ msgid "Change Your Account Password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, python-format +msgid "Change %s avatar at" msgstr "" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 msgid "Repositories You Own" msgstr "" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" msgstr "" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 msgid "Repositories You are Watching" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" msgstr "" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +msgid "Mark as read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 msgid "Default Permissions" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 msgid "Apply to all existing repositories" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " "will be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 msgid "Apply to all existing repository groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 msgid "" "All default permissions on each user group will be reset to chosen " "permission, note that all custom default permission on user groups will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 +msgid "Permissions for the Default user on new user groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 +msgid "Top level repository creation" +msgstr "" + #: kallithea/templates/admin/permissions/permissions_globals.html:55 -msgid "Permissions for the Default user on new user groups." +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 +msgid "Enable this to allow non-admins to create repositories at the top level." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 +msgid "" +"Note: This will also give all users API access to create repositories " +"everywhere. That might change in future versions." msgstr "" #: kallithea/templates/admin/permissions/permissions_globals.html:60 -msgid "Top level repository creation" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:64 -msgid "Enable this to allow non-admins to create repositories at the top level." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:65 -msgid "" -"Note: This will also give all users API access to create repositories " -"everywhere. That might change in future versions." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "A csoport törlésének megerősítése" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3295,31 +3266,42 @@ msgid "%s Repository Group Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "" @@ -3343,12 +3325,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3359,16 +3343,32 @@ msgid "Delete this repository group" msgstr "" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +msgid "Visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +msgid "Add repos" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +msgid "Add/Edit groups" +msgstr "" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 msgid "User/User Group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 msgid "Default" @@ -3376,102 +3376,115 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 msgid "Revoke" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 msgid "Apply to children" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Confirm to delete this group" msgstr "A csoport törlésének megerősítése" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "This repository has %s fork" +#| msgid_plural "This repository has %s forks" +msgid "Repository group %s" +msgstr "Ennek a tárolónak %s elágazása van" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 msgid "Repository Groups Administration" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 msgid "Number of Top-level Repositories" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "Tároló törlése" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3500,91 +3513,112 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, python-format msgid "%s Repository Settings" msgstr "%s tároló beállítások" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 msgid "Parent" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 msgid "Public Journal Visibility" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 msgid "Add to Public Journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 msgid "Change Locking" msgstr "" +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 +msgid "Confirm to unlock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 +msgid "Unlock Repository" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_advanced.html:52 -msgid "Confirm to unlock repository." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 -msgid "Unlock Repository" +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 +#, python-format +msgid "Locked by %s on %s" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:56 -#, python-format -msgid "Locked by %s on %s" +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 +msgid "Confirm to lock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 +msgid "Lock Repository" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:60 -msgid "Confirm to lock repository." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 -msgid "Lock Repository" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3592,32 +3626,39 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 msgid "Delete this Repository" msgstr "Tároló törlése" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" msgstr[0] "Ennek a tárolónak %s elágazása van" msgstr[1] "Ennek a tárolónak %s elágazása van" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3628,107 +3669,113 @@ msgid "Invalidate Repository Cache" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -msgid "Confirm to invalidate repository cache." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 +msgid "List of Cached Values" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_caches.html:12 -msgid "List of Cached Values" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 msgid "Prefix" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 #, fuzzy msgid "Private Repository" msgstr "Tároló törlése" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "Remote repository" +msgid "Fork of repository" +msgstr "Tároló törlése" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 #, fuzzy msgid "Remote repository URL" msgstr "Tároló törlése" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 msgid "Pull Changes from Remote Repository" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 -msgid "Confirm to pull changes from remote repository." -msgstr "" - #: kallithea/templates/admin/repos/repo_edit_remote.html:17 +msgid "Confirm to pull changes from remote repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "Permanent Repository ID" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3738,34 +3785,34 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 #, fuzzy msgid "Remote repository" msgstr "Tároló törlése" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 msgid "Repository URL" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_statistics.html:6 -msgid "Processed commits" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 msgid "Processed progress" msgstr "" @@ -3778,312 +3825,371 @@ msgstr "" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 msgid "Repositories Administration" msgstr "" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 msgid "Settings Administration" msgstr "" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 msgid "Save Settings" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 msgid "Custom Hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" -msgstr "" - -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:4 +msgid "Rescan options" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:23 -msgid "Install Git hooks" -msgstr "" - #: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "" +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + #: kallithea/templates/admin/settings/settings_search.html:12 -msgid "Build from scratch" -msgstr "" - -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 msgid "Kallithea version" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 -msgid "Git version" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Upgrade info endpoint" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 msgid "Mercurial extensions" msgstr "" +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 +msgid "Enable largefiles extension" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 +msgid "Enable hgsubversion extension" +msgstr "" + #: kallithea/templates/admin/settings/settings_vcs.html:47 -msgid "Enable largefiles extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:51 -msgid "Enable hgsubversion extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 msgid "Location of repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4100,101 +4206,123 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +msgid "Repository page size" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "" + #: kallithea/templates/admin/settings/settings_visual.html:84 -msgid "Show private repository icon on repositories" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 msgid "Meta Tagging" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 msgid "Show Members" msgstr "" @@ -4204,13 +4332,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "" @@ -4219,48 +4349,59 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 msgid "User Groups Administration" msgstr "" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4270,12 +4411,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4284,7 +4427,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "" @@ -4293,939 +4437,1212 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 msgid "Users Administration" msgstr "" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "" - -#: kallithea/templates/base/base.html:145 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 +msgid "Options" +msgstr "" + #: kallithea/templates/base/base.html:147 -msgid "Options" +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" msgstr "" #: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 -msgid "Compare Fork" +#: kallithea/tests/data/templates/base/base.html.py:399 +msgid "Unlock" msgstr "" #: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "" - -#: kallithea/templates/base/base.html:163 -msgid "Unlock" +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" msgstr "" #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "" -#: kallithea/templates/base/base.html:246 -msgid "Search in repositories" -msgstr "" - -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 -msgid "My Pull Requests" -msgstr "" - -#: kallithea/templates/base/base.html:289 -msgid "Not Logged In" -msgstr "" - -#: kallithea/templates/base/base.html:296 -msgid "Login to Your Account" -msgstr "" - #: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" -msgstr "" - -#: kallithea/templates/base/base.html:346 +#: kallithea/tests/data/templates/base/base.html.py:540 +msgid "Search in repositories" +msgstr "" + +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 +msgid "My Pull Requests" +msgstr "" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 +msgid "Not Logged In" +msgstr "" + +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 +msgid "Login to Your Account" +msgstr "" + +#: kallithea/templates/base/base.html:385 +msgid "Forgot password?" +msgstr "" + +#: kallithea/templates/base/base.html:389 +msgid "Don't have an account?" +msgstr "" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 msgid "Inherit defaults" msgstr "" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 -msgid "Add Another Comment" -msgstr "Egy másik hozzászólás hozzáadása" - -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 -msgid "Stop following this repository" -msgstr "" - -#: kallithea/templates/base/root.html:24 -msgid "Start following this repository" -msgstr "" - #: kallithea/templates/base/root.html:25 -msgid "Group" -msgstr "" +#: kallithea/tests/data/templates/base/root.html.py:85 +msgid "Add Another Comment" +msgstr "Egy másik hozzászólás hozzáadása" #: kallithea/templates/base/root.html:26 -msgid "members" +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 +msgid "Stop following this repository" msgstr "" #: kallithea/templates/base/root.html:27 -msgid "Loading ..." +#: kallithea/tests/data/templates/base/root.html.py:89 +msgid "Start following this repository" msgstr "" #: kallithea/templates/base/root.html:28 -msgid "loading ..." +#: kallithea/tests/data/templates/base/root.html.py:91 +msgid "Group" msgstr "" #: kallithea/templates/base/root.html:29 -msgid "Search truncated" +#: kallithea/tests/data/templates/base/root.html.py:93 +msgid "members" msgstr "" #: kallithea/templates/base/root.html:30 -msgid "No matching files" +#: kallithea/tests/data/templates/base/root.html.py:95 +msgid "Loading ..." msgstr "" #: kallithea/templates/base/root.html:31 -msgid "Open New Pull Request from {0}" +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." msgstr "" #: kallithea/templates/base/root.html:32 -msgid "Open New Pull Request for {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" msgstr "" #: kallithea/templates/base/root.html:33 -msgid "Show Selected Changesets {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" msgstr "" #: kallithea/templates/base/root.html:34 -msgid "Selection Link" +#: kallithea/tests/data/templates/base/root.html.py:103 +msgid "Open New Pull Request from {0}" msgstr "" #: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 -msgid "Collapse Diff" +#: kallithea/tests/data/templates/base/root.html.py:105 +msgid "Open New Pull Request for {0} → {1}" msgstr "" #: kallithea/templates/base/root.html:36 -msgid "Expand Diff" +#: kallithea/tests/data/templates/base/root.html.py:107 +msgid "Show Selected Changesets {0} → {1}" msgstr "" #: kallithea/templates/base/root.html:37 -msgid "Failed to revoke permission" +#: kallithea/tests/data/templates/base/root.html.py:109 +msgid "Selection Link" msgstr "" #: kallithea/templates/base/root.html:38 -msgid "Confirm to revoke permission for {0}: {1} ?" +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 +msgid "Collapse Diff" msgstr "" #: kallithea/templates/base/root.html:39 -msgid "enabled" +#: kallithea/tests/data/templates/base/root.html.py:113 +msgid "Expand Diff" msgstr "" #: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "" - -#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/base/root.html.py:115 +msgid "Failed to revoke permission" +msgstr "" + +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 +msgid "Confirm to revoke permission for {0}: {1} ?" +msgstr "" + +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" msgstr "" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." msgstr "" #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 msgid "Go to tip of repository" msgstr "" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" msgstr "" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, python-format +msgid "Changeset status: %s by %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 msgid "Push new repository" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 msgid "Merge" msgstr "" +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 +msgid "Grafted from:" +msgstr "" + #: kallithea/templates/changeset/changeset.html:123 -msgid "Grafted from:" +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" msgstr "" #: kallithea/templates/changeset/changeset.html:129 -msgid "Transplanted from:" -msgstr "" - -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 msgid "Replaced by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 msgid "Preceded by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 msgid "No revisions" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 msgid "on pull request" msgstr "" +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 +msgid "No title" +msgstr "" + #: kallithea/templates/changeset/changeset_file_comment.html:22 -msgid "No title" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "%s módosításcsomag" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 msgid "Delete comment?" msgstr "Hozzászólás törlése?" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "%s módosításcsomag" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +msgid "Set changeset status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +msgid "No change" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +msgid "Finish pull request" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +msgid "Close" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, python-format msgid "%d inline" msgid_plural "%d inline" msgstr[0] "%d sorközi" msgstr[1] "%d sorközi" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -msgid "Use @username inside this text to notify another user." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -msgid "Set changeset status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -msgid "No change" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -msgid "Close" -msgstr "" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +msgid "File before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:40 +msgid "Modified" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:48 +#, python-format +msgid "Unknown operation: %r" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:52 +msgid "No file after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:55 +msgid "File after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 msgid "Show full diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 msgid "Show full side-by-side diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 msgid "Show inline comments" msgstr "" -#: kallithea/templates/changeset/diff_block.html:86 -msgid "Deleted" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:89 -msgid "Renamed" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, python-format msgid "%s changesets" msgstr "%s módosításcsomag" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 msgid "behind" msgstr "" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy, python-format +#| msgid "%s changesets" +msgid "Changeset on" +msgstr "%s módosításcsomag" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +msgid "branch" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "%s módosításcsomag" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "Repository has been locked" +msgid "The pull request has been closed." +msgstr "Ennek a tárolónak %s elágazása van" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 msgid "We have received a request to reset the password for your account." msgstr "" -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +msgid "Pull request from" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +msgid "at" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 #, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -msgid "The comment closed the pull request with status" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "Pull Request %s \"%s\" Closed" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "Comment on Pull Request %s \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/registration.html:22 +msgid "Full Name" msgstr "" #: kallithea/templates/files/diff_2way.html:15 @@ -5244,82 +5661,104 @@ msgstr "" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +msgid "New file type" +msgstr "" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 msgid "Commit Changes" msgstr "" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "" -#: kallithea/templates/files/files_browser.html:61 -msgid "Size" -msgstr "" - -#: kallithea/templates/files/files_browser.html:62 -msgid "Last Revision" -msgstr "" - #: kallithea/templates/files/files_browser.html:63 -msgid "Last Modified" +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 +msgid "Size" msgstr "" #: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 +msgid "Last Revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 +msgid "Last Modified" +msgstr "" + +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 msgid "Last Committer" msgstr "" @@ -5329,7 +5768,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "" @@ -5342,101 +5781,128 @@ msgid "Edit file" msgstr "" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" +#: kallithea/templates/files/files_source.html:34 +#, python-format +msgid "Edit on Branch: %s" +msgstr "" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" msgstr "" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +msgid "File is too big to display." +msgstr "" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." msgstr "" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "" @@ -5445,70 +5911,80 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "" -#: kallithea/templates/journal/journal.html:21 -msgid "ATOM journal feed" -msgstr "" - #: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 +msgid "ATOM journal feed" +msgstr "" + +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "" @@ -5522,34 +5998,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "" @@ -5584,7 +6071,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "" @@ -5602,111 +6091,150 @@ msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, python-format msgid "%s Pull Request %s" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, python-format msgid "Pull request %s from %s#%s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 msgid "Summarize the changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 msgid "There are no reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 msgid "on" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -msgid "Update" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +msgid "Next iteration" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +msgid "Cancel Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 msgid "Pull Request Reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 msgid "Remove reviewer" msgstr "Átnéző eltávolítása" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 msgid "Potential Reviewers" msgstr "Lehetséges átnézők" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -msgid "Save as New Pull Request" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -msgid "Cancel Changes" +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:296 -msgid "Pull Request Content" +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 @@ -5724,239 +6252,463 @@ msgid "Pull Requests to '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, python-format msgid "Show Pull Requests to %s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, python-format msgid "Show Pull Requests from '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 msgid "Pull Requests Created by Me" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +msgid "Pull Requests Needing My Review" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 msgid "Pull Requests I Participate In" msgstr "" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 msgid "Search in All Repositories" msgstr "" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "" -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "" +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "" + #: kallithea/templates/summary/statistics.html:390 -msgid "commits" +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" msgstr "" #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" msgstr "" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" msgstr "" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" msgstr "" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "" + #: kallithea/templates/summary/summary.html:72 -msgid "Clone URL" -msgstr "" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" msgstr "" -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "" - -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "" +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "" + #: kallithea/templates/summary/summary.html:108 -msgid "Download" +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" msgstr "" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" msgstr "" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" msgstr "" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 msgid "Latest Changes" msgstr "" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 msgid "Quick Start" msgstr "" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" msgstr "" #~ msgid "increase diff context to %(num)s lines" @@ -6013,9 +6765,6 @@ #~ msgid "No Files" #~ msgstr "" -#~ msgid "" -#~ msgstr "" - #~ msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" #~ msgstr "" @@ -6325,12 +7074,274 @@ #~ msgid "You can only edit files with revision being a valid branch " #~ msgstr "" -#~ msgid "Changeset not found" +#~ msgid "This pull request can be updated with changes on %s:" #~ msgstr "" #~ msgid "Non-admins can can fork repositories" #~ msgstr "" +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "" + +#~ msgid "Commenting on line {1}." +#~ msgstr "" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" + +#~ msgid "Comment preview" +#~ msgstr "" + +#~ msgid "Preview" +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "" + +#~ msgid "New file mode" +#~ msgstr "" + +#~ msgid "File is too big to display" +#~ msgstr "" + +#~ msgid "Save as New Pull Request" +#~ msgstr "" + #~ msgid "Pull Requests from %s'" #~ msgstr "" +#~ msgid "Missing changesets since the previous pull request:" +#~ msgstr "" + +#~ msgid "New changesets on %s %s since the previous pull request:" +#~ msgstr "" + +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "" +#~ "This pull request is based on " +#~ "another %s revision and there is " +#~ "no simple diff." +#~ msgstr "" + +#~ msgid "No changes found on %s %s since previous version." +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "" + +#~ msgid "Pull request update created" +#~ msgstr "" + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "No changesets found for updating this pull request." +#~ msgstr "" + +#~ msgid "Git pull requests don't support updates yet." +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "" + +#~ msgid "An error occurred during creation of field" +#~ msgstr "" + +#~ msgid "Changeset not found" +#~ msgstr "" + +#~ msgid "Repository no access" +#~ msgstr "" + +#~ msgid "Repository read access" +#~ msgstr "" + +#~ msgid "Repository write access" +#~ msgstr "" + +#~ msgid "Repository admin access" +#~ msgstr "" + +#~ msgid "Repository Group no access" +#~ msgstr "" + +#~ msgid "Repository Group read access" +#~ msgstr "" + +#~ msgid "Repository Group write access" +#~ msgstr "" + +#~ msgid "Repository Group admin access" +#~ msgstr "" + +#~ msgid "Repository creation disabled" +#~ msgstr "" + +#~ msgid "Repository creation enabled" +#~ msgstr "" + +#~ msgid "Repository forking disabled" +#~ msgstr "" + +#~ msgid "Repository forking enabled" +#~ msgstr "" + +#~ msgid "Register disabled" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "" + +#~ msgid "Not Reviewed" +#~ msgstr "" + +#~ msgid "Rejected" +#~ msgstr "" + +#~ msgid "Under Review" +#~ msgstr "" + +#~ msgid "Repository group no access" +#~ msgstr "" + +#~ msgid "Repository group read access" +#~ msgstr "" + +#~ msgid "Repository group write access" +#~ msgstr "" + +#~ msgid "Repository group admin access" +#~ msgstr "" + +#~ msgid "User group no access" +#~ msgstr "" + +#~ msgid "User group read access" +#~ msgstr "" + +#~ msgid "User group write access" +#~ msgstr "" + +#~ msgid "User group admin access" +#~ msgstr "" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "" + +#~ msgid "User Group creation disabled" +#~ msgstr "" + +#~ msgid "User Group creation enabled" +#~ msgstr "" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "repositories" +#~ msgstr "" + +#~ msgid "No repositories found." +#~ msgstr "" + +#~ msgid "There are no branches yet" +#~ msgstr "" + +#~ msgid "There are no tags yet" +#~ msgstr "" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "" + +#~ msgid "Update" +#~ msgstr "" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "" + +#~ msgid "%s Tags" +#~ msgstr "" + +#~ msgid "Compare Tags" +#~ msgstr "" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/ja/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/ja/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/ja/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -12,11 +12,11 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" "PO-Revision-Date: 2016-01-07 01:53+0000\n" "Last-Translator: Takumi IINO \n" "Language-Team: Japanese " -"\n" +"\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,446 +25,489 @@ "X-Generator: Weblate 2.5-dev\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "まだチェンジセットがありません" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "なし" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(閉鎖済み)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "空白を表示" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "空白を無視" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "diff コンテキストを %(num)s 行増やす" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "お探しのリビジョンはこのリポジトリにはありません" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "クローズしたプルリクエストに関連するチェンジセットのステータスを変更することは許可されていません" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "リビジョンを選択" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "リポジトリの最新のリビジョン(tip)に移動" + +#: kallithea/controllers/compare.py:73 +#, fuzzy +#| msgid "Cannot compare repositories without using common ancestor" +msgid "Cannot compare repositories of different types" +msgstr "共通の祖先を持たないのでリポジトリを比較できません" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "共通の祖先を持たないのでリポジトリを比較できません" -#: kallithea/controllers/error.py:71 +#: kallithea/controllers/error.py:70 msgid "No response" msgstr "応答がありません" -#: kallithea/controllers/error.py:72 +#: kallithea/controllers/error.py:71 msgid "Unknown error" msgstr "不明なエラー" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "形式が間違っているため、サーバーはリクエストを処理できませんでした。" -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "リソースにアクセスする権限がありません" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "このページを閲覧する権限がありません" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "リソースが見つかりません" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." msgstr "サーバーが不正な状態になったため、リクエストに答えることができませんでした。" -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "%s リポジトリでの変更" - -#: kallithea/controllers/feed.py:56 -#, python-format -msgid "%s %s feed" -msgstr "%s %s フィード" - -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 msgid "Changeset was too big and was cut off..." msgstr "チェンジセットが大きすぎるため、省略しました..." -#: kallithea/controllers/feed.py:91 +#: kallithea/controllers/feed.py:84 #, python-format msgid "%s committed on %s" msgstr "%s が %s にコミット" -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 +#, python-format +msgid "%s %s feed" +msgstr "%s %s フィード" + +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "%s リポジトリでの変更" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "新しいファイルを追加" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "まだファイルがありません。 %s" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, fuzzy, python-format msgid "%s at %s" msgstr "%s と %s の間" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "このリポジトリは %s によって %s にロックされました" -#: kallithea/controllers/files.py:317 +#: kallithea/controllers/files.py:309 #, fuzzy -#| msgid "You can only delete files with revision being a valid branch " msgid "You can only delete files with revision being a valid branch" msgstr "有効なブランチ上のリビジョンからしかファイルを削除できません" -#: kallithea/controllers/files.py:328 +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "Kallithea経由で %s を削除" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "%s ファイルの削除に成功しました" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "コミット中にエラーが発生しました" -#: kallithea/controllers/files.py:377 +#: kallithea/controllers/files.py:369 #, fuzzy -#| msgid "You can only edit files with revision being a valid branch " msgid "You can only edit files with revision being a valid branch" msgstr "有効なブランチを示すリビジョンでのみファイルを編集できます " -#: kallithea/controllers/files.py:391 +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "Kallithea経由で %s を変更" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "変更点なし" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "%s へのコミットが成功しました" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "Kallithea経由でファイルを追加" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "内容がありません" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "ファイル名がありません" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "場所には相対パスかつ .. を含まないパスを入力してください" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "ダウンロードは無効化されています" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "%s は未知のリビジョンです" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "空のリポジトリ" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "未知のアーカイブ種別です" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "チェンジセット" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "ブランチ" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "タグ" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "リポジトリ %s のフォーク中にエラーが発生しました" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "グループ" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "リポジトリ" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "ブランチ" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "閉鎖済みブランチ" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "タグ" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "ブックマーク" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "公開ジャーナル" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "ジャーナル" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "キャプチャが一致しません" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "Kallitheaへの登録を受け付けました" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "%sへの登録を受け付けました" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" msgstr "パスワードリセットの確認コードが送信されました" -#: kallithea/controllers/login.py:246 +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" msgstr "無効なパスワードリセットトークン" -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "パスワードを更新しました" -#: kallithea/controllers/pullrequests.py:124 -#, python-format -msgid "%s (closed)" -msgstr "%s (閉鎖済み)" - -#: kallithea/controllers/pullrequests.py:152 -#: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 -msgid "Changeset" -msgstr "チェンジセット" - -#: kallithea/controllers/pullrequests.py:173 -msgid "Special" -msgstr "スペシャル" - -#: kallithea/controllers/pullrequests.py:174 -msgid "Peer branches" -msgstr "相手のブランチ" - -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 -msgid "Bookmarks" -msgstr "ブックマーク" - -#: kallithea/controllers/pullrequests.py:310 -#, python-format -msgid "Error creating pull request: %s" -msgstr "プルリクエスト作成中にエラーが発生しました: %s" - -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "説明がありません" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "新しいプルリクエストの作成に成功しました" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 +#: kallithea/controllers/pullrequests.py:73 #, python-format msgid "Invalid reviewer \"%s\" specified" msgstr "" -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:135 +#, python-format +msgid "%s (closed)" +msgstr "%s (閉鎖済み)" + +#: kallithea/controllers/pullrequests.py:162 +#: kallithea/templates/changeset/changeset.html:12 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 +msgid "Changeset" +msgstr "チェンジセット" + +#: kallithea/controllers/pullrequests.py:183 +msgid "Special" +msgstr "スペシャル" + +#: kallithea/controllers/pullrequests.py:184 +msgid "Peer branches" +msgstr "相手のブランチ" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 +msgid "Bookmarks" +msgstr "ブックマーク" + +#: kallithea/controllers/pullrequests.py:326 +#, python-format +msgid "Error creating pull request: %s" +msgstr "プルリクエスト作成中にエラーが発生しました: %s" + +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "プルリクエストの作成中にエラーが発生しました" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "新しいプルリクエストの作成に成功しました" + +#: kallithea/controllers/pullrequests.py:381 +#, fuzzy +#| msgid "Pull request update created" +msgid "New pull request iteration created" +msgstr "プルリクエストレビュアー" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" msgstr "" -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" msgstr "" -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "%s で置き換えられたのでクローズします。" - -#: kallithea/controllers/pullrequests.py:470 -#, fuzzy -msgid "Pull request update created" -msgstr "プルリクエストレビュアー" - -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "説明がありません" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "プルリクエストを更新しました" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "プルリクエストの削除に成功しました" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "プルリクエストを更新するためのチェンジセットが見つかりません。" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "このプルリクエストはすでにクローズされていて、更新することはできません。" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" msgstr "" -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." +#: kallithea/controllers/pullrequests.py:556 +#, fuzzy +#| msgid "No changesets found for updating this pull request." +msgid "No additional changesets found for iterating on this pull request." msgstr "プルリクエストを更新するためのチェンジセットが見つかりません。" -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "ノート: ブランチ%sには別のヘッド%sがあります。" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." +#: kallithea/controllers/pullrequests.py:571 +#, fuzzy +#| msgid "Git pull requests don't support updates yet." +msgid "Git pull requests don't support iterating yet." msgstr "Gitのプルリクエストはまだ更新をサポートしていません。" -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:573 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "プルリクエストを更新するためのチェンジセットが見つかりません。" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "プルリクエストステータスを変更する権限がありません" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "クローズ。" - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, fuzzy, python-format +msgid "Successfully deleted pull request %s" +msgstr "プルリクエストの削除に成功しました" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "無効な検索クエリーです。\\\"で囲んで下さい。" -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "検索するためのインデックスがありません。whooshでインデックスを作成して下さい" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "検索を実行する際にエラーが発生しました。" -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "まだデータの準備ができていません" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "このリポジトリの統計は無効化されています" @@ -476,149 +519,153 @@ msgid "error occurred during update of auth settings" msgstr "認証設定の更新中にエラーが発生しました" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "デフォルト設定の更新に成功しました" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "デフォルト設定の更新中にエラーが発生しました" +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "永久" + #: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 -msgid "Forever" -msgstr "永久" +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" +msgstr "5 分" #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" -msgstr "5 分" - -#: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 msgid "1 hour" msgstr "1 時間" -#: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 +#: kallithea/controllers/admin/gists.py:61 +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 msgid "1 day" msgstr "1 日" -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/gists.py:62 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "1 ヶ月" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "有効期間" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "gist の作成中にエラーが発生しました" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "gist %s を削除しました" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" msgstr "変更しない" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "Gist の内容を更新しました" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "Gist データを更新しました" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "Gist %s の更新中にエラーが発生しました" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "このユーザーはアプリケーション全体で非常に重要なので編集できません" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "アカウントの更新に成功しました" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "ユーザー %s の更新中にエラーが発生しました" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "パスワードの更新中にエラーが発生しました" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "ユーザーにメールアドレス %s を追加しました" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "メールの保存時にエラーが発生しました" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "ユーザーからメールアドレスを削除しました" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "APIキーの作成に成功しました" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "APIキーのリセットに成功しました" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "APIキーの削除に成功しました" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "読込" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" -msgstr "書込" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "読込" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "書込" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -626,622 +673,642 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "管理" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "無効" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "手動でアカウントをアクティベートする" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "自動でアカウントをアクティベートする" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "外部アカウントを手動でアクティベートする" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "外部アカウントを自動でアクティベートする" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "無効" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "手動でアカウントをアクティベートする" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "自動でアカウントをアクティベートする" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "外部アカウントを手動でアクティベートする" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "外部アカウントを自動でアクティベートする" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "有効" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "全般の権限の更新に成功しました" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "権限の更新中にエラーが発生しました" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "リポジトリグループ %s の作成中にエラーが発生しました" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "リポジトリグループ %s を作成しました" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "リポジトリグループ %s を更新しました" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "リポジトリグループ %s の更新中にエラーが発生しました" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "このグループは %s 個のリポジトリを含んでいるため削除できません" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "このグループは %s 個のサブグループを含んでいるため削除できません" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "リポジトリグループ %s を削除しました" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "リポジトリグループ %s の削除中にエラーが発生しました" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "自分自身の管理者としての権限を取り消すことはできません" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "リポジトリグループ権限を更新しました" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "権限の取消中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "リポジトリ %s の作成中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "リポジトリ %s を %s から作成しました" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "リポジトリ %s を %s としてフォークしました" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "リポジトリ %s を作成しました" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "リポジトリ %s の更新に成功しました" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "リポジトリ %s の更新中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "%s 個のフォークを切り離しました" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "%s 個のフォークを削除しました" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "リポジトリ %s を削除しました" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "フォークしたリポジトリが存在するため、 リポジトリ %s は削除できません" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "%s の削除中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "リポジトリ権限を更新しました" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during creation of field" +msgid "An error occurred during creation of field: %r" msgstr "フィールドの作成中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "フィールドの削除中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "-- フォークではありません --" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "公開ジャーナルでのリポジトリの可視性を更新しました" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "このリポジトリの公開ジャーナルの設定中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "ありません" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "%s リポジトリを %s のフォークとする" -#: kallithea/controllers/admin/repos.py:521 +#: kallithea/controllers/admin/repos.py:480 msgid "An error occurred during this operation" msgstr "操作中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 msgid "Repository has been locked" msgstr "リポジトリがロックされました" -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 msgid "Repository has been unlocked" msgstr "リポジトリのロックが解除されました" -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 +#: kallithea/controllers/admin/repos.py:502 +#: kallithea/controllers/admin/repos.py:521 msgid "An error occurred during unlocking" msgstr "アンロック中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:582 +#: kallithea/controllers/admin/repos.py:533 msgid "Cache invalidation successful" msgstr "キャッシュの無効化に成功しました" -#: kallithea/controllers/admin/repos.py:586 +#: kallithea/controllers/admin/repos.py:537 msgid "An error occurred during cache invalidation" msgstr "キャッシュの無効化中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "リモートから取得" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "リモートから取得中にエラーが発生しました" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "リポジトリステートの削除中にエラーが発生しました" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "VCS設定を更新しました" -#: kallithea/controllers/admin/settings.py:174 +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 msgid "" "Unable to activate hgsubversion support. The \"hgsubversion\" library is " "missing" msgstr "\"hgsubversion\"ライブラリが見つからないため、hgsubversionサポートを有効に出来ません" -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 msgid "Error occurred while updating application settings" msgstr "アプリケーション設定の更新中にエラーが発生しました" -#: kallithea/controllers/admin/settings.py:211 +#: kallithea/controllers/admin/settings.py:174 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "リポジトリの再スキャンに成功しました。 追加: %s 削除: %s。" -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format #| msgid "Invalidate cache for all repositories" msgid "Invalidated %s repositories" msgstr "すべてのリポジトリのキャッシュを無効化する" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "アプリケーション設定を更新しました" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "表示設定を更新しました" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "表示設定の更新中にエラーが発生しました" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "メールアドレスを入力してください" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "メール送信タスクを作成しました" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "新しいフックを追加しました" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "フックを更新しました" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "フックの作成中にエラーが発生しました" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "Whooshの再インデックスタスクを予定に入れました" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "ユーザーグループ %s を作成しました" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "ユーザーグループ %s の作成中にエラーが発生しました" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "ユーザーグループ %s を更新しました" -#: kallithea/controllers/admin/user_groups.py:224 +#: kallithea/controllers/admin/user_groups.py:208 #, python-format msgid "Error occurred during update of user group %s" msgstr "ユーザーグループ %s の更新中にエラーが発生しました" -#: kallithea/controllers/admin/user_groups.py:242 +#: kallithea/controllers/admin/user_groups.py:219 msgid "Successfully deleted user group" msgstr "ユーザーグループの削除に成功しました" -#: kallithea/controllers/admin/user_groups.py:247 +#: kallithea/controllers/admin/user_groups.py:224 msgid "An error occurred during deletion of user group" msgstr "ユーザーグループの削除中にエラーが発生しました" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "対象に同じ物を選ぶことはできません" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "ユーザーグループ権限を更新しました" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "権限を更新しました" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "権限の保存時にエラーが発生しました" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "ユーザー %s を作成しました" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "ユーザー %s の作成中にエラーが発生しました" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "ユーザーの更新に成功しました" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "ユーザーの削除に成功しました" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "ユーザーの削除中にエラーが発生しました" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "デフォルト ユーザーを編集できません" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "ユーザーホワイトリストにIP %s を追加しました" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "IPアドレスの保存中にエラーが発生しました" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "ユーザーホワイトリストからIPアドレスを削除しました" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "IPアドレス %s は許可されません" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "APIキーが無効です" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "このアクションを実行するためには登録済みのユーザーである必要があります" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "このページを閲覧するためにはサインインが必要です" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "APIキーが無効です" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "ファイルシステム内にリポジトリが見つかりません" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, fuzzy, python-format #| msgid "Changeset not found" msgid "Changeset for %s %s not found in %s" msgstr "リビジョンが見つかりません" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "バイナリファイル" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "チェンジセットが大きすぎるため省略しました。差分を表示する場合は差分メニューを使用してください" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "検出された変更はありません" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "削除されたブランチ: %s" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "作成したタグ: %s" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format #| msgid "Changeset not found" msgid "Changeset %s not found" msgstr "リビジョンが見つかりません" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "%s から %s までのすべてのチェンジセットを表示" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 msgid "Compare view" msgstr "比較ビュー" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "と" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "%s 以上" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "リビジョン" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, python-format msgid "Fork name %s" msgstr "フォーク名 %s" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, python-format msgid "Pull request %s" msgstr "プルリクエスト #%s" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "リポジトリを[削除]" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "リポジトリを[作成]" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "フォークしてリポジトリを[作成]" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "リポジトリを[フォーク]" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "リポジトリを[更新]" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "リポジトリからアーカイブを[ダウンロード]" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "リポジトリを[削除]" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "ユーザーを[作成]" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "ユーザーを[更新]" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "ユーザーグループを[作成]" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "ユーザーグループを[更新]" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "リポジトリのリビジョンに[コメント]" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "プルリクエストに[コメント]" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "プルリクエストを[クローズ]" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "[プッシュ]" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "リポジトリに[Kallithea経由でコミット]" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "リポジトリに[リモートからプル]" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "[プル]" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "リポジトリの[フォローを開始]" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "リポジトリの[フォローを停止]" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr " と %s 以上" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "ファイルはありません" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "新しいファイル" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "変更" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "削除" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "リネーム" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "chmod" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1251,736 +1318,390 @@ "%s " "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを再起動してください" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d 年" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d ヶ月" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d 日" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d 時間" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d 分" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d 秒" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "%s 以内" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "%s 前" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "%s と %s の間" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "%s と %s 前" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "たったいま" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "リポジトリへのアクセス権限無し" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "リポジトリに読込権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "リポジトリに書込権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "リポジトリに管理権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "リポジトリグループへのアクセス権限なし" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "リポジトリグループに読込権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "リポジトリグループに書込権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "リポジトリグループに管理権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "Kallithea 管理者" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "リポジトリの作成を有効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "リポジトリの作成を有効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "リポジトリのフォークを無効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "リポジトリのフォークを有効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "新規登録を無効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "Kallitheaに登録した新しいユーザーを手動でアクティベートする" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "Kallitheaに登録した新しいユーザーを自動でアクティベートする" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "未レビュー" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "承認" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "却下" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "レビュー中" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "top level" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "リポジトリグループへのアクセス権限なし" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "リポジトリグループに読込権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "リポジトリグループに書込権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "リポジトリグループに管理権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "ユーザーグループへのアクセス権限なし" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "ユーザーグループに読込権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "ユーザーグループに書込権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "ユーザーグループに管理権限でアクセス" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "リポジトリグループの作成を無効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "リポジトリグループの作成を有効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "ユーザーグループの作成を無効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "ユーザーグループの作成を有効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "新規登録を無効にする" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "ユーザーの新規登録時に手動でアカウントをアクティベートする" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "ユーザーの新規登録時に自動でアカウントをアクティベートする" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "リポジトリグループの書き込みパーミッションを使ったリポジトリ作成が有効です" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "リポジトリグループの書き込みパーミッションを使ったリポジトリ作成は無効です" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "%s 行目" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "[Mention]" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "top level" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "Kallithea 管理者" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "デフォルトユーザーは新しいリポジトリにアクセスできません" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 msgid "Default user has read access to new repositories" msgstr "デフォルトユーザーは新しいリポジトリに読み取りアクセスする権限があります" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 msgid "Default user has write access to new repositories" msgstr "デフォルトユーザーは新しいリポジトリに書き込みアクセスする権限があります" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 msgid "Only admins can create repository groups" msgstr "管理者のみがリポジトリのグループを作成できます" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 msgid "Non-admins can create repository groups" msgstr "非管理者がリポジトリのグループを作成できます" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 msgid "Only admins can create user groups" msgstr "管理者だけがユーザー グループを作成することができます" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 msgid "Non-admins can create user groups" msgstr "非管理者ユーザーがグループを作成することができます" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "管理者だけがトップレベルにリポジトリを作成することができます" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "非管理者がトップレベルにリポジトリを作成することができます" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "リポジトリグループの書き込みパーミッションを使ったリポジトリ作成が有効です" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "リポジトリグループの書き込みパーミッションを使ったリポジトリ作成は無効です" + +#: kallithea/model/db.py:1744 msgid "Only admins can fork repositories" msgstr "管理者のみがリポジトリをフォークすることができます" -#: kallithea/model/db.py:1696 +#: kallithea/model/db.py:1745 #, fuzzy -#| msgid "Non-admins can can fork repositories" msgid "Non-admins can fork repositories" msgstr "非管理者がリポジトリをフォークすることができます" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "新規登録を無効にする" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "ユーザーの新規登録時に手動でアカウントをアクティベートする" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" msgstr "ユーザーの新規登録時に自動でアカウントをアクティベートする" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 msgid "Not reviewed" msgstr "未レビュー" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 msgid "Under review" msgstr "レビュー中" -#: kallithea/model/forms.py:57 +#: kallithea/model/db.py:2278 +#, fuzzy +#| msgid "Approved" +msgid "Not approved" +msgstr "承認" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "承認" + +#: kallithea/model/forms.py:58 msgid "Please enter a login" msgstr "ログイン名を入力してください" -#: kallithea/model/forms.py:58 +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "%(min)i 文字以上必要です" -#: kallithea/model/forms.py:66 +#: kallithea/model/forms.py:67 msgid "Please enter a password" msgstr "パスワードを入力してください" -#: kallithea/model/forms.py:67 +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "%(min)i 文字以上必要です" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "数字だけの名前は使えません" -#: kallithea/model/notification.py:255 +#: kallithea/model/notification.py:240 #, python-format msgid "%(user)s commented on changeset %(age)s" msgstr "%(user)s がチェンジセットにコメント %(age)s" -#: kallithea/model/notification.py:256 +#: kallithea/model/notification.py:241 #, python-format msgid "%(user)s sent message %(age)s" msgstr "%(user)s がメッセージを送信 %(age)s" -#: kallithea/model/notification.py:257 +#: kallithea/model/notification.py:242 #, python-format msgid "%(user)s mentioned you %(age)s" msgstr "%(user)s がにあなたにメンション %(age)s" -#: kallithea/model/notification.py:258 +#: kallithea/model/notification.py:243 #, python-format msgid "%(user)s registered in Kallithea %(age)s" msgstr "%(user)s がKallitheaに登録 %(age)s" -#: kallithea/model/notification.py:259 +#: kallithea/model/notification.py:244 #, python-format msgid "%(user)s opened new pull request %(age)s" msgstr "%(user)s が新しいプルリクエストを作成 %(age)s" -#: kallithea/model/notification.py:260 +#: kallithea/model/notification.py:245 #, python-format msgid "%(user)s commented on pull request %(age)s" msgstr "%(user)s がプルリクエストにコメント %(age)s" -#: kallithea/model/notification.py:267 +#: kallithea/model/notification.py:252 #, python-format msgid "%(user)s commented on changeset at %(when)s" msgstr "%(user)s がチェンジセットにコメント %(when)s" -#: kallithea/model/notification.py:268 +#: kallithea/model/notification.py:253 #, python-format msgid "%(user)s sent message at %(when)s" msgstr "%(user)s がメッセージを送信 %(when)s" -#: kallithea/model/notification.py:269 +#: kallithea/model/notification.py:254 #, python-format msgid "%(user)s mentioned you at %(when)s" msgstr "%(user)s がにあなたにメンション %(when)s" -#: kallithea/model/notification.py:270 +#: kallithea/model/notification.py:255 #, python-format msgid "%(user)s registered in Kallithea at %(when)s" msgstr "%(user)s がKallitheaに登録 %(when)s" -#: kallithea/model/notification.py:271 +#: kallithea/model/notification.py:256 #, python-format msgid "%(user)s opened new pull request at %(when)s" msgstr "%(user)s が新しいプルリクエストを作成 %(when)s" -#: kallithea/model/notification.py:272 +#: kallithea/model/notification.py:257 #, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "%(user)s がプルリクエストにコメント %(when)s" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, fuzzy, python-format +#| msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "プルリクエストに[コメント]" + +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" msgstr "新しいユーザー %(new_username)s が登録されました" -#: kallithea/model/notification.py:308 -#, fuzzy, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "%(user)s がプリリクエスト #%(pr_id)s: %(pr_title)s のレビューを求めています" - -#: kallithea/model/notification.py:309 -#, fuzzy, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "プルリクエストに[コメント]" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "クローズ" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "%(user)s がプリリクエスト #%(pr_nice_id)s: %(pr_title)s のレビューを求めています" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Cannot create empty pull request" +msgstr "プルリクエスト作成中にエラーが発生しました: %s" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +#, fuzzy +#| msgid "Confirm to delete this pull request" +msgid "You are not authorized to create the pull request" +msgstr "このプルリクエストを削除してもよろしいですか?" + +#: kallithea/model/pull_request.py:341 +msgid "Missing changesets since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:348 +#, python-format +msgid "New changesets on %s %s since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, python-format +msgid "No changes found on %s %s since previous iteration." +msgstr "" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "最新のtip" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "新規ユーザー登録" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 #, fuzzy msgid "You can't remove this user since it is crucial for the entire application" msgstr "このユーザーを削除できません。このユーザーはアプリケーションにとって必要不可欠です。" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories: %s" msgstr "ユーザー \"%s\" はまだ %s 個のリポジトリの所有者のため削除することはできません。リポジトリの所有者を変更するか削除してください: %s" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" @@ -1989,7 +1710,7 @@ "ユーザー \"%s\" はまだ %s " "個のリポジトリグループの所有者のため削除することはできません。リポジトリグループの所有者を変更するか削除してください: %s" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " @@ -1998,705 +1719,739 @@ "ユーザー \"%s\" はまだ %s " "個のユーザーグループの所有者のため削除することはできません。ユーザーグループの所有者を変更するか削除してください。 %s" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "パスワードリセットのリンク" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 msgid "Password reset notification" msgstr "パスワードの再設定通知" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "空のリストにはできません" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "ユーザー名 \"%(username)s\" はすでに使われています" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "ユーザー名 %(username)s は使用できません" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with an alphanumeric character or underscore" msgstr "ユーザー名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)しか使えません。また、アルファベットまたはアンダースコア(_)から始まる必要があります" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "入力が正しくありません" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "ユーザー名 %(username)s は不正です" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "不正なユーザーグループ名です" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "ユーザーグループ \"%(usergroup)s\" はすでに存在します" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "ユーザーグループ名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)しか使えません。また、アルファベットから始まる必要があります" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "このグループは親にできません" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "グループ \"%(group_name)s\" はすでに存在します" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "グループ名 \"%(group_name)s\" を持つリポジトリはすでに存在します" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "パスワードに利用出来ない文字列(non-ascii)です" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "古いpasswordが間違っています" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "パスワードが一致しません" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 msgid "Invalid username or password" msgstr "ユーザー名とパスワードの組み合わせが無効です" -#: kallithea/model/validators.py:331 +#: kallithea/model/validators.py:310 msgid "Token mismatch" msgstr "トークンが一致しません" -#: kallithea/model/validators.py:345 +#: kallithea/model/validators.py:326 #, python-format msgid "Repository name %(repo)s is not allowed" msgstr "リポジトリ名 %(repo)s は許可されていません" -#: kallithea/model/validators.py:347 +#: kallithea/model/validators.py:328 #, python-format msgid "Repository named %(repo)s already exists" msgstr "リポジトリ %(repo)s はすでに存在します" -#: kallithea/model/validators.py:348 +#: kallithea/model/validators.py:329 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "リポジトリ \"%(repo)s\" は グループ \"%(group)s\" にすでに存在します" -#: kallithea/model/validators.py:350 +#: kallithea/model/validators.py:331 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "リポジトリグループ名 \"%(repo)s\" はすでに存在します" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 msgid "Invalid repository URL" msgstr "無効なリポジトリのURL" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "フォークは親と同じ種別の必要があります" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "このグループにリポジトリを作成する権限がありません" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "ルートにリポジトリを作成する権限がありません" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "この場所にグループを作成する権限がありません" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "ユーザー名かユーザーグループが不正です" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "不正なパスです" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 msgid "This email address is already in use" msgstr "このメールアドレスはすでに取得されています" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, python-format msgid "Email address \"%(email)s\" not found" msgstr "メールアドレス \"%(email)s\" がみつかりません" -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "LDAPのこのCNに対するログイン属性は必須です。 - これは \"ユーザー名\" と同じです" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "有効なIPv4かIPv6のアドレスを入力してください" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "ネットワークサイズ (bits) は0-32の範囲にする必要があります ( %(bits)r は不正です)" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "キー名にはアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)、数字が使えます" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "ファイル名はディレクトリ内にすることはできません" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "%(loaded)s プラグインと %(next_to_load)s プラグインで同じ名前が使われています" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "ダッシュボード" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "クイックフィルタ..." - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "リポジトリ" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "リポジトリを追加" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "リポジトリグループを追加" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "管理者権限をもっているため編集できます" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "リポジトリグループを編集" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "グループ名" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository group" +msgid "Repository Group" +msgstr "リポジトリグループ" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "説明" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "名前" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "リポジトリ" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "最後の変更点" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "Tip" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "所有者" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "昇順で並び換え" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "降順で並び替え" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "リポジトリが見つかりません。" - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "データエラー" - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "読み込み中..." - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "ログイン" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "%s へログイン" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "ユーザー名" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "パスワード" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "次回から自動的にサインイン" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "パスワードを忘れた?" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "アカウントを持っていない?" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "サインイン" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "パスワードのリセット" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, python-format msgid "Reset Your Password to %s" msgstr "%sのパスワードをリセット" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 msgid "Reset Your Password" msgstr "パスワードのリセット" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "メールアドレス" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "キャプチャ" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" msgstr "パスワードリセットメールを送信" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "システムに登録されている場合、パスワードリセットのリンクを指定されたメールアドレスに送信します。" -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 msgid "New Password" msgstr "新しいパスワード" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 msgid "Confirm New Password" msgstr "新しいパスワードの確認" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "サインアップ" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "%s へサインアップ" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "パスワード再入力" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "名前" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "名字" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "メールアドレス" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "まだブランチがありません" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "閉鎖済みブランチ" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "まだタグがありません" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "まだブックマークがありません" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 msgid "Admin Journal" msgstr "管理ジャーナル" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "ジャーナルフィルタ..." #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 msgid "Filter" msgstr "フィルター" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, python-format msgid "%s Entry" msgid_plural "%s Entries" msgstr[0] "%s 個のエントリ" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "アクション" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "リポジトリ" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "日時" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "アクセス元IPアドレス" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "まだアクションがありません" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "認証設定" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "認証" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "認証プラグイン" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "有効なプラグイン" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "カンマ区切りのプラグインの一覧です。Kallitheaはプラグインの並び順でユーザー認証を試みます" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "有効な組み込みプラグイン" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "プラグイン" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "保存" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 msgid "Repository Defaults" msgstr "リポジトリのデフォルト設定" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "リポジトリの種別" -#: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 msgid "Private repository" msgstr "非公開リポジトリ" -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." msgstr "非公開リポジトリはコラボレーターとして明示的に追加された人のみ閲覧できます。" -#: kallithea/templates/admin/defaults/defaults.html:53 -#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 msgid "Enable statistics" msgstr "統計を有効にする" -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 msgid "Enable statistics window on summary page." msgstr "概要ページの統計ウィンドウを有効にします。" -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 msgid "Enable downloads" msgstr "ダウンロードを有効にする" -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 msgid "Enable download menu on summary page." msgstr "概要ページのダウンロードメニューを有効にします。" -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 msgid "Enable locking" msgstr "ロックを有効にする" -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "リポジトリのpullのロックを有効にします。" @@ -2705,7 +2460,7 @@ msgid "Edit Gist" msgstr "Gistを編集" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " @@ -2714,38 +2469,56 @@ "編集開始後にGistが更新されています。あなたの変更箇所をコピーしておき、 %(here)s " "をクリックして新しいバージョンを読み込みなおしてください。" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "Gist の説明..." -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "Gist 有効期間" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "失効" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 msgid "Never" msgstr "しない" @@ -2754,271 +2527,406 @@ msgstr "Gistを更新" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "キャンセル" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "ユーザー %s の非公開 Gists" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "ユーザー %s の公開 Gists" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "公開 Gists" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "新しい Gist を作成" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "作成日" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "まだgistがありません" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "Gistを新規作成" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." +#: kallithea/templates/admin/gists/new.html:45 +#, fuzzy +#| msgid "name this file..." +msgid "Name this gist ..." msgstr "ファイルに名前をつける..." -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "非公開 Gist を作成" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "公開 Gist を作成" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "リセット" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "Gist" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "URL" -#: kallithea/templates/admin/gists/show.html:37 +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 msgid "Public Gist" msgstr "公開 Gist" -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/templates/admin/gists/show.html:37 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "非公開 Gist" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "削除" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "このGistを削除してもよろしいですか?" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "編集" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "編集" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "Raw形式で表示" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "作成日" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "Raw形式で表示" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "アカウント" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "プロフィール" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 msgid "Email Addresses" msgstr "メールアドレス" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "APIキー" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 msgid "Owned Repositories" msgstr "所有しているリポジトリ" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 msgid "Watched Repositories" msgstr "ウォッチ中のリポジトリ" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 msgid "Show Permissions" msgstr "権限の表示" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "ビルトイン" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, python-format msgid "Confirm to reset this API key: %s" msgstr "このAPIキーをリセットしてもよろしいですか?: %s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 msgid "Expired" msgstr "期限切れ" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, python-format msgid "Confirm to remove this API key: %s" msgstr "このAPIキーを削除してもよろしいですか?: %s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 msgid "Remove" msgstr "削除" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" msgstr "API キーが指定されていません" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 msgid "New API key" msgstr "新しいAPIキー" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "追加" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "プライマリ" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "このメールアドレスを削除してもよろしいですか? : %s" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "追加のメールアドレスはありません。" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "新しいメールアドレス" @@ -3026,176 +2934,230 @@ msgid "Change Your Account Password" msgstr "パスワードを変更してください" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "現在のパスワード" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "新しいパスワード" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "新しいパスワードの確認" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" -msgstr "アバターを変更できます : " +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "現在の IP アドレス" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, fuzzy, python-format +#| msgid "Change avatar at" +msgid "Change %s avatar at" +msgstr "アバターを変更:" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "メールアドレス:" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "アバターは無効です" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "メールアドレスがありません。更新してください。" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "現在の IP アドレス" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 msgid "Repositories You Own" msgstr "あなたが所有者のリポジトリ" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." -msgstr "レコードが見つかりません" +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "名前" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 msgid "Repositories You are Watching" msgstr "あなたがウォッチしているリポジトリ" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "通知" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "すべて" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "コメント" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "プルリクエスト" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" msgstr "すべて既読としてマーク" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +#, fuzzy +#| msgid "Mark All Read" +msgid "Mark as read" +msgstr "すべて既読としてマーク" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "まだ通知がありません" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "通知を表示" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "通知" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 msgid "Default Permissions" msgstr "デフォルトの権限" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "全般" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "IPアドレスのホワイトリスト" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "匿名アクセス" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, fuzzy, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "ログインしなくても Kallithea にアクセスできるようにします。匿名ユーザーは %s ユーザーパーミッションを使います" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "選択したパーミッションで、各リポジトリのデフォルトパーミッションをリセットします。各リポジトリの既存のカスタムデフォルトパーミッション設定は無くなるので注意してください" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "既存のリポジトリを import しますか?" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "リポジトリグループ" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " "will be lost" msgstr "選択したパーミッションで、各リポジトリグループのデフォルトパーミッションをリセットします。各リポジトリグループの既存のカスタムデフォルトパーミッション設定は無くなるので注意してください" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 #, fuzzy msgid "Apply to all existing repository groups" msgstr "既存のリポジトリを import しますか?" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 #, fuzzy msgid "Permissions for the Default user on new repository groups." msgstr "親のリポジトリグループにセットされているパーミッションをコピーします。" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "ユーザーグループ" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 #, fuzzy msgid "" "All default permissions on each user group will be reset to chosen " @@ -3203,33 +3165,40 @@ "be lost" msgstr "選択したパーミッションで、各ユーザーグループのデフォルトパーミッションをリセットします。各ユーザーグループの既存のカスタムデフォルトパーミッション設定は無くなるので注意してください" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 msgid "Permissions for the Default user on new user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 msgid "Top level repository creation" msgstr "トップレベルリポジトリの作成" -#: kallithea/templates/admin/permissions/permissions_globals.html:64 +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 msgid "Enable this to allow non-admins to create repositories at the top level." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:65 +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 msgid "" "Note: This will also give all users API access to create repositories " "everywhere. That might change in future versions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "グループ書き込み権限でのリポジトリ作成" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 #, fuzzy msgid "" "With this, write permission to a repository group allows creating " @@ -3237,73 +3206,95 @@ "mean nothing." msgstr "リポジトリグループに書き込みパーミッションを付与すると、グループ内にリポジトリを作成できるようになります" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "ユーザーグループ作成" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "リポジトリのフォーク" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "新規登録" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "外部認証アカウントのアクティベート" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, python-format msgid "Confirm to delete this IP address: %s" msgstr "このIPアドレスを削除してもよろしいですか? : %s" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "すべてのIPアドレスが許可されています。" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "新しいIPアドレス" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "リポジトリグループ" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "グループ名" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "親グループ" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "親グループのパーミッションをコピー" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "親のリポジトリグループにセットされているパーミッションをコピーします。" @@ -3312,31 +3303,42 @@ msgid "%s Repository Group Settings" msgstr "%s リポジトリグループ設定" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "子グループを追加" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "設定" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "高度な設定" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "権限設定" @@ -3360,12 +3362,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "作成日" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3375,16 +3379,38 @@ msgid "Delete this repository group" msgstr "このリポジトリグループを削除" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#, fuzzy +#| msgid "disabled" +msgid "Visible" +msgstr "無効" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "Add Repository" +msgid "Add repos" +msgstr "リポジトリを追加" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +#, fuzzy +#| msgid "Add user group" +msgid "Add/Edit groups" +msgstr "ユーザーグループを追加" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 msgid "User/User Group" msgstr "ユーザー/ユーザーグループ" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 #, fuzzy @@ -3393,101 +3419,113 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 msgid "Revoke" msgstr "取消" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "新規追加" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 msgid "Apply to children" msgstr "子要素にも適用" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "両方" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "このグループに属する全ての子要素のパーミッションを設定または無効化します。選択されていれば、非公開でないリポジトリや他のリポジトリも対象に含みます。" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" msgstr "グループに対してpullのロックを有効にします。このオプションはグループに含まれる全てのグループとリポジトリに適用されます。" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "このグループを削除" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Confirm to delete this group" msgstr "このグループを削除してもよろしいですか?: %s" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "%s リポジトリグループダッシュボード" +#, fuzzy, python-format +#| msgid "Repository Group: %s" +msgid "Repository group %s" +msgstr "リポジトリグループ: %s" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "ホーム" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "と" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 msgid "Repository Groups Administration" msgstr "リポジトリグループ管理" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 msgid "Number of Top-level Repositories" msgstr "トップレベルリポジトリ数" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 msgid "Clone remote repository" msgstr "リモートリポジトリをクローン" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "短く要点を絞ってください。長い説明にはREADMEファイルを利用してください。" -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "オプション:このリポジトリが属するグループを選択します" -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "作成するリポジトリの種別を指定します" -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "ランディングリビジョン" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3516,91 +3554,112 @@ msgstr "恐れいります。操作中にエラーが発生しました。 Kallithea サーバのログをチェックするか、管理者に問い合わせてください。" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, python-format msgid "%s Repository Settings" msgstr "%s リポジトリ設定" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "拡張フィールド" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "キャッシュ" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "リモート" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "統計" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 msgid "Parent" msgstr "Parent" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "保存" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." msgstr "一覧から別のフォークとしてこのリポジトリを手動で設定します。" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 msgid "Public Journal Visibility" msgstr "公開ジャーナルでの可視性" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "公開ジャーナルから削除する" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 msgid "Add to Public Journal" msgstr "公開ジャーナルへ追加" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." msgstr "公開ジャーナルでは、このリポジトリに対して行った操作のすべてが公開されます" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 msgid "Change Locking" msgstr "ロック" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 msgid "Confirm to unlock repository." msgstr "このリポジトリのロックを解除しますか?" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 msgid "Unlock Repository" msgstr "リポジトリのロックを解除" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 #, python-format msgid "Locked by %s on %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 msgid "Confirm to lock repository." msgstr "このリポジトリをロックしますか?" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 msgid "Lock Repository" msgstr "リポジトリをロック" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "リポジトリはロックされていません" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3608,31 +3667,38 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "このリポジトリを削除してもよろしいですか? : %s" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 msgid "Delete this Repository" msgstr "このリポジトリを削除" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" msgstr[0] "このリポジトリには %s 個のフォークがあります" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "フォークの切り離し" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "フォークも削除" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3643,105 +3709,111 @@ msgid "Invalidate Repository Cache" msgstr "リポジトリのキャッシュを無効化" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -msgid "Confirm to invalidate repository cache." -msgstr "リポジトリのキャッシュを無効化してもよろしいですか?" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "このリポジトリのキャッシュを手動で無効化します。リポジトリへの初回アクセス時に再びキャッシュされます。" -#: kallithea/templates/admin/repos/repo_edit_caches.html:12 +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 msgid "List of Cached Values" msgstr "キャッシュしている値の一覧" -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 +#: kallithea/templates/admin/repos/repo_edit_caches.html:12 msgid "Prefix" msgstr "プレフィックス" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "キー" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "アクティブ" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "ラベル" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "このフィールドを削除してもよろしいですか? : %s" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "新しいフィールドのキー" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "新しいフィールドのラベル" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "ラベルを入力してください" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "新しいフィールドの説明" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "フィールドの説明を入力してください" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." msgstr "拡張フィールドは無効化されています" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 msgid "Private Repository" msgstr "非公開リポジトリ" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "[forked] repository" +msgid "Fork of repository" +msgstr "リポジトリを[フォーク]" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 msgid "Remote repository URL" msgstr "リモートリポジトリURL" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 msgid "Pull Changes from Remote Repository" msgstr "リモートリポジトリから変更を取り込む" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 msgid "Confirm to pull changes from remote repository." msgstr "リモートリポジトリから変更を取り込んでもよろしいですか?" -#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "このリポジトリにリモートURLは設定されていません" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "Permanent Repository ID" msgstr "リポジトリID" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "これは何?" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "id を使ってURLを表現" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3754,33 +3826,33 @@ "上のURLを使えば、常にリポジトリにアクセスできます。\n" "この機能は、CIを使っている場合や、3rd pirtyのサービス向けにURLを固定化したいときに便利です。" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 msgid "Remote repository" msgstr "リモートリポジトリ" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 msgid "Repository URL" msgstr "リポジトリURL" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "オプション: リモートリポジトリのURLです。設定した場合、このURLから変更を取得することができます。" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "ファイルページ、ダウンロード、検索、READMEのデフォルトのリビジョンを指定します" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "リポジトリの所有者を変更" -#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 msgid "Processed commits" msgstr "処理済みコミット数" -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 msgid "Processed progress" msgstr "処理状況" @@ -3793,152 +3865,194 @@ msgstr "現在の統計情報をリセットしてもよろしいですか?" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 msgid "Repositories Administration" msgstr "リポジトリ管理" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "状態" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 msgid "Settings Administration" msgstr "設定管理" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "VCS" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "再マップと再スキャン" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "表示" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "フック" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "全文検索" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "システム情報" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "テストメールの送信" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "送信" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "サイト名" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "このKallitheaサービスのカスタムタイトルを設定します。" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "このKallitheaサービスのカスタムタイトルを設定します。" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "HTTP認証レルム" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:37 +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "ReCaptcha 公開鍵" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "reCaptchaの公開鍵。" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "ReCaptcha 秘密鍵" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "reCaptchaの秘密鍵。この値が設定されると登録時のキャプチャが有効になります。" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 msgid "Save Settings" msgstr "設定を保存" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "組み込みのMercurialフック (編集不可)" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "フックを使うと、リポジトリへのプッシュやプルといった特定のイベントに合わせて、何らかのアクションを実行できます。フック機能では、Pythonの関数を呼び出したり、外部アプリケーションを起動したりできます。" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 msgid "Custom Hooks" msgstr "カスタムフック" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "フックの削除に失敗しました" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" +#: kallithea/templates/admin/settings/settings_mapping.html:4 +#, fuzzy +#| msgid "Rescan option" +msgid "Rescan options" msgstr "再スキャンオプション" -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" msgstr "見つからないリポジトリのレコードを削除" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "すべてのリポジトリのキャッシュを無効化する" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 #, fuzzy msgid "Check this to reload data and clear cache keys for all repositories." msgstr "すべてのリポジトリのキャッシュを無効化する" -#: kallithea/templates/admin/settings/settings_mapping.html:23 +#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 msgid "Install Git hooks" msgstr "Gitフックをインストール" -#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "各リポジトリに Kallitheas の Gitフックがインストールされているか確認してください。現在のフックは最新版に更新されます" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "既存のGitフックを上書きする" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" @@ -3947,115 +4061,125 @@ "GitフックをインストールするとKallitheaから設定されたものであっても既存のフックは全て上書きされます。警告: " "この操作はあなたが手動で配置したGitのカスタムフックを全て破壊します!" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "リポジトリを再スキャン" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "インデックス作成時の設定" -#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 msgid "Build from scratch" msgstr "一度削除してから再度インデックスを作成" -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "このオプションを使うと、全文検索の機能が正しく発揮されるよう、 Kallithea 中の全てのファイルのインデックスを再生成します。" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "再インデックス" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "更新を確認中..." + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 msgid "Kallithea version" msgstr "Kallithea バージョン" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "更新を確認" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "Kallithea の設定ファイル" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" -msgstr "Python バージョン" - #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" -msgstr "プラットフォーム" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" +msgstr "更新を確認" #: kallithea/templates/admin/settings/settings_system.html:8 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" +msgstr "Kallithea の設定ファイル" + +#: kallithea/templates/admin/settings/settings_system.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" +msgstr "Python バージョン" + +#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "プラットフォーム" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 msgid "Git version" msgstr "Git バージョン" -#: kallithea/templates/admin/settings/settings_system.html:9 +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 msgid "Git path" msgstr "Git パス" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Upgrade info endpoint" msgstr "更新情報のエンドポイント" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "ノート: サーバーがこのURLにアクセスできることを確認して下さい" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "更新を確認中..." - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "Python パッケージ" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "Web" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "VCSの操作にSSLを必須とする" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "プッシュ、プル時にSSLを要求します。SSLでない場合はHTTP Error 406: Not Acceptableを返します。" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "プッシュ後にリポジトリのサイズを表示する" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "ユーザーのプッシュコマンドを記録する" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "ユーザーのプルコマンドを記録する" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "プッシュ後にリポジトリを更新する (hg update)" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 msgid "Mercurial extensions" msgstr "Mercurialエクステンション" -#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 msgid "Enable largefiles extension" msgstr "largefilesエクステンションを有効にする" -#: kallithea/templates/admin/settings/settings_vcs.html:51 +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 msgid "Enable hgsubversion extension" msgstr "hgsubversionエクステンションを有効にする" -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." @@ -4063,47 +4187,56 @@ "hgsubversion " "ライブラリのインストールが必要です。リモートのSVNリポジトリをクローンしてMercurialリポジトリに変換するすることが可能です。" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 msgid "Location of repositories" msgstr "リポジトリの場所" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." msgstr "アンロックする。この設定を有効にするためにはKallitheaの再起動が必要です。" -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "リポジトリを保存するファイルシステム上の場所。この値を変更した場合、サーバーの再起動とリポジトリフォルダの再スキャンが必要です。" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "一般" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "リポジトリの拡張フィールドを使用する" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "追加のカスタムフィールドをリポジトリ毎に保存することを許可します。" -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "Kallitheaのバージョンを表示する" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "フッターに表示されるKallitheaのバージョン番号の表示、非表示を設定します。" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "Gravatorsを利用する" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 #, fuzzy msgid "" "Gravatar URL allows you to use another avatar server application.\n" @@ -4128,22 +4261,38 @@ "{size} サーバーアプリケーションに要求する画像のサイズ\n" "{netloc} Kallithea サーバーのアドレスまたはホスト名" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "クローンURL" + +#: kallithea/templates/admin/settings/settings_visual.html:43 +#, fuzzy +#| msgid "" "Schema of clone URL construction eg. +#| '{scheme}://{user}@{netloc}/{repo}'." "\n" " +#| The following " "variables are available:\n" " +#| {scheme} 'http' " "or 'https' sent from running Kallithea server,\n" " +#| {user} current " "user username,\n" " +#| {netloc} network " "location/server host of running Kallithea server,\n" " +#| {repo} full " "repository name,\n" " +#| {repoid} ID of " "repository, can be used to contruct clone-by-id" msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" msgstr "" "クローン URL のスキーマは、 '{scheme}://{user}@{netloc}/{repo}' " "のような形式にします。使える変数は下記の通りです:\n" @@ -4158,83 +4307,105 @@ " {repoid} リポジトリの " "ID。 clone-by-id に使います。" -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "ダッシュボードの項目" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repository Size" +msgid "Repository page size" +msgstr "リポジトリサイズ" + +#: kallithea/templates/admin/settings/settings_visual.html:57 +#, fuzzy +#| msgid "" "Number of items displayed in the admin pages grids before +#| pagination is " "shown." msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." -msgstr "メインページダッシュボードで1ページに表示する要素数。" +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "管理ページで、ページ分割しないでグリッドに表示する項目の数" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +#, fuzzy +#| msgid "Admin pages items" +msgid "Admin page size" +msgstr "管理ページの項目" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "管理ページの項目" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "管理ページで、ページ分割しないでグリッドに表示する項目の数" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "アイコン" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "公開リポジトリのアイコンを表示する" -#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 msgid "Show private repository icon on repositories" msgstr "非公開リポジトリのアイコンを表示する" -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "リポジトリ名の隣に公開/非公開アイコンを表示します。" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 msgid "Meta Tagging" msgstr "メタタグ" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "次のメタタグを変換する:" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "リポジトリの説明のメタタグを解析して色つきのタグに変換します。" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "次のメタタグを変換する:" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "ユーザーグループを追加" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "ユーザーグループ" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "ユーザーグループを追加" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "このユーザーグループの簡潔な説明を書いてください。" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "%s ユーザーグループ設定" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 msgid "Show Members" msgstr "メンバーを表示" @@ -4244,13 +4415,15 @@ msgstr "ユーサーグループ: %s" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "メンバー" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "このユーザーグループを削除してもよろしいですか?: %s" @@ -4259,48 +4432,59 @@ msgid "Delete this user group" msgstr "このユーザーグループを削除" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "まだメンバーがいません" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "グループメンバーを選ぶ" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "有効なメンバー" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 msgid "User Groups Administration" msgstr "ユーザーグループ管理" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "ユーザーを追加" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "ユーザー" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "ユーザーを追加" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "パスワード再入力" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "%s ユーザー設定" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "メールアドレス" @@ -4310,12 +4494,14 @@ msgstr "ユーザー: %s" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "アカウントのソース" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "最終ログイン日時" @@ -4324,7 +4510,8 @@ msgstr "グループのメンバー数" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "このユーザーを削除してもよろしいですか? : %s" @@ -4333,942 +4520,1246 @@ msgid "Delete this user" msgstr "このユーザーを削除" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "%s から継承" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "アバターを変更:" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "メールアドレスがありません。このユーザーのメールアドレスを更新してください。" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "アカウントのソースでの名前" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "新しいパスワード 再入力" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 msgid "Users Administration" msgstr "ユーザー管理" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "認証タイプ" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "サーバーインスタンス: %s" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "サポート" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "Mercurialリポジトリ" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "Gitリポジトリ" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "フォークを作成" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "要約" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "履歴" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "ファイル" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "ブランチの切り替え" - -#: kallithea/templates/base/base.html:145 -#: kallithea/templates/base/base.html:147 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 msgid "Options" msgstr "オプション" +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "フォークと比較" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "比較" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" +msgstr "検索" + #: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 -msgid "Compare Fork" -msgstr "フォークと比較" - -#: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "比較" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "検索" - -#: kallithea/templates/base/base.html:163 +#: kallithea/tests/data/templates/base/base.html.py:399 msgid "Unlock" msgstr "アンロック" -#: kallithea/templates/base/base.html:165 +#: kallithea/templates/base/base.html:157 +#: kallithea/tests/data/templates/base/base.html.py:405 msgid "Lock" msgstr "ロック" -#: kallithea/templates/base/base.html:173 +#: kallithea/templates/base/base.html:165 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "フォロー" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "アンフォロー" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "フォーク" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "プルリクエストを作成" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "%s のプルリクエストを表示" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "ブランチの切り替え" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "一致するものが見つかりません" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "最近の活動を表示" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "公開ジャーナル" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "公開 gists を表示" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "Gists" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "すべての公開 Gists" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "公開 Gists" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "非公開 Gists" -#: kallithea/templates/base/base.html:246 +#: kallithea/templates/base/base.html:319 +#: kallithea/tests/data/templates/base/base.html.py:540 msgid "Search in repositories" msgstr "リポジトリから検索" -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 #: kallithea/templates/pullrequests/pullrequest_show_my.html:6 #: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 msgid "My Pull Requests" msgstr "私のプルリクエスト" -#: kallithea/templates/base/base.html:289 +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 msgid "Not Logged In" msgstr "ログインしていません" -#: kallithea/templates/base/base.html:296 +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 msgid "Login to Your Account" msgstr "あなたのアカウントにログイン" -#: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" +#: kallithea/templates/base/base.html:385 +#, fuzzy +#| msgid "Forgot password ?" +msgid "Forgot password?" msgstr "パスワードを忘れた?" -#: kallithea/templates/base/base.html:346 +#: kallithea/templates/base/base.html:389 +#, fuzzy +#| msgid "Don't have an account ?" +msgid "Don't have an account?" +msgstr "アカウントを持っていない?" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "ログアウト" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "一致するものが見つかりません" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "キーボードショートカット" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "サイト全体" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 msgid "Inherit defaults" msgstr "デフォルト権限を継承" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "リポジトリを作成する" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "ユーザーにリポジトリ作成を許可する場合はこのオプションを選んでください" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "ユーザーにリポジトリ作成を許可する場合はこのオプションを選んでください" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "ユーザーグループを作成" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "ユーザーにユーザーグループの作成を許可する場合はこのオプションを選んでください" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "リポジトリをフォークする" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "ユーザーにリポジトリのフォークを許可する場合はこのオプションを選んでください" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "表示" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "まだ権限設定がありません" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "権限" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "権限を編集" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "権限が設定されていません" -#: kallithea/templates/base/root.html:22 +#: kallithea/templates/base/root.html:25 +#: kallithea/tests/data/templates/base/root.html.py:85 msgid "Add Another Comment" msgstr "別のコメントを追加" -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 +#: kallithea/templates/base/root.html:26 +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 msgid "Stop following this repository" msgstr "このリポジトリのフォローをやめる" -#: kallithea/templates/base/root.html:24 +#: kallithea/templates/base/root.html:27 +#: kallithea/tests/data/templates/base/root.html.py:89 msgid "Start following this repository" msgstr "このリポジトリのフォローする" -#: kallithea/templates/base/root.html:25 +#: kallithea/templates/base/root.html:28 +#: kallithea/tests/data/templates/base/root.html.py:91 msgid "Group" msgstr "グループ" -#: kallithea/templates/base/root.html:26 +#: kallithea/templates/base/root.html:29 +#: kallithea/tests/data/templates/base/root.html.py:93 msgid "members" msgstr "メンバー" -#: kallithea/templates/base/root.html:27 +#: kallithea/templates/base/root.html:30 +#: kallithea/tests/data/templates/base/root.html.py:95 msgid "Loading ..." msgstr "読み込み中..." -#: kallithea/templates/base/root.html:28 +#: kallithea/templates/base/root.html:31 +#: kallithea/tests/data/templates/base/root.html.py:97 msgid "loading ..." msgstr "読み込み中..." -#: kallithea/templates/base/root.html:29 +#: kallithea/templates/base/root.html:32 +#: kallithea/tests/data/templates/base/root.html.py:99 msgid "Search truncated" msgstr "検索結果は省略されています" -#: kallithea/templates/base/root.html:30 +#: kallithea/templates/base/root.html:33 +#: kallithea/tests/data/templates/base/root.html.py:101 msgid "No matching files" msgstr "マッチするファイルはありません" -#: kallithea/templates/base/root.html:31 +#: kallithea/templates/base/root.html:34 +#: kallithea/tests/data/templates/base/root.html.py:103 msgid "Open New Pull Request from {0}" msgstr "新しいプルリクエストを{0}から作成" -#: kallithea/templates/base/root.html:32 +#: kallithea/templates/base/root.html:35 +#: kallithea/tests/data/templates/base/root.html.py:105 msgid "Open New Pull Request for {0} → {1}" msgstr "{0} → {1}から新しいプルリクエストを作成する" -#: kallithea/templates/base/root.html:33 +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 msgid "Show Selected Changesets {0} → {1}" msgstr "選択したチェンジセット{0} → {0}を表示" -#: kallithea/templates/base/root.html:34 +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 #, fuzzy msgid "Selection Link" msgstr "セレクション・リンク" -#: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 +#: kallithea/templates/base/root.html:38 +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 msgid "Collapse Diff" msgstr "差分をたたむ" -#: kallithea/templates/base/root.html:36 +#: kallithea/templates/base/root.html:39 +#: kallithea/tests/data/templates/base/root.html.py:113 msgid "Expand Diff" msgstr "差分を表示" -#: kallithea/templates/base/root.html:37 +#: kallithea/templates/base/root.html:40 +#: kallithea/tests/data/templates/base/root.html.py:115 msgid "Failed to revoke permission" msgstr "権限の取消に失敗しました" -#: kallithea/templates/base/root.html:38 +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 msgid "Confirm to revoke permission for {0}: {1} ?" msgstr "権限 {0}: {1} を取り消してもよろしいですか?" -#: kallithea/templates/base/root.html:39 -msgid "enabled" -msgstr "有効" - -#: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "無効" - -#: kallithea/templates/base/root.html:42 +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "リビジョンを選択" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" msgstr "チェンジセットを指定" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "%s ブックマーク" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "ブックマークを比較" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "作成者" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "リビジョン" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "%s ブランチ" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" -msgstr "ブランチを比較" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "昇順で並び換え" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "降順で並び替え" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "レコードが見つかりません" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "データエラー" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." +msgstr "読み込み中..." #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "%s チェンジログ" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "%d / %d リビジョンを表示" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "選択を解除" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 msgid "Go to tip of repository" msgstr "リポジトリの最新のリビジョン(tip)に移動" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "%s とフォークを比較" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "フォーク元(%s)と比較" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" msgstr "ブランチフィルタ:" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 -#, python-format +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 +#, fuzzy, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" "チェンジセットステータス: %s\n" "関連するプルリクエスト %s を開く" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, fuzzy, python-format +msgid "Changeset status: %s by %s" msgstr "チェンジセットステータス: %s" -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "コミットメッセージを展開" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "チェンジセットにコメントがあります" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "ブックマーク %s" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "タグ %s" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "ブランチ %s" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "まだ変更がありません" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "削除" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "変更" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "追加" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "%s ファイルに影響" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "リビジョン" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "コミットメッセージ" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "経過時間" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "作成者" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "Refs" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "Kallithea経由で直接ファイルを追加またはアップロード" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "新しいファイルを追加" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 msgid "Push new repository" msgstr "新しいリポジトリをプッシュ" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "存在するリポジトリをプッシュ" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "%s チェンジセット" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "親リビジョン" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "子リビジョン" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "チェンジセットステータス" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "diffとして差分を表示" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "パッチとして差分を表示" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "差分をダウンロード" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 msgid "Merge" msgstr "マージ" -#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 #, fuzzy msgid "Grafted from:" msgstr "作成日" -#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 msgid "Transplanted from:" msgstr "" -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 #, fuzzy msgid "Replaced by:" msgstr "作成日" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 #, fuzzy msgid "Preceded by:" msgstr "作成日" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "%s ファイルに影響" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" msgstr[0] "%s ファイルに影響。 %s 個の追加と %s 個の削除" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "とにかくすべての差分を表示" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 msgid "No revisions" msgstr "リビジョンなし" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 #, fuzzy msgid "on pull request" msgstr "プルリクエスト #%s にコメント" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 msgid "No title" msgstr "No title" -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "チェンジセットはありません" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 msgid "Delete comment?" msgstr "コメントを削除しますか?" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 msgid "Status change" msgstr "ステータスを変更" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +#, fuzzy +msgid "Commenting on line." msgstr "{1} 行目にコメント" -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "コメントには %s 構文 ( %s サポートつき ) が利用できます。" - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" -msgstr "テキスト内で @username を使うと、そのユーザーに通知されます" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "コメントのプレビュー" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +#, fuzzy +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "テキスト内で @username を使うと、そのユーザーに通知されます。" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +msgid "Set changeset status" +msgstr "リビジョンステータスを設定" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "プルリクエストステータスの投票" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +msgid "No change" +msgstr "変更なし" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "プルリクエスト #%s にコメント" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +#, fuzzy +msgid "Close" +msgstr "(閉鎖済み)" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." msgstr "送信中..." -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "コメント" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "プレビュー" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "コメントにはログインする必要があります。" -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "今すぐログインする" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "隠す" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d 個のコメント" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, python-format msgid "%d inline" msgid_plural "%d inline" msgstr[0] "%d inline" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" msgstr[0] "%d general" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -msgid "Use @username inside this text to notify another user." -msgstr "テキスト内で @username を使うと、そのユーザーに通知されます。" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "プルリクエストステータスの投票" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -msgid "Set changeset status" -msgstr "リビジョンステータスを設定" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -msgid "No change" -msgstr "変更なし" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -#, fuzzy -msgid "Close" -msgstr "(閉鎖済み)" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "%s チェンジセット" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "チェンジセットステータス: %s" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "影響のあるファイル" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +#, fuzzy +#| msgid "file removed" +msgid "File before" +msgstr "削除されたファイル" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "変更しない" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "削除" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "リネーム" + +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "%s は未知のリビジョンです" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "ファイル名がありません" + +#: kallithea/templates/changeset/diff_block.html:55 +#, fuzzy +#| msgid "file added" +msgid "File after" +msgstr "追加されたファイル" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 msgid "Show full diff for this file" msgstr "このファイルのすべての差分を表示" -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 msgid "Show full side-by-side diff for this file" msgstr "このファイルの差分を並べて表示" -#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 msgid "Show inline comments" msgstr "インラインコメントを表示" -#: kallithea/templates/changeset/diff_block.html:86 -msgid "Deleted" -msgstr "削除" - -#: kallithea/templates/changeset/diff_block.html:89 -msgid "Renamed" -msgstr "リネーム" - #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "チェンジセットはありません" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "祖先" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +#, fuzzy +#| msgid "Common ancestor" +msgid "Merge Ancestor" +msgstr "共通の祖先" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 msgid "Show merge diff" msgstr "マージの差分を表示" -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "共通の祖先" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "共通の祖先が見つかりません - リポジトリ同士に関連がありません" - -#: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "is" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, python-format msgid "%s changesets" msgstr "%s チェンジセット" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 msgid "behind" msgstr "behind" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "%s 比較" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "リビジョンを比較" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "入れ替え" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "リビジョン、ブランチ、ブックマークもしくはタグの比較を行います。" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" msgstr[0] "%s コミットを表示" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "すべての差分を表示" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "公開リポジトリ" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "リポジトリを作成しています..." -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "まだチェンジセットがありません" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "%s の RSS フィードを購読" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "%s の ATOM フィードを購読" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "作成中" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "%(user)s がチェンジセットにコメント %(age)s" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "Comment from %s on %s changeset %s" +msgid "Comment on Changeset \"%s\"" msgstr "%sから%sのチェンジセット%sに対するコメント" -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "チェンジセットを次に変更" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "これは自動的に送信される通知です。このメールに返信しないでください。" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset flow" +msgid "Changeset on" +msgstr "変更の流れ" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "ブランチ" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "ステータスを変更" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "This pull request has been closed and can not be updated." +msgid "The pull request has been closed." +msgstr "このプルリクエストはすでにクローズされていて、更新することはできません。" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "こんにちは %s" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 msgid "We have received a request to reset the password for your account." msgstr "あなたのアカウントのパスワードリセットリクエストを受け取りました。" -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "新しいパスワードを設定するために、次のリンクをクリックしてください" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "パスワードリセットのリクエストをしていない場合、このメッセージは無視してください。" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, fuzzy, python-format +#| msgid "%s mentioned you on %s pull request \"%s\"" +msgid "Mention on Pull Request %s \"%s\" by %s" msgstr "%sさんが%sへのプルリクエスト \"%s\"でメンションしました" -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, fuzzy, python-format +#| msgid "%s requested your review of %s pull request \"%s\"" +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" msgstr "%sさんが%sへのプルリクエスト \"%s\"でレビューを要求しています" +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "プルリクエスト #%s にコメント" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +#, fuzzy +#| msgid "Date" +msgid "at" +msgstr "日時" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" +msgstr "" + #: kallithea/templates/email_templates/pull_request_comment.html:4 -#, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "%sから%sのプルリクエスト \"%s\"に対するコメント" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 +#, fuzzy, python-format +#| msgid "%s mentioned you on %s pull request \"%s\"" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "%sさんが%sへのプルリクエスト \"%s\"でメンションしました" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Pull request %s from %s#%s" +msgid "Pull Request %s \"%s\" Closed" +msgstr "%s からのプルリクエスト" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "[commented] on pull request for" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "プルリクエストに[コメント]" + +#: kallithea/templates/email_templates/registration.html:22 #, fuzzy -msgid "The comment closed the pull request with status" -msgstr "%s がプルリクエスト\"%s\" にコメントしました" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -#, fuzzy -msgid "The comment was made with status" -msgstr "プルリクエストを以下のステータスで閉じました:" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" -msgstr "このユーザを閲覧する" +#| msgid "Group name" +msgid "Full Name" +msgstr "グループ名" #: kallithea/templates/files/diff_2way.html:15 #, python-format @@ -5286,82 +5777,105 @@ msgstr "%s ファイル差分" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "%s ファイル" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "%s ファイルを追加" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "場所" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "ファイル名..." -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "または" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "アップロードファイル" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "新しいファイルを作成" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "ファイルモード" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +#, fuzzy +msgid "New file type" +msgstr "新しいファイル" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 msgid "Commit Changes" msgstr "変更をコミット" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "前のリビジョン" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "次のリビジョン" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "このブランチで追跡" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "ファイル一覧を検索" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "ファイル一覧を読み込み中..." -#: kallithea/templates/files/files_browser.html:61 +#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 msgid "Size" msgstr "サイズ" -#: kallithea/templates/files/files_browser.html:62 +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 msgid "Last Revision" msgstr "最後のリビジョン" -#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 msgid "Last Modified" msgstr "最終更新日" -#: kallithea/templates/files/files_browser.html:64 +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 msgid "Last Committer" msgstr "最後の作成者" @@ -5371,7 +5885,7 @@ msgstr "%s のファイルを削除" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "ファイルを削除" @@ -5384,100 +5898,131 @@ msgid "Edit file" msgstr "ファイルを編集" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "アノテーションを表示" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 msgid "Download as Raw" msgstr "Raw形式でダウンロード" -#: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "ソース" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "ファイルを編集" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "%s 人の作成者" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "このリビジョンとの差分" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "このリビジョンを表示" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "全ての履歴を表示" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "全ての履歴を表示" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "作成者を表示" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "ソースを表示" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" +#: kallithea/templates/files/files_source.html:34 +#, fuzzy, python-format +#| msgid "Edit on Branch:%s" +msgid "Edit on Branch: %s" msgstr "ブランチ:%s で編集" -#: kallithea/templates/files/files_source.html:41 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 msgid "Editing binary files not allowed" msgstr "バイナリファイルの編集は行えません" -#: kallithea/templates/files/files_source.html:44 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 msgid "Editing files allowed only when on branch head revision" msgstr "ファイル編集はブランチのヘッドリビジョンでのみ許可されています" -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/files/files_source.html:41 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "ファイルの削除はブランチのヘッドリビジョンでのみ行えます" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "バイナリファイル (%s)" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +#, fuzzy +msgid "File is too big to display." +msgstr "表示するには大きすぎるファイルです" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +#, fuzzy +msgid "Show full annotation anyway." +msgstr "とにかくすべての差分を表示" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" -msgstr "表示するには大きすぎるファイルです" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +#, fuzzy +msgid "Show as raw." +msgstr "Raw形式で表示" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "アノテーション" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "戻る" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "そのパスにはファイルはありません" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "%s フォロワー" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "フォロワー" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "フォロー開始日 -" @@ -5486,70 +6031,80 @@ msgid "Fork repository %s" msgstr "リポジトリ %s をフォーク" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "フォーク名" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "ファイルページ、ダウンロード、検索、READMEのデフォルトのリビジョンを指定します。" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "非公開" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "権限のコピー" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "フォーク元リポジトリから権限をコピーします" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "クローン後にupdateする" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "クローンした後にソースをチェックアウトします" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "このリポジトリをフォーク" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "%s フォーク" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "フォーク" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "フォークしました" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "まだフォークがありません" -#: kallithea/templates/journal/journal.html:21 +#: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 msgid "ATOM journal feed" msgstr "ATOM ジャーナルフィード" -#: kallithea/templates/journal/journal.html:22 +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "RSS ジャーナルフィード" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "私のリポジトリ" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "まだエントリがありません" @@ -5563,34 +6118,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "新しいプルリクエスト" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "タイトル" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "このプルリクエストの簡潔な説明を書いてください" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "変更の流れ" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "元のリポジトリ" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "相手のリポジトリ" @@ -5625,7 +6191,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "クローズ" @@ -5643,111 +6211,152 @@ msgstr "このプルリクエストには %s件のコメントがありますが削除してもよろしいですか?" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, python-format msgid "%s Pull Request %s" msgstr "%s プルリクエスト %s" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, fuzzy, python-format msgid "Pull request %s from %s#%s" msgstr "%s からのプルリクエスト" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 msgid "Summarize the changes" msgstr "変更の概要" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "レビュアーの投票結果" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "投票からプルリクエストのステータスを計算" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "投票からプルリクエストのステータスを計算" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "未レビュー" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "%d 人のレビュアー" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "プルリクエストはすべてのレビュアーにレビューされました" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 msgid "There are no reviewers" msgstr "レビュアーがいません" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "Origin" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 msgid "on" msgstr "on" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "Target" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "変更を取得:" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -msgid "Update" -msgstr "更新" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +#, fuzzy +#| msgid "Registration" +msgid "Next iteration" +msgstr "新規登録" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "現在のリビジョン ー 変更なし" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "変更を保存" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +msgid "Cancel Changes" +msgstr "変更をキャンセル" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 msgid "Pull Request Reviewers" msgstr "プルリクエストレビュアー" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 msgid "Remove reviewer" msgstr "レビュアーを削除" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "追加するレビュアーの名前を入力" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 msgid "Potential Reviewers" msgstr "レビュワー候補" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "クリックしてリポジトリの所有所をレビュアーに追加:" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "変更を保存" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -msgid "Save as New Pull Request" -msgstr "新しいプルリクエストとして保存" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -msgid "Cancel Changes" -msgstr "変更をキャンセル" +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" +msgstr "プルリクエストの内容" #: kallithea/templates/pullrequests/pullrequest_show.html:296 -msgid "Pull Request Content" -msgstr "プルリクエストの内容" +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" +msgstr "共通の祖先" #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 #, python-format @@ -5756,7 +6365,6 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Pull Requests from %s'" msgid "Pull Requests from '%s'" msgstr "%s' からのプルリクエスト" @@ -5765,240 +6373,489 @@ msgid "Pull Requests to '%s'" msgstr "'%s' へのプルリクエスト" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "新しいプルリクエストを作成" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, python-format msgid "Show Pull Requests to %s" msgstr "%s へのプルリクエストを表示" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, python-format msgid "Show Pull Requests from '%s'" msgstr "%s からのプルリクエストを表示" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "クローズしたプルリクエストを隠す(クローズしていないプルリクエストのみ表示する)" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "クローズしたプルリクエストも表示(クローズしていないプルリクエストに加えて)" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 msgid "Pull Requests Created by Me" msgstr "作成したプルリクエスト" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +#, fuzzy +#| msgid "Pull Request Reviewers" +msgid "Pull Requests Needing My Review" +msgstr "プルリクエストレビュアー" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 msgid "Pull Requests I Participate In" msgstr "参加しているプルリクエスト" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "%s 検索" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 msgid "Search in All Repositories" msgstr "全てのリポジトリから検索" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "検索キーワード" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "検索対象" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "ファイルの内容" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "コミットメッセージ" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "ファイル名" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "権限がありません" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "%s 統計情報" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "%s ATOM フィード" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "%s RSS フィード" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "有効にする" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "収集した統計情報: " -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "ファイル" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "もっと表示" -#: kallithea/templates/summary/statistics.html:390 +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 msgid "commits" msgstr "コミット" +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "追加されたファイル" + +#: kallithea/templates/summary/statistics.html:390 +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "変更されたファイル" + #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "追加されたファイル" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" -msgstr "変更されたファイル" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" +msgstr "削除されたファイル" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" -msgstr "削除されたファイル" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "コミット" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" +msgstr "追加されたファイル" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" -msgstr "コミット" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" +msgstr "変更されたファイル" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "追加されたファイル" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "変更されたファイル" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "削除されたファイル" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "%s 要約" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "リポジトリは %s によってロックされました" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "リポジトリはロックされていません" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "フォーク元" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "クローン元" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "IDで表示" + #: kallithea/templates/summary/summary.html:72 -msgid "Clone URL" -msgstr "クローンURL" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" msgstr "名前で表示" -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "IDで表示" - -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "トレンドファイル" -#: kallithea/templates/summary/summary.html:108 +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 msgid "Download" msgstr "ダウンロード" -#: kallithea/templates/summary/summary.html:112 +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 msgid "There are no downloads yet" msgstr "まだダウンロードがありません" -#: kallithea/templates/summary/summary.html:114 +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 msgid "Downloads are disabled for this repository" msgstr "このリポジトリのダウンロードは無効化されています" -#: kallithea/templates/summary/summary.html:120 +#: kallithea/templates/summary/summary.html:108 +#: kallithea/tests/data/templates/summary/summary.html.py:190 msgid "Download as zip" msgstr "ZIPでダウンロード" -#: kallithea/templates/summary/summary.html:125 +#: kallithea/templates/summary/summary.html:112 +#: kallithea/tests/data/templates/summary/summary.html.py:194 msgid "Check this to download archive with subrepos" msgstr "チェックするとダウンロードアーカイブにサブリポジトリが含まれます" -#: kallithea/templates/summary/summary.html:125 +#: kallithea/templates/summary/summary.html:114 +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" msgstr "サブリポジトリを含める" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "リポジトリサイズ" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "フィード" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 msgid "Latest Changes" msgstr "最近の変更" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 msgid "Quick Start" msgstr "クイックスタート" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "リビジョン %s:%s の README ファイル" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "%s を %s でダウンロード" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "%s タグ" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" -msgstr "タグを比較" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "ダッシュボード" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "グループ名" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "次回から自動的にサインイン" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "ファイルに名前をつける..." + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "アバターを変更できます : " + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "メールアドレス:" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "メールアドレスがありません。更新してください。" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "%s リポジトリグループダッシュボード" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "再スキャンオプション" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "Web" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "VCSの操作にSSLを必須とする" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "プッシュ、プル時にSSLを要求します。SSLでない場合はHTTP Error 406: Not Acceptableを返します。" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "Gravatorsを利用する" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +#, fuzzy +#| msgid "" "Schema of clone URL construction eg. +#| '{scheme}://{user}@{netloc}/{repo}'." "\n" " +#| The following " "variables are available:\n" " +#| {scheme} 'http' " "or 'https' sent from running Kallithea server,\n" " +#| {user} current " "user username,\n" " +#| {netloc} network " "location/server host of running Kallithea server,\n" " +#| {repo} full " "repository name,\n" " +#| {repoid} ID of " "repository, can be used to contruct clone-by-id" +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" +"クローン URL のスキーマは、 '{scheme}://{user}@{netloc}/{repo}' " +"のような形式にします。使える変数は下記の通りです:\n" +" {scheme} " +"Kallithea サーバからリクエストを送信するときに使うスキーム。 'http' または 'https'\n" +" {user} " +"現在のユーザーのユーザー名\n" +" {netloc} " +"Kallithea サーバーのアドレスまたはホスト名\n" +" {repo} " +"リポジトリの完全な名前\n" +" {repoid} リポジトリの " +"ID。 clone-by-id に使います。" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "ダッシュボードの項目" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "メインページダッシュボードで1ページに表示する要素数。" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "管理ページの項目" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "クイックフィルタ..." + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "アバターを変更:" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "メールアドレスがありません。このユーザーのメールアドレスを更新してください。" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "キーボードショートカット" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "サイト全体" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "パスワードを忘れた?" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "祖先" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "共通の祖先が見つかりません - リポジトリ同士に関連がありません" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "%sから%sのチェンジセット%sに対するコメント" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "チェンジセットを次に変更" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "これは自動的に送信される通知です。このメールに返信しないでください。" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "%sさんが%sへのプルリクエスト \"%s\"でメンションしました" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "%sさんが%sへのプルリクエスト \"%s\"でレビューを要求しています" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "%sから%sのプルリクエスト \"%s\"に対するコメント" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +#, fuzzy +msgid "The comment closed the pull request with status" +msgstr "%s がプルリクエスト\"%s\" にコメントしました" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +#, fuzzy +msgid "The comment was made with status" +msgstr "プルリクエストを以下のステータスで閉じました:" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "このユーザを閲覧する" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "ブランチ:%s で編集" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "リポジトリサイズ" #~ msgid "No comments." #~ msgstr "%d 個のコメント" @@ -6031,7 +6888,7 @@ #~ msgstr "ファイルなし" #~ msgid "" -#~ msgstr "" +#~ msgstr "クローズしたプルリクエストに関連するチェンジセットのステータスを変更することは許可されていません" #~ msgid "Username \"%(username)s\" is forbidden" #~ msgstr "ユーザー名 \"%(username)s\" は許可されていません" @@ -6222,3 +7079,215 @@ #~ msgid "Created by" #~ msgstr "作成日" +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "リポジトリのキャッシュを無効化してもよろしいですか?" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "コメントには %s 構文 ( %s サポートつき ) が利用できます。" + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "テキスト内で @username を使うと、そのユーザーに通知されます" + +#~ msgid "Comment preview" +#~ msgstr "コメントのプレビュー" + +#~ msgid "Preview" +#~ msgstr "プレビュー" + +#~ msgid "New file mode" +#~ msgstr "ファイルモード" + +#~ msgid "Missing changesets since the previous pull request:" +#~ msgstr "" + +#~ msgid "New changesets on %s %s since the previous pull request:" +#~ msgstr "" + +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "" +#~ "This pull request is based on " +#~ "another %s revision and there is " +#~ "no simple diff." +#~ msgstr "" + +#~ msgid "No changes found on %s %s since previous version." +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "%s で置き換えられたのでクローズします。" + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "クローズ。" + +#~ msgid "Repository no access" +#~ msgstr "リポジトリへのアクセス権限無し" + +#~ msgid "Repository read access" +#~ msgstr "リポジトリに読込権限でアクセス" + +#~ msgid "Repository write access" +#~ msgstr "リポジトリに書込権限でアクセス" + +#~ msgid "Repository admin access" +#~ msgstr "リポジトリに管理権限でアクセス" + +#~ msgid "Repository Group no access" +#~ msgstr "リポジトリグループへのアクセス権限なし" + +#~ msgid "Repository Group read access" +#~ msgstr "リポジトリグループに読込権限でアクセス" + +#~ msgid "Repository Group write access" +#~ msgstr "リポジトリグループに書込権限でアクセス" + +#~ msgid "Repository Group admin access" +#~ msgstr "リポジトリグループに管理権限でアクセス" + +#~ msgid "Repository creation disabled" +#~ msgstr "リポジトリの作成を有効にする" + +#~ msgid "Repository creation enabled" +#~ msgstr "リポジトリの作成を有効にする" + +#~ msgid "Repository forking disabled" +#~ msgstr "リポジトリのフォークを無効にする" + +#~ msgid "Repository forking enabled" +#~ msgstr "リポジトリのフォークを有効にする" + +#~ msgid "Register disabled" +#~ msgstr "新規登録を無効にする" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "Kallitheaに登録した新しいユーザーを手動でアクティベートする" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "Kallitheaに登録した新しいユーザーを自動でアクティベートする" + +#~ msgid "Not Reviewed" +#~ msgstr "未レビュー" + +#~ msgid "Rejected" +#~ msgstr "却下" + +#~ msgid "Under Review" +#~ msgstr "レビュー中" + +#~ msgid "Repository group no access" +#~ msgstr "リポジトリグループへのアクセス権限なし" + +#~ msgid "Repository group read access" +#~ msgstr "リポジトリグループに読込権限でアクセス" + +#~ msgid "Repository group write access" +#~ msgstr "リポジトリグループに書込権限でアクセス" + +#~ msgid "Repository group admin access" +#~ msgstr "リポジトリグループに管理権限でアクセス" + +#~ msgid "User group no access" +#~ msgstr "ユーザーグループへのアクセス権限なし" + +#~ msgid "User group read access" +#~ msgstr "ユーザーグループに読込権限でアクセス" + +#~ msgid "User group write access" +#~ msgstr "ユーザーグループに書込権限でアクセス" + +#~ msgid "User group admin access" +#~ msgstr "ユーザーグループに管理権限でアクセス" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "リポジトリグループの作成を無効にする" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "リポジトリグループの作成を有効にする" + +#~ msgid "User Group creation disabled" +#~ msgstr "ユーザーグループの作成を無効にする" + +#~ msgid "User Group creation enabled" +#~ msgstr "ユーザーグループの作成を有効にする" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "ユーザーの新規登録時に手動でアカウントをアクティベートする" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "ユーザーの新規登録時に自動でアカウントをアクティベートする" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "%(user)s がプリリクエスト #%(pr_id)s: %(pr_title)s のレビューを求めています" + +#~ msgid "repositories" +#~ msgstr "リポジトリ" + +#~ msgid "No repositories found." +#~ msgstr "リポジトリが見つかりません。" + +#~ msgid "There are no branches yet" +#~ msgstr "まだブランチがありません" + +#~ msgid "There are no tags yet" +#~ msgstr "まだタグがありません" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "まだブックマークがありません" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "有効" + +#~ msgid "%s Bookmarks" +#~ msgstr "%s ブックマーク" + +#~ msgid "Compare Bookmarks" +#~ msgstr "ブックマークを比較" + +#~ msgid "%s Branches" +#~ msgstr "%s ブランチ" + +#~ msgid "Compare Branches" +#~ msgstr "ブランチを比較" + +#~ msgid "Editing file" +#~ msgstr "ファイルを編集" + +#~ msgid "Update" +#~ msgstr "更新" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "新しいプルリクエストとして保存" + +#~ msgid "%s Tags" +#~ msgstr "%s タグ" + +#~ msgid "Compare Tags" +#~ msgstr "タグを比較" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/kallithea.pot --- a/kallithea/i18n/kallithea.pot Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/kallithea.pot Thu Jun 07 01:46:02 2018 +0200 @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Kallithea 0.3.2\n" +"Project-Id-Version: Kallithea 0.3.99\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,435 +17,474 @@ "Content-Transfer-Encoding: 8bit\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "" -#: kallithea/controllers/changeset.py:383 -msgid "Changing status on a changeset associated with a closed pull request is not allowed" -msgstr "" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, python-format +msgid "Could not find other repository %s" +msgstr "" + +#: kallithea/controllers/compare.py:73 +msgid "Cannot compare repositories of different types" +msgstr "" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" +#: kallithea/controllers/error.py:70 +msgid "No response" +msgstr "" + #: kallithea/controllers/error.py:71 -msgid "No response" -msgstr "" - -#: kallithea/controllers/error.py:72 msgid "Unknown error" msgstr "" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "" -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "The server encountered an unexpected condition which prevented it from fulfilling the request." msgstr "" -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "" - -#: kallithea/controllers/feed.py:56 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "" + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 #, python-format msgid "%s %s feed" msgstr "" -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "" - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "" - -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, python-format msgid "%s at %s" msgstr "" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "" -#: kallithea/controllers/files.py:317 +#: kallithea/controllers/files.py:309 msgid "You can only delete files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:328 +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "" -#: kallithea/controllers/files.py:377 +#: kallithea/controllers/files.py:369 msgid "You can only edit files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:391 +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" msgstr "" -#: kallithea/controllers/login.py:246 +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" msgstr "" -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "" -#: kallithea/controllers/pullrequests.py:124 -#, python-format -msgid "%s (closed)" -msgstr "" - -#: kallithea/controllers/pullrequests.py:152 -#: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 -msgid "Changeset" -msgstr "" - -#: kallithea/controllers/pullrequests.py:173 -msgid "Special" -msgstr "" - -#: kallithea/controllers/pullrequests.py:174 -msgid "Peer branches" -msgstr "" - -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 -msgid "Bookmarks" -msgstr "" - -#: kallithea/controllers/pullrequests.py:310 -#, python-format -msgid "Error creating pull request: %s" -msgstr "" - -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 +#: kallithea/controllers/pullrequests.py:73 #, python-format msgid "Invalid reviewer \"%s\" specified" msgstr "" -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:135 +#, python-format +msgid "%s (closed)" +msgstr "" + +#: kallithea/controllers/pullrequests.py:162 +#: kallithea/templates/changeset/changeset.html:12 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 +msgid "Changeset" +msgstr "" + +#: kallithea/controllers/pullrequests.py:183 +msgid "Special" +msgstr "" + +#: kallithea/controllers/pullrequests.py:184 +msgid "Peer branches" +msgstr "" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 +msgid "Bookmarks" +msgstr "" + +#: kallithea/controllers/pullrequests.py:326 +#, python-format +msgid "Error creating pull request: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "This pull request is based on another %s revision and there is no simple diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "" - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "" - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" -msgstr "" - -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "" + +#: kallithea/controllers/pullrequests.py:381 +msgid "New pull request iteration created" +msgstr "" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, python-format +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." -msgstr "" - -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +msgid "No additional changesets found for iterating on this pull request." +msgstr "" + +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "" - -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:571 +msgid "Git pull requests don't support iterating yet." +msgstr "" + +#: kallithea/controllers/pullrequests.py:573 +#, python-format +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "" - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, python-format +msgid "Successfully deleted pull request %s" +msgstr "" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "" -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "" -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "" @@ -457,149 +496,153 @@ msgid "error occurred during update of auth settings" msgstr "" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "" +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "" + #: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 -msgid "Forever" +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" msgstr "" #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" msgstr "" #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 +msgid "1 day" msgstr "" #: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 -msgid "1 day" -msgstr "" - -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" msgstr "" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" msgstr "" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -607,1898 +650,1559 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" -msgstr "" - -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, python-format +msgid "An error occurred during creation of field: %r" +msgstr "" + +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "" +#: kallithea/controllers/admin/repos.py:480 +msgid "An error occurred during this operation" +msgstr "" + +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 +msgid "Repository has been locked" +msgstr "" + +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 +msgid "Repository has been unlocked" +msgstr "" + +#: kallithea/controllers/admin/repos.py:502 #: kallithea/controllers/admin/repos.py:521 -msgid "An error occurred during this operation" +msgid "An error occurred during unlocking" +msgstr "" + +#: kallithea/controllers/admin/repos.py:533 +msgid "Cache invalidation successful" msgstr "" #: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 -msgid "Repository has been locked" -msgstr "" - -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 -msgid "Repository has been unlocked" -msgstr "" - -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 -msgid "An error occurred during unlocking" -msgstr "" - -#: kallithea/controllers/admin/repos.py:582 -msgid "Cache invalidation successful" -msgstr "" - -#: kallithea/controllers/admin/repos.py:586 msgid "An error occurred during cache invalidation" msgstr "" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "" +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 +msgid "Unable to activate hgsubversion support. The \"hgsubversion\" library is missing" +msgstr "" + +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 +msgid "Error occurred while updating application settings" +msgstr "" + #: kallithea/controllers/admin/settings.py:174 -msgid "Unable to activate hgsubversion support. The \"hgsubversion\" library is missing" -msgstr "" - -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 -msgid "Error occurred while updating application settings" -msgstr "" - -#: kallithea/controllers/admin/settings.py:211 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "" -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, python-format msgid "Invalidated %s repositories" msgstr "" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "" +#: kallithea/controllers/admin/user_groups.py:208 +#, python-format +msgid "Error occurred during update of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:219 +msgid "Successfully deleted user group" +msgstr "" + #: kallithea/controllers/admin/user_groups.py:224 -#, python-format -msgid "Error occurred during update of user group %s" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:242 -msgid "Successfully deleted user group" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:247 msgid "An error occurred during deletion of user group" msgstr "" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, python-format msgid "Changeset for %s %s not found in %s" msgstr "" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, python-format msgid "Changeset %s not found" msgstr "" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 msgid "Compare view" msgstr "" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, python-format msgid "Fork name %s" msgstr "" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, python-format msgid "Pull request %s" msgstr "" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr "" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "%s repository is not mapped to db perhaps it was created or renamed from the filesystem please run the application again in order to rescan repositories" msgstr "" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 msgid "Default user has read access to new repositories" msgstr "" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 msgid "Default user has write access to new repositories" msgstr "" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 msgid "Only admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 msgid "Non-admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 msgid "Only admins can create user groups" msgstr "" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 msgid "Non-admins can create user groups" msgstr "" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 msgid "Only admins can fork repositories" msgstr "" -#: kallithea/model/db.py:1696 +#: kallithea/model/db.py:1745 msgid "Non-admins can fork repositories" msgstr "" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" msgstr "" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 msgid "Not reviewed" msgstr "" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 msgid "Under review" msgstr "" -#: kallithea/model/forms.py:57 -msgid "Please enter a login" +#: kallithea/model/db.py:2278 +msgid "Not approved" +msgstr "" + +#: kallithea/model/db.py:2279 +msgid "Approved" msgstr "" #: kallithea/model/forms.py:58 +msgid "Please enter a login" +msgstr "" + +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "" -#: kallithea/model/forms.py:66 -msgid "Please enter a password" -msgstr "" - #: kallithea/model/forms.py:67 +msgid "Please enter a password" +msgstr "" + +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" +#: kallithea/model/notification.py:240 +#, python-format +msgid "%(user)s commented on changeset %(age)s" +msgstr "" + +#: kallithea/model/notification.py:241 +#, python-format +msgid "%(user)s sent message %(age)s" +msgstr "" + +#: kallithea/model/notification.py:242 +#, python-format +msgid "%(user)s mentioned you %(age)s" +msgstr "" + +#: kallithea/model/notification.py:243 +#, python-format +msgid "%(user)s registered in Kallithea %(age)s" +msgstr "" + +#: kallithea/model/notification.py:244 +#, python-format +msgid "%(user)s opened new pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:245 +#, python-format +msgid "%(user)s commented on pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:252 +#, python-format +msgid "%(user)s commented on changeset at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:253 +#, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:254 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + #: kallithea/model/notification.py:255 #, python-format -msgid "%(user)s commented on changeset %(age)s" +msgid "%(user)s registered in Kallithea at %(when)s" msgstr "" #: kallithea/model/notification.py:256 #, python-format -msgid "%(user)s sent message %(age)s" +msgid "%(user)s opened new pull request at %(when)s" msgstr "" #: kallithea/model/notification.py:257 #, python-format -msgid "%(user)s mentioned you %(age)s" -msgstr "" - -#: kallithea/model/notification.py:258 -#, python-format -msgid "%(user)s registered in Kallithea %(age)s" -msgstr "" - -#: kallithea/model/notification.py:259 -#, python-format -msgid "%(user)s opened new pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:260 -#, python-format -msgid "%(user)s commented on pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:267 -#, python-format -msgid "%(user)s commented on changeset at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:268 -#, python-format -msgid "%(user)s sent message at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:269 -#, python-format -msgid "%(user)s mentioned you at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:270 -#, python-format -msgid "%(user)s registered in Kallithea at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:271 -#, python-format -msgid "%(user)s opened new pull request at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:272 -#, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, python-format +msgid "[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on %(branch)s" +msgstr "" + +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" msgstr "" -#: kallithea/model/notification.py:308 -#, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:309 -#, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from %(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from %(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +msgid "Cannot create empty pull request" +msgstr "" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "Cannot create pull request - criss cross merge detected, please merge a later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +msgid "You are not authorized to create the pull request" +msgstr "" + +#: kallithea/model/pull_request.py:341 +msgid "Missing changesets since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:348 +#, python-format +msgid "New changesets on %s %s since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "This iteration is based on another %s revision and there is no simple diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, python-format +msgid "No changes found on %s %s since previous iteration." +msgstr "" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 msgid "You can't remove this user since it is crucial for the entire application" msgstr "" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, python-format msgid "User \"%s\" still owns %s repositories and cannot be removed. Switch owners or remove those repositories: %s" msgstr "" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, python-format msgid "User \"%s\" still owns %s repository groups and cannot be removed. Switch owners or remove those repository groups: %s" msgstr "" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "User \"%s\" still owns %s user groups and cannot be removed. Switch owners or remove those user groups: %s" msgstr "" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 msgid "Password reset notification" msgstr "" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "The password to your account %s has been changed using password reset form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with an alphanumeric character or underscore" msgstr "" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "user group name may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character" msgstr "" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 msgid "Invalid username or password" msgstr "" +#: kallithea/model/validators.py:310 +msgid "Token mismatch" +msgstr "" + +#: kallithea/model/validators.py:326 +#, python-format +msgid "Repository name %(repo)s is not allowed" +msgstr "" + +#: kallithea/model/validators.py:328 +#, python-format +msgid "Repository named %(repo)s already exists" +msgstr "" + +#: kallithea/model/validators.py:329 +#, python-format +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "" + #: kallithea/model/validators.py:331 -msgid "Token mismatch" -msgstr "" - -#: kallithea/model/validators.py:345 -#, python-format -msgid "Repository name %(repo)s is not allowed" -msgstr "" - -#: kallithea/model/validators.py:347 -#, python-format -msgid "Repository named %(repo)s already exists" -msgstr "" - -#: kallithea/model/validators.py:348 -#, python-format -msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" -msgstr "" - -#: kallithea/model/validators.py:350 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 msgid "Invalid repository URL" msgstr "" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "Invalid repository URL. It must be a valid http, https, ssh, svn+http or svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 msgid "This email address is already in use" msgstr "" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, python-format msgid "Email address \"%(email)s\" not found" msgstr "" +#: kallithea/model/validators.py:749 +msgid "The LDAP Login attribute of the CN must be specified - this is the name of the attribute that is equivalent to \"username\"" +msgstr "" + +#: kallithea/model/validators.py:761 +msgid "Please enter a valid IPv4 or IPv6 address" +msgstr "" + #: kallithea/model/validators.py:762 -msgid "The LDAP Login attribute of the CN must be specified - this is the name of the attribute that is equivalent to \"username\"" -msgstr "" - -#: kallithea/model/validators.py:774 -msgid "Please enter a valid IPv4 or IPv6 address" -msgstr "" - -#: kallithea/model/validators.py:775 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "" - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +msgid "Repository Group" +msgstr "" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "" - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "" - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "" - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, python-format msgid "Reset Your Password to %s" msgstr "" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 msgid "Reset Your Password" msgstr "" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" msgstr "" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 msgid "A password reset link will be sent to the specified email address if it is registered in the system." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:19 -#, python-format -msgid "You are about to set a new password for the email address %s." -msgstr "" - #: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 +#, python-format +msgid "You are about to set a new password for the email address %s." +msgstr "" + +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "Note that you must use the same browser session for this as the one used to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 msgid "New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 msgid "Confirm New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 msgid "Admin Journal" msgstr "" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "" #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 msgid "Filter" msgstr "" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2506,144 +2210,172 @@ msgstr[1] "" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "Comma-separated list of plugins; Kallithea will try user authentication in plugin order" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 msgid "Repository Defaults" msgstr "" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "" +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 +msgid "Private repository" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 +msgid "Private repositories are only visible to people explicitly added as collaborators." +msgstr "" + #: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 -msgid "Private repository" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 -msgid "Private repositories are only visible to people explicitly added as collaborators." +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 +msgid "Enable statistics" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 +msgid "Enable statistics window on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 +msgid "Enable downloads" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 +msgid "Enable download menu on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 +msgid "Enable locking" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:61 #: kallithea/templates/admin/repos/repo_edit_settings.html:84 -msgid "Enable statistics" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 -msgid "Enable statistics window on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 -msgid "Enable downloads" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 -msgid "Enable download menu on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 -msgid "Enable locking" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "" @@ -2652,43 +2384,61 @@ msgid "Edit Gist" msgstr "" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "Gist was update since you started editing. Copy your changes and click %(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "" -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 msgid "Never" msgstr "" @@ -2697,271 +2447,404 @@ msgstr "" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 msgid "Email Addresses" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 msgid "Owned Repositories" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 msgid "Watched Repositories" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 msgid "Show Permissions" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, python-format msgid "Confirm to reset this API key: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 msgid "Expired" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, python-format msgid "Confirm to remove this API key: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 msgid "Remove" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 msgid "New API key" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "" @@ -2969,263 +2852,343 @@ msgid "Change Your Account Password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, python-format +msgid "Change %s avatar at" msgstr "" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 msgid "Repositories You Own" msgstr "" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" msgstr "" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 msgid "Repositories You are Watching" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" msgstr "" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +msgid "Mark as read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 msgid "Default Permissions" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "Allow access to Kallithea without needing to log in. Anonymous users use %s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "All default permissions on each repository will be reset to chosen permission, note that all custom default permission on repositories will be lost" msgstr "" +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 +msgid "Apply to all existing repositories" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 +msgid "Permissions for the Default user on new repositories." +msgstr "" + #: kallithea/templates/admin/permissions/permissions_globals.html:26 -msgid "Apply to all existing repositories" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:27 -msgid "Permissions for the Default user on new repositories." +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 +msgid "Repository group" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 +msgid "All default permissions on each repository group will be reset to chosen permission, note that all custom default permission on repository groups will be lost" msgstr "" #: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 -msgid "Repository group" +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 +msgid "Apply to all existing repository groups" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 +msgid "Permissions for the Default user on new repository groups." msgstr "" #: kallithea/templates/admin/permissions/permissions_globals.html:39 -msgid "All default permissions on each repository group will be reset to chosen permission, note that all custom default permission on repository groups will be lost" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:40 -msgid "Apply to all existing repository groups" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:41 -msgid "Permissions for the Default user on new repository groups." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 msgid "All default permissions on each user group will be reset to chosen permission, note that all custom default permission on user groups will be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 +msgid "Permissions for the Default user on new user groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 +msgid "Top level repository creation" +msgstr "" + #: kallithea/templates/admin/permissions/permissions_globals.html:55 -msgid "Permissions for the Default user on new user groups." +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 +msgid "Enable this to allow non-admins to create repositories at the top level." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 +msgid "Note: This will also give all users API access to create repositories everywhere. That might change in future versions." msgstr "" #: kallithea/templates/admin/permissions/permissions_globals.html:60 -msgid "Top level repository creation" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:64 -msgid "Enable this to allow non-admins to create repositories at the top level." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:65 -msgid "Note: This will also give all users API access to create repositories everywhere. That might change in future versions." +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 +msgid "Repository creation with group write access" +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 +msgid "With this, write permission to a repository group allows creating repositories inside that group. Without this, group write permissions mean nothing." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 +msgid "User group creation" msgstr "" #: kallithea/templates/admin/permissions/permissions_globals.html:70 -msgid "Repository creation with group write access" +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 +msgid "Enable this to allow non-admins to create user groups." msgstr "" #: kallithea/templates/admin/permissions/permissions_globals.html:74 -msgid "With this, write permission to a repository group allows creating repositories inside that group. Without this, group write permissions mean nothing." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:79 -msgid "User group creation" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:83 -msgid "Enable this to allow non-admins to create user groups." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, python-format msgid "Confirm to delete this IP address: %s" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3234,31 +3197,42 @@ msgid "%s Repository Group Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "" @@ -3282,12 +3256,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3298,16 +3274,32 @@ msgid "Delete this repository group" msgstr "" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +msgid "Visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +msgid "Add repos" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +msgid "Add/Edit groups" +msgstr "" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 msgid "User/User Group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 msgid "Default" @@ -3315,95 +3307,106 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 msgid "Revoke" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 msgid "Apply to children" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "Set or revoke permission to all children of that group, including non-private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "Enable lock-by-pulling on group. This option will be applied to all other groups and repositories inside" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Confirm to delete this group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 #, python-format -msgid "%s Repository group dashboard" +msgid "Repository group %s" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 msgid "Repository Groups Administration" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 msgid "Number of Top-level Repositories" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 msgid "Clone remote repository" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "Optional: URL of a remote repository. If set, the repository will be created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "Default revision for files page, downloads, full text search index and readme generation" msgstr "" @@ -3426,118 +3429,146 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, python-format msgid "%s Repository Settings" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 msgid "Parent" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 msgid "Public Journal Visibility" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 msgid "Add to Public Journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "All actions done in this repository will be visible to everyone in the public journal." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 msgid "Change Locking" msgstr "" +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 +msgid "Confirm to unlock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 +msgid "Unlock Repository" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_advanced.html:52 -msgid "Confirm to unlock repository." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 -msgid "Unlock Repository" +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 +#, python-format +msgid "Locked by %s on %s" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:56 -#, python-format -msgid "Locked by %s on %s" +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 +msgid "Confirm to lock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 +msgid "Lock Repository" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:60 -msgid "Confirm to lock repository." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 -msgid "Lock Repository" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "Force locking on the repository. Works only when anonymous access is disabled. Triggering a pull locks the repository. The user who is pulling locks the repository; only the user who pulled and locked it can unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 msgid "Delete this Repository" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "The deleted repository will be moved away and hidden until the administrator expires it. The administrator can both permanently delete it or restore it." msgstr "" @@ -3545,134 +3576,138 @@ msgid "Invalidate Repository Cache" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -msgid "Confirm to invalidate repository cache." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "Manually invalidate cache for this repository. On first access, the repository will be cached again." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 +msgid "List of Cached Values" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_caches.html:12 -msgid "List of Cached Values" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 msgid "Prefix" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 msgid "Private Repository" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +msgid "Fork of repository" +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 msgid "Remote repository URL" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 msgid "Pull Changes from Remote Repository" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 -msgid "Confirm to pull changes from remote repository." -msgstr "" - #: kallithea/templates/admin/repos/repo_edit_remote.html:17 +msgid "Confirm to pull changes from remote repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "Permanent Repository ID" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the repository URL changes.\n" " Using the above permanent URL guarantees that this repository always will be accessible on that URL.\n" " This is useful for CI systems, or any other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 msgid "Remote repository" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 msgid "Repository URL" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "Optional: URL of a remote repository. If set, the repository can be pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_statistics.html:6 -msgid "Processed commits" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 msgid "Processed progress" msgstr "" @@ -3685,289 +3720,346 @@ msgstr "" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 msgid "Repositories Administration" msgstr "" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 msgid "Settings Administration" msgstr "" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 -msgid "HTML with JavaScript for web analytics systems like Google Analytics or Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 +msgid "HTML (possibly with JavaScript and/or CSS) that will be added to the bottom of every page. This can be used for web analytics systems like Google Analytics or Piwik, but also to perform instance-specific customizations like adding a project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "Private key for reCaptcha system. Setting this value will enable captcha on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 msgid "Save Settings" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "Hooks can be used to trigger actions on certain events such as push / pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 msgid "Custom Hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" -msgstr "" - -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:4 +msgid "Rescan options" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "Check this option to remove all comments, pull requests and other records related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:23 -msgid "Install Git hooks" -msgstr "" - #: kallithea/templates/admin/settings/settings_mapping.html:25 -msgid "Verify if Kallithea's Git hooks are installed for each repository. Current hooks will be updated to the latest version." +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 +msgid "Verify if Kallithea's Git hooks are installed for each repository. Current hooks will be updated to the latest version." +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 -msgid "If installing Git hooks, overwrite any existing hooks, even if they do not seem to come from Kallithea. WARNING: This operation will destroy any custom git hooks you may have deployed by hand!" -msgstr "" - #: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 +msgid "If installing Git hooks, overwrite any existing hooks, even if they do not seem to come from Kallithea. WARNING: This operation will destroy any custom git hooks you may have deployed by hand!" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "" +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + #: kallithea/templates/admin/settings/settings_search.html:12 -msgid "Build from scratch" -msgstr "" - -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "This option completely reindexeses all of the repositories for proper fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Kallithea version" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." msgstr "" #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Kallithea version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 -msgid "Git version" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:10 -msgid "Upgrade info endpoint" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 +msgid "Upgrade info endpoint" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "Activate to require SSL both pushing and pulling. If SSL certificate is missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 msgid "Mercurial extensions" msgstr "" +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 +msgid "Enable largefiles extension" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 +msgid "Enable hgsubversion extension" +msgstr "" + #: kallithea/templates/admin/settings/settings_vcs.html:47 -msgid "Enable largefiles extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:51 -msgid "Enable hgsubversion extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "Requires hgsubversion library to be installed. Enables cloning of remote Subversion repositories while converting them to Mercurial." msgstr "" +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 +msgid "Location of repositories" +msgstr "" + #: kallithea/templates/admin/settings/settings_vcs.html:64 -msgid "Location of repositories" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "Click to unlock. You must restart Kallithea in order to make this setting take effect." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "Filesystem location where repositories are stored. After changing this value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following variables of the URL will be replaced accordingly.\n" @@ -3978,88 +4070,110 @@ " {netloc} network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'.\n" -" The following variables are available:\n" -" {scheme} 'http' or 'https' sent from running Kallithea server,\n" -" {user} current user username,\n" -" {netloc} network location/server host of running Kallithea server,\n" -" {repo} full repository name,\n" -" {repoid} ID of repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:59 -msgid "Number of items displayed in the main page dashboard before pagination is shown." +" The following variables are available:\n" +" {scheme} 'http' or 'https' sent from running Kallithea server,\n" +" {user} current user username,\n" +" {netloc} network location/server host of running Kallithea server,\n" +" {repo} full repository name,\n" +" {repoid} ID of repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +msgid "Repository page size" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:57 +msgid "Number of items displayed in the repository pages before pagination is shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "Number of items displayed in the admin pages grids before pagination is shown." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 +msgid "Icons" +msgstr "" + #: kallithea/templates/admin/settings/settings_visual.html:75 -msgid "Icons" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "" + #: kallithea/templates/admin/settings/settings_visual.html:84 -msgid "Show private repository icon on repositories" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 msgid "Meta Tagging" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:97 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 +msgid "Parses meta tags from the repository description field and turns them into colored tags." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 msgid "Stylify recognised meta tags:" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:111 -msgid "Parses meta tags from the repository description field and turns them into colored tags." -msgstr "" - #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 msgid "Show Members" msgstr "" @@ -4069,13 +4183,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "" @@ -4084,48 +4200,59 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 msgid "User Groups Administration" msgstr "" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4135,12 +4262,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4149,7 +4278,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "" @@ -4158,931 +4288,1192 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 msgid "Users Administration" msgstr "" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "" - -#: kallithea/templates/base/base.html:145 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 +msgid "Options" +msgstr "" + #: kallithea/templates/base/base.html:147 -msgid "Options" +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" msgstr "" #: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 -msgid "Compare Fork" +#: kallithea/tests/data/templates/base/base.html.py:399 +msgid "Unlock" msgstr "" #: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "" - -#: kallithea/templates/base/base.html:163 -msgid "Unlock" +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" msgstr "" #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "" -#: kallithea/templates/base/base.html:246 -msgid "Search in repositories" -msgstr "" - -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 -msgid "My Pull Requests" -msgstr "" - -#: kallithea/templates/base/base.html:289 -msgid "Not Logged In" -msgstr "" - -#: kallithea/templates/base/base.html:296 -msgid "Login to Your Account" -msgstr "" - #: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" -msgstr "" - -#: kallithea/templates/base/base.html:346 +#: kallithea/tests/data/templates/base/base.html.py:540 +msgid "Search in repositories" +msgstr "" + +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 +msgid "My Pull Requests" +msgstr "" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 +msgid "Not Logged In" +msgstr "" + +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 +msgid "Login to Your Account" +msgstr "" + +#: kallithea/templates/base/base.html:385 +msgid "Forgot password?" +msgstr "" + +#: kallithea/templates/base/base.html:389 +msgid "Don't have an account?" +msgstr "" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 msgid "Inherit defaults" msgstr "" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "Select to inherit global settings, IP whitelist and permissions from the %s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 -msgid "Add Another Comment" -msgstr "" - -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 -msgid "Stop following this repository" -msgstr "" - -#: kallithea/templates/base/root.html:24 -msgid "Start following this repository" -msgstr "" - #: kallithea/templates/base/root.html:25 -msgid "Group" +#: kallithea/tests/data/templates/base/root.html.py:85 +msgid "Add Another Comment" msgstr "" #: kallithea/templates/base/root.html:26 -msgid "members" +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 +msgid "Stop following this repository" msgstr "" #: kallithea/templates/base/root.html:27 -msgid "Loading ..." +#: kallithea/tests/data/templates/base/root.html.py:89 +msgid "Start following this repository" msgstr "" #: kallithea/templates/base/root.html:28 -msgid "loading ..." +#: kallithea/tests/data/templates/base/root.html.py:91 +msgid "Group" msgstr "" #: kallithea/templates/base/root.html:29 -msgid "Search truncated" +#: kallithea/tests/data/templates/base/root.html.py:93 +msgid "members" msgstr "" #: kallithea/templates/base/root.html:30 -msgid "No matching files" +#: kallithea/tests/data/templates/base/root.html.py:95 +msgid "Loading ..." msgstr "" #: kallithea/templates/base/root.html:31 -msgid "Open New Pull Request from {0}" +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." msgstr "" #: kallithea/templates/base/root.html:32 -msgid "Open New Pull Request for {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" msgstr "" #: kallithea/templates/base/root.html:33 -msgid "Show Selected Changesets {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" msgstr "" #: kallithea/templates/base/root.html:34 -msgid "Selection Link" +#: kallithea/tests/data/templates/base/root.html.py:103 +msgid "Open New Pull Request from {0}" msgstr "" #: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 -msgid "Collapse Diff" +#: kallithea/tests/data/templates/base/root.html.py:105 +msgid "Open New Pull Request for {0} → {1}" msgstr "" #: kallithea/templates/base/root.html:36 -msgid "Expand Diff" +#: kallithea/tests/data/templates/base/root.html.py:107 +msgid "Show Selected Changesets {0} → {1}" msgstr "" #: kallithea/templates/base/root.html:37 -msgid "Failed to revoke permission" +#: kallithea/tests/data/templates/base/root.html.py:109 +msgid "Selection Link" msgstr "" #: kallithea/templates/base/root.html:38 -msgid "Confirm to revoke permission for {0}: {1} ?" +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 +msgid "Collapse Diff" msgstr "" #: kallithea/templates/base/root.html:39 -msgid "enabled" +#: kallithea/tests/data/templates/base/root.html.py:113 +msgid "Expand Diff" msgstr "" #: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "" - -#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/base/root.html.py:115 +msgid "Failed to revoke permission" +msgstr "" + +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 +msgid "Confirm to revoke permission for {0}: {1} ?" +msgstr "" + +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" msgstr "" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." msgstr "" #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 msgid "Go to tip of repository" msgstr "" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" msgstr "" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, python-format +msgid "Changeset status: %s by %s" +msgstr "" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 msgid "Push new repository" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 msgid "Merge" msgstr "" +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 +msgid "Grafted from:" +msgstr "" + #: kallithea/templates/changeset/changeset.html:123 -msgid "Grafted from:" +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" msgstr "" #: kallithea/templates/changeset/changeset.html:129 -msgid "Transplanted from:" -msgstr "" - -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 msgid "Replaced by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 msgid "Preceded by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 msgid "No revisions" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 msgid "on pull request" msgstr "" +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 +msgid "No title" +msgstr "" + #: kallithea/templates/changeset/changeset_file_comment.html:22 -msgid "No title" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 msgid "on this changeset" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 msgid "Delete comment?" msgstr "" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 msgid "Status change" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +msgid "Comments are in plain text. Use @username inside this text to notify another user." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +msgid "Set changeset status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +msgid "No change" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +msgid "Finish pull request" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +msgid "Close" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, python-format msgid "%d inline" msgid_plural "%d inline" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -msgid "Use @username inside this text to notify another user." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -msgid "Set changeset status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -msgid "No change" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -msgid "Close" -msgstr "" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +msgid "File before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:40 +msgid "Modified" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:48 +#, python-format +msgid "Unknown operation: %r" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:52 +msgid "No file after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:55 +msgid "File after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 msgid "Show full diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 msgid "Show full side-by-side diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 msgid "Show inline comments" msgstr "" -#: kallithea/templates/changeset/diff_block.html:86 -msgid "Deleted" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:89 -msgid "Renamed" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "Please merge the target branch to your branch before creating a pull request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, python-format msgid "%s changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 msgid "behind" msgstr "" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +msgid "Changeset on" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +msgid "branch" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +msgid "Status change:" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:33 +msgid "The pull request has been closed." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 msgid "We have received a request to reset the password for your account." msgstr "" -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "This account is however managed outside this system and the password cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "Should you not be able to use the link above, please type the following code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "If it weren't you who requested the password reset, just disregard this message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +msgid "Pull request from" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +msgid "at" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 #, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -msgid "The comment closed the pull request with status" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "Pull Request %s \"%s\" Closed" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "Comment on Pull Request %s \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/registration.html:22 +msgid "Full Name" msgstr "" #: kallithea/templates/files/diff_2way.html:15 @@ -5101,82 +5492,104 @@ msgstr "" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +msgid "New file type" +msgstr "" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 msgid "Commit Changes" msgstr "" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "" -#: kallithea/templates/files/files_browser.html:61 -msgid "Size" -msgstr "" - -#: kallithea/templates/files/files_browser.html:62 -msgid "Last Revision" -msgstr "" - #: kallithea/templates/files/files_browser.html:63 -msgid "Last Modified" +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 +msgid "Size" msgstr "" #: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 +msgid "Last Revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 +msgid "Last Modified" +msgstr "" + +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 msgid "Last Committer" msgstr "" @@ -5186,7 +5599,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "" @@ -5199,101 +5612,128 @@ msgid "Edit file" msgstr "" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" +#: kallithea/templates/files/files_source.html:34 +#, python-format +msgid "Edit on Branch: %s" +msgstr "" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" msgstr "" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +msgid "File is too big to display." +msgstr "" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." msgstr "" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "" @@ -5302,70 +5742,80 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "" -#: kallithea/templates/journal/journal.html:21 -msgid "ATOM journal feed" -msgstr "" - #: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 +msgid "ATOM journal feed" +msgstr "" + +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "" @@ -5379,34 +5829,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "" @@ -5441,7 +5902,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "" @@ -5459,109 +5922,146 @@ msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, python-format msgid "%s Pull Request %s" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, python-format msgid "Pull request %s from %s#%s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 msgid "Summarize the changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 msgid "There are no reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 msgid "on" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "This is just a range of changesets and doesn't have a target or a real merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -msgid "Update" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +msgid "Next iteration" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "Pull request iterations do not change content once created. Select a revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +msgid "Cancel Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 msgid "Pull Request Reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 msgid "Remove reviewer" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 msgid "Potential Reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -msgid "Save as New Pull Request" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -msgid "Cancel Changes" +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:296 -msgid "Pull Request Content" +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 @@ -5579,238 +6079,451 @@ msgid "Pull Requests to '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, python-format msgid "Show Pull Requests to %s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, python-format msgid "Show Pull Requests from '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 msgid "Pull Requests Created by Me" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +msgid "Pull Requests Needing My Review" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 msgid "Pull Requests I Participate In" msgstr "" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 msgid "Search in All Repositories" msgstr "" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "" -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "" +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "" + #: kallithea/templates/summary/statistics.html:390 -msgid "commits" +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" msgstr "" #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" msgstr "" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" msgstr "" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" msgstr "" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "" + #: kallithea/templates/summary/summary.html:72 -msgid "Clone URL" -msgstr "" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" msgstr "" -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "" - -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "" +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "" + #: kallithea/templates/summary/summary.html:108 -msgid "Download" +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" msgstr "" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" msgstr "" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" msgstr "" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 msgid "Latest Changes" msgstr "" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 msgid "Quick Start" msgstr "" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" -msgstr "" - +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "Activate to require SSL both pushing and pulling. If SSL certificate is missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'.\n" +" The following variables are available:\n" +" {scheme} 'http' or 'https' sent from running Kallithea server,\n" +" {user} current user username,\n" +" {netloc} network location/server host of running Kallithea server,\n" +" {repo} full repository name,\n" +" {repoid} ID of repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "Number of items displayed in the main page dashboard before pagination is shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/nl_BE/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/nl_BE/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/nl_BE/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -7,457 +7,498 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" -"PO-Revision-Date: 2017-01-10 07:35+0000\n" -"Last-Translator: Sam Jaques \n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" +"PO-Revision-Date: 2017-06-18 16:22+0000\n" +"Last-Translator: Thomas De Schampheleire \n" "Language-Team: Dutch (Belgium) " -"\n" +"\n" "Language: nl_BE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 2.11-dev\n" +"X-Generator: Weblate 2.15-dev\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "Er zijn nog geen changesets" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "Geen" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(gesloten)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "Toon witruimtes" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 #, fuzzy msgid "Ignore whitespace" msgstr "Negeer witruimtes" -#: kallithea/controllers/changeset.py:169 -#, fuzzy, python-format +#: kallithea/controllers/changeset.py:165 +#, python-format msgid "Increase diff context to %(num)s lines" -msgstr "vergroot de diff context met %(num)s lijnen" - -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +msgstr "Vergroot de diff context tot %(num)s lijnen" + +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "Deze revisie bestaat niet in deze repository" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "" -"Het is niet toegestaan de status te wijzigen van een changeset " -"geassocieerd met een gesloten pull request" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "Selecteer de changeset" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, python-format +msgid "Could not find other repository %s" +msgstr "" + +#: kallithea/controllers/compare.py:73 +#, fuzzy +#| msgid "Cannot compare repositories without using common ancestor" +msgid "Cannot compare repositories of different types" +msgstr "" +"Kan geen repositories vergelijken zonder een gemeenschappelijke voorouder" +" te gebruiken" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" - -#: kallithea/controllers/error.py:71 +"Kan geen repositories vergelijken zonder een gemeenschappelijke voorouder" +" te gebruiken" + +#: kallithea/controllers/error.py:70 msgid "No response" msgstr "Geen antwoord" -#: kallithea/controllers/error.py:72 +#: kallithea/controllers/error.py:71 msgid "Unknown error" -msgstr "Onbekende fout" - -#: kallithea/controllers/error.py:100 +msgstr "Ongekende fout" + +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "" - -#: kallithea/controllers/error.py:103 +"De aanvraag kon niet door de server begrepen worden wegens incorrecte " +"syntax." + +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" -msgstr "" - -#: kallithea/controllers/error.py:105 +msgstr "Ongeautoriseerde toegang tot resource" + +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" -msgstr "Je hebt geen toegang tot deze pagina" - -#: kallithea/controllers/error.py:107 +msgstr "U hebt geen permissie om deze pagina te bekijken" + +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" -msgstr "" - -#: kallithea/controllers/error.py:109 +msgstr "De resource kon niet gevonden worden" + +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." -msgstr "" - -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "" - -#: kallithea/controllers/feed.py:56 +msgstr "De server kon de aanvraag niet voldoen wegens een onverwachte toestand." + +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "De changeset was te groot en werd afgekort..." + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "%s committeerde op %s" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 #, python-format msgid "%s %s feed" -msgstr "" - -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "" - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "" - -#: kallithea/controllers/files.py:91 +msgstr "%s %s feed" + +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "Veranderingen in repository %s" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" -msgstr "" - -#: kallithea/controllers/files.py:92 +msgstr "Klik hier om een nieuw bestand toe te voegen" + +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" -msgstr "" - -#: kallithea/controllers/files.py:193 +msgstr "Er zijn nog geen bestanden. %s" + +#: kallithea/controllers/files.py:191 #, python-format msgid "%s at %s" -msgstr "" - -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +msgstr "%s op %s" + +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" -msgstr "" - -#: kallithea/controllers/files.py:317 +msgstr "Deze repository is gelocket door %s op %s" + +#: kallithea/controllers/files.py:309 msgid "You can only delete files with revision being a valid branch" -msgstr "" - -#: kallithea/controllers/files.py:328 +msgstr "Men kan enkel bestanden verwijderen als de revisie een geldige branch is" + +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" -msgstr "" - -#: kallithea/controllers/files.py:350 +msgstr "Bestand %s verwijderd via Kallithea" + +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" -msgstr "" - -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +msgstr "Bestand %s succesvol verwijderd" + +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" -msgstr "" - -#: kallithea/controllers/files.py:377 +msgstr "Er trad een fout op tijdens het committeren" + +#: kallithea/controllers/files.py:369 msgid "You can only edit files with revision being a valid branch" -msgstr "" - -#: kallithea/controllers/files.py:391 +msgstr "Men kan enkel bestanden wijzigen als de revisie een geldige branch is" + +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" -msgstr "" - -#: kallithea/controllers/files.py:407 +msgstr "Bestand %s gewijzigd via Kallithea" + +#: kallithea/controllers/files.py:399 msgid "No changes" -msgstr "" - -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +msgstr "Geen wijzigingen" + +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" -msgstr "" - -#: kallithea/controllers/files.py:443 +msgstr "Succesvol gecommitteerd naar %s" + +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" -msgstr "" - -#: kallithea/controllers/files.py:464 +msgstr "Bestand toegevoegd via Kallithea" + +#: kallithea/controllers/files.py:456 msgid "No content" -msgstr "" - -#: kallithea/controllers/files.py:468 +msgstr "Geen inhoud" + +#: kallithea/controllers/files.py:460 msgid "No filename" -msgstr "" - -#: kallithea/controllers/files.py:493 +msgstr "Geen bestandsnaam" + +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" -msgstr "" - -#: kallithea/controllers/files.py:526 +msgstr "De locatie moet een relatief pad zijn en mag geen .. bevatten" + +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" -msgstr "" - -#: kallithea/controllers/files.py:537 +msgstr "Downloads uitgeschakeld" + +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" -msgstr "" - -#: kallithea/controllers/files.py:539 +msgstr "Ongekende revisie %s" + +#: kallithea/controllers/files.py:530 msgid "Empty repository" -msgstr "" - -#: kallithea/controllers/files.py:541 +msgstr "Lege repository" + +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" -msgstr "" - -#: kallithea/controllers/files.py:771 +msgstr "Ongekende archieftype" + +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" -msgstr "" - -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +msgstr "Changesets" + +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" -msgstr "" - -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +msgstr "Branches" + +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" -msgstr "" - -#: kallithea/controllers/forks.py:186 +msgstr "Tags" + +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" -msgstr "" - -#: kallithea/controllers/home.py:84 +msgstr "Er is een fout opgetreden tijdens het forken van de repository %s" + +#: kallithea/controllers/home.py:77 msgid "Groups" -msgstr "" - -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +msgstr "Groepen" + +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" -msgstr "" - -#: kallithea/controllers/home.py:130 +msgstr "Repositories" + +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" -msgstr "" - -#: kallithea/controllers/home.py:136 +msgstr "Branch" + +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "Gesloten branches" + +#: kallithea/controllers/home.py:132 msgid "Tag" -msgstr "" - -#: kallithea/controllers/home.py:142 +msgstr "Tag" + +#: kallithea/controllers/home.py:138 msgid "Bookmark" -msgstr "" - -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +msgstr "Bladwijzer" + +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" -msgstr "" - -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +msgstr "Publiek logboek" + +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" -msgstr "" - -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +msgstr "Logboek" + +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" -msgstr "" - -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "" - -#: kallithea/controllers/login.py:197 +msgstr "Incorrecte captcha" + +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "U bent succesvol geregistreerd bij %s" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" -msgstr "" - -#: kallithea/controllers/login.py:246 +msgstr "Een paswoordherstel bevestigingscode is verzonden" + +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" -msgstr "" - -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +msgstr "Ongeldig paswoordherstel token" + +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" -msgstr "" - -#: kallithea/controllers/pullrequests.py:124 -#, fuzzy, python-format -msgid "%s (closed)" -msgstr "" - -#: kallithea/controllers/pullrequests.py:152 -#: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 -msgid "Changeset" -msgstr "" - -#: kallithea/controllers/pullrequests.py:173 -msgid "Special" -msgstr "" - -#: kallithea/controllers/pullrequests.py:174 -msgid "Peer branches" -msgstr "" - -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 -msgid "Bookmarks" -msgstr "" - -#: kallithea/controllers/pullrequests.py:310 -#, python-format -msgid "Error creating pull request: %s" -msgstr "" - -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 +msgstr "Paswoord succesvol aangepast" + +#: kallithea/controllers/pullrequests.py:73 #, python-format msgid "Invalid reviewer \"%s\" specified" msgstr "" -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:135 +#, fuzzy, python-format +msgid "%s (closed)" +msgstr "" + +#: kallithea/controllers/pullrequests.py:162 +#: kallithea/templates/changeset/changeset.html:12 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 +msgid "Changeset" +msgstr "Changeset" + +#: kallithea/controllers/pullrequests.py:183 +msgid "Special" +msgstr "Bijzonder" + +#: kallithea/controllers/pullrequests.py:184 +msgid "Peer branches" +msgstr "" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 +msgid "Bookmarks" +msgstr "" + +#: kallithea/controllers/pullrequests.py:326 +#, python-format +msgid "Error creating pull request: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "" - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "" - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" -msgstr "" - -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "" + +#: kallithea/controllers/pullrequests.py:381 +msgid "New pull request iteration created" +msgstr "" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, python-format +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." -msgstr "" - -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +msgid "No additional changesets found for iterating on this pull request." +msgstr "" + +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "" - -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:571 +msgid "Git pull requests don't support iterating yet." +msgstr "" + +#: kallithea/controllers/pullrequests.py:573 +#, python-format +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "" - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, python-format +msgid "Successfully deleted pull request %s" +msgstr "" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "" -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "" -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "" @@ -469,149 +510,153 @@ msgid "error occurred during update of auth settings" msgstr "" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "" +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "" + #: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 -msgid "Forever" +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" msgstr "" #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" msgstr "" #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 +msgid "1 day" msgstr "" #: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 -msgid "1 day" -msgstr "" - -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" msgstr "" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" msgstr "" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -619,622 +664,642 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" -msgstr "" - -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during repository forking %s" +msgid "An error occurred during creation of field: %r" +msgstr "Er is een fout opgetreden tijdens het forken van de repository %s" + +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "" +#: kallithea/controllers/admin/repos.py:480 +msgid "An error occurred during this operation" +msgstr "" + +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 +#, fuzzy +msgid "Repository has been locked" +msgstr "" + +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 +#, fuzzy +msgid "Repository has been unlocked" +msgstr "" + +#: kallithea/controllers/admin/repos.py:502 #: kallithea/controllers/admin/repos.py:521 -msgid "An error occurred during this operation" +msgid "An error occurred during unlocking" +msgstr "" + +#: kallithea/controllers/admin/repos.py:533 +msgid "Cache invalidation successful" msgstr "" #: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 -#, fuzzy -msgid "Repository has been locked" -msgstr "" - -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 -#, fuzzy -msgid "Repository has been unlocked" -msgstr "" - -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 -msgid "An error occurred during unlocking" -msgstr "" - -#: kallithea/controllers/admin/repos.py:582 -msgid "Cache invalidation successful" -msgstr "" - -#: kallithea/controllers/admin/repos.py:586 msgid "An error occurred during cache invalidation" msgstr "" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "" -#: kallithea/controllers/admin/settings.py:174 +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 msgid "" "Unable to activate hgsubversion support. The \"hgsubversion\" library is " "missing" msgstr "" -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 msgid "Error occurred while updating application settings" msgstr "" -#: kallithea/controllers/admin/settings.py:211 +#: kallithea/controllers/admin/settings.py:174 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "" -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, python-format msgid "Invalidated %s repositories" msgstr "" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "" +#: kallithea/controllers/admin/user_groups.py:208 +#, python-format +msgid "Error occurred during update of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:219 +msgid "Successfully deleted user group" +msgstr "" + #: kallithea/controllers/admin/user_groups.py:224 -#, python-format -msgid "Error occurred during update of user group %s" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:242 -msgid "Successfully deleted user group" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:247 msgid "An error occurred during deletion of user group" msgstr "" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, python-format msgid "Changeset for %s %s not found in %s" msgstr "" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format #| msgid "Set changeset status" msgid "Changeset %s not found" msgstr "Selecteer de changeset" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 msgid "Compare view" msgstr "" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, python-format msgid "Fork name %s" msgstr "" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, python-format msgid "Pull request %s" msgstr "" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr "" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1242,1305 +1307,959 @@ "repositories" msgstr "" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "" msgstr[1] "" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 msgid "Default user has read access to new repositories" msgstr "" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 msgid "Default user has write access to new repositories" msgstr "" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 msgid "Only admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 msgid "Non-admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 msgid "Only admins can create user groups" msgstr "" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 msgid "Non-admins can create user groups" msgstr "" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 msgid "Only admins can fork repositories" msgstr "" -#: kallithea/model/db.py:1696 +#: kallithea/model/db.py:1745 msgid "Non-admins can fork repositories" msgstr "" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" msgstr "" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 #, fuzzy msgid "Not reviewed" msgstr "" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 #, fuzzy msgid "Under review" msgstr "" -#: kallithea/model/forms.py:57 -msgid "Please enter a login" +#: kallithea/model/db.py:2278 +msgid "Not approved" +msgstr "" + +#: kallithea/model/db.py:2279 +msgid "Approved" msgstr "" #: kallithea/model/forms.py:58 +msgid "Please enter a login" +msgstr "" + +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "" -#: kallithea/model/forms.py:66 -msgid "Please enter a password" -msgstr "" - #: kallithea/model/forms.py:67 +msgid "Please enter a password" +msgstr "" + +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" +#: kallithea/model/notification.py:240 +#, python-format +msgid "%(user)s commented on changeset %(age)s" +msgstr "" + +#: kallithea/model/notification.py:241 +#, python-format +msgid "%(user)s sent message %(age)s" +msgstr "" + +#: kallithea/model/notification.py:242 +#, python-format +msgid "%(user)s mentioned you %(age)s" +msgstr "" + +#: kallithea/model/notification.py:243 +#, python-format +msgid "%(user)s registered in Kallithea %(age)s" +msgstr "" + +#: kallithea/model/notification.py:244 +#, python-format +msgid "%(user)s opened new pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:245 +#, python-format +msgid "%(user)s commented on pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:252 +#, python-format +msgid "%(user)s commented on changeset at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:253 +#, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:254 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + #: kallithea/model/notification.py:255 #, python-format -msgid "%(user)s commented on changeset %(age)s" +msgid "%(user)s registered in Kallithea at %(when)s" msgstr "" #: kallithea/model/notification.py:256 #, python-format -msgid "%(user)s sent message %(age)s" +msgid "%(user)s opened new pull request at %(when)s" msgstr "" #: kallithea/model/notification.py:257 #, python-format -msgid "%(user)s mentioned you %(age)s" -msgstr "" - -#: kallithea/model/notification.py:258 -#, python-format -msgid "%(user)s registered in Kallithea %(age)s" -msgstr "" - -#: kallithea/model/notification.py:259 -#, python-format -msgid "%(user)s opened new pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:260 -#, python-format -msgid "%(user)s commented on pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:267 -#, python-format -msgid "%(user)s commented on changeset at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:268 -#, python-format -msgid "%(user)s sent message at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:269 -#, python-format -msgid "%(user)s mentioned you at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:270 -#, python-format -msgid "%(user)s registered in Kallithea at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:271 -#, python-format -msgid "%(user)s opened new pull request at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:272 -#, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, python-format +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "" + +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" msgstr "" -#: kallithea/model/notification.py:308 -#, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:309 -#, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +msgid "Cannot create empty pull request" +msgstr "" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +msgid "You are not authorized to create the pull request" +msgstr "" + +#: kallithea/model/pull_request.py:341 +msgid "Missing changesets since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:348 +#, python-format +msgid "New changesets on %s %s since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, python-format +msgid "No changes found on %s %s since previous iteration." +msgstr "" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 msgid "You can't remove this user since it is crucial for the entire application" msgstr "" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories: %s" msgstr "" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" " owners or remove those repository groups: %s" msgstr "" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " "owners or remove those user groups: %s" msgstr "" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 msgid "Password reset notification" msgstr "" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with an alphanumeric character or underscore" msgstr "" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 msgid "Invalid username or password" msgstr "" +#: kallithea/model/validators.py:310 +msgid "Token mismatch" +msgstr "" + +#: kallithea/model/validators.py:326 +#, python-format +msgid "Repository name %(repo)s is not allowed" +msgstr "" + +#: kallithea/model/validators.py:328 +#, python-format +msgid "Repository named %(repo)s already exists" +msgstr "" + +#: kallithea/model/validators.py:329 +#, python-format +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "" + #: kallithea/model/validators.py:331 -msgid "Token mismatch" -msgstr "" - -#: kallithea/model/validators.py:345 -#, python-format -msgid "Repository name %(repo)s is not allowed" -msgstr "" - -#: kallithea/model/validators.py:347 -#, python-format -msgid "Repository named %(repo)s already exists" -msgstr "" - -#: kallithea/model/validators.py:348 -#, python-format -msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" -msgstr "" - -#: kallithea/model/validators.py:350 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 msgid "Invalid repository URL" msgstr "" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 msgid "This email address is already in use" msgstr "" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, python-format msgid "Email address \"%(email)s\" not found" msgstr "" -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "" - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Empty repository" +msgid "Repository Group" +msgstr "Lege repository" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "" - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "" - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "" - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, python-format msgid "Reset Your Password to %s" msgstr "" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 msgid "Reset Your Password" msgstr "" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" msgstr "" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 msgid "New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 msgid "Confirm New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 msgid "Admin Journal" msgstr "" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "" #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 msgid "Filter" msgstr "" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, fuzzy, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2548,148 +2267,176 @@ msgstr[1] "" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 msgid "Repository Defaults" msgstr "" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "" +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 +msgid "Private repository" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" + #: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 -msgid "Private repository" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 +msgid "Enable statistics" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 +msgid "Enable statistics window on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 +msgid "Enable downloads" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 +msgid "Enable download menu on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 +msgid "Enable locking" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:61 #: kallithea/templates/admin/repos/repo_edit_settings.html:84 -msgid "Enable statistics" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 -msgid "Enable statistics window on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 -msgid "Enable downloads" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 -msgid "Enable download menu on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 -msgid "Enable locking" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "" @@ -2698,45 +2445,63 @@ msgid "Edit Gist" msgstr "" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "" -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 msgid "Never" msgstr "" @@ -2745,271 +2510,404 @@ msgstr "" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 msgid "Email Addresses" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 msgid "Owned Repositories" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 msgid "Watched Repositories" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 msgid "Show Permissions" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, python-format msgid "Confirm to reset this API key: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 msgid "Expired" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, python-format msgid "Confirm to remove this API key: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 msgid "Remove" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 msgid "New API key" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "" @@ -3017,279 +2915,359 @@ msgid "Change Your Account Password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, python-format +msgid "Change %s avatar at" msgstr "" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 msgid "Repositories You Own" msgstr "" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" msgstr "" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 msgid "Repositories You are Watching" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" msgstr "" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +msgid "Mark as read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 msgid "Default Permissions" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 msgid "Apply to all existing repositories" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " "will be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 msgid "Apply to all existing repository groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 msgid "" "All default permissions on each user group will be reset to chosen " "permission, note that all custom default permission on user groups will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 +msgid "Permissions for the Default user on new user groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 +msgid "Top level repository creation" +msgstr "" + #: kallithea/templates/admin/permissions/permissions_globals.html:55 -msgid "Permissions for the Default user on new user groups." +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 +msgid "Enable this to allow non-admins to create repositories at the top level." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 +msgid "" +"Note: This will also give all users API access to create repositories " +"everywhere. That might change in future versions." msgstr "" #: kallithea/templates/admin/permissions/permissions_globals.html:60 -msgid "Top level repository creation" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:64 -msgid "Enable this to allow non-admins to create repositories at the top level." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:65 -msgid "" -"Note: This will also give all users API access to create repositories " -"everywhere. That might change in future versions." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3298,31 +3276,42 @@ msgid "%s Repository Group Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "" @@ -3346,12 +3335,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3362,16 +3353,34 @@ msgid "Delete this repository group" msgstr "" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +msgid "Visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "No response" +msgid "Add repos" +msgstr "Geen antwoord" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +msgid "Add/Edit groups" +msgstr "" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 msgid "User/User Group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 msgid "Default" @@ -3379,102 +3388,115 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 msgid "Revoke" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 msgid "Apply to children" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 #, fuzzy msgid "Confirm to delete this group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" +#, fuzzy, python-format +#| msgid "This repository has %s fork" +#| msgid_plural "This repository has %s forks" +msgid "Repository group %s" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 msgid "Repository Groups Administration" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 msgid "Number of Top-level Repositories" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 msgid "Clone remote repository" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3503,91 +3525,112 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, fuzzy, python-format msgid "%s Repository Settings" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 msgid "Parent" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 msgid "Public Journal Visibility" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 msgid "Add to Public Journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 msgid "Change Locking" msgstr "" +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 +msgid "Confirm to unlock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 +msgid "Unlock Repository" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_advanced.html:52 -msgid "Confirm to unlock repository." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 -msgid "Unlock Repository" +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 +#, python-format +msgid "Locked by %s on %s" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:56 -#, python-format -msgid "Locked by %s on %s" +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 +msgid "Confirm to lock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 +msgid "Lock Repository" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:60 -msgid "Confirm to lock repository." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 -msgid "Lock Repository" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3595,33 +3638,40 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 #, fuzzy msgid "Delete this Repository" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, fuzzy, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3632,105 +3682,111 @@ msgid "Invalidate Repository Cache" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -msgid "Confirm to invalidate repository cache." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 +msgid "List of Cached Values" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_caches.html:12 -msgid "List of Cached Values" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 msgid "Prefix" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 msgid "Private Repository" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "Empty repository" +msgid "Fork of repository" +msgstr "Lege repository" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 msgid "Remote repository URL" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 msgid "Pull Changes from Remote Repository" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 -msgid "Confirm to pull changes from remote repository." -msgstr "" - #: kallithea/templates/admin/repos/repo_edit_remote.html:17 +msgid "Confirm to pull changes from remote repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "Permanent Repository ID" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3740,33 +3796,33 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 msgid "Remote repository" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 msgid "Repository URL" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_statistics.html:6 -msgid "Processed commits" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 msgid "Processed progress" msgstr "" @@ -3779,312 +3835,371 @@ msgstr "" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 msgid "Repositories Administration" msgstr "" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 msgid "Settings Administration" msgstr "" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 msgid "Save Settings" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 msgid "Custom Hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" -msgstr "" - -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:4 +msgid "Rescan options" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:23 -msgid "Install Git hooks" -msgstr "" - #: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "" +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + #: kallithea/templates/admin/settings/settings_search.html:12 -msgid "Build from scratch" -msgstr "" - -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 msgid "Kallithea version" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 -msgid "Git version" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Upgrade info endpoint" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 msgid "Mercurial extensions" msgstr "" +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 +msgid "Enable largefiles extension" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 +msgid "Enable hgsubversion extension" +msgstr "" + #: kallithea/templates/admin/settings/settings_vcs.html:47 -msgid "Enable largefiles extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:51 -msgid "Enable hgsubversion extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 msgid "Location of repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4101,101 +4216,125 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repositories" +msgid "Repository page size" +msgstr "Repositories" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "" + #: kallithea/templates/admin/settings/settings_visual.html:84 -msgid "Show private repository icon on repositories" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 msgid "Meta Tagging" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 msgid "Show Members" msgstr "" @@ -4205,13 +4344,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "" @@ -4220,48 +4361,59 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 msgid "User Groups Administration" msgstr "" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4271,12 +4423,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4285,7 +4439,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "" @@ -4294,947 +4449,1228 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 msgid "Users Administration" msgstr "" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "" - -#: kallithea/templates/base/base.html:145 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 +msgid "Options" +msgstr "" + #: kallithea/templates/base/base.html:147 -msgid "Options" +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" msgstr "" #: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 -msgid "Compare Fork" +#: kallithea/tests/data/templates/base/base.html.py:399 +msgid "Unlock" msgstr "" #: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "" - -#: kallithea/templates/base/base.html:163 -msgid "Unlock" +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" msgstr "" #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "" -#: kallithea/templates/base/base.html:246 -msgid "Search in repositories" -msgstr "" - -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 -msgid "My Pull Requests" -msgstr "" - -#: kallithea/templates/base/base.html:289 -msgid "Not Logged In" -msgstr "" - -#: kallithea/templates/base/base.html:296 -msgid "Login to Your Account" -msgstr "" - #: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" -msgstr "" - -#: kallithea/templates/base/base.html:346 +#: kallithea/tests/data/templates/base/base.html.py:540 +msgid "Search in repositories" +msgstr "" + +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 +msgid "My Pull Requests" +msgstr "" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 +msgid "Not Logged In" +msgstr "" + +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 +msgid "Login to Your Account" +msgstr "" + +#: kallithea/templates/base/base.html:385 +msgid "Forgot password?" +msgstr "" + +#: kallithea/templates/base/base.html:389 +msgid "Don't have an account?" +msgstr "" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 msgid "Inherit defaults" msgstr "" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 -#, fuzzy -msgid "Add Another Comment" -msgstr "" - -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 -msgid "Stop following this repository" -msgstr "" - -#: kallithea/templates/base/root.html:24 -msgid "Start following this repository" -msgstr "" - #: kallithea/templates/base/root.html:25 -msgid "Group" +#: kallithea/tests/data/templates/base/root.html.py:85 +#, fuzzy +msgid "Add Another Comment" msgstr "" #: kallithea/templates/base/root.html:26 -msgid "members" +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 +msgid "Stop following this repository" msgstr "" #: kallithea/templates/base/root.html:27 -msgid "Loading ..." +#: kallithea/tests/data/templates/base/root.html.py:89 +msgid "Start following this repository" msgstr "" #: kallithea/templates/base/root.html:28 -msgid "loading ..." +#: kallithea/tests/data/templates/base/root.html.py:91 +msgid "Group" msgstr "" #: kallithea/templates/base/root.html:29 -msgid "Search truncated" +#: kallithea/tests/data/templates/base/root.html.py:93 +msgid "members" msgstr "" #: kallithea/templates/base/root.html:30 -msgid "No matching files" +#: kallithea/tests/data/templates/base/root.html.py:95 +msgid "Loading ..." msgstr "" #: kallithea/templates/base/root.html:31 +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." +msgstr "" + +#: kallithea/templates/base/root.html:32 +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" +msgstr "" + +#: kallithea/templates/base/root.html:33 +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" +msgstr "" + +#: kallithea/templates/base/root.html:34 +#: kallithea/tests/data/templates/base/root.html.py:103 #, fuzzy msgid "Open New Pull Request from {0}" msgstr "Statuswijziging -> %s" -#: kallithea/templates/base/root.html:32 +#: kallithea/templates/base/root.html:35 +#: kallithea/tests/data/templates/base/root.html.py:105 msgid "Open New Pull Request for {0} → {1}" msgstr "" -#: kallithea/templates/base/root.html:33 +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 #, fuzzy msgid "Show Selected Changesets {0} → {1}" msgstr "Selecteer de changeset" -#: kallithea/templates/base/root.html:34 +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 msgid "Selection Link" msgstr "" -#: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 -msgid "Collapse Diff" -msgstr "" - -#: kallithea/templates/base/root.html:36 -msgid "Expand Diff" -msgstr "" - -#: kallithea/templates/base/root.html:37 -msgid "Failed to revoke permission" -msgstr "" - #: kallithea/templates/base/root.html:38 -msgid "Confirm to revoke permission for {0}: {1} ?" +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 +msgid "Collapse Diff" msgstr "" #: kallithea/templates/base/root.html:39 -msgid "enabled" +#: kallithea/tests/data/templates/base/root.html.py:113 +msgid "Expand Diff" msgstr "" #: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "" - -#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/base/root.html.py:115 +msgid "Failed to revoke permission" +msgstr "" + +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 +msgid "Confirm to revoke permission for {0}: {1} ?" +msgstr "" + +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "Selecteer een changeset" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 #, fuzzy msgid "Specify changeset" msgstr "Selecteer de changeset" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." msgstr "" #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 msgid "Go to tip of repository" msgstr "" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" msgstr "" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, fuzzy, python-format +msgid "Changeset status: %s by %s" +msgstr "Selecteer de changeset" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 msgid "Push new repository" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 msgid "Merge" msgstr "" +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 +msgid "Grafted from:" +msgstr "" + #: kallithea/templates/changeset/changeset.html:123 -msgid "Grafted from:" +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" msgstr "" #: kallithea/templates/changeset/changeset.html:129 -msgid "Transplanted from:" -msgstr "" - -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 msgid "Replaced by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 msgid "Preceded by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 msgid "No revisions" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 #, fuzzy msgid "on pull request" msgstr "Statuswijziging -> %s" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 msgid "No title" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "Selecteer de changeset" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 #, fuzzy msgid "Delete comment?" msgstr "" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "Statuswijziging -> %s" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +#, fuzzy +msgid "Set changeset status" +msgstr "Selecteer de changeset" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +msgid "No change" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "Statuswijziging -> %s" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +#, fuzzy +msgid "Close" +msgstr "(gesloten)" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, fuzzy, python-format msgid "%d inline" msgid_plural "%d inline" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -msgid "Use @username inside this text to notify another user." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -#, fuzzy -msgid "Set changeset status" -msgstr "Selecteer de changeset" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -msgid "No change" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -#, fuzzy -msgid "Close" -msgstr "(gesloten)" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +msgid "File before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:40 +msgid "Modified" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Ongekende revisie %s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "Geen bestandsnaam" + +#: kallithea/templates/changeset/diff_block.html:55 +msgid "File after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 msgid "Show full diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 msgid "Show full side-by-side diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 msgid "Show inline comments" msgstr "" -#: kallithea/templates/changeset/diff_block.html:86 -msgid "Deleted" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:89 -msgid "Renamed" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, fuzzy, python-format msgid "%s changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 msgid "behind" msgstr "" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "Set changeset status" +msgid "Comment on Changeset \"%s\"" +msgstr "Selecteer de changeset" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset" +msgid "Changeset on" +msgstr "Changeset" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "Branch" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "Statuswijziging -> %s" + +#: kallithea/templates/email_templates/comment.html:33 +msgid "The pull request has been closed." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 msgid "We have received a request to reset the password for your account." msgstr "" -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "Statuswijziging -> %s" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +msgid "at" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 #, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -msgid "The comment closed the pull request with status" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "Pull Request %s \"%s\" Closed" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "on pull request" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "Statuswijziging -> %s" + +#: kallithea/templates/email_templates/registration.html:22 +msgid "Full Name" msgstr "" #: kallithea/templates/files/diff_2way.html:15 @@ -5253,83 +5689,105 @@ msgstr "" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +msgid "New file type" +msgstr "" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 #, fuzzy msgid "Commit Changes" msgstr "Selecteer de changeset" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "" -#: kallithea/templates/files/files_browser.html:61 -msgid "Size" -msgstr "" - -#: kallithea/templates/files/files_browser.html:62 -msgid "Last Revision" -msgstr "" - #: kallithea/templates/files/files_browser.html:63 -msgid "Last Modified" +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 +msgid "Size" msgstr "" #: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 +msgid "Last Revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 +msgid "Last Modified" +msgstr "" + +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 msgid "Last Committer" msgstr "" @@ -5339,7 +5797,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "" @@ -5352,101 +5810,128 @@ msgid "Edit file" msgstr "" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" +#: kallithea/templates/files/files_source.html:34 +#, python-format +msgid "Edit on Branch: %s" +msgstr "" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" msgstr "" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +msgid "File is too big to display." +msgstr "" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." msgstr "" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "" @@ -5455,70 +5940,80 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "" -#: kallithea/templates/journal/journal.html:21 -msgid "ATOM journal feed" -msgstr "" - #: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 +msgid "ATOM journal feed" +msgstr "" + +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "" @@ -5532,34 +6027,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "" @@ -5594,7 +6100,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "" @@ -5612,114 +6120,153 @@ msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, python-format msgid "%s Pull Request %s" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, python-format msgid "Pull request %s from %s#%s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 msgid "Summarize the changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 msgid "There are no reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 msgid "on" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -msgid "Update" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +msgid "Next iteration" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 -msgid "Pull Request Reviewers" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:238 -#, fuzzy -msgid "Remove reviewer" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:250 -msgid "Type name of reviewer to add" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:258 -#, fuzzy -msgid "Potential Reviewers" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:261 -msgid "Click to add the repository owner as reviewer:" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:284 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 msgid "Save Changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -msgid "Save as New Pull Request" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 #, fuzzy msgid "Cancel Changes" msgstr "Selecteer de changeset" +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 +msgid "Pull Request Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 +#, fuzzy +msgid "Remove reviewer" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 +msgid "Type name of reviewer to add" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 +#, fuzzy +msgid "Potential Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 +msgid "Click to add the repository owner as reviewer:" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:296 -msgid "Pull Request Content" +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 @@ -5729,7 +6276,6 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Open New Pull Request from {0}" msgid "Pull Requests from '%s'" msgstr "Statuswijziging -> %s" @@ -5738,240 +6284,464 @@ msgid "Pull Requests to '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, python-format msgid "Show Pull Requests to %s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, python-format msgid "Show Pull Requests from '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 msgid "Pull Requests Created by Me" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +msgid "Pull Requests Needing My Review" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 msgid "Pull Requests I Participate In" msgstr "" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 msgid "Search in All Repositories" msgstr "" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "" -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "" +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "" + #: kallithea/templates/summary/statistics.html:390 -msgid "commits" +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" msgstr "" #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" msgstr "" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" msgstr "" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" msgstr "" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "" + #: kallithea/templates/summary/summary.html:72 -msgid "Clone URL" -msgstr "" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" msgstr "" -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "" - -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "" +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "" + #: kallithea/templates/summary/summary.html:108 -msgid "Download" +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" msgstr "" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" msgstr "" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" msgstr "" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 #, fuzzy msgid "Latest Changes" msgstr "Statuswijziging -> %s" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 msgid "Quick Start" msgstr "" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" msgstr "" #~ msgid "No comments." @@ -6025,9 +6795,6 @@ #~ msgid "No Files" #~ msgstr "" -#~ msgid "" -#~ msgstr "" - #~ msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" #~ msgstr "" @@ -6331,12 +7098,274 @@ #~ msgid "You can only edit files with revision being a valid branch " #~ msgstr "" -#~ msgid "Changeset not found" +#~ msgid "This pull request can be updated with changes on %s:" #~ msgstr "" #~ msgid "Non-admins can can fork repositories" #~ msgstr "" +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "" + +#~ msgid "Commenting on line {1}." +#~ msgstr "" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" + +#~ msgid "Comment preview" +#~ msgstr "" + +#~ msgid "Preview" +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "" + +#~ msgid "New file mode" +#~ msgstr "" + +#~ msgid "File is too big to display" +#~ msgstr "" + +#~ msgid "Save as New Pull Request" +#~ msgstr "" + #~ msgid "Pull Requests from %s'" #~ msgstr "" +#~ msgid "Missing changesets since the previous pull request:" +#~ msgstr "" + +#~ msgid "New changesets on %s %s since the previous pull request:" +#~ msgstr "" + +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "" +#~ "This pull request is based on " +#~ "another %s revision and there is " +#~ "no simple diff." +#~ msgstr "" + +#~ msgid "No changes found on %s %s since previous version." +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "" + +#~ msgid "Pull request update created" +#~ msgstr "" + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "No changesets found for updating this pull request." +#~ msgstr "" + +#~ msgid "Git pull requests don't support updates yet." +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "" + +#~ msgid "An error occurred during creation of field" +#~ msgstr "" + +#~ msgid "Changeset not found" +#~ msgstr "" + +#~ msgid "Repository no access" +#~ msgstr "" + +#~ msgid "Repository read access" +#~ msgstr "" + +#~ msgid "Repository write access" +#~ msgstr "" + +#~ msgid "Repository admin access" +#~ msgstr "" + +#~ msgid "Repository Group no access" +#~ msgstr "" + +#~ msgid "Repository Group read access" +#~ msgstr "" + +#~ msgid "Repository Group write access" +#~ msgstr "" + +#~ msgid "Repository Group admin access" +#~ msgstr "" + +#~ msgid "Repository creation disabled" +#~ msgstr "" + +#~ msgid "Repository creation enabled" +#~ msgstr "" + +#~ msgid "Repository forking disabled" +#~ msgstr "" + +#~ msgid "Repository forking enabled" +#~ msgstr "" + +#~ msgid "Register disabled" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "" + +#~ msgid "Not Reviewed" +#~ msgstr "" + +#~ msgid "Rejected" +#~ msgstr "" + +#~ msgid "Under Review" +#~ msgstr "" + +#~ msgid "Repository group no access" +#~ msgstr "" + +#~ msgid "Repository group read access" +#~ msgstr "" + +#~ msgid "Repository group write access" +#~ msgstr "" + +#~ msgid "Repository group admin access" +#~ msgstr "" + +#~ msgid "User group no access" +#~ msgstr "" + +#~ msgid "User group read access" +#~ msgstr "" + +#~ msgid "User group write access" +#~ msgstr "" + +#~ msgid "User group admin access" +#~ msgstr "" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "" + +#~ msgid "User Group creation disabled" +#~ msgstr "" + +#~ msgid "User Group creation enabled" +#~ msgstr "" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "repositories" +#~ msgstr "" + +#~ msgid "No repositories found." +#~ msgstr "" + +#~ msgid "There are no branches yet" +#~ msgstr "" + +#~ msgid "There are no tags yet" +#~ msgstr "" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "" + +#~ msgid "Update" +#~ msgstr "" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "" + +#~ msgid "%s Tags" +#~ msgstr "" + +#~ msgid "Compare Tags" +#~ msgstr "" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/pl/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/pl/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/pl/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" "PO-Revision-Date: 2015-04-04 09:08+0200\n" "Last-Translator: Andrew Shadura \n" "Language-Team: Polish " @@ -25,89 +25,100 @@ "X-Generator: Weblate 2.3-dev\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "Brak zestawienia zmian" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "Brak" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(zamknięty)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "pokazuj spacje" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "Ignoruj pokazywanie spacji" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "" -"Zmiana statusu na grupy zmian powiązania łączy zamkniętego wniosku jest " -"niedozwolona" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "Wybrane zmiany" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "Potwierdź blokowanie repozytorium" + +#: kallithea/controllers/compare.py:73 +msgid "Cannot compare repositories of different types" +msgstr "" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" -#: kallithea/controllers/error.py:71 +#: kallithea/controllers/error.py:70 #, fuzzy msgid "No response" msgstr "rewizja" -#: kallithea/controllers/error.py:72 +#: kallithea/controllers/error.py:71 msgid "Unknown error" msgstr "" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "" "Wniosek nie może być rozumiany przez serwer z powodu zniekształconej " "składni." -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "Nieautoryzowany dostęp do zasobów" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "Nie masz uprawnień do przeglądania tej strony" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "Zasób nie został znaleziony" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." @@ -115,367 +126,390 @@ "Serwer napotkał niespodziewany warunek, który uniemożliwia jej spełnienie" " żądania." -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "Zmiany w %s repozytorium" - -#: kallithea/controllers/feed.py:56 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "Lista zmian była zbyt duża i została ucięta..." + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "%s zakomitowal w %s" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 #, python-format msgid "%s %s feed" msgstr "%s %s zasilać" -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "Lista zmian była zbyt duża i została ucięta..." - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "%s zakomitowal w %s" - -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "Zmiany w %s repozytorium" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "Kliknij tutaj, by dodać nowy plik" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, fuzzy, python-format msgid "%s at %s" msgstr "w %s i %s" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "Repozytorium zostało zablokowane przez %s na %s" -#: kallithea/controllers/files.py:317 -#, fuzzy -#| msgid "You can only edit files with revision being a valid branch " +#: kallithea/controllers/files.py:309 +#, fuzzy msgid "You can only delete files with revision being a valid branch" msgstr "Można tylko edytować pliki z rewizji obecnej gałęzi " -#: kallithea/controllers/files.py:328 +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "Wystąpił błąd w trakcie zatwierdzania" -#: kallithea/controllers/files.py:377 -#, fuzzy -#| msgid "You can only edit files with revision being a valid branch " +#: kallithea/controllers/files.py:369 +#, fuzzy msgid "You can only edit files with revision being a valid branch" msgstr "Można tylko edytować pliki z rewizji obecnej gałęzi " -#: kallithea/controllers/files.py:391 +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "Edytowanie %s w Kallithea" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "Bez zmian" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "Committ wykonany do %s" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "Dodano %s poprzez Kallithea" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "Brak treści" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "Brak nazwy pliku" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "Lokalizacja musi być ścieżką względną i nie może zawierać .. ścieżki" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "Pobieranie wyłączone" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "Nieznana wersja %s" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "Puste repozytorium" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "Nieznany typ archiwum" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "Różnice" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "Gałęzie" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "Etykiety" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "Wystąpił błąd podczas rozgałęzienia %s repozytorium" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "Repozytoria" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "gałąź" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "Zamknięte Gałęzie" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "Tag" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "Bookmark" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "Dziennik Publiczny" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "Dziennik" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "Udało Ci się zarejestrować na stronie" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "Udało Ci się zarejestrować w %s" + +#: kallithea/controllers/login.py:193 #, fuzzy msgid "A password reset confirmation code has been sent" msgstr "Twój link zresetowania hasła został wysłany" -#: kallithea/controllers/login.py:246 +#: kallithea/controllers/login.py:242 #, fuzzy msgid "Invalid password reset token" msgstr "łącze resetowania hasła" -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "" -#: kallithea/controllers/pullrequests.py:124 +#: kallithea/controllers/pullrequests.py:73 +#, python-format +msgid "Invalid reviewer \"%s\" specified" +msgstr "" + +#: kallithea/controllers/pullrequests.py:135 #, python-format msgid "%s (closed)" msgstr "%s (zamknięty)" -#: kallithea/controllers/pullrequests.py:152 +#: kallithea/controllers/pullrequests.py:162 #: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 msgid "Changeset" msgstr "Grupy zmian" -#: kallithea/controllers/pullrequests.py:173 +#: kallithea/controllers/pullrequests.py:183 msgid "Special" msgstr "Specjalne" -#: kallithea/controllers/pullrequests.py:174 +#: kallithea/controllers/pullrequests.py:184 msgid "Peer branches" msgstr "gałęzie" -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 msgid "Bookmarks" msgstr "Zakładki" -#: kallithea/controllers/pullrequests.py:310 +#: kallithea/controllers/pullrequests.py:326 #, python-format msgid "Error creating pull request: %s" msgstr "" -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "Brak opisu" - -#: kallithea/controllers/pullrequests.py:363 +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 +msgid "Error occurred while creating pull request" +msgstr "Wystąpił błąd podczas prośby o połączenie gałęzi" + +#: kallithea/controllers/pullrequests.py:358 msgid "Successfully opened new pull request" msgstr "Prośba o wykonanie połączenia gałęzi została wykonana prawidłowo" -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 -#, python-format -msgid "Invalid reviewer \"%s\" specified" -msgstr "" - -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 -msgid "Error occurred while creating pull request" -msgstr "Wystąpił błąd podczas prośby o połączenie gałęzi" - -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "" - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "" - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" +#: kallithea/controllers/pullrequests.py:381 +#, fuzzy +#| msgid "Pull request update created" +msgid "New pull request iteration created" msgstr "Recenzje wniosków połączenia gałęzi" -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "Brak opisu" + +#: kallithea/controllers/pullrequests.py:439 #, fuzzy msgid "Pull request updated" msgstr "Połączone gałęzie" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "Prośba o skasowanie połączenia gałęzi została wykonana prawidłowo" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, python-format +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." -msgstr "" - -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +msgid "No additional changesets found for iterating on this pull request." +msgstr "" + +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "" - -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:571 +msgid "Git pull requests don't support iterating yet." +msgstr "" + +#: kallithea/controllers/pullrequests.py:573 +#, python-format +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 #, fuzzy msgid "No permission to change pull request status" msgstr "Zagłosuj na żądanie na grupę zmian" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "Zamknięcie." - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, fuzzy, python-format +msgid "Successfully deleted pull request %s" +msgstr "Prośba o skasowanie połączenia gałęzi została wykonana prawidłowo" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "Nieprawidłowe zapytania. Spróbuj zacytować go." -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "Nie ma szukanego indeksu. Proszę uruchomić indeksowanie whoosh" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "Wystąpił błąd podczas operacji wyszukiwania." -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 #, fuzzy msgid "No data ready yet" msgstr "Żadne dane nie zostały załadowane" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "Statystyki są wyłączone dla tego repozytorium" @@ -487,153 +521,157 @@ msgid "error occurred during update of auth settings" msgstr "wystapił błąd podczas uaktualniania ustawień autentykacji" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "Domyślne ustawienia zostały pomyślnie zaktualizowane" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "wystąpił błąd podczas aktualizacji wartości domyślnych" -#: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 #, fuzzy msgid "Forever" msgstr "na zawsze" -#: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 +#: kallithea/controllers/admin/gists.py:59 +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 msgid "5 minutes" msgstr "5 minut" +#: kallithea/controllers/admin/gists.py:60 +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" +msgstr "1 godzina" + #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" -msgstr "1 godzina" - -#: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 msgid "1 day" msgstr "1 dzień" -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/gists.py:62 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "1 miesiąc" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "Czas życia" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "Wystąpił błąd podczas tworzenia git" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "Usuń gist %s" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 #, fuzzy msgid "Unmodified" msgstr "Ostatnio modyfikowany" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" "Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej " "aplikacji" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "Twoje konto zostało pomyślnie zaktualizowane" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "wystąpił błąd podczas aktualizacji użytkownika %s" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "Dodano e-mail %s do użytkownika" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "Wystąpił błąd podczas zapisywania e-maila" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "Usunięto e-mail użytkownikowi" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "Odczyt" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" -msgstr "Zapis" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "Odczyt" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "Zapis" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -641,629 +679,649 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "Administracja" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "Wyłączone" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "Dozwolona z ręczną aktywacją konta" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "Dozwolona z automatyczną aktywacją konta" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "Ręczna aktywacja nowego konta" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "Automatyczna aktywacja nowego konta" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "Wyłączone" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "Dozwolona z ręczną aktywacją konta" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "Dozwolona z automatyczną aktywacją konta" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "Ręczna aktywacja nowego konta" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "Automatyczna aktywacja nowego konta" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "Włączone" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "Globalne uprawnienia zaktualizowane poprawnie" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "Wystąpił błąd podczas aktualizacji uprawnień" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "Wystąpił błąd podczas tworzenia grupy repo %s" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "Utworzono grupę repo %s" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "Zaktualizowano grupę repo %s" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "Wystąpił błąd podczas aktualizacji grupy repo %s" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "Ta grupa zawiera %s repozytorium i nie może być usunięta" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "Ta grupa zawiera %s repozytorium i nie może być usunięta" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "Usunięto grupę repo %s" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "Wystąpił błąd podczas usuwania z repozytorium grupy %s" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "Nie można cofnąć zezwolenia dla admina jako admin" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "Aktualizacja uprawnień grup repozytorium" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "Wystąpił błąd podczas cofania zezwolenia" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "utworzone repozytorium %s" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "utworzone repozytorium %s z %s" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "Gałęzi %s w repozytorium %s" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "Utworzone repozytorium %s" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "Repozytorium %s zostało pomyślnie zaktualizowane" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "Wystąpił błąd podczas aktualizacji repozytorium %s" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "Oderwane rozgałęzienie %s" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "Usunięte repozytorium %s" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "Usunięte repozytorium %s" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, fuzzy, python-format msgid "Cannot delete repository %s which still has forks" msgstr "Nie można usunąć %s nadal zawiera załączniki rozgałęzienia" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "Wystąpił błąd podczas usuwania %s" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "Uprawnienia repozytorium zostały zaktualizowane" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during creation of field" +msgid "An error occurred during creation of field: %r" msgstr "Wystąpił błąd podczas tworzenia użytkownika %s" -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "Wystąpił błąd podczas zapisywania e-maila" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "-- Brak rozgalezienia --" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "Zaktualizowano widoczność stron w publicznym dzienniku" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "Wystąpił błąd podczas ustawiania tego repozytorium w dzienniku publicznym" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "Brak" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "Oznaczono %s repo jako rozwidlenie %s" -#: kallithea/controllers/admin/repos.py:521 +#: kallithea/controllers/admin/repos.py:480 msgid "An error occurred during this operation" msgstr "Wystąpił błąd podczas tej operacji" -#: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 #, fuzzy msgid "Repository has been locked" msgstr "Repozytorium nie jest zablokowane" -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 #, fuzzy msgid "Repository has been unlocked" msgstr "Repozytorium nie jest zablokowane" -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 +#: kallithea/controllers/admin/repos.py:502 +#: kallithea/controllers/admin/repos.py:521 msgid "An error occurred during unlocking" msgstr "Wystąpił błąd podczas odblokowywania" -#: kallithea/controllers/admin/repos.py:582 +#: kallithea/controllers/admin/repos.py:533 msgid "Cache invalidation successful" msgstr "Cache wyczyszczony poprawnie" -#: kallithea/controllers/admin/repos.py:586 +#: kallithea/controllers/admin/repos.py:537 msgid "An error occurred during cache invalidation" msgstr "Wystąpił błąd podczas unieważniania cache" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "Pobieranie z lokalizacji zdalnej" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "Wystąpił błąd podczas pobierania z lokalizacji zdalnej" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "Wystąpił błąd podczas usuwania z repozytorium statystyk" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "Aktualizacja ustawień VCS" -#: kallithea/controllers/admin/settings.py:174 +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 msgid "" "Unable to activate hgsubversion support. The \"hgsubversion\" library is " "missing" msgstr "" -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 msgid "Error occurred while updating application settings" msgstr "Wystąpił błąd podczas aktualizacji ustawień aplikacji" -#: kallithea/controllers/admin/settings.py:211 +#: kallithea/controllers/admin/settings.py:174 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "" "Repozytoria z powodzeniem zostały ponownie zeskanowane dodano: %s, " "usunięto: %s." -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format #| msgid "Invalidate cache for all repositories" msgid "Invalidated %s repositories" msgstr "Unieważnia cache dla wszystkich repozytoriów" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "Aktualizacja ustawień aplikacji" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "Aktualizacja ustawień wizualizacji" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "Wystąpił błąd podczas aktualizacji ustawień wizualizacji" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "Proszę podać adres email" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "Dodano nowy hook" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "Aktualizacja hooku" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "Wystąpił błąd podczas tworzenia hooku" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "Zadanie ponownej indeksacji whoosh zostało zaplanowane" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "Utworzono grupę użytkowników %s" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "Wystąpił błąd podczas tworzenia grupy użytkowników %s" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "Zaktualizowano grupę użytkowników %s" -#: kallithea/controllers/admin/user_groups.py:224 +#: kallithea/controllers/admin/user_groups.py:208 #, python-format msgid "Error occurred during update of user group %s" msgstr "Wystąpił błąd podczas aktualizacji grupy użytkowników %s" -#: kallithea/controllers/admin/user_groups.py:242 +#: kallithea/controllers/admin/user_groups.py:219 msgid "Successfully deleted user group" msgstr "Grupa użytkowników została usunięta z powodzeniem" -#: kallithea/controllers/admin/user_groups.py:247 +#: kallithea/controllers/admin/user_groups.py:224 msgid "An error occurred during deletion of user group" msgstr "Wystąpił błąd podczas usuwania grupy użytkowników" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "Grupa docelowa nie może być taka sama" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "Aktualizacja uprawnień grupy użytkowników" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "Aktualizacja uprawnień" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "Wystąpił błąd podczas zapisywania uprawnień" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "Utworzono użytkownika %s" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "Wystąpił błąd podczas tworzenia użytkownika %s" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "Użytkownik został zaktualizowany" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "Użytkownik został usunięty" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "Wystąpił błąd podczas usuwania użytkownika" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "Dodano ip %s do listy dozwolonych adresów użytkownia" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "Wystąpił błąd podczas zapisywania e-maila" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "Usunięto adres ip z listy dozwolonych adresów dla użytkownika" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "Obserwatorzy %s" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "Musisz być zarejestrowanym użytkownikiem, żeby wykonać to działanie" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "Musisz być zalogowany, żeby oglądać stronę" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, fuzzy, python-format #| msgid "Changeset not found" msgid "Changeset for %s %s not found in %s" msgstr "Nie znaleziono changeset" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "Plik binarny" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" "Lista zmian była zbyt duża i została obcięta, użyj menu porównań żeby " "wyświetlić różnice" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "Nie wykryto zmian" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "Usunięta gałąź: %s" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "Utworzony tag: %s" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format #| msgid "Changeset not found" msgid "Changeset %s not found" msgstr "Nie znaleziono changeset" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Pokaż wszystkie zestawienia zmian changesets %s->%s" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 #, fuzzy msgid "Compare view" msgstr "Wyświetl porównanie" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "i" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "%s więcej" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "rewizja" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, fuzzy, python-format msgid "Fork name %s" msgstr "nazwa rozgałęzienia %s" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, fuzzy, python-format msgid "Pull request %s" msgstr "Połączonych gałęzi #%s" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "[usunięte] repozytorium" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "[utworzone] repozytorium" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "[utworzone] repozytorium jako rozgałęzienie" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "[rozgałęzione] repozytorium" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "[zaktualizowane] repozytorium" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "[pobierz] archiwum z repozytorium" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "[skasowane] repozytorium" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "[utworzony] użytkownik" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "[zaktualizowany] użytkownik" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "[utworzona] grupa użytkowników" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "[zaktualizowana] grupa użytkowników" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "[komentarz] do zmiany w repozytorium" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "[komentarz] wniosek o połączenie gałęzi" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "[zamknięty] wniosek o połączenie gałęzi" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "[wysłane zmiany] w" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "[synchronizacja przez Kallithea] z repozytorium" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "[pobieranie z zdalnego] do repozytorium" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "[pobrano]" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "[start następnego] repozytorium" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "[zatrzymany po] repozytorium" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr " i %s więcej" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "Brak plików" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "nowy plik" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "modyfikuj" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "kasuj" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "zmień nazwę" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "chmod" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1274,7 +1332,7 @@ "zmienione z systemie plików proszę uruchomić aplikację ponownie, aby " "ponownie przeskanować repozytoria" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" @@ -1282,7 +1340,7 @@ msgstr[1] "%d lata" msgstr[2] "%d lat" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" @@ -1290,7 +1348,7 @@ msgstr[1] "%d miesięcy" msgstr[2] "%d miesięcy" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" @@ -1298,7 +1356,7 @@ msgstr[1] "%d dni" msgstr[2] "%d dni" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" @@ -1306,7 +1364,7 @@ msgstr[1] "%d godziny" msgstr[2] "%d godzin" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" @@ -1314,7 +1372,7 @@ msgstr[1] "%d minuty" msgstr[2] "%d minut" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" @@ -1322,707 +1380,361 @@ msgstr[1] "%d sekund" msgstr[2] "%d sekund" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "w %s" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "%s temu" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "w %s i %s" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "%s i %s temu" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "przed chwilą" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "Brak dostępu do repozytorium" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "Repozytorium do odczytu" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "Repozytorium do zapisu" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "Administracja dostępu do repozytorium" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "Grupy repozytoriów brak dostępu" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "Grupy repozytoriów dostęp do odczytu" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "Grupy repozytoriów dostęp do zapisu" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "Repozytoria Grupy dostęp administratora" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "Administrator Repo" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "Tworzenie repozytorium jest wyłączone" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "Tworzenie repozytorium jest włączone" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "Rozwidlenie repozytorium wyłączone" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "Rozwidlenie repozytorium włączone" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "Rejestracja wyłączona" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "Rejestracja nowego użytkownika na stronie z ręczną aktywacją" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "Rejestracja nowego użytkownika na stronie z automatyczną aktywacją" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "Brak Korekty" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "Zaakceptowano" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "Odrzucono" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "Objęty Przeglądem" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "najwyższy poziom" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "Grupy repozytoriów brak dostępu" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "Grupy repozytoriów dostęp do odczytu" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "Grupy repozytoriów dostęp do zapisu" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "Repozytoria Grupy dostęp administratora" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "Ta grupa użytkowników nie ma dostępu" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "Dostęp do grupy parametrów użytkownika" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "Ta grupa użytkowników ma prawo do zapisu" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "Ta grupa użytkowników ma uprawnienia administratora" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "Tworzenie grup repozytoriów wyłączone" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "Tworzenie grup repozytoriów włączone" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "Tworzenie grup użytkowników wyłączone" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "Tworzenie grup użytkowników właczone" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "Rejestracja wyłączona" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "Rejestracja użytkownika z ręczną aktywacją konta" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "Rejestracja użytkownika z automatyczną aktywacją konta" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "widziany %s" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "[Wymieniony]" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "najwyższy poziom" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "Administrator Repo" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 #, fuzzy msgid "Default user has read access to new repositories" msgstr "Nieautoryzowany dostęp do zasobów" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 #, fuzzy msgid "Default user has write access to new repositories" msgstr "Nieautoryzowany dostęp do zasobów" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 #, fuzzy msgid "Only admins can create repository groups" msgstr "Utworzono grupę repo %s" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 #, fuzzy msgid "Non-admins can create repository groups" msgstr "Utworzono grupę repo %s" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 #, fuzzy msgid "Only admins can create user groups" msgstr "Tworzenie grup użytkowników" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 #, fuzzy msgid "Non-admins can create user groups" msgstr "Tworzenie grup użytkowników" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 #, fuzzy msgid "Only admins can fork repositories" msgstr "Ogólna liczba repozytoriów" -#: kallithea/model/db.py:1696 -#, fuzzy -#| msgid "Non-admins can can fork repositories" +#: kallithea/model/db.py:1745 +#, fuzzy msgid "Non-admins can fork repositories" msgstr "Unieważnia cache dla wszystkich repozytoriów" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "Rejestracja wyłączona" + +#: kallithea/model/db.py:1748 #, fuzzy msgid "User registration with manual account activation" msgstr "Rejestracja użytkownika z ręczną aktywacją konta" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 #, fuzzy msgid "User registration with automatic account activation" msgstr "Rejestracja użytkownika z automatyczną aktywacją konta" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 #, fuzzy msgid "Not reviewed" msgstr "Brak Korekty" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 #, fuzzy msgid "Under review" msgstr "Objęty Przeglądem" -#: kallithea/model/forms.py:57 +#: kallithea/model/db.py:2278 +#, fuzzy +#| msgid "Approved" +msgid "Not approved" +msgstr "Zaakceptowano" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "Zaakceptowano" + +#: kallithea/model/forms.py:58 msgid "Please enter a login" msgstr "Wpisz login" -#: kallithea/model/forms.py:58 +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "Wprowadź wartość %(min)i znaków lub więcej" -#: kallithea/model/forms.py:66 +#: kallithea/model/forms.py:67 msgid "Please enter a password" msgstr "Wpisz hasło" -#: kallithea/model/forms.py:67 +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "Wpisz %(min)i lub więcej znaków" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" -#: kallithea/model/notification.py:255 +#: kallithea/model/notification.py:240 #, fuzzy, python-format msgid "%(user)s commented on changeset %(age)s" msgstr "%(user)s skomentował zatwierdzenie %(when)s" -#: kallithea/model/notification.py:256 +#: kallithea/model/notification.py:241 #, fuzzy, python-format msgid "%(user)s sent message %(age)s" msgstr "%(user)s wysłał wiadomość do %(when)s" -#: kallithea/model/notification.py:257 +#: kallithea/model/notification.py:242 #, fuzzy, python-format msgid "%(user)s mentioned you %(age)s" msgstr "%(user)s wspomniał o Tobie w %(when)s" -#: kallithea/model/notification.py:258 +#: kallithea/model/notification.py:243 #, fuzzy, python-format msgid "%(user)s registered in Kallithea %(age)s" msgstr "%(user)s zarejestrował na stronie w %(when)s" -#: kallithea/model/notification.py:259 +#: kallithea/model/notification.py:244 #, fuzzy, python-format msgid "%(user)s opened new pull request %(age)s" msgstr "%(user)s otworzył nowe połączenie gałęzi w %(when)s" -#: kallithea/model/notification.py:260 +#: kallithea/model/notification.py:245 #, fuzzy, python-format msgid "%(user)s commented on pull request %(age)s" msgstr "%(user)s skomentował nowe połączenie gałęzi w %(when)s" -#: kallithea/model/notification.py:267 +#: kallithea/model/notification.py:252 #, python-format msgid "%(user)s commented on changeset at %(when)s" msgstr "%(user)s skomentował zatwierdzenie %(when)s" -#: kallithea/model/notification.py:268 +#: kallithea/model/notification.py:253 #, python-format msgid "%(user)s sent message at %(when)s" msgstr "%(user)s wysłał wiadomość do %(when)s" -#: kallithea/model/notification.py:269 +#: kallithea/model/notification.py:254 #, python-format msgid "%(user)s mentioned you at %(when)s" msgstr "%(user)s wspomniał o Tobie w %(when)s" -#: kallithea/model/notification.py:270 +#: kallithea/model/notification.py:255 #, python-format msgid "%(user)s registered in Kallithea at %(when)s" msgstr "%(user)s zarejestrował na stronie w %(when)s" -#: kallithea/model/notification.py:271 +#: kallithea/model/notification.py:256 #, python-format msgid "%(user)s opened new pull request at %(when)s" msgstr "%(user)s otworzył nowe połączenie gałęzi w %(when)s" -#: kallithea/model/notification.py:272 +#: kallithea/model/notification.py:257 #, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "%(user)s skomentował nowe połączenie gałęzi w %(when)s" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, fuzzy, python-format +#| msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "[komentarz] wniosek o połączenie gałęzi" + +#: kallithea/model/notification.py:291 #, fuzzy, python-format msgid "New user %(new_username)s registered" msgstr "Użytkownik %(new_username)s zarejestrował" -#: kallithea/model/notification.py:308 -#, fuzzy, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "%(user)s chce żeby przejrzeć nowe gałęzie #%(pr_id)s: %(pr_title)s" - -#: kallithea/model/notification.py:309 -#, fuzzy, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "[komentarz] wniosek o połączenie gałęzi" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 #, fuzzy msgid "Closing" msgstr "Używa:" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, fuzzy, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "%(user)s chce żeby przejrzeć nowe gałęzie #%(pr_id)s: %(pr_title)s" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +#, fuzzy +#| msgid "Create Pull Request" +msgid "Cannot create empty pull request" +msgstr "Stwórz nowe żądanie połączenia gałęzi" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +#, fuzzy +#| msgid "Confirm to delete this pull request" +msgid "You are not authorized to create the pull request" +msgstr "Potwierdź usunięcie połączenia gałęzi" + +#: kallithea/model/pull_request.py:341 +msgid "Missing changesets since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:348 +#, python-format +msgid "New changesets on %s %s since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, python-format +msgid "No changes found on %s %s since previous iteration." +msgstr "" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "ostatni tip" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "nowy użytkownik się zarejestrował" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 #, fuzzy msgid "You can't remove this user since it is crucial for the entire application" msgstr "" "Nie możesz usunąć tego użytkownika ponieważ jest kluczowy dla całej " "aplikacji" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, fuzzy, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " @@ -2031,7 +1743,7 @@ "użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może " "zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, fuzzy, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" @@ -2040,7 +1752,7 @@ "użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może " "zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, fuzzy, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " @@ -2049,37 +1761,37 @@ "użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może " "zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "łącze resetowania hasła" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 #, fuzzy msgid "Password reset notification" msgstr "łącze resetowania hasła" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "Wartość listy nie może być pusta" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "Użytkownik \"%(username)s\" już istnieje" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, fuzzy, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "Nazwa użytkownika %(username)s jest nieprawidłowa" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 #, fuzzy msgid "" "Username may only contain alphanumeric characters underscores, periods or" @@ -2089,25 +1801,25 @@ " kropki lub myślniki i muszą zaczynać się znakiem alfanumerycznym lub " "podkreśleniem" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "Nazwa użytkownika %(username)s jest nieprawidłowa" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "Niewłaściwa nazwa grupy" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "Nazwa grupy \"%(usergroup)s\" już istnieje" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" @@ -2115,107 +1827,107 @@ "nazwa grupy może zawierać tylko znaki alfanumeryczne, podkreślenia, " "kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "Nie można przypisać do tej grupy jako rodzic" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "Nazwa grupy \"%(group_name)s\" już istnieje" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "Repozytorium o nazwie \"%(group_name)s\" już istnieje" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "Nieprawidłowe znaki (nie-ascii) w haśle" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "Hasła różnią się" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 #, fuzzy msgid "Invalid username or password" msgstr "nieprawidłowe hasło" -#: kallithea/model/validators.py:331 +#: kallithea/model/validators.py:310 msgid "Token mismatch" msgstr "Niezgodność tokenu" -#: kallithea/model/validators.py:345 +#: kallithea/model/validators.py:326 #, fuzzy, python-format msgid "Repository name %(repo)s is not allowed" msgstr "Nazwa repozytorium %(repo)s jest zabroniona" -#: kallithea/model/validators.py:347 +#: kallithea/model/validators.py:328 #, python-format msgid "Repository named %(repo)s already exists" msgstr "Repozytorium o nazwie %(repo)s już istnieje" -#: kallithea/model/validators.py:348 +#: kallithea/model/validators.py:329 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "Repozytorium \"%(repo)s\" już istnieje w grupie \"%(group)s\"" -#: kallithea/model/validators.py:350 +#: kallithea/model/validators.py:331 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "Grupa repozytoriów z nazwą \"%(repo)s\" już istnieje" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 #, fuzzy msgid "Invalid repository URL" msgstr "prywatne repozytorium" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "Fork musi być tego samego typu, jak rodzic" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "Nie masz uprawnień do tworzenia repozytorium w tej grupie" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "nie masz uprawnień do tworzenia repozytorium w tej grupie" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "Nie masz uprawnień do tworzenia repozytorium w tej grupie" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "Ta nazwa użytkownika lub grupy użytkowników nie jest prawidłowa" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "To nie jest prawidłowa ścieżka" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 #, fuzzy msgid "This email address is already in use" msgstr "Ten adres e-mail jest już zajęty" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, fuzzy, python-format msgid "Email address \"%(email)s\" not found" msgstr "e-mail \"%(email)s\" nie istnieje." -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" @@ -2223,404 +1935,410 @@ "Atrybut logowania CN do LDAP należy określić, jest to nazwa atrybutu, " "który jest odpowiednikiem \"username\"" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "Proszę podać poprawny adres IPv4 lub IPv6" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "Rozmiar sieci (bits) może mieścić się w zakresie od 0-32 (nie %(bits)r)" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" "Klucz nazwy może składać się tylko z liter, podkreślenia, myślnika lub " "numerów" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "Nazwa pliku nie może znajdować się w katalogu" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "Repozytorium" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "szybki filtr..." - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "repozytoria" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "Dodaj Repozytorium" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "Dodaj Grupę Repozytoriów" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "Jako administrator uprawnienia tej grupy, i możesz je edytować" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "Edytuj Grupę Repozytoriów" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "Nazwa Grupy" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository group" +msgid "Repository Group" +msgstr "Repozytorium grupy" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "Opis" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "Nazwa" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "Repozytorium" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "Ostatnia akytwność" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "Ostatnia zmiana" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "Właściciel" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "Kliknij, aby posortować rosnąco" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "Kliknij, aby posortować malejąco" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "Nie znaleziono repozytorium." - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "Błąd danych." - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "Wczytywanie..." - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "Zaloguj się" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "Zaloguj się do %s" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "Nazwa użytkownika" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "Hasło" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "Zapamiętaj mnie" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "Zapomniałeś hasła?" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "Nie masz konta?" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "Zaloguj się" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "Łącze resetowania hasła" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, fuzzy, python-format msgid "Reset Your Password to %s" msgstr "Zapomniałeś hasła do %s?" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 #, fuzzy msgid "Reset Your Password" msgstr "Zapomniałeś hasła?" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "Adres Email" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 #, fuzzy msgid "Send Password Reset Email" msgstr "łącze resetowania hasła" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 #, fuzzy msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "Link do zresetowania hasła zostanie wysłany na adres e-mail" -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 #, fuzzy msgid "New Password" msgstr "Nowe hasło" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 #, fuzzy msgid "Confirm New Password" msgstr "Nowe hasło" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "Zarejestruj się" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "Ponownie wprowadź hasło" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "Imię" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "Nazwisko" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "E-mail" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "Nie ma jeszcze gałęzi" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "Zamknięte Gałęzie" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "Nie ma jeszcze tagów" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "Nie ma jeszcze zakładek" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 #, fuzzy msgid "Admin Journal" msgstr "Dziennik administratora" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "szybkie wyszukiwanie..." #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 #, fuzzy msgid "Filter" msgstr "filtr" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, fuzzy, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2629,116 +2347,138 @@ msgstr[2] "%s wejść" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "Działanie" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "Repozytorium" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "Data" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "Z IP" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "Brak akcji" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "Ustawienia Autentykacji" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "Autentykacja" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "Wtyczki Autentykacji" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "Włączone Wtyczki" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "Wtyczka" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "Zapisz" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 #, fuzzy msgid "Repository Defaults" msgstr "Repozytoria domyślne" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "Typ" -#: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 msgid "Private repository" msgstr "Prywatne repozytorium" -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -2746,34 +2486,40 @@ "Prywatne repozytoria są widoczne tylko dla osób bezpośrednio dodanych " "jako współpracownicy." -#: kallithea/templates/admin/defaults/defaults.html:53 -#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 msgid "Enable statistics" msgstr "Włącz statystyki" -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 msgid "Enable statistics window on summary page." msgstr "Włącz okno statystyk na stronie podsumowania." -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 msgid "Enable downloads" msgstr "Włącz pobieranie" -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 msgid "Enable download menu on summary page." msgstr "Włącz menu pobierania na stronie podsumowania." -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 msgid "Enable locking" msgstr "Włącz blokowanie" -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "Włącz blokowanie pobierania w repozytorium." @@ -2782,45 +2528,63 @@ msgid "Edit Gist" msgstr "Edytuj Gist" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "Opis Gist ..." -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "Trwałość Gist" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "Wygasa" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 #, fuzzy msgid "Never" msgstr "nigdy" @@ -2830,280 +2594,413 @@ msgstr "Zaktualizuj Gist" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "Anuluj" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, fuzzy, python-format msgid "Private Gists for User %s" msgstr "Prywatne Gists użytkownika %s" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, fuzzy, python-format msgid "Public Gists for User %s" msgstr "Publiczne Gists użytkownika %s" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "Publiczne Gists" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "Utwórz Nowy Gist" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "Utworzono" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "Nie ma jeszcze żadnych gists" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "Nowy Gist" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "Utwórz Prywatny Gist" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "Utwórz Publiczny Gist" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "Zresetuj" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "Gist" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "Adres URL" -#: kallithea/templates/admin/gists/show.html:37 +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 msgid "Public Gist" msgstr "Publiczny Gist" -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/templates/admin/gists/show.html:37 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "Prywatny Gist" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "Usuń" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "Potwierdź aby usunąć ten Gist" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "Edycja" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "Edycja" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "utworzono" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "wyświetl jako raw" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "Moje konto" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "Profil" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 #, fuzzy msgid "Email Addresses" msgstr "Nowy adres e-mail" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 #, fuzzy msgid "Owned Repositories" msgstr "repozytoria" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 #, fuzzy msgid "Watched Repositories" msgstr "Utwórz repozytorium" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 #, fuzzy msgid "Show Permissions" msgstr "Skopiuj uprawnienia" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, fuzzy, python-format msgid "Confirm to reset this API key: %s" msgstr "Potwierdź, aby usunąć to ip: %s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 #, fuzzy msgid "Expired" msgstr "Wygasa" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, fuzzy, python-format msgid "Confirm to remove this API key: %s" msgstr "Potwierdź, aby usunąć to ip: %s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 #, fuzzy msgid "Remove" msgstr "Usunięto" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 #, fuzzy msgid "No additional API keys specified" msgstr "Brak dodatkowych emaili" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 #, fuzzy msgid "New API key" msgstr "Nowe pole klucza" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "Dodaj" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "Główny" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "Potwierdź, aby usunąć ten e-mail: %s" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 #, fuzzy msgid "No additional emails specified." msgstr "Brak dodatkowych emaili" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "Nowy adres e-mail" @@ -3112,136 +3009,179 @@ msgid "Change Your Account Password" msgstr "Nowe hasło" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "Nowe hasło" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, fuzzy, python-format +#| msgid "Change your avatar at" +msgid "Change %s avatar at" msgstr "Zmiana awataru na" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "Używa" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "Avatary są wyłączone" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 #, fuzzy msgid "Repositories You Own" msgstr "Nie znaleziono repozytorium." -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." -msgstr "Nie znaleziono rekordów." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "Nazwa" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 #, fuzzy msgid "Repositories You are Watching" msgstr "Położenie repozytorium" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "Opcje powiadomień" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "Wszystkie" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "Komentarze" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "Połączone gałęzie" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 #, fuzzy msgid "Mark All Read" msgstr "Oznacz wszystko jako przeczytane" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +#, fuzzy +#| msgid "Mark All Read" +msgid "Mark as read" +msgstr "Oznacz wszystko jako przeczytane" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "Brak powiadomień" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 #, fuzzy msgid "Show Notification" msgstr "Pokaż powiadomienia" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "Powiadomienia" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 #, fuzzy msgid "Default Permissions" msgstr "Domyślne uprawnienia" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "Globalne" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 #, fuzzy msgid "IP Whitelist" msgstr "Lista dozwolonych adresów IP" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "Dostęp anonimowy" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " @@ -3251,24 +3191,30 @@ "Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie " "niestandardowe uprawnienia w repozytoriach zostaną utracone" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "Istniejące repozytorium?" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "Repozytorium grupy" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " @@ -3278,21 +3224,26 @@ "Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie " "niestandardowe uprawnienia w repozytoriach zostaną utracone" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 #, fuzzy msgid "Apply to all existing repository groups" msgstr "Usuń ta grupę repozytoriów" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "Grupa użytkownika" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 #, fuzzy msgid "" "All default permissions on each user group will be reset to chosen " @@ -3304,108 +3255,137 @@ "niestandardowe uprawnienia domyślne dla grup repozytorium zostaną " "utracone" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 msgid "Permissions for the Default user on new user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 #, fuzzy msgid "Top level repository creation" msgstr "Tworzenie repozytorium" -#: kallithea/templates/admin/permissions/permissions_globals.html:64 +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 msgid "Enable this to allow non-admins to create repositories at the top level." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:65 +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 msgid "" "Note: This will also give all users API access to create repositories " "everywhere. That might change in future versions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "Tworzenie grupy użytkowników" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "Rozwidlanie repozytorium" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "Rejestracja" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "Autoryzacja aktywacji zewnętrznego konta" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "Potwierdź, aby usunąć to ip: %s" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 #, fuzzy msgid "All IP addresses are allowed." msgstr "Wszystkie adresy IP są dozwolone" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "Nowy adres ip" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "Grupy Repozytoriów" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "Nazwa grupy" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "Rodzic gropy" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3414,31 +3394,42 @@ msgid "%s Repository Group Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "Ustawienia" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "Zaawansowane" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "Uprawnienia" @@ -3462,12 +3453,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "Utworzono" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3479,8 +3472,30 @@ msgid "Delete this repository group" msgstr "Usuń ta grupę repozytoriów" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#, fuzzy +#| msgid "Disabled" +msgid "Visible" +msgstr "Wyłączone" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "Add Repository" +msgid "Add repos" +msgstr "Dodaj Repozytorium" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +#, fuzzy +#| msgid "Add user group" +msgid "Add/Edit groups" +msgstr "Dodaj grupę użytkowników" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 #, fuzzy msgid "User/User Group" @@ -3488,8 +3503,8 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 #, fuzzy @@ -3498,36 +3513,36 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 #, fuzzy msgid "Revoke" msgstr "odwołane" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "Dodaj nowe" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 #, fuzzy msgid "Apply to children" msgstr "dotyczy dzieci" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "Oba" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" @@ -3535,73 +3550,85 @@ "Włącz blokowanie pobierania przez grupy. Opcja ta będzie stosowana do " "wszystkich innych grup i repozytoriów wewnątrz" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 #, fuzzy msgid "Remove this group" msgstr "Tworzenie grup użytkowników" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 #, fuzzy msgid "Confirm to delete this group" msgstr "Potwierdź usunięcie grupy użytkowników: %s" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "Repository Group: %s" +msgid "Repository group %s" +msgstr "Grupa Repozytoriów: %s" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "Strona Główna" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "używając" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 #, fuzzy msgid "Repository Groups Administration" msgstr "Repozytoria grup administracyjnych" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 #, fuzzy msgid "Number of Top-level Repositories" msgstr "Liczba najwyższego poziomu repozytorium" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "[utworzone] repozytorium" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "Powinna być krótka i na temat. Użyj pliku README dla dłuższych opisów." -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "Opcjonalnie wybierz grupę do wprowadzenia tego repozytorium." -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "Rodzaj repozytorium do stworzenia." -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "Docelowa rewizja" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3630,61 +3657,74 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, fuzzy, python-format msgid "%s Repository Settings" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 #, fuzzy msgid "Extra Fields" msgstr "Dodatkowe pola" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "Zdalnie" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "Statystyki" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 #, fuzzy msgid "Parent" msgstr "Rodzic gropy" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "Ustaw" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 #, fuzzy msgid "Manually set this repository as a fork of another from the list." msgstr "Ręczne ustawienie rozwidlenia z listy" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 #, fuzzy msgid "Public Journal Visibility" msgstr "Dziennik publiczny" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "Usuń z dziennika publicznego" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 #, fuzzy msgid "Add to Public Journal" msgstr "Dziennik publiczny" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 #, fuzzy msgid "" "All actions done in this repository will be visible to everyone in the " @@ -3693,41 +3733,49 @@ "Wszystkie działania wykonywane na tym repozytorium będą dostępne dla " "wszystkich w dzienniku publicznym" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 #, fuzzy msgid "Change Locking" msgstr "Włącz blokowanie" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 #, fuzzy msgid "Confirm to unlock repository." msgstr "Potwierdź odblokowanie repozytorium" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 #, fuzzy msgid "Unlock Repository" msgstr "Odblokowane repozytorium" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 #, python-format msgid "Locked by %s on %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 #, fuzzy msgid "Confirm to lock repository." msgstr "Potwierdź blokowanie repozytorium" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 #, fuzzy msgid "Lock Repository" msgstr "Odblokowane repozytorium" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "Repozytorium nie jest zablokowane" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3735,18 +3783,22 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "Potwierdź usunięcie repozytorium: %s" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 #, fuzzy msgid "Delete this Repository" msgstr "Usuń ta grupę repozytoriów" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, fuzzy, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" @@ -3754,15 +3806,18 @@ msgstr[1] "to repozytorium ma %s forki" msgstr[2] "to repozytorium ma %s forków" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "Ustaw jako rozwidlenie" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "Usuń rozwidlenie" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3774,12 +3829,7 @@ msgid "Invalidate Repository Cache" msgstr "Unieważnij pamięć podręczną repozytorium" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -#, fuzzy -msgid "Confirm to invalidate repository cache." -msgstr "Potwierdź unieważnienie pamięci podręcznej repozytorium" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 #, fuzzy msgid "" "Manually invalidate cache for this repository. On first access, the " @@ -3788,102 +3838,112 @@ "Ręcznie unieważnienie cache dla tego repozytorium. Przy pierwszym " "dostępie do repozytorium zostanie dodany do bufora ponownie" -#: kallithea/templates/admin/repos/repo_edit_caches.html:12 +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 #, fuzzy msgid "List of Cached Values" msgstr "Lista buforowanych wartości" -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 +#: kallithea/templates/admin/repos/repo_edit_caches.html:12 msgid "Prefix" msgstr "Prefiks" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "Klucz" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "Aktywny" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "Potwierdź, aby usunąć to pole: %s" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "Nowe pole klucza" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "Nowa etykieta pola" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "Wpisz krótką etykietę" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "Nowy opis pola" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "Wprowadź opis pola" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 #, fuzzy msgid "Extra fields are disabled." msgstr "Avatary są wyłączone" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 #, fuzzy msgid "Private Repository" msgstr "prywatne repozytorium" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "[forked] repository" +msgid "Fork of repository" +msgstr "[rozgałęzione] repozytorium" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 #, fuzzy msgid "Remote repository URL" msgstr "Utworzone repozytorium %s" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 #, fuzzy msgid "Pull Changes from Remote Repository" msgstr "[pobieranie z zdalnego] do repozytorium" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 #, fuzzy msgid "Confirm to pull changes from remote repository." msgstr "Potwierdź pull z zdalnej strony" -#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 #, fuzzy msgid "Permanent Repository ID" msgstr "prywatne repozytorium" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3893,35 +3953,35 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 #, fuzzy msgid "Remote repository" msgstr "[utworzone] repozytorium" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 #, fuzzy msgid "Repository URL" msgstr "Repozytorium" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "Wersja domyślna dla plików stronicowania, pobierania plików, readme" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "Zmiana właściciela tego repozytorium." -#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 msgid "Processed commits" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 msgid "Processed progress" msgstr "" @@ -3936,285 +3996,339 @@ msgstr "Potwierdź usunięcie aktualnych statystyk" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 #, fuzzy msgid "Repositories Administration" msgstr "Administracja repozytoriami" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 #, fuzzy msgid "Settings Administration" msgstr "Ustawienia administracji" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "Aktualizacja" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "Wyślij" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "Nazwa strony" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "Sfera uwierzytelniania HTTP" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 #, fuzzy msgid "Save Settings" msgstr "Zapisz ustawienia" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 #, fuzzy msgid "Custom Hooks" msgstr "Niestandardowa aktualizacja" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "Nie udało się usunąć hooka" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" +#: kallithea/templates/admin/settings/settings_mapping.html:4 +#, fuzzy +#| msgid "Rescan option" +msgid "Rescan options" msgstr "ponowne skanowanie opcji" -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 #, fuzzy msgid "Delete records of missing repositories" msgstr "Szukaj we wszystkich repozytoriach" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "Unieważnia cache dla wszystkich repozytoriów" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 #, fuzzy msgid "Check this to reload data and clear cache keys for all repositories." msgstr "Unieważnia cache dla wszystkich repozytoriów" -#: kallithea/templates/admin/settings/settings_mapping.html:23 +#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 msgid "Install Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "Opcja odbudowy indeksowania" -#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 msgid "Build from scratch" msgstr "Buduj od podstaw" -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "Indeksuj ponownie" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Kallithea version" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." msgstr "" #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Kallithea version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 -#, fuzzy -msgid "Git version" -msgstr "Edycja Uprawnień" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" +msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:10 -msgid "Upgrade info endpoint" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +#, fuzzy +msgid "Git version" +msgstr "Edycja Uprawnień" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 +msgid "Upgrade info endpoint" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "www" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "Wymagaj ssl dla operacji vcs" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "Pokaż rozmiar repozytorium po wysłaniu zmian" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "Logi poleceń wysłania zmian użytkowników" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "Logi poleceń połączenia gałęzi użytkowników" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "Aktualizacja repozytorium po wysłaniu zmian (aktualizacja hg)" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 #, fuzzy msgid "Mercurial extensions" msgstr "Rozszerzenia Mercurial" -#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 msgid "Enable largefiles extension" msgstr "Rozszerzenia dużych pliów" -#: kallithea/templates/admin/settings/settings_vcs.html:51 +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 msgid "Enable hgsubversion extension" msgstr "Rozszerzenia hgsubversion" -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 #, fuzzy msgid "Location of repositories" msgstr "Ogólna liczba repozytoriów" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." @@ -4222,37 +4336,44 @@ "Kliknij, aby odblokować. Musisz ponownie uruchomić Kallithea żeby " "wprowadzić to ustawienie w życie." -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "Główne" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "Używaj w repozytorium dodatkowych pól" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "Umożliwia przechowywanie dodatkowych niestandardowych pól w repozytorium." -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "Pokaż wersję Kallithea" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4269,103 +4390,128 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +#, fuzzy +msgid "Clone URL" +msgstr "Url klonowania" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "Pozycja panelu" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repository Size" +msgid "Repository page size" +msgstr "Rozmiar Repozytorium" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "Ikony" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "Pokazuj w publicznym repo ikonę w repozytoriach" -#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 msgid "Show private repository icon on repositories" msgstr "Pokazuj w prywatnym repo ikonę w repozytoriach" -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 #, fuzzy msgid "Show public/private icons next to repository names." msgstr "Pokazuj w publicznym repo ikonę w repozytoriach" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 #, fuzzy msgid "Meta Tagging" msgstr "Tagowanie meta" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "Dodaj grupę użytkowników" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 #, fuzzy msgid "Show Members" msgstr "użytkownik" @@ -4376,13 +4522,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "Użytkownik" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "Potwierdź usunięcie grupy użytkowników: %s" @@ -4391,49 +4539,60 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "Nie ma jeszcze żadnego użytkownika" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "Wybrane grupy użytkowników" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "Dostępni użytkownicy" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 #, fuzzy msgid "User Groups Administration" msgstr "Użytkownicy grupy administracji" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "Dodaj użytkownika" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "Użytkownicy" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "Potwierdzenie hasła" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4443,12 +4602,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4457,7 +4618,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "Potwierdź usunięcie tego użytkownika: %s" @@ -4466,421 +4628,478 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "Potwierdzenie nowego hasła" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 #, fuzzy msgid "Users Administration" msgstr "Administracja użytkownikami" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "Wystąpienia serwera: %s" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "Repozytorium mercurial" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "Repozytorium git" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 #, fuzzy msgid "Create Fork" msgstr "Usuń rozwidlenie" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "Podsumowanie" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "Dziennik zmian" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "Pliki" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "Przełącz do" - -#: kallithea/templates/base/base.html:145 -#: kallithea/templates/base/base.html:147 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 msgid "Options" msgstr "Opcje" -#: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 #, fuzzy msgid "Compare Fork" msgstr "Porównaj rozwidlenie" -#: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 msgid "Compare" msgstr "Porównaj" -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 #: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 msgid "Search" msgstr "Szukaj" -#: kallithea/templates/base/base.html:163 +#: kallithea/templates/base/base.html:155 +#: kallithea/tests/data/templates/base/base.html.py:399 msgid "Unlock" msgstr "Odblokowany" +#: kallithea/templates/base/base.html:157 +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" +msgstr "zablokowane" + #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "zablokowane" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "Obserwuj" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "Nie obserwuj" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "Gałąź" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "Stwórz nowe żądanie połączenia gałęzi" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "Pokaż Prośby Pobrania %s" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "Przełącz do" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "Pokaż ostatnią aktywność" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "Dziennik publiczny" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "Wyświetl publiczne gists" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "Gists" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 #, fuzzy msgid "All Public Gists" msgstr "Wszystkie publiczne gists" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 #, fuzzy msgid "My Public Gists" msgstr "Moje publiczne gists" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 #, fuzzy msgid "My Private Gists" msgstr "Moje prywatne gists" -#: kallithea/templates/base/base.html:246 +#: kallithea/templates/base/base.html:319 +#: kallithea/tests/data/templates/base/base.html.py:540 msgid "Search in repositories" msgstr "Szukaj we wszystkich repozytoriach" -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 #: kallithea/templates/pullrequests/pullrequest_show_my.html:6 #: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 #, fuzzy msgid "My Pull Requests" msgstr "Połączone gałęzie" -#: kallithea/templates/base/base.html:289 +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 #, fuzzy msgid "Not Logged In" msgstr "Zaloguj się" -#: kallithea/templates/base/base.html:296 +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 #, fuzzy msgid "Login to Your Account" msgstr "Zaloguj się do swojego konta" -#: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" +#: kallithea/templates/base/base.html:385 +#, fuzzy +#| msgid "Forgot password ?" +msgid "Forgot password?" msgstr "Nie pamiętasz hasła?" -#: kallithea/templates/base/base.html:346 +#: kallithea/templates/base/base.html:389 +#, fuzzy +#| msgid "Don't have an account ?" +msgid "Don't have an account?" +msgstr "Nie masz konta?" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "Wyloguj się" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 #, fuzzy msgid "Inherit defaults" msgstr "Repozytoria domyślne" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "Utwórz repozytorium" -#: kallithea/templates/base/default_perms_box.html:33 +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 msgid "Select this option to allow repository creation for this user" msgstr "" "Wybierz tę opcję, aby umożliwić stworzenie repozytorium dla tego " "użytkownika" -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/templates/base/default_perms_box.html:33 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "Tworzenie grup użytkowników" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" "Wybierz tę opcję, aby umożliwić utworzenie grupy użytkowników dla tego " "użytkownika" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "Rozwidlenie repozytorium" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" "Wybierz tę opcję, aby umożliwić rozwidlania repozytorium dla tego " "użytkownika" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "Wyświetl" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "Nie ma jeszcze ustawionych uprawnień" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "Uprawnienia" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "Edycja Uprawnień" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 +#: kallithea/templates/base/root.html:25 +#: kallithea/tests/data/templates/base/root.html.py:85 #, fuzzy msgid "Add Another Comment" msgstr "Dodaj kolejny komentarz" -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 +#: kallithea/templates/base/root.html:26 +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 msgid "Stop following this repository" msgstr "Zakończyć obserwację tego repozytorium" -#: kallithea/templates/base/root.html:24 +#: kallithea/templates/base/root.html:27 +#: kallithea/tests/data/templates/base/root.html.py:89 msgid "Start following this repository" msgstr "Zacznij obserwację tego repozytorium" -#: kallithea/templates/base/root.html:25 +#: kallithea/templates/base/root.html:28 +#: kallithea/tests/data/templates/base/root.html.py:91 msgid "Group" msgstr "Grupa" -#: kallithea/templates/base/root.html:26 +#: kallithea/templates/base/root.html:29 +#: kallithea/tests/data/templates/base/root.html.py:93 msgid "members" msgstr "użytkownik" -#: kallithea/templates/base/root.html:27 +#: kallithea/templates/base/root.html:30 +#: kallithea/tests/data/templates/base/root.html.py:95 msgid "Loading ..." msgstr "Ładuję..." -#: kallithea/templates/base/root.html:28 +#: kallithea/templates/base/root.html:31 +#: kallithea/tests/data/templates/base/root.html.py:97 msgid "loading ..." msgstr "ładuję ..." -#: kallithea/templates/base/root.html:29 +#: kallithea/templates/base/root.html:32 +#: kallithea/tests/data/templates/base/root.html.py:99 msgid "Search truncated" msgstr "Szukaj obcięte" -#: kallithea/templates/base/root.html:30 +#: kallithea/templates/base/root.html:33 +#: kallithea/tests/data/templates/base/root.html.py:101 msgid "No matching files" msgstr "Nie ma plików pasujących" -#: kallithea/templates/base/root.html:31 +#: kallithea/templates/base/root.html:34 +#: kallithea/tests/data/templates/base/root.html.py:103 #, fuzzy msgid "Open New Pull Request from {0}" msgstr "Komentarz połączenia gałęzi %s" -#: kallithea/templates/base/root.html:32 +#: kallithea/templates/base/root.html:35 +#: kallithea/tests/data/templates/base/root.html.py:105 msgid "Open New Pull Request for {0} → {1}" msgstr "" -#: kallithea/templates/base/root.html:33 +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 #, fuzzy msgid "Show Selected Changesets {0} → {1}" msgstr "Pokaż wybrane zmiany __S -> __E" -#: kallithea/templates/base/root.html:34 +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 #, fuzzy msgid "Selection Link" msgstr "Wybór linku" -#: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 +#: kallithea/templates/base/root.html:38 +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 #, fuzzy msgid "Collapse Diff" msgstr "Pliki różnic" -#: kallithea/templates/base/root.html:36 +#: kallithea/templates/base/root.html:39 +#: kallithea/tests/data/templates/base/root.html.py:113 #, fuzzy msgid "Expand Diff" msgstr "poprawka różnic" -#: kallithea/templates/base/root.html:37 +#: kallithea/templates/base/root.html:40 +#: kallithea/tests/data/templates/base/root.html.py:115 msgid "Failed to revoke permission" msgstr "Nie udało się cofnąć uprawnienia" -#: kallithea/templates/base/root.html:38 +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 #, fuzzy msgid "Confirm to revoke permission for {0}: {1} ?" msgstr "potwierdzić odwołanie pozwolenie na {0}: {1} ?" -#: kallithea/templates/base/root.html:39 -msgid "enabled" -msgstr "" - -#: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "" - -#: kallithea/templates/base/root.html:42 +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "Wybrane zmiany" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 #, fuzzy msgid "Specify changeset" msgstr "Wybrane zmiany" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "%s Zakładki" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "Autor" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "Rewizja" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "%s Gałęzie" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" -msgstr "" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "Kliknij, aby posortować rosnąco" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "Kliknij, aby posortować malejąco" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "Nie znaleziono rekordów." + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "Błąd danych." + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." +msgstr "Wczytywanie..." #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "%s Dziennik zmian" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" @@ -4888,208 +5107,291 @@ msgstr[1] "pokazano %d z %d rewizji" msgstr[2] "pokazano %d z %d rewizji" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "Wyczyść zaznaczenie" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 #, fuzzy msgid "Go to tip of repository" msgstr "Potwierdź blokowanie repozytorium" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "porównaj gałęzie %s" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, fuzzy, python-format msgid "Compare fork with parent repository (%s)" msgstr "porównaj gałęzie %s" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 #, fuzzy msgid "Branch filter:" msgstr "filtr" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, fuzzy, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "Status grupy zmian: %s⏎ Kliknij, aby otworzyć prośby pobrania #%s" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, fuzzy, python-format +msgid "Changeset status: %s by %s" msgstr "Status grupy zmian: %s" -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "Komentarze Grupy zmian" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "Zakładki %s" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "Tagi %s" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "Gałęzie %s" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "Nie ma jeszcze zmian" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "Usunięto" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "Zmiana" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "Dodana" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "Zarażone pliki %s" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "Rewizja" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "Ostatnia zmiana" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "Autor" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "Gałąź/Etykieta" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "Dodaj lub prześlij pliki bezpośrednio przez stronę" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 #, fuzzy msgid "Push new repository" msgstr "Wyślij zmiany do nowego repo" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "Istniejące repozytorium?" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "%s Grupy zmian" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "Status grupy zmian" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "Raw różnic" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "Poprawka różnic" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "Pobierz różnice" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 #, fuzzy msgid "Merge" msgstr "połącz" -#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 #, fuzzy msgid "Grafted from:" msgstr "Utworzono" -#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 msgid "Transplanted from:" msgstr "" -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 #, fuzzy msgid "Replaced by:" msgstr "utworzono" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 #, fuzzy msgid "Preceded by:" msgstr "utworzono" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" @@ -5097,9 +5399,12 @@ msgstr[1] "%s pliki zostały zmienione" msgstr[2] "%s plików zostało zmienionych" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" @@ -5107,95 +5412,131 @@ msgstr[1] "%s plików zostało zmienionych z %s inercjami i %s usunięciami" msgstr[2] "%s plików zostało zmienionych z %s inercjami i %s usunięciami" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 #, fuzzy msgid "Show full diff anyway" msgstr "Pokaż pełną historię" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 #, fuzzy msgid "No revisions" msgstr "rewizja" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 #, fuzzy msgid "on pull request" msgstr "Komentarz połączenia gałęzi %s" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 #, fuzzy msgid "No title" msgstr "nowy plik" -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "Brak zestawienia zmian" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 #, fuzzy msgid "Delete comment?" msgstr "%d komentarz" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "Ostatnia aktywność" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +#, fuzzy +msgid "Commenting on line." msgstr "Komentując linię {1}." -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "Komentarze analizowane za pomocą %s składni od %s wsparcia." - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -#, fuzzy -msgid "Use @username inside this text to notify another user" +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +#, fuzzy +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." msgstr "" "Użyj @username wewnątrz tego tekstu, aby wysłać powiadomienie do " "użytkownika strony" -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "Podgląd komentarza" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +#, fuzzy +msgid "Set changeset status" +msgstr "Zmiana statusu grupy zmian" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "Zagłosuj na żądanie na grupę zmian" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +#, fuzzy +msgid "No change" +msgstr "Bez zmian" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "Komentarz połączenia gałęzi %s" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +#, fuzzy +msgid "Close" +msgstr "(zamknięty)" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 #, fuzzy msgid "Submitting ..." msgstr "Przesyłanie..." -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "Komentarz" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "Podgląd" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "Musisz być zalogowany żeby komentarz." -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "Zaloguj się teraz" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "Ukryj" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" @@ -5203,7 +5544,8 @@ msgstr[1] "%d komentarzy" msgstr[2] "%d komentarzy" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, fuzzy, python-format msgid "%d inline" msgid_plural "%d inline" @@ -5211,7 +5553,8 @@ msgstr[1] "(%d linii)" msgstr[2] "(%d linii)" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, fuzzy, python-format msgid "%d general" msgid_plural "%d general" @@ -5219,137 +5562,176 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -#, fuzzy -msgid "Use @username inside this text to notify another user." -msgstr "" -"Użyj @username wewnątrz tego tekstu, aby wysłać powiadomienie do " -"użytkownika strony" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "Zagłosuj na żądanie na grupę zmian" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -#, fuzzy -msgid "Set changeset status" -msgstr "Zmiana statusu grupy zmian" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -#, fuzzy -msgid "No change" -msgstr "Bez zmian" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -#, fuzzy -msgid "Close" -msgstr "(zamknięty)" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "%s Zestawienie zmian" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "Status grupy zmian: %s" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "Pliki naruszone" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 -msgid "Show full diff for this file" -msgstr "Pokaż pełną edycję tego pliku" - -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 -msgid "Show full side-by-side diff for this file" -msgstr "Pokaż pełną listę zmian i różnic obok siebie" - -#: kallithea/templates/changeset/diff_block.html:38 -msgid "Show inline comments" -msgstr "Pokaż online komentarz" - -#: kallithea/templates/changeset/diff_block.html:86 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +#, fuzzy +#| msgid "file removed" +msgid "File before" +msgstr "plik usunięty" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "Ostatnio modyfikowany" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 #, fuzzy msgid "Deleted" msgstr "usuń" -#: kallithea/templates/changeset/diff_block.html:89 +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 #, fuzzy msgid "Renamed" msgstr "zmień nazwę" +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Nieznana wersja %s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "Brak nazwy pliku" + +#: kallithea/templates/changeset/diff_block.html:55 +#, fuzzy +#| msgid "file added" +msgid "File after" +msgstr "plik dodany" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 +msgid "Show full diff for this file" +msgstr "Pokaż pełną edycję tego pliku" + +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 +msgid "Show full side-by-side diff for this file" +msgstr "Pokaż pełną listę zmian i różnic obok siebie" + +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 +msgid "Show inline comments" +msgstr "Pokaż online komentarz" + #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "Brak zestawienia zmian" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "Przodek" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +#, fuzzy +#| msgid "Common ancestor" +msgid "Merge Ancestor" +msgstr "Skomentuj grupę zmian" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 #, fuzzy msgid "Show merge diff" msgstr "Pokaż pełną historię" -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -#, fuzzy -msgid "Common ancestor" -msgstr "Skomentuj grupę zmian" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 #, fuzzy msgid "is" msgstr "Gist" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, fuzzy, python-format msgid "%s changesets" msgstr "%s Zestawienie zmian" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 #, fuzzy msgid "behind" msgstr "Indeksuj ponownie" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "%s Porównaj" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" @@ -5357,111 +5739,189 @@ msgstr[1] "Pokaż %s komentarze" msgstr[2] "Pokaż %s komentarze" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "Pokaż pełną historię" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "Publiczne repozytorium" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "Nie ma jeszcze zestawienia zmian" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "Subskrybuj %s kanał rss" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "Subskrybuj %s kanał atom" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "%(user)s skomentował zatwierdzenie %(when)s" + +#: kallithea/templates/email_templates/changeset_comment.html:4 #, fuzzy, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "Status zestawienia zmian został zmieniony na" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Comment on Changeset \"%s\"" +msgstr "%(user)s skomentował zatwierdzenie %(when)s" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset flow" +msgid "Changeset on" +msgstr "Przepływ zestawienia zmian" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "gałąź" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "Ostatnia aktywność" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "Repository has been locked" +msgid "The pull request has been closed." +msgstr "Repozytorium nie jest zablokowane" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "Witaj %s" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 #, fuzzy msgid "We have received a request to reset the password for your account." msgstr "Otrzymaliśmy prośbę o utworzenie nowego hasła do twojego konta." -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 +#: kallithea/templates/email_templates/pull_request.html:4 #, fuzzy, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, fuzzy, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#| msgid "[commented] on pull request for" +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "[komentarz] wniosek o połączenie gałęzi" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "Komentarz połączenia gałęzi %s" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +#, fuzzy +#| msgid "Date" +msgid "at" +msgstr "Data" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 #, fuzzy, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -#, fuzzy -msgid "The comment closed the pull request with status" -msgstr "%s skomentował nowe połączenie gałęzi \"%s\"" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -#, fuzzy -msgid "The comment was made with status" -msgstr "Wniosek połączenia został zamknięty ze statusem" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" -msgstr "Zobacz tego użytkownika tutaj" +#| msgid "%(user)s commented on pull request %(age)s" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "%(user)s skomentował nowe połączenie gałęzi w %(when)s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Pull request %s from %s#%s" +msgid "Pull Request %s \"%s\" Closed" +msgstr "Połączonych gałęzi #%s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "[commented] on pull request for" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "[komentarz] wniosek o połączenie gałęzi" + +#: kallithea/templates/email_templates/registration.html:22 +#, fuzzy +#| msgid "Group name" +msgid "Full Name" +msgstr "Nazwa grupy" #: kallithea/templates/files/diff_2way.html:15 #, python-format @@ -5479,84 +5939,107 @@ msgstr "%s Pliki różnic" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "Pliki %s" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "Pliki %s" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "Położenie" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "lub" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "Nowy tryb pliku" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +#, fuzzy +msgid "New file type" +msgstr "nowy plik" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 #, fuzzy msgid "Commit Changes" msgstr "Zatwierdź zmiany" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "poprzednia wersja" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "następna wersja" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "Obserwuj aktualną gałąź" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "Wczytywanie listy plików..." -#: kallithea/templates/files/files_browser.html:61 +#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 msgid "Size" msgstr "Rozmiar" -#: kallithea/templates/files/files_browser.html:62 +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 msgid "Last Revision" msgstr "Rewizja" -#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 #, fuzzy msgid "Last Modified" msgstr "Ostatnio modyfikowany" -#: kallithea/templates/files/files_browser.html:64 +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 #, fuzzy msgid "Last Committer" msgstr "Autor" @@ -5567,7 +6050,7 @@ msgstr "%s Usuń Plik" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "Usuń plik" @@ -5580,25 +6063,24 @@ msgid "Edit file" msgstr "Edytuj plik" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "Źródło" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "Edycja pliku" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" @@ -5606,78 +6088,110 @@ msgstr[1] "%s autorzy" msgstr[2] "%s autorzy" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "Pokaż źródło" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" -msgstr "" - -#: kallithea/templates/files/files_source.html:41 +#: kallithea/templates/files/files_source.html:34 +#, fuzzy, python-format +#| msgid "Deleted branch: %s" +msgid "Edit on Branch: %s" +msgstr "Usunięta gałąź: %s" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 msgid "Editing binary files not allowed" msgstr "Edycja plików binarnych jest zabroniona" -#: kallithea/templates/files/files_source.html:44 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 msgid "Editing files allowed only when on branch head revision" msgstr "" "Edycja plików dozwolona tylko wtedy, gdy rewizja jest w trakcie rewizji " "głównej gałęzi" -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/files/files_source.html:41 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "Plik binarny (%s)" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +#, fuzzy +msgid "File is too big to display." +msgstr "Plik jest za duży do wyświetlenia" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +#, fuzzy +msgid "Show full annotation anyway." +msgstr "Pokaż pełną historię" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" -msgstr "Plik jest za duży do wyświetlenia" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +#, fuzzy +msgid "Show as raw." +msgstr "wyświetl jako raw" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "adnotacja" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "Wróć" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "Brak plików w danej ścieżce" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "Obserwatorzy %s" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "Obserwuje" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "Rozpoczęto obserwację -" @@ -5686,71 +6200,81 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "Nazwa rozgałęzienia" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 #, fuzzy msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "Wersja domyślna dla plików stronicowania, pobierania plików, readme" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "Prywatny" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "Skopiuj uprawnienia" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "Skopiuj zezwolenia z rozwidlenia repozytorium" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "Aktualizuj po klonowaniu" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "Sprawdź źródło po wykonaniu klonowania" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "Gałąź %s" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "Gałęzie" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "Rozgałęziony" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "Nie ma jeszcze gałęzi" -#: kallithea/templates/journal/journal.html:21 +#: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 msgid "ATOM journal feed" msgstr "Dziennik kanału ATOM" -#: kallithea/templates/journal/journal.html:22 +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "Dziennik kanału RSS" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "Moje Repozytoria" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "Brak wpisów jeszcze" @@ -5764,35 +6288,46 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 #, fuzzy msgid "New Pull Request" msgstr "Nowa prośba o połączenie gałęzi" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "Tytuł" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "Napisz krótki opis tego tego połączenia gałęzi" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "Przepływ zestawienia zmian" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "Repozytorium git" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "Repozytorium docelowe" @@ -5829,7 +6364,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "Zamknięte" @@ -5848,34 +6385,42 @@ msgstr "Potwierdź usunięcie połączenia gałęzi" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, fuzzy, python-format msgid "%s Pull Request %s" msgstr "%s Połączonych gałęzi #%s" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, fuzzy, python-format msgid "Pull request %s from %s#%s" msgstr "Połączonych gałęzi #%s" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 #, fuzzy msgid "Summarize the changes" msgstr "Zatwierdź zmiany" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "Nie ma jeszcze recenzenta" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" @@ -5883,89 +6428,121 @@ msgstr[1] "%d recenzenci" msgstr[2] "%d recenzentów" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "Połączenie gałęzi zostało zweryfikowane przez wszystkich recenzentów" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 #, fuzzy msgid "There are no reviewers" msgstr "Nie ma jeszcze gałęzi" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 #, fuzzy msgid "on" msgstr "brak" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "Pobierz zmiany" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -#, fuzzy -msgid "Update" -msgstr "[zaktualizowany] użytkownik" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +#, fuzzy +#| msgid "Registration" +msgid "Next iteration" +msgstr "Rejestracja" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +#, fuzzy +msgid "Cancel Changes" +msgstr "Ostatnia aktywność" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 #, fuzzy msgid "Pull Request Reviewers" msgstr "Recenzje wniosków połączenia gałęzi" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 #, fuzzy msgid "Remove reviewer" msgstr "recenzent" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 #, fuzzy msgid "Potential Reviewers" msgstr "Podgląd komentarza" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -#, fuzzy -msgid "Save as New Pull Request" -msgstr "Otwórz nową prośbę o połączenie gałęzi" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -#, fuzzy -msgid "Cancel Changes" -msgstr "Ostatnia aktywność" - -#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 #, fuzzy msgid "Pull Request Content" msgstr "Wniosek połączenia zmienił status" +#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +#, fuzzy +msgid "Common ancestor" +msgstr "Skomentuj grupę zmian" + #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 #, python-format msgid "%s Pull Requests" @@ -5973,7 +6550,6 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Pull Requests from %s'" msgid "Pull Requests from '%s'" msgstr "Połączonych gałęzi #%s" @@ -5982,249 +6558,475 @@ msgid "Pull Requests to '%s'" msgstr "Połączonych gałęzi #%s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 #, fuzzy msgid "Open New Pull Request" msgstr "Otwórz nową prośbę o połączenie gałęzi" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, fuzzy, python-format msgid "Show Pull Requests to %s" msgstr "Pokaż Prośby Pobrania %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, fuzzy, python-format msgid "Show Pull Requests from '%s'" msgstr "Pokaż Prośby Pobrania %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 #, fuzzy msgid "Pull Requests Created by Me" msgstr "Recenzje wniosków połączenia gałęzi" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +#, fuzzy +#| msgid "Pull Request Reviewers" +msgid "Pull Requests Needing My Review" +msgstr "Recenzje wniosków połączenia gałęzi" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 #, fuzzy msgid "Pull Requests I Participate In" msgstr "Biorę udział w" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 #, fuzzy msgid "Search in All Repositories" msgstr "Szukaj we wszystkich repozytoriach" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "Szukana fraza" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "Szukaj w" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "Zawartość pliku" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "Komunikaty" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "Nazwy plików" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "Brak uprawnień" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "%s Statystyki" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "%s ATOM" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "%s RSS" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "Włącz" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "Statystyki zebrane: " -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "pliki" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "Pokaż więcej" -#: kallithea/templates/summary/statistics.html:390 +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 msgid "commits" msgstr "komunikaty" +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "pliki dodane" + +#: kallithea/templates/summary/statistics.html:390 +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "pliki zmienione" + #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "pliki dodane" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" -msgstr "pliki zmienione" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" +msgstr "pliki usunięte" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" -msgstr "pliki usunięte" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "komunikaty" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" +msgstr "plik dodany" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" -msgstr "komunikaty" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" +msgstr "plik zmieniony" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "plik dodany" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "plik zmieniony" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "plik usunięty" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "Podsumowanie %s" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "Repozytorium zablokowane przez %s" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "Repozytorium odblokowane" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "Gałąź z" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "Klonuj z" -#: kallithea/templates/summary/summary.html:72 -#, fuzzy -msgid "Clone URL" -msgstr "Url klonowania" - -#: kallithea/templates/summary/summary.html:78 -msgid "Show by Name" -msgstr "Pokaż nazwę" - -#: kallithea/templates/summary/summary.html:79 +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 msgid "Show by ID" msgstr "Pokaż ID" -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:72 +#: kallithea/tests/data/templates/summary/summary.html.py:143 +msgid "Show by Name" +msgstr "Pokaż nazwę" + +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "Statystyki" +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "Pobierz" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "Nie pobrano jeszcze plików" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "Pliki do pobrania są zostały wyłączone dla tego repozytorium" + #: kallithea/templates/summary/summary.html:108 -msgid "Download" -msgstr "Pobierz" +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" +msgstr "Pobierz jako zip" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" -msgstr "Nie pobrano jeszcze plików" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" +msgstr "Zaznacz tu żeby pobrać archiwum z subrepozytorium" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "Pliki do pobrania są zostały wyłączone dla tego repozytorium" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "Pobierz jako zip" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "Zaznacz tu żeby pobrać archiwum z subrepozytorium" - -#: kallithea/templates/summary/summary.html:125 +#: kallithea/tests/data/templates/summary/summary.html.py:196 #, fuzzy msgid "With subrepos" msgstr "z subrepozytorium" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "Rozmiar Repozytorium" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "Kanał RSS" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 #, fuzzy msgid "Latest Changes" msgstr "Ostatnia aktywność" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 #, fuzzy msgid "Quick Start" msgstr "Szybki start" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "Pobierz %s jak %s" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "Etykiety pliku %s" - -#: kallithea/templates/tags/tags.html:26 -#, fuzzy -msgid "Compare Tags" -msgstr "Porównaj tagi" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "Repozytorium" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "Nazwa Grupy" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "Zapamiętaj mnie" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "Zmiana awataru na" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "Używa" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "ponowne skanowanie opcji" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "www" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "Wymagaj ssl dla operacji vcs" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "Pozycja panelu" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "szybki filtr..." + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "Nie pamiętasz hasła?" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "Przodek" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, fuzzy, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "Status zestawienia zmian został zmieniony na" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, fuzzy, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, fuzzy, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, fuzzy, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +#, fuzzy +msgid "The comment closed the pull request with status" +msgstr "%s skomentował nowe połączenie gałęzi \"%s\"" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +#, fuzzy +msgid "The comment was made with status" +msgstr "Wniosek połączenia został zamknięty ze statusem" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "Zobacz tego użytkownika tutaj" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "Rozmiar Repozytorium" #~ msgid "increase diff context to %(num)s lines" #~ msgstr "" @@ -6265,9 +7067,6 @@ #~ msgid "No Files" #~ msgstr "Brak Plików" -#~ msgid "" -#~ msgstr "" - #~ msgid "Username \"%(username)s\" is forbidden" #~ msgstr "Nazwa użytkownika \"%(username)s\" jest zabroniona" @@ -6499,3 +7298,244 @@ #~ msgid "You can only delete files with revision being a valid branch " #~ msgstr "" +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "Potwierdź unieważnienie pamięci podręcznej repozytorium" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "Komentarze analizowane za pomocą %s składni od %s wsparcia." + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" + +#~ msgid "Comment preview" +#~ msgstr "Podgląd komentarza" + +#~ msgid "Preview" +#~ msgstr "Podgląd" + +#~ msgid "New file mode" +#~ msgstr "Nowy tryb pliku" + +#~ msgid "Missing changesets since the previous pull request:" +#~ msgstr "" + +#~ msgid "New changesets on %s %s since the previous pull request:" +#~ msgstr "" + +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "" +#~ "This pull request is based on " +#~ "another %s revision and there is " +#~ "no simple diff." +#~ msgstr "" + +#~ msgid "No changes found on %s %s since previous version." +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "" + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "No changesets found for updating this pull request." +#~ msgstr "" + +#~ msgid "Git pull requests don't support updates yet." +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "Zamknięcie." + +#~ msgid "Repository no access" +#~ msgstr "Brak dostępu do repozytorium" + +#~ msgid "Repository read access" +#~ msgstr "Repozytorium do odczytu" + +#~ msgid "Repository write access" +#~ msgstr "Repozytorium do zapisu" + +#~ msgid "Repository admin access" +#~ msgstr "Administracja dostępu do repozytorium" + +#~ msgid "Repository Group no access" +#~ msgstr "Grupy repozytoriów brak dostępu" + +#~ msgid "Repository Group read access" +#~ msgstr "Grupy repozytoriów dostęp do odczytu" + +#~ msgid "Repository Group write access" +#~ msgstr "Grupy repozytoriów dostęp do zapisu" + +#~ msgid "Repository Group admin access" +#~ msgstr "Repozytoria Grupy dostęp administratora" + +#~ msgid "Repository creation disabled" +#~ msgstr "Tworzenie repozytorium jest wyłączone" + +#~ msgid "Repository creation enabled" +#~ msgstr "Tworzenie repozytorium jest włączone" + +#~ msgid "Repository forking disabled" +#~ msgstr "Rozwidlenie repozytorium wyłączone" + +#~ msgid "Repository forking enabled" +#~ msgstr "Rozwidlenie repozytorium włączone" + +#~ msgid "Register disabled" +#~ msgstr "Rejestracja wyłączona" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "Rejestracja nowego użytkownika na stronie z ręczną aktywacją" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "Rejestracja nowego użytkownika na stronie z automatyczną aktywacją" + +#~ msgid "Not Reviewed" +#~ msgstr "Brak Korekty" + +#~ msgid "Rejected" +#~ msgstr "Odrzucono" + +#~ msgid "Under Review" +#~ msgstr "Objęty Przeglądem" + +#~ msgid "Repository group no access" +#~ msgstr "Grupy repozytoriów brak dostępu" + +#~ msgid "Repository group read access" +#~ msgstr "Grupy repozytoriów dostęp do odczytu" + +#~ msgid "Repository group write access" +#~ msgstr "Grupy repozytoriów dostęp do zapisu" + +#~ msgid "Repository group admin access" +#~ msgstr "Repozytoria Grupy dostęp administratora" + +#~ msgid "User group no access" +#~ msgstr "Ta grupa użytkowników nie ma dostępu" + +#~ msgid "User group read access" +#~ msgstr "Dostęp do grupy parametrów użytkownika" + +#~ msgid "User group write access" +#~ msgstr "Ta grupa użytkowników ma prawo do zapisu" + +#~ msgid "User group admin access" +#~ msgstr "Ta grupa użytkowników ma uprawnienia administratora" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "Tworzenie grup repozytoriów wyłączone" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "Tworzenie grup repozytoriów włączone" + +#~ msgid "User Group creation disabled" +#~ msgstr "Tworzenie grup użytkowników wyłączone" + +#~ msgid "User Group creation enabled" +#~ msgstr "Tworzenie grup użytkowników właczone" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "Rejestracja użytkownika z ręczną aktywacją konta" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "Rejestracja użytkownika z automatyczną aktywacją konta" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "%(user)s chce żeby przejrzeć nowe gałęzie #%(pr_id)s: %(pr_title)s" + +#~ msgid "repositories" +#~ msgstr "repozytoria" + +#~ msgid "No repositories found." +#~ msgstr "Nie znaleziono repozytorium." + +#~ msgid "There are no branches yet" +#~ msgstr "Nie ma jeszcze gałęzi" + +#~ msgid "There are no tags yet" +#~ msgstr "Nie ma jeszcze tagów" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "Nie ma jeszcze zakładek" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "%s Zakładki" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "%s Gałęzie" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "Edycja pliku" + +#~ msgid "Update" +#~ msgstr "[zaktualizowany] użytkownik" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "Otwórz nową prośbę o połączenie gałęzi" + +#~ msgid "%s Tags" +#~ msgstr "Etykiety pliku %s" + +#~ msgid "Compare Tags" +#~ msgstr "Porównaj tagi" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/pt_BR/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/pt_BR/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/pt_BR/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" "PO-Revision-Date: 2014-02-13 14:34+0000\n" "Last-Translator: marcinkuzminski \n" "Language-Team: Portuguese (Brazil) " @@ -19,87 +19,100 @@ "Content-Transfer-Encoding: 8bit\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "Não há nenhum changeset ainda" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "Nenhum" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(fechado)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "Mostrar espaços em branco" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "Ignorar espaços em branco" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "Mudar o estado de um changeset associado a um pull request não é permitido" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "Confirme para travar repositório" + +#: kallithea/controllers/compare.py:73 +msgid "Cannot compare repositories of different types" +msgstr "" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" -#: kallithea/controllers/error.py:71 +#: kallithea/controllers/error.py:70 #, fuzzy msgid "No response" msgstr "revisões" -#: kallithea/controllers/error.py:72 +#: kallithea/controllers/error.py:71 msgid "Unknown error" msgstr "" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "" "A requisição não pôde ser compreendida pelo servidor devido à sintaxe mal" " formada." -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "Acesso não autorizado ao recurso" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "Você não tem permissão para ver esta página" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "O recurso não pôde ser encontrado" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." @@ -107,372 +120,393 @@ "O servidor encontrou uma condição inesperada que o impediu de satisfazer " "a requisição." -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "Modificações no repositório %s" - -#: kallithea/controllers/feed.py:56 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "Conjunto de mudanças era grande demais e foi cortado..." + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "%s commitados em %s" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 #, python-format msgid "%s %s feed" msgstr "%s - feed %s" -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "Conjunto de mudanças era grande demais e foi cortado..." - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "%s commitados em %s" - -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "Modificações no repositório %s" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "Clique aqui para adicionar um novo arquivo" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, fuzzy, python-format msgid "%s at %s" msgstr "em %s e %s" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "Este repositório foi travado por %s em %s" -#: kallithea/controllers/files.py:317 -#, fuzzy -#| msgid "You can only edit files with revision being a valid branch " +#: kallithea/controllers/files.py:309 +#, fuzzy msgid "You can only delete files with revision being a valid branch" msgstr "Só é possível editar arquivos quando a revisão é um ramo válido" -#: kallithea/controllers/files.py:328 +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "Ocorreu um erro ao realizar commit" -#: kallithea/controllers/files.py:377 -#, fuzzy -#| msgid "You can only edit files with revision being a valid branch " +#: kallithea/controllers/files.py:369 +#, fuzzy msgid "You can only edit files with revision being a valid branch" msgstr "Só é possível editar arquivos quando a revisão é um ramo válido" -#: kallithea/controllers/files.py:391 +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "Arquivo %s editado via Kallithea" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "Sem modificações" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "Commit realizado com sucesso para %s" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "Arquivo adicionado via Kallithea" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "Nenhum conteúdo" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "Nenhum nome de arquivo" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "O caminho deve ser relativo e não pode conter .." -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "Downloads desabilitados" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "Revisão desconhecida %s" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "Repositório vazio" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "Tipo de arquivo desconhecido" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "Conjuntos de mudanças" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "Ramos" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "Etiquetas" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "Ocorreu um erro ao bifurcar o repositório %s" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "Repositórios" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "Ramo" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "Ramos Fechados" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "Diário Público" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "Diário" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "Você foi registrado no Kallithea com sucesso" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "Você foi registrado no %s com sucesso" + +#: kallithea/controllers/login.py:193 #, fuzzy msgid "A password reset confirmation code has been sent" msgstr "Seu link de reinicialização de senha foi enviado" -#: kallithea/controllers/login.py:246 +#: kallithea/controllers/login.py:242 #, fuzzy msgid "Invalid password reset token" msgstr "Link para trocar senha" -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "" -#: kallithea/controllers/pullrequests.py:124 +#: kallithea/controllers/pullrequests.py:73 +#, python-format +msgid "Invalid reviewer \"%s\" specified" +msgstr "" + +#: kallithea/controllers/pullrequests.py:135 #, fuzzy, python-format msgid "%s (closed)" msgstr "" -#: kallithea/controllers/pullrequests.py:152 +#: kallithea/controllers/pullrequests.py:162 #: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 msgid "Changeset" msgstr "Conjunto de Mudanças" -#: kallithea/controllers/pullrequests.py:173 +#: kallithea/controllers/pullrequests.py:183 msgid "Special" msgstr "Especial" -#: kallithea/controllers/pullrequests.py:174 +#: kallithea/controllers/pullrequests.py:184 msgid "Peer branches" msgstr "Ramos pares" -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 msgid "Bookmarks" msgstr "Marcadores" -#: kallithea/controllers/pullrequests.py:310 +#: kallithea/controllers/pullrequests.py:326 #, python-format msgid "Error creating pull request: %s" msgstr "" -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -#, fuzzy -msgid "No description" -msgstr "Descrição" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "Novo pull request criado com sucesso" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 -#, python-format -msgid "Invalid reviewer \"%s\" specified" -msgstr "" - -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 #, fuzzy msgid "Error occurred while creating pull request" msgstr "Ocorreu um erro durante o envio do pull request" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "" - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "" - -#: kallithea/controllers/pullrequests.py:470 -#, fuzzy -msgid "Pull request update created" +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "Novo pull request criado com sucesso" + +#: kallithea/controllers/pullrequests.py:381 +#, fuzzy +#| msgid "Pull request update created" +msgid "New pull request iteration created" msgstr "Revisores do pull request" -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +#, fuzzy +msgid "No description" +msgstr "Descrição" + +#: kallithea/controllers/pullrequests.py:439 #, fuzzy msgid "Pull request updated" msgstr "Pull requests para %s" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "Pull request excluído com sucesso" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, python-format +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." -msgstr "" - -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +msgid "No additional changesets found for iterating on this pull request." +msgstr "" + +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "" - -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:571 +msgid "Git pull requests don't support iterating yet." +msgstr "" + +#: kallithea/controllers/pullrequests.py:573 +#, python-format +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 #, fuzzy msgid "No permission to change pull request status" msgstr "Vote para estado do pull request" -#: kallithea/controllers/pullrequests.py:729 -#, fuzzy -msgid "Closing." -msgstr "carregando ..." - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, fuzzy, python-format +msgid "Successfully deleted pull request %s" +msgstr "Pull request excluído com sucesso" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "Consulta de busca inválida. Tente usar aspas." -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "Não há índice onde pesquisa. Por favor execute o indexador whoosh" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 #, fuzzy msgid "An error occurred during search operation." msgstr "Ocorreu um erro durante essa operação de busca" -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 #, fuzzy msgid "No data ready yet" msgstr "Ainda não há dados carregados" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "As estatísticas estão desabillitadas para este repositório" @@ -484,151 +518,155 @@ msgid "error occurred during update of auth settings" msgstr "" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "Configurações padrão atualizadas com sucesso" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "Ocorreu um erro durnge a atualização dos padrões" -#: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 #, fuzzy msgid "Forever" msgstr "para sempre" -#: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 +#: kallithea/controllers/admin/gists.py:59 +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 msgid "5 minutes" msgstr "cinco minutos" +#: kallithea/controllers/admin/gists.py:60 +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" +msgstr "uma hora" + #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" -msgstr "uma hora" - -#: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 msgid "1 day" msgstr "um dia" -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/gists.py:62 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "um mês" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "Ocorreu um erro durante a criação de um gist" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "Gist %s excluído" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 #, fuzzy msgid "Unmodified" msgstr "Última alteração" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "Você não pode editar esse usuário pois ele é crucial para toda a aplicação" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "Sua conta foi atualizada com sucesso" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "Ocorreu um erro durante a atualização do usuário %s" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "Email %s adicionado ao usuário" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "Ocorreu um erro durante o salvamento do email" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "Email removido do usuário" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "Ler" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" -msgstr "Gravar" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "Ler" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "Gravar" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -636,627 +674,647 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "Administrador" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "Desabilitado" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "Permitido com ativação manual de conta" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "Permitido com ativação automática de conta" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "Ativação manual de conta externa" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "Ativação automática de conta externa" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "Desabilitado" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "Permitido com ativação manual de conta" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "Permitido com ativação automática de conta" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "Ativação manual de conta externa" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "Ativação automática de conta externa" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "Habilitado" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "Ocorreu um erro durante a atualização das permissões" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "Ocorreu um erro durante a criação do grupo de repositórios %s" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "Grupo de repositórios %s criado" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "Grupo de repositórios %s atualizado" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "Ocorreu um erro durante a atualização do grupo de repositórios %s" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "Esse grupo contém %s repositórios e não pode ser excluído" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "Este grupo contém %s subgrupos e não pode ser excluído" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "Grupo de repositórios %s excluído" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "Ocorreu um erro durante a exclusão do grupo de repositórios %s" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "Você não pode revocar sua própria permissão de administrador" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "Permissões atualizadas do Grupo de Repositórios" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "Ocorreu um erro durante a revocação das permissões" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "Erro ao criar repositório %s" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "Repositório %s criado de %s" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "Repositório %s bifurcado como %s" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "Repositório %s criado" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "Repositório %s atualizado com sucesso" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "Ocorreu um erro durante a atualização do repositório %s" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "%s bifurcações excluídas" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "Repositório %s excluído" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, fuzzy, python-format msgid "Cannot delete repository %s which still has forks" msgstr "Nao é possível excluir %s pois ele ainda contém bifurcações vinculadas" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "Ocorreu um erro durante a exclusão de %s" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "Permissões do repositório atualizadas" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during creation of field" +msgid "An error occurred during creation of field: %r" msgstr "Ocorreu um erro durante a criação do campo" -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "Ocorreu um erro durante a remoção do campo" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "Atualizada a visibilidade do repositório no diário público" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "Ocorreu um erro ao ajustar esse repositório no diário público" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "Nada" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "Marcado repositório %s como bifurcação de %s" -#: kallithea/controllers/admin/repos.py:521 +#: kallithea/controllers/admin/repos.py:480 msgid "An error occurred during this operation" msgstr "Ocorreu um erro durante essa operação" -#: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 #, fuzzy msgid "Repository has been locked" msgstr "Repositório não está travado" -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 #, fuzzy msgid "Repository has been unlocked" msgstr "Repositório não está travado" -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 +#: kallithea/controllers/admin/repos.py:502 +#: kallithea/controllers/admin/repos.py:521 msgid "An error occurred during unlocking" msgstr "Ocorreu um erro durante o destravamento" -#: kallithea/controllers/admin/repos.py:582 +#: kallithea/controllers/admin/repos.py:533 msgid "Cache invalidation successful" msgstr "" -#: kallithea/controllers/admin/repos.py:586 +#: kallithea/controllers/admin/repos.py:537 msgid "An error occurred during cache invalidation" msgstr "Ocorreu um erro ao invalidar o cache" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "Realizado pull de localização remota" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "Ocorreu um erro ao realizar pull de localização remota" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "Ocorreu um erro ao excluir estatísticas de repositório" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "Configurações de VCS atualizadas" -#: kallithea/controllers/admin/settings.py:174 +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 msgid "" "Unable to activate hgsubversion support. The \"hgsubversion\" library is " "missing" msgstr "" -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 msgid "Error occurred while updating application settings" msgstr "Ocorreu um erro durante a atualização das configurações da aplicação" -#: kallithea/controllers/admin/settings.py:211 +#: kallithea/controllers/admin/settings.py:174 #, fuzzy, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "Repositórios varridos com sucesso adicionados: %s ; removidos: %s" -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format #| msgid "Invalidate cache for all repositories" msgid "Invalidated %s repositories" msgstr "Invalidar o cache para todos os repositórios" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "Configurações da aplicação atualizadas" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "Configurações de visualização atualizadas" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "Ocorreu um erro durante a atualização das configurações de visualização" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "Adicionado novo gancho" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "Atualizados os ganchos" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "Ocorreu um erro durante a criação do hook" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "Tarefa de reindexação do whoosh agendada" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "Grupo de usuários %s criado" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "Ocorreu um erro durante a criação do grupo de usuários %s" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "Grupo de usuários %s atualizado" -#: kallithea/controllers/admin/user_groups.py:224 +#: kallithea/controllers/admin/user_groups.py:208 #, python-format msgid "Error occurred during update of user group %s" msgstr "Ocorreu um erro durante a atualização do grupo de usuários %s" -#: kallithea/controllers/admin/user_groups.py:242 +#: kallithea/controllers/admin/user_groups.py:219 msgid "Successfully deleted user group" msgstr "Grupo de usuários excluído com sucesso" -#: kallithea/controllers/admin/user_groups.py:247 +#: kallithea/controllers/admin/user_groups.py:224 msgid "An error occurred during deletion of user group" msgstr "Ocorreu um erro durante a exclusão do grupo de usuários" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "O grupo destino não pode ser o mesmo" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "Permissões do Grupo de Usuários atualizadas" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "Permissões atualizadas" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "Ocorreu um erro durante o salvamento das permissões" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "Usuário %s criado" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "Ocorreu um erro durante a criação do usuário %s" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "Usuário atualizado com sucesso" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "Usuário excluído com sucesso" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "Ocorreu um erro ao excluir o usuário" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "Ocorreu um erro durante o salvamento do IP" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "IP %s não permitido" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "Você precisa ser um usuário registrado para realizar essa ação" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "Você precisa estar logado para ver essa página" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, fuzzy, python-format #| msgid "Changeset not found" msgid "Changeset for %s %s not found in %s" msgstr "Conjunto de alterações não encontrado" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "Arquivo binário" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" "Conjunto de mudanças é grande demais e foi cortado, use o menu de " "diferenças para ver as diferenças" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "Nenhuma alteração detectada" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "Excluído ramo: %s" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "Tag criada: %s" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format #| msgid "Changeset not found" msgid "Changeset %s not found" msgstr "Conjunto de alterações não encontrado" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Ver todos os conjuntos de mudanças combinados %s->%s" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 #, fuzzy msgid "Compare view" msgstr "comparar exibir" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "e" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "%s mais" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "revisões" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, fuzzy, python-format msgid "Fork name %s" msgstr "nome da bifurcação %s" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, fuzzy, python-format msgid "Pull request %s" msgstr "Pull request #%s" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "repositório [excluído]" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "repositório [criado]" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "repositório [criado] como uma bifurcação" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "repositório [bifurcado]" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "repositório [atualizado]" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "[baixado] archive do repositório" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "[excluir] repositório" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "usuário [criado]" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "usuário [atualizado]" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "[criado] grupo de usuários" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "[atualizado] grupo de usuários" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "[comentado] em revisão no repositório" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "[comentado] no pull request para" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "[fechado] pull request para" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "[realizado push] para" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "[commitado via Kallithea] no repositório" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "[pulled do remote] no repositório" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "[realizado pull] a partir de" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "[passou a seguir] o repositório" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "[parou de seguir] o repositório" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr " e mais %s" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "Nenhum arquivo" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "novo arquivo" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "mod" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "excluir" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "renomear" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "chmod" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1267,749 +1325,403 @@ "renomeado a partir do sistema de arquivos. Por favor, execute a aplicação" " outra vez para varrer novamente por repositórios" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d ano" msgstr[1] "%d anos" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d mês" msgstr[1] "%d meses" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d dia" msgstr[1] "%d dias" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hora" msgstr[1] "%d horas" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuto" msgstr[1] "%d minutos" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d segundo" msgstr[1] "%d segundos" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "em %s" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "%s atrás" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "em %s e %s" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "%s e %s atrás" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "agora há pouco" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "Nenhum acesso ao repositório" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "Acesso de leitura ao repositório" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "Acesso de escrita ao repositório" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "Acesso administrativo ao repositório" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "Nenhum acesso ao Grupo de Repositórios" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "Acesso de leitura ao Grupo de Repositórios" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "Acesso de escrita ao Grupo de Repositórios" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "Acesso administrativo ao Grupo de Repositórios" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "Administrador do Kallithea" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "Criação de repositórios desabilitada" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "Criação de repositórios habilitada" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "Bifurcação de repositórios desabilitada" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "Bifurcação de repositórios habilitada" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "Registro desabilitado" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "Registro de novo usuário no Kallithea com ativação manual" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "Registro de novo usuário no Kallithea com auto-ativação" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "Não Revisado" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "Aprovado" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "Rejeitado" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "Sob Revisão" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "nível superior" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "Sem acesso ao grupo de repositórios" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "Acesso de leitura ao grupo de repositórios" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "Acesso de escrita ao grupo de repositórios" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "Acesso administrativo ao grupo de repositórios" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "Sem acesso ao grupo de usuários" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "Acesso de leitura ao grupo de usuários" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "Acesso de escrita ao grupo de usuários" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "Acesso administrativo ao grupo de usuários" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "Criação de Grupo de Repositórios desatilibada" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "Criação de Grupo de Repositórios habilitada" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "Criação de Grupo de Usuários desabilitada" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "Criação de Grupo de Usuários habilitada" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "Registro desatilitado" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "Registro de Usuário com ativação manual de conta" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "Registro de Usuário com ativação automática de conta" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "na linha %s" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "[Menção]" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "nível superior" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "Administrador do Kallithea" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 #, fuzzy msgid "Default user has read access to new repositories" msgstr "Acesso não autorizado ao recurso" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 #, fuzzy msgid "Default user has write access to new repositories" msgstr "Acesso não autorizado ao recurso" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 #, fuzzy msgid "Only admins can create repository groups" msgstr "Grupo de repositórios %s criado" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 #, fuzzy msgid "Non-admins can create repository groups" msgstr "Grupo de repositórios %s criado" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 #, fuzzy msgid "Only admins can create user groups" msgstr "Criar grupos de usuários" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 #, fuzzy msgid "Non-admins can create user groups" msgstr "Criar grupos de usuários" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 #, fuzzy msgid "Only admins can fork repositories" msgstr "Criar repositórios" -#: kallithea/model/db.py:1696 -#, fuzzy -#| msgid "Non-admins can can fork repositories" +#: kallithea/model/db.py:1745 +#, fuzzy msgid "Non-admins can fork repositories" msgstr "Invalidar o cache para todos os repositórios" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "Registro desatilitado" + +#: kallithea/model/db.py:1748 #, fuzzy msgid "User registration with manual account activation" msgstr "Registro de Usuário com ativação manual de conta" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 #, fuzzy msgid "User registration with automatic account activation" msgstr "Registro de Usuário com ativação automática de conta" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 #, fuzzy msgid "Not reviewed" msgstr "Não Revisado" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 #, fuzzy msgid "Under review" msgstr "Sob Revisão" -#: kallithea/model/forms.py:57 +#: kallithea/model/db.py:2278 +#, fuzzy +#| msgid "Approved" +msgid "Not approved" +msgstr "Aprovado" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "Aprovado" + +#: kallithea/model/forms.py:58 msgid "Please enter a login" msgstr "Por favor entre um login" -#: kallithea/model/forms.py:58 +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "Entre um valor com %(min)i caracteres ou mais" -#: kallithea/model/forms.py:66 +#: kallithea/model/forms.py:67 msgid "Please enter a password" msgstr "Por favor entre com uma senha" -#: kallithea/model/forms.py:67 +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "Entre com %(min)i caracteres ou mais" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" -#: kallithea/model/notification.py:255 +#: kallithea/model/notification.py:240 #, fuzzy, python-format msgid "%(user)s commented on changeset %(age)s" msgstr "%(user)s comentou no changeset em %(when)s" -#: kallithea/model/notification.py:256 +#: kallithea/model/notification.py:241 #, fuzzy, python-format msgid "%(user)s sent message %(age)s" msgstr "%(user)s enviou mensagem em %(when)s" -#: kallithea/model/notification.py:257 +#: kallithea/model/notification.py:242 #, fuzzy, python-format msgid "%(user)s mentioned you %(age)s" msgstr "%(user)s mencionou-o em %(when)s" -#: kallithea/model/notification.py:258 +#: kallithea/model/notification.py:243 #, fuzzy, python-format msgid "%(user)s registered in Kallithea %(age)s" msgstr "%(user)s registrou-se no Kallithea em %(when)s" -#: kallithea/model/notification.py:259 +#: kallithea/model/notification.py:244 #, fuzzy, python-format msgid "%(user)s opened new pull request %(age)s" msgstr "%(user)s abriu um novo pull request em %(when)s" -#: kallithea/model/notification.py:260 +#: kallithea/model/notification.py:245 #, fuzzy, python-format msgid "%(user)s commented on pull request %(age)s" msgstr "%(user)s comentou no pull request em %(when)s" -#: kallithea/model/notification.py:267 +#: kallithea/model/notification.py:252 #, python-format msgid "%(user)s commented on changeset at %(when)s" msgstr "%(user)s comentou no changeset em %(when)s" -#: kallithea/model/notification.py:268 +#: kallithea/model/notification.py:253 #, python-format msgid "%(user)s sent message at %(when)s" msgstr "%(user)s enviou mensagem em %(when)s" -#: kallithea/model/notification.py:269 +#: kallithea/model/notification.py:254 #, python-format msgid "%(user)s mentioned you at %(when)s" msgstr "%(user)s mencionou-o em %(when)s" -#: kallithea/model/notification.py:270 +#: kallithea/model/notification.py:255 #, python-format msgid "%(user)s registered in Kallithea at %(when)s" msgstr "%(user)s registrou-se no Kallithea em %(when)s" -#: kallithea/model/notification.py:271 +#: kallithea/model/notification.py:256 #, python-format msgid "%(user)s opened new pull request at %(when)s" msgstr "%(user)s abriu um novo pull request em %(when)s" -#: kallithea/model/notification.py:272 +#: kallithea/model/notification.py:257 #, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "%(user)s comentou no pull request em %(when)s" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, fuzzy, python-format +#| msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "[comentado] no pull request para" + +#: kallithea/model/notification.py:291 #, fuzzy, python-format msgid "New user %(new_username)s registered" msgstr "O username \"%(new_username)s\" não é válido" -#: kallithea/model/notification.py:308 -#, fuzzy, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "%(user)s solicita sua revisão no pull request $%(pr_id)s: %(pr_title)s" - -#: kallithea/model/notification.py:309 -#, fuzzy, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "[comentado] no pull request para" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 #, fuzzy msgid "Closing" msgstr "Usando" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, fuzzy, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "%(user)s solicita sua revisão no pull request $%(pr_id)s: %(pr_title)s" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +#, fuzzy +#| msgid "Create Pull Request" +msgid "Cannot create empty pull request" +msgstr "Criar Pull Request" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +#, fuzzy +#| msgid "Confirm to delete this pull request" +msgid "You are not authorized to create the pull request" +msgstr "Confirme para excluir este pull request" + +#: kallithea/model/pull_request.py:341 +msgid "Missing changesets since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:348 +#, python-format +msgid "New changesets on %s %s since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, python-format +msgid "No changes found on %s %s since previous iteration." +msgstr "" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "tip mais recente" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "Novo registro de usuário" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 #, fuzzy msgid "You can't remove this user since it is crucial for the entire application" msgstr "" "Você não pode remover esse usuário, pois ele é crucial para toda a " "aplicação" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, fuzzy, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " @@ -2018,7 +1730,7 @@ "usuário \"%s\" ainda é dono de %s repositórios e não pode ser removido. " "Troque os donos ou remova esses repositórios. %s" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, fuzzy, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" @@ -2027,7 +1739,7 @@ "usuário \"%s\" ainda é dono de %s repositórios e não pode ser removido. " "Troque os donos ou remova esses repositórios. %s" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, fuzzy, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " @@ -2036,37 +1748,37 @@ "usuário \"%s\" ainda é dono de %s repositórios e não pode ser removido. " "Troque os donos ou remova esses repositórios. %s" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "Link para trocar senha" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 #, fuzzy msgid "Password reset notification" msgstr "Link para trocar senha" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "O valor não pode ser uma lista vazia" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "O username \\\"%(username)s\\\" já existe" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, fuzzy, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "O username \"%(username)s\" não é válido" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 #, fuzzy msgid "" "Username may only contain alphanumeric characters underscores, periods or" @@ -2075,25 +1787,25 @@ "Nome de usuário pode conter somente caracteres alfanuméricos, sublinha, " "pontos e hífens e deve iniciar com caractere alfanumérico" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "O username \"%(username)s\" não é válido" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "Nome inválido de grupo de usuários" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "O grupo de usuários \"%(usergroup)s\" já existe" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" @@ -2102,107 +1814,107 @@ "underscores, pontos ou hífens, e deve começar om um caractere alfa-" "numérico" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "Não é possível associar esse grupo como progenitor" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "O grupo \\\"%(group_name)s\\\" já existe" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "Um repositório com o nome \"%(group_name)s\" já existe" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "Caracteres inválidos (não-ascii) na senha" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "Senhas não conferem" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 #, fuzzy msgid "Invalid username or password" msgstr "senha inválida" -#: kallithea/model/validators.py:331 +#: kallithea/model/validators.py:310 msgid "Token mismatch" msgstr "Descompasso de Token" -#: kallithea/model/validators.py:345 +#: kallithea/model/validators.py:326 #, fuzzy, python-format msgid "Repository name %(repo)s is not allowed" msgstr "O nome de repositório %(repo)s não é permitido" -#: kallithea/model/validators.py:347 +#: kallithea/model/validators.py:328 #, python-format msgid "Repository named %(repo)s already exists" msgstr "Um repositório chamado %(repo)s já existe" -#: kallithea/model/validators.py:348 +#: kallithea/model/validators.py:329 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "Um repositório \"%(repo)s\" já existe no grupo \"%(group)s\"" -#: kallithea/model/validators.py:350 +#: kallithea/model/validators.py:331 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "Um Grupo de Repositórios chamado \"%(repo)s\" já existe" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 #, fuzzy msgid "Invalid repository URL" msgstr "repositório privado" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "A bifurcação deve ser do mesmo tipo que o pai" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "Você não tem permissão para criar um repositório neste grupo" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "você não tem permissão para criar um repositório na raiz" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "Você não tem permissão para criar um grupo neste local" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "Este nome de usuário ou de grupo de usuários não é válido" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "Esse não é um caminho válido" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 #, fuzzy msgid "This email address is already in use" msgstr "Esse endereço de e-mail já está tomado" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, fuzzy, python-format msgid "Email address \"%(email)s\" not found" msgstr "o e-mail \"%(email)s\" não existe." -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" @@ -2210,283 +1922,270 @@ "O atributo de login LDAP do CN deve ser especificado - isto é o nome do " "atributo que é equivalente ao 'nome de usuário'" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "Por favor, forneça um endereço válido IPv4 ou IPv6" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "O tamanho da rede (bits) deve estar no intervalo 0-32 (não %(bits)r)" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "O nome da chave só pode conter letras, underscore, hífen ou dígitos" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "O nome de arquivo não pode estar dentro de um diretório" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "Painel de Controle" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "filtro rápido..." - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "repositórios" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "Você tem direitos de administrador neste grupo e pode editá-lo" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository group" +msgid "Repository Group" +msgstr "Grupo de repositórios" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "Descrição" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "Nome" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "Repositório" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "Última Alteração" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "Ponta" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "Dono" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "Clique para ordenar em ordem crescente" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "Clique para ordenar em ordem descrescente" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "Nenhum repositório encontrado." - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "Erro de dados." - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "Carregando..." - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "Entrar" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "Log in em %s" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "Nome de usuário" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "Senha" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "Lembre-se de mim" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "Esqueceu sua senha ?" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "Não possui uma conta ?" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "Entrar" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "Senha Trocada" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, fuzzy, python-format msgid "Reset Your Password to %s" msgstr "" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 #, fuzzy msgid "Reset Your Password" msgstr "Esqueceu sua senha ?" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 #, fuzzy msgid "Send Password Reset Email" msgstr "Link para trocar senha" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 #, fuzzy msgid "" "A password reset link will be sent to the specified email address if it " @@ -2495,119 +2194,138 @@ "Link de reinicialização de senha será enviado ao endereço de e-mail " "correspondente" -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 #, fuzzy msgid "New Password" msgstr "Nova senha" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 #, fuzzy msgid "Confirm New Password" msgstr "Sua nova senha" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "Inscrever-se" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "Repita a senha" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "Primeiro Nome" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "Último Nome" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "E-mail" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "Ainda não há ramos" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "Ramos Fechados" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "Ainda não há etiquetas" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "Ainda não há marcadores" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 #, fuzzy msgid "Admin Journal" msgstr "Diário do administrador" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "filtro de diário..." #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 #, fuzzy msgid "Filter" msgstr "filtro" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, fuzzy, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2615,116 +2333,138 @@ msgstr[1] "%s entradas" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "Ação" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "Repositório" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "Data" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "A partir do IP" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "Ainda não há ações" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "Salvar" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 #, fuzzy msgid "Repository Defaults" msgstr "Padrões de repositórios" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "Tipo" -#: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 msgid "Private repository" msgstr "Repositório privado" -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -2732,34 +2472,40 @@ "Repositórios privados são visíveis somente por pessoas explicitamente " "adicionadas como colaboradores." -#: kallithea/templates/admin/defaults/defaults.html:53 -#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 msgid "Enable statistics" msgstr "Habilitar estatísticas" -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 msgid "Enable statistics window on summary page." msgstr "Habilitar janela de estatísticas na página de sumário." -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 msgid "Enable downloads" msgstr "Habilitar downloads" -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 msgid "Enable download menu on summary page." msgstr "Habilitar menu de descarregar na página de sumário." -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 msgid "Enable locking" msgstr "Habilitar travas" -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "Habilitar trava-por-pulling no repositório." @@ -2768,45 +2514,63 @@ msgid "Edit Gist" msgstr "" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "Descrição do gist ..." -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "Tempo de vida do Gist" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "Expira" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 #, fuzzy msgid "Never" msgstr "nunca" @@ -2816,278 +2580,411 @@ msgstr "" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "Cancelar" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, fuzzy, python-format msgid "Private Gists for User %s" msgstr "Gists privados do usuário %s" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, fuzzy, python-format msgid "Public Gists for User %s" msgstr "Gists públicos do usuário %s" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "Gists Públicos" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "Criado" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "Não há nenhum gist ainda" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "Limpar" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "Gist" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "URL" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "Excluir" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "Editar" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "Editar" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "criado" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "Mostrar original" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "Minha Conta" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 #, fuzzy msgid "Email Addresses" msgstr "Novo endereço de email" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 #, fuzzy msgid "Owned Repositories" msgstr "repositórios" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 #, fuzzy msgid "Watched Repositories" msgstr "Criar repositórios" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 #, fuzzy msgid "Show Permissions" msgstr "Copiar permissões" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, fuzzy, python-format msgid "Confirm to reset this API key: %s" msgstr "Confirme para excluir este IP: %s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 #, fuzzy msgid "Expired" msgstr "Expira" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, fuzzy, python-format msgid "Confirm to remove this API key: %s" msgstr "Confirme para excluir este IP: %s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 #, fuzzy msgid "Remove" msgstr "Removido" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 #, fuzzy msgid "New API key" msgstr "Próxima chave de campo" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "Adicionar" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "Confirme para excluir este email: %s" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "Novo endereço de email" @@ -3096,135 +2993,178 @@ msgid "Change Your Account Password" msgstr "Sua nova senha" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "Nova senha" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, fuzzy, python-format +#| msgid "Change your avatar at" +msgid "Change %s avatar at" msgstr "Altere o seu avatar em" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "Usando" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 #, fuzzy msgid "Repositories You Own" msgstr "Nenhum repositório encontrado." -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." -msgstr "Nenhum registro encontrado." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "Nome" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 #, fuzzy msgid "Repositories You are Watching" msgstr "Localização dos repositórios" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "Minhas Notificações" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "Todos" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "Comentários" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "Pull Requests" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 #, fuzzy msgid "Mark All Read" msgstr "Marcar tudo como lido" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +#, fuzzy +#| msgid "Mark All Read" +msgid "Mark as read" +msgstr "Marcar tudo como lido" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "Ainda não há notificações aqui" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 #, fuzzy msgid "Show Notification" msgstr "Mostrar notificação" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "Notificações" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 #, fuzzy msgid "Default Permissions" msgstr "Permissões padrão" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "Acesso anônimo" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " @@ -3234,24 +3174,30 @@ "permissão escolhida, note que todas as permissões padrão customizadas nos" " repositórios serão perdidas" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "Repositório existente?" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "Grupo de repositórios" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " @@ -3261,21 +3207,26 @@ "modificadas para a permissão escolhida, note que todas as permissões " "padrão customizadas em grupos de repositórios serão perdidas" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 #, fuzzy msgid "Apply to all existing repository groups" msgstr "Grupo de repositórios %s atualizado" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "Grupo de usuários" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 #, fuzzy msgid "" "All default permissions on each user group will be reset to chosen " @@ -3286,108 +3237,137 @@ " as permissões escolhidas. Note que todas as permissões padrão " "customizadas nos repositórios serão perdidas" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 msgid "Permissions for the Default user on new user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 #, fuzzy msgid "Top level repository creation" msgstr "Criação de repositório" -#: kallithea/templates/admin/permissions/permissions_globals.html:64 +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 msgid "Enable this to allow non-admins to create repositories at the top level." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:65 +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 msgid "" "Note: This will also give all users API access to create repositories " "everywhere. That might change in future versions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "Criação de grupo de usuários" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "Bifurcação de repositório" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "Registro" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "Ativação de autenticação de conta externa" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "Confirme para excluir este IP: %s" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 #, fuzzy msgid "All IP addresses are allowed." msgstr "Todos os endereços IP são permitidos" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "Novo endereço IP" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "Nome do grupo" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "Progenitor do grupo" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3396,31 +3376,42 @@ msgid "%s Repository Group Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "Configurações" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "Permissões" @@ -3444,12 +3435,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "Criado em" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3460,8 +3453,30 @@ msgid "Delete this repository group" msgstr "" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#, fuzzy +#| msgid "Disabled" +msgid "Visible" +msgstr "Desabilitado" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "No response" +msgid "Add repos" +msgstr "revisões" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +#, fuzzy +#| msgid "Add user group" +msgid "Add/Edit groups" +msgstr "Adicionar grupo de usuários" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 #, fuzzy msgid "User/User Group" @@ -3469,8 +3484,8 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 #, fuzzy @@ -3479,36 +3494,36 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 #, fuzzy msgid "Revoke" msgstr "revogar" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "Adicionar novo" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 #, fuzzy msgid "Apply to children" msgstr "aplicar aos filhos" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" @@ -3516,75 +3531,87 @@ "Habilitar trava-por-pulling no grupo. Esta opção será aplicada a todos os" " outros grupos e repositórios dentro deles" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 #, fuzzy msgid "Remove this group" msgstr "Criar grupos de usuários" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 #, fuzzy msgid "Confirm to delete this group" msgstr "Confirme para excluir este grupo de usuário: %s" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "Repository group" +msgid "Repository group %s" +msgstr "Grupo de repositórios" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "Início" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "com" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 #, fuzzy msgid "Repository Groups Administration" msgstr "Administração de grupos de repositórios" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 #, fuzzy msgid "Number of Top-level Repositories" msgstr "Número de repositórios de nível superior" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "repositório [criado]" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" "Seja sucinto e objetivo. Use um arquivo README para descrições mais " "longas." -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "Opcionalmente selecione um grupo no qual colocar esse repositório." -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "Tipo de repositório a criar." -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "Revisão de pouso" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3613,63 +3640,76 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, fuzzy, python-format msgid "%s Repository Settings" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 #, fuzzy msgid "Extra Fields" msgstr "Campos extras" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "Remoto" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "Estatísticas" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 #, fuzzy msgid "Parent" msgstr "Progenitor do grupo" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 #, fuzzy msgid "Manually set this repository as a fork of another from the list." msgstr "" "Marque manualmente este repositório como uma bifurcação de um outro da " "lista" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 #, fuzzy msgid "Public Journal Visibility" msgstr "diário público" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "Remover do diário público" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 #, fuzzy msgid "Add to Public Journal" msgstr "diário público" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 #, fuzzy msgid "" "All actions done in this repository will be visible to everyone in the " @@ -3678,41 +3718,49 @@ "Todas as ações feitas nesse repositório serão acessíveis a todos no " "diário público" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 #, fuzzy msgid "Change Locking" msgstr "Habilitar travas" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 #, fuzzy msgid "Confirm to unlock repository." msgstr "Confirme para destravar repositório" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 #, fuzzy msgid "Unlock Repository" msgstr "Repositório público" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 #, python-format msgid "Locked by %s on %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 #, fuzzy msgid "Confirm to lock repository." msgstr "Confirme para travar repositório" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 #, fuzzy msgid "Lock Repository" msgstr "Repositório público" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "Repositório não está travado" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3720,33 +3768,40 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "Confirma excluir esse repositório: %s" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 #, fuzzy msgid "Delete this Repository" msgstr "[excluir] repositório" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, fuzzy, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" msgstr[0] "este repositório tem %s bifurcação" msgstr[1] "este repositório tem %s bifurcações" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "Desassociar bifurcações" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "Excluir bifurcações" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3758,12 +3813,7 @@ msgid "Invalidate Repository Cache" msgstr "Invalidar cache do repositório" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -#, fuzzy -msgid "Confirm to invalidate repository cache." -msgstr "Confirma invalidar cache do repositório" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 #, fuzzy msgid "" "Manually invalidate cache for this repository. On first access, the " @@ -3772,102 +3822,112 @@ "Invalidar manualmente o cache deste repositório. No próximo acesso o " "repositório será cacheado novamente" -#: kallithea/templates/admin/repos/repo_edit_caches.html:12 +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 #, fuzzy msgid "List of Cached Values" msgstr "Lista de valores cacheados" -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 +#: kallithea/templates/admin/repos/repo_edit_caches.html:12 msgid "Prefix" msgstr "Prefixo" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "Chave" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "Ativo" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "Confirme para excluir este campo: %s" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "Próxima chave de campo" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "Próximo rótulo de campo" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "Entre com o rótulo curto" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "Nova descrição de campo" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "Entre com a descrição de um campo" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 #, fuzzy msgid "Extra fields are disabled." msgstr "Registro desabilitado" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 #, fuzzy msgid "Private Repository" msgstr "repositório privado" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "[forked] repository" +msgid "Fork of repository" +msgstr "repositório [bifurcado]" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 #, fuzzy msgid "Remote repository URL" msgstr "Repositório %s criado" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 #, fuzzy msgid "Pull Changes from Remote Repository" msgstr "[pulled do remote] no repositório" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 #, fuzzy msgid "Confirm to pull changes from remote repository." msgstr "Confirma realizar pull de alterações a partir de lado remoto" -#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 #, fuzzy msgid "Permanent Repository ID" msgstr "repositório privado" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3877,35 +3937,35 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 #, fuzzy msgid "Remote repository" msgstr "repositório [criado]" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 #, fuzzy msgid "Repository URL" msgstr "Repositório" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "Revisão padrão para página de arquivos, downloads, whoosh e readme" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "Mudar o dono desse repositório." -#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 msgid "Processed commits" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 +#: kallithea/templates/admin/repos/repo_edit_statistics.html:6 msgid "Processed progress" msgstr "" @@ -3920,285 +3980,339 @@ msgstr "Confirma remover atuais estatísticas" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 #, fuzzy msgid "Repositories Administration" msgstr "Administração de repositórios" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 #, fuzzy msgid "Settings Administration" msgstr "Administração de configurações" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "Ganchos" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "Enviar" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "Marca do site" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "Realm de autenticação HTTP" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 #, fuzzy msgid "Save Settings" msgstr "Salvar configurações" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 #, fuzzy msgid "Custom Hooks" msgstr "Ganchos customizados" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "Falha ao remover gancho" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" +#: kallithea/templates/admin/settings/settings_mapping.html:4 +#, fuzzy +#| msgid "Rescan option" +msgid "Rescan options" msgstr "Opção de varredura" -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 #, fuzzy msgid "Delete records of missing repositories" msgstr "Buscar nos repositórios" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "Invalidar o cache para todos os repositórios" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 #, fuzzy msgid "Check this to reload data and clear cache keys for all repositories." msgstr "Invalidar o cache para todos os repositórios" -#: kallithea/templates/admin/settings/settings_mapping.html:23 +#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 msgid "Install Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "Opção de construção do índice" -#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 msgid "Build from scratch" msgstr "Construir do zero" -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "Reindexar" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Kallithea version" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." msgstr "" #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Kallithea version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 -#, fuzzy -msgid "Git version" -msgstr "Editar Permissão" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" +msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:10 -msgid "Upgrade info endpoint" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +#, fuzzy +msgid "Git version" +msgstr "Editar Permissão" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 +msgid "Upgrade info endpoint" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "Web" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "Requer SSL para operações de VCS" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "Mostrar tamanho do repositório após o push" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "Armazenar registro de comandos de push dos usuários" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "Armazenar registro de comandos de pull dos usuários" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "Atualizar repositório após realizar push (hg update)" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 #, fuzzy msgid "Mercurial extensions" msgstr "Extensões do Mercurial" -#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 msgid "Enable largefiles extension" msgstr "Habilitar extensão largefiles" -#: kallithea/templates/admin/settings/settings_vcs.html:51 +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 msgid "Enable hgsubversion extension" msgstr "Habilitar extensão hgsubversion" -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 #, fuzzy msgid "Location of repositories" msgstr "Criar repositórios" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." @@ -4206,37 +4320,44 @@ "Clique para destravar. Você deve reiniciar o Kallithea para que esta " "configuração tenha efeito." -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "Geral" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "Usar campos extras do repositório" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "Permite armazenar campos customizados adicionais por repositório." -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "Mostrar versão do Kallithea" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4253,103 +4374,128 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +#, fuzzy +msgid "Clone URL" +msgstr "URL de clonagem" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "Itens do dashboard" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repository Size" +msgid "Repository page size" +msgstr "Tamanho do Repositório" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "Ícones" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "Mostrar ícone de repositório público nos repositórios" -#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 msgid "Show private repository icon on repositories" msgstr "Mostrar ícone de repositório privado nos repositórios" -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 #, fuzzy msgid "Show public/private icons next to repository names." msgstr "Mostrar ícone de repositório público nos repositórios" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 #, fuzzy msgid "Meta Tagging" msgstr "Meta-Tagging" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "Adicionar grupo de usuários" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 #, fuzzy msgid "Show Members" msgstr "membros" @@ -4360,13 +4506,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "Membros" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "Confirme para excluir este grupo de usuário: %s" @@ -4375,49 +4523,60 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "Nenhum membro ainda" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "Membros escolhidos do grupo" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "Membros disponíveis" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 #, fuzzy msgid "User Groups Administration" msgstr "Administração de grupos de usuários" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "Adicionar usuário" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "Usuários" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "Confirmação de senha" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4427,12 +4586,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4441,7 +4602,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "Confirma excluir este usuário: %s" @@ -4450,997 +4612,1295 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "Confirmação de nova senha" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 #, fuzzy msgid "Users Administration" msgstr "Administração de usuários" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "Instância de servidor: %s" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "Repositório Mercurial" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "Repositório Git" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 #, fuzzy msgid "Create Fork" msgstr "Excluir bifurcações" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "Sumário" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "Registro de alterações" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "Arquivos" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "Trocar Para" - -#: kallithea/templates/base/base.html:145 -#: kallithea/templates/base/base.html:147 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 msgid "Options" msgstr "Opções" -#: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 #, fuzzy msgid "Compare Fork" msgstr "Compare bifurcação" -#: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 msgid "Compare" msgstr "Compare" -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 #: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 msgid "Search" msgstr "Pesquisar" -#: kallithea/templates/base/base.html:163 +#: kallithea/templates/base/base.html:155 +#: kallithea/tests/data/templates/base/base.html.py:399 msgid "Unlock" msgstr "Destravar" +#: kallithea/templates/base/base.html:157 +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" +msgstr "Travar" + #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "Travar" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "Seguir" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "Parar de seguir" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "Bifurcação" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "Criar Pull Request" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "Mostrar Pull Requests para %s" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "Trocar Para" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "Mostrar atividade recente" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "Diário público" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "Mostrar gists públicos" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "Gists" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 #, fuzzy msgid "All Public Gists" msgstr "Todos os gists públicos" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 #, fuzzy msgid "My Public Gists" msgstr "Meus gists públicos" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 #, fuzzy msgid "My Private Gists" msgstr "Meus gists privados" -#: kallithea/templates/base/base.html:246 +#: kallithea/templates/base/base.html:319 +#: kallithea/tests/data/templates/base/base.html.py:540 msgid "Search in repositories" msgstr "Buscar nos repositórios" -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 #: kallithea/templates/pullrequests/pullrequest_show_my.html:6 #: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 #, fuzzy msgid "My Pull Requests" msgstr "Pull requests" -#: kallithea/templates/base/base.html:289 +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 #, fuzzy msgid "Not Logged In" msgstr "Não logado" -#: kallithea/templates/base/base.html:296 +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 #, fuzzy msgid "Login to Your Account" msgstr "Entrar com sua conta" -#: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" +#: kallithea/templates/base/base.html:385 +#, fuzzy +#| msgid "Forgot password ?" +msgid "Forgot password?" msgstr "Esqueceu a senha ?" -#: kallithea/templates/base/base.html:346 +#: kallithea/templates/base/base.html:389 +#, fuzzy +#| msgid "Don't have an account ?" +msgid "Don't have an account?" +msgstr "Não possui uma conta ?" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "Sair" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 #, fuzzy msgid "Inherit defaults" msgstr "Padrões de repositórios" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "Criar repositórios" -#: kallithea/templates/base/default_perms_box.html:33 +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 msgid "Select this option to allow repository creation for this user" msgstr "" "Selecione esta opção para permitir a criação de repositórios para este " "usuário" -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/templates/base/default_perms_box.html:33 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "Criar grupos de usuários" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" "Selecione esta opção para permitir a criação de grupos de usuários para " "este usuário" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "Bufurcar repositórios" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" "Selecione esta opção para permitir a bifurcação de repositórios para este" " usuário" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "Mostrar" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "Nenhuma permissão definida ainda" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "Permissão" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "Editar Permissão" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 +#: kallithea/templates/base/root.html:25 +#: kallithea/tests/data/templates/base/root.html.py:85 #, fuzzy msgid "Add Another Comment" msgstr "Adicionar outro comentário" -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 +#: kallithea/templates/base/root.html:26 +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 msgid "Stop following this repository" msgstr "Parar de seguir este repositório" -#: kallithea/templates/base/root.html:24 +#: kallithea/templates/base/root.html:27 +#: kallithea/tests/data/templates/base/root.html.py:89 msgid "Start following this repository" msgstr "Passar a seguir este repositório" -#: kallithea/templates/base/root.html:25 +#: kallithea/templates/base/root.html:28 +#: kallithea/tests/data/templates/base/root.html.py:91 msgid "Group" msgstr "Grupo" -#: kallithea/templates/base/root.html:26 +#: kallithea/templates/base/root.html:29 +#: kallithea/tests/data/templates/base/root.html.py:93 msgid "members" msgstr "membros" -#: kallithea/templates/base/root.html:27 +#: kallithea/templates/base/root.html:30 +#: kallithea/tests/data/templates/base/root.html.py:95 msgid "Loading ..." msgstr "Carregando..." -#: kallithea/templates/base/root.html:28 +#: kallithea/templates/base/root.html:31 +#: kallithea/tests/data/templates/base/root.html.py:97 msgid "loading ..." msgstr "carregando ..." -#: kallithea/templates/base/root.html:29 +#: kallithea/templates/base/root.html:32 +#: kallithea/tests/data/templates/base/root.html.py:99 msgid "Search truncated" msgstr "Busca truncada" -#: kallithea/templates/base/root.html:30 +#: kallithea/templates/base/root.html:33 +#: kallithea/tests/data/templates/base/root.html.py:101 msgid "No matching files" msgstr "Nenhum arquivo encontrado" -#: kallithea/templates/base/root.html:31 +#: kallithea/templates/base/root.html:34 +#: kallithea/tests/data/templates/base/root.html.py:103 #, fuzzy msgid "Open New Pull Request from {0}" msgstr "Comentar no pull request #%s" -#: kallithea/templates/base/root.html:32 +#: kallithea/templates/base/root.html:35 +#: kallithea/tests/data/templates/base/root.html.py:105 msgid "Open New Pull Request for {0} → {1}" msgstr "" -#: kallithea/templates/base/root.html:33 +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 #, fuzzy msgid "Show Selected Changesets {0} → {1}" msgstr "Mostrar changesets selecionados __S -> __E" -#: kallithea/templates/base/root.html:34 +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 #, fuzzy msgid "Selection Link" msgstr "Link da seleção" -#: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 +#: kallithea/templates/base/root.html:38 +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 #, fuzzy msgid "Collapse Diff" msgstr "Colapsar diff" -#: kallithea/templates/base/root.html:36 +#: kallithea/templates/base/root.html:39 +#: kallithea/tests/data/templates/base/root.html.py:113 #, fuzzy msgid "Expand Diff" msgstr "Expandir diff" -#: kallithea/templates/base/root.html:37 +#: kallithea/templates/base/root.html:40 +#: kallithea/tests/data/templates/base/root.html.py:115 msgid "Failed to revoke permission" msgstr "Falhou ao revocar a permissão" -#: kallithea/templates/base/root.html:38 +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 #, fuzzy msgid "Confirm to revoke permission for {0}: {1} ?" msgstr "confirme para revogar permissão para {0}: {1} ?" -#: kallithea/templates/base/root.html:39 -msgid "enabled" -msgstr "" - -#: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "" - -#: kallithea/templates/base/root.html:42 +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 #, fuzzy msgid "Specify changeset" msgstr "%s Changeset" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "%s Bookmarks" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "Autor" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "Revisão" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "%s Ramos" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" -msgstr "" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "Clique para ordenar em ordem crescente" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "Clique para ordenar em ordem descrescente" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "Nenhum registro encontrado." + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "Erro de dados." + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." +msgstr "Carregando..." #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "%s Changelog" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "mostrando %d de %d revisão" msgstr[1] "mostrando %d de %d revisões" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "Deselecionar seleção" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 #, fuzzy msgid "Go to tip of repository" msgstr "Confirme para travar repositório" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "Comparar bifurcação com %s" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, fuzzy, python-format msgid "Compare fork with parent repository (%s)" msgstr "Comparar bifurcação com %s" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 #, fuzzy msgid "Branch filter:" msgstr "filtro" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, fuzzy, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" "Estado do changeset: %s\n" "Clique para abrir os pull request #%s associado" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, fuzzy, python-format +msgid "Changeset status: %s by %s" msgstr "Estado do changeset: %s" -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "O changeset tem comentários" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "Bookmark %s" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "Tag %s" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "Ramo %s" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "Ainda não há alteações" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "Removido" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "Modificado" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "Adicionado" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "Afetados %s arquivos" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "Revisão" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "Idade" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "Autor" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "Refs" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "Adicionar ou enviar arquivos diretamente pelo Kallithea" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 #, fuzzy msgid "Push new repository" msgstr "Fazer push de novo repositório" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "Repositório existente?" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "%s Changeset" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "Estado do changeset" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "Diff cru" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "D" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "Baixar diff" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 #, fuzzy msgid "Merge" msgstr "mesclar" -#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 #, fuzzy msgid "Grafted from:" msgstr "Criado em" -#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 msgid "Transplanted from:" msgstr "" -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 #, fuzzy msgid "Replaced by:" msgstr "criado" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 #, fuzzy msgid "Preceded by:" msgstr "criado" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "%s arquivo modificado" msgstr[1] "%s arquivos modificados" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" msgstr[0] "%s arquivo modificado com %s inserções e %s exclusões" msgstr[1] "%s arquivos modificados com %s inserções e %s exclusões" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 #, fuzzy msgid "Show full diff anyway" msgstr "Mostrar diff completo" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 #, fuzzy msgid "No revisions" msgstr "revisões" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 #, fuzzy msgid "on pull request" msgstr "Comentar no pull request #%s" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 #, fuzzy msgid "No title" msgstr "novo arquivo" -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "Nenhum changeset" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 #, fuzzy msgid "Delete comment?" msgstr "%d comentário" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "Mudanças mais recentes" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +#, fuzzy +msgid "Commenting on line." msgstr "Comentando a linha {1}." -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "Comentários interpretados usando a sintaxe %s com suporte a %s." - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -#, fuzzy -msgid "Use @username inside this text to notify another user" +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +#, fuzzy +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." msgstr "" "Use @nomedeusuário dentro desse texto para enviar notificação a este " "usuário do Kallithea" -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "Visualizar comentário" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +#, fuzzy +msgid "Set changeset status" +msgstr "Altere o estado do changeset" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "Vote para estado do pull request" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +#, fuzzy +msgid "No change" +msgstr "Sem modificações" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "Comentar no pull request #%s" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +#, fuzzy +msgid "Close" +msgstr "(fechado)" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 #, fuzzy msgid "Submitting ..." msgstr "Enviando..." -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "Comentário" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "Visualizar" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "Você precisa estar logado para comentar." -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "Entrar agora" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "Ocultar" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d comentário" msgstr[1] "%d comentários" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, fuzzy, python-format msgid "%d inline" msgid_plural "%d inline" msgstr[0] "(%d em linha)" msgstr[1] "(%d em linha)" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, fuzzy, python-format msgid "%d general" msgid_plural "%d general" msgstr[0] "" msgstr[1] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -#, fuzzy -msgid "Use @username inside this text to notify another user." -msgstr "" -"Use @nomedeusuário dentro desse texto para enviar notificação a este " -"usuário do Kallithea" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "Vote para estado do pull request" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -#, fuzzy -msgid "Set changeset status" -msgstr "Altere o estado do changeset" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -#, fuzzy -msgid "No change" -msgstr "Sem modificações" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -#, fuzzy -msgid "Close" -msgstr "(fechado)" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "%s Changesets" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "Estado do changeset: %s" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "Arquivos afetados" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 -msgid "Show full diff for this file" -msgstr "Mostrar diff completo para este arquivo" - -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 -msgid "Show full side-by-side diff for this file" -msgstr "Mostrar diff completo lado-a-lado para este arquivo" - -#: kallithea/templates/changeset/diff_block.html:38 -msgid "Show inline comments" -msgstr "Mostrar comentários inline" - -#: kallithea/templates/changeset/diff_block.html:86 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +#, fuzzy +#| msgid "file removed" +msgid "File before" +msgstr "arquivo removido" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "Última alteração" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 #, fuzzy msgid "Deleted" msgstr "excluir" -#: kallithea/templates/changeset/diff_block.html:89 +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 #, fuzzy msgid "Renamed" msgstr "renomear" +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Revisão desconhecida %s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "Nenhum nome de arquivo" + +#: kallithea/templates/changeset/diff_block.html:55 +#, fuzzy +#| msgid "file added" +msgid "File after" +msgstr "arquivo adicionado" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 +msgid "Show full diff for this file" +msgstr "Mostrar diff completo para este arquivo" + +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 +msgid "Show full side-by-side diff for this file" +msgstr "Mostrar diff completo lado-a-lado para este arquivo" + +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 +msgid "Show inline comments" +msgstr "Mostrar comentários inline" + #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "Nenhum changeset" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "Antecessor" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +#, fuzzy +#| msgid "Common ancestor" +msgid "Merge Ancestor" +msgstr "Comentário no changeset" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 #, fuzzy msgid "Show merge diff" msgstr "Mostrar diff completo" -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -#, fuzzy -msgid "Common ancestor" -msgstr "Comentário no changeset" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 #, fuzzy msgid "is" msgstr "Gist" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, fuzzy, python-format msgid "%s changesets" msgstr "%s Changesets" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 #, fuzzy msgid "behind" msgstr "Reindexar" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "%s Comparar" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" msgstr[0] "Mostrando %s commit" msgstr[1] "Mostrando %s commits" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "Mostrar diff completo" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "Repositório público" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "Nenhum conjunto de alterações ainda." -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "Assinar o feed rss de %s" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "Assinar o feed atom de %s" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "%(user)s comentou no changeset em %(when)s" + +#: kallithea/templates/email_templates/changeset_comment.html:4 #, fuzzy, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "O estado do changeset foi alterado para" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Comment on Changeset \"%s\"" +msgstr "%(user)s comentou no changeset em %(when)s" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset flow" +msgid "Changeset on" +msgstr "Fluxo de changesets" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "Ramo" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "Mudanças mais recentes" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "Repository has been locked" +msgid "The pull request has been closed." +msgstr "Repositório não está travado" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "Olá %s" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 #, fuzzy msgid "We have received a request to reset the password for your account." msgstr "Recebemos uma requisição para criar uma nova senha para sua conta." -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 +#: kallithea/templates/email_templates/pull_request.html:4 #, fuzzy, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, fuzzy, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#| msgid "[commented] on pull request for" +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "[comentado] no pull request para" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "Comentar no pull request #%s" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +#, fuzzy +#| msgid "Date" +msgid "at" +msgstr "Data" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 #, fuzzy, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -#, fuzzy -msgid "The comment closed the pull request with status" -msgstr "%s comentou no pull request \"%s\"" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -#, fuzzy -msgid "The comment was made with status" -msgstr "O pull request foi fechado com o estado" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" -msgstr "Veja este usuário aqui" +#| msgid "%(user)s commented on pull request %(age)s" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "%(user)s comentou no pull request em %(when)s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Pull request %s from %s#%s" +msgid "Pull Request %s \"%s\" Closed" +msgstr "Pull requests de %s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "[commented] on pull request for" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "[comentado] no pull request para" + +#: kallithea/templates/email_templates/registration.html:22 +#, fuzzy +#| msgid "Group name" +msgid "Full Name" +msgstr "Nome do grupo" #: kallithea/templates/files/diff_2way.html:15 #, python-format @@ -5458,84 +5918,107 @@ msgstr "%s Diff de Arquivo" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "%s Arquivos" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "%s Adicionar Arquivos" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "Local" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "ou" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +#, fuzzy +msgid "New file type" +msgstr "novo arquivo" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 #, fuzzy msgid "Commit Changes" msgstr "Realizar commit das alterações" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "Revisão anterior" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "Próxima revisão" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "Seguir o ramo atual" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "Carregando lista de arquivos..." -#: kallithea/templates/files/files_browser.html:61 +#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 msgid "Size" msgstr "Tamanho" -#: kallithea/templates/files/files_browser.html:62 +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 msgid "Last Revision" msgstr "Última revisão" -#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 #, fuzzy msgid "Last Modified" msgstr "Última alteração" -#: kallithea/templates/files/files_browser.html:64 +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 #, fuzzy msgid "Last Committer" msgstr "Último commiter" @@ -5546,7 +6029,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "" @@ -5559,103 +6042,134 @@ msgid "Edit file" msgstr "Editar arquivo" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "Fonte" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "Editando arquivo" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "%s autor" msgstr[1] "%s autores" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" -msgstr "" - -#: kallithea/templates/files/files_source.html:41 +#: kallithea/templates/files/files_source.html:34 +#, fuzzy, python-format +#| msgid "Deleted branch: %s" +msgid "Edit on Branch: %s" +msgstr "Excluído ramo: %s" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 msgid "Editing binary files not allowed" msgstr "" -#: kallithea/templates/files/files_source.html:44 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 msgid "Editing files allowed only when on branch head revision" msgstr "" "A edição de arquivos só é permitida quando se está na revisão mais " "recente do ramo" -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/files/files_source.html:41 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "Arquivo binário (%s)" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +#, fuzzy +msgid "File is too big to display." +msgstr "Arquivo é grande demais para exibir" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +#, fuzzy +msgid "Show full annotation anyway." +msgstr "Mostrar diff completo" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" -msgstr "Arquivo é grande demais para exibir" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +#, fuzzy +msgid "Show as raw." +msgstr "Mostrar original" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "anotação" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "Nenhum arquivo no caminho especificado" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "%s Seguidores" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "Seguidores" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "Começou a seguir -" @@ -5664,71 +6178,81 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "Nome da bifurcação" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 #, fuzzy msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "Revisão padrão para página de arquivos, downloads, whoosh e readme" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "Privado" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "Copiar permissões" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "Copiar permissões do repositório bifurcado" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "Atualizar após clonar" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "Checkout fontes depois de criar o clone" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "%s Bifurcações" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "Bifurcações" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "Bifurcado" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "Ainda não há bifurcações" -#: kallithea/templates/journal/journal.html:21 +#: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 msgid "ATOM journal feed" msgstr "ATOM feed do diário" -#: kallithea/templates/journal/journal.html:22 +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "RSS feed do diário" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "Ainda não há entradas" @@ -5742,35 +6266,46 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 #, fuzzy msgid "New Pull Request" msgstr "Novo pull request" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "Título" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "Escreva uma breve descrição para este pull request" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "Fluxo de changesets" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "Repositório origem" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "Repositório de destino" @@ -5807,7 +6342,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "Fechado" @@ -5826,123 +6363,163 @@ msgstr "Confirme para excluir este pull request" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, fuzzy, python-format msgid "%s Pull Request %s" msgstr "%s Pull Request #%s" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, fuzzy, python-format msgid "Pull request %s from %s#%s" msgstr "Pull requests de %s" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 #, fuzzy msgid "Summarize the changes" msgstr "Realizar commit das alterações" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "Estado do pull request calculado a partir dos votos" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "Estado do pull request calculado a partir dos votos" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "Ainda não revisado por" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "%d revisor" msgstr[1] "%d revisores" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "O pull request foi revisado por todos os revisores" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 #, fuzzy msgid "There are no reviewers" msgstr "Ainda não há ramos" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 #, fuzzy msgid "on" msgstr "nenhum" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "Puxar mudanças" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -#, fuzzy -msgid "Update" -msgstr "usuário [atualizado]" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +#, fuzzy +#| msgid "Registration" +msgid "Next iteration" +msgstr "Registro" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +#, fuzzy +msgid "Cancel Changes" +msgstr "Mudanças mais recentes" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 #, fuzzy msgid "Pull Request Reviewers" msgstr "Revisores do pull request" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 #, fuzzy msgid "Remove reviewer" msgstr "revisor" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 #, fuzzy msgid "Potential Reviewers" msgstr "Visualizar comentário" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -#, fuzzy -msgid "Save as New Pull Request" -msgstr "Crie novo pull request" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -#, fuzzy -msgid "Cancel Changes" -msgstr "Mudanças mais recentes" - -#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 #, fuzzy msgid "Pull Request Content" msgstr "O pull request mudou de estado" +#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +#, fuzzy +msgid "Common ancestor" +msgstr "Comentário no changeset" + #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 #, python-format msgid "%s Pull Requests" @@ -5950,7 +6527,6 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Pull Requests from %s'" msgid "Pull Requests from '%s'" msgstr "Pull requests de %s" @@ -5959,250 +6535,476 @@ msgid "Pull Requests to '%s'" msgstr "Pull requests para %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 #, fuzzy msgid "Open New Pull Request" msgstr "Crie novo pull request" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, fuzzy, python-format msgid "Show Pull Requests to %s" msgstr "Pull requests para %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, fuzzy, python-format msgid "Show Pull Requests from '%s'" msgstr "Pull requests de %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 #, fuzzy msgid "Show closed pull requests (in addition to open pull requests)" msgstr "Mostrar pull requests fechados também" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 #, fuzzy msgid "Pull Requests Created by Me" msgstr "Revisores do pull request" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +#, fuzzy +#| msgid "Pull Request Reviewers" +msgid "Pull Requests Needing My Review" +msgstr "Revisores do pull request" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 #, fuzzy msgid "Pull Requests I Participate In" msgstr "Eu participo em" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 #, fuzzy msgid "Search in All Repositories" msgstr "Buscar em todos os repositórios" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "Termo de pesquisa" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "Pesquisando em" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "Conteúdo dos arquivos" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "Mensagens de commit" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "Nomes dos arquivos" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "Permissão negada" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "%s ATOM feed" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "%s RSS feed" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "Habilitar" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "Estatísticas coletadas:" -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "arquivos" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "Mostrar mais" -#: kallithea/templates/summary/statistics.html:390 +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 msgid "commits" msgstr "commits" +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "arquivos adicionados" + +#: kallithea/templates/summary/statistics.html:390 +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "arquivos alterados" + #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "arquivos adicionados" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" -msgstr "arquivos alterados" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" +msgstr "arquivos removidos" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" -msgstr "arquivos removidos" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "commit" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" +msgstr "arquivo adicionado" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" -msgstr "commit" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" +msgstr "arquivo alterado" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "arquivo adicionado" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "arquivo alterado" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "arquivo removido" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "%s Sumário" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "Repositório travado por %s" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "Repositório destravado" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "Bifurcação de" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "Clonar de" -#: kallithea/templates/summary/summary.html:72 -#, fuzzy -msgid "Clone URL" -msgstr "URL de clonagem" - -#: kallithea/templates/summary/summary.html:78 -msgid "Show by Name" -msgstr "Mostrar por Nome" - -#: kallithea/templates/summary/summary.html:79 +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 msgid "Show by ID" msgstr "Mostrar por ID" -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:72 +#: kallithea/tests/data/templates/summary/summary.html.py:143 +msgid "Show by Name" +msgstr "Mostrar por Nome" + +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "Tendências em arquivos" +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "Download" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "Ainda não há downloads" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "Downloads estão desabilitados para este repositório" + #: kallithea/templates/summary/summary.html:108 -msgid "Download" -msgstr "Download" +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" +msgstr "Download como zip" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" -msgstr "Ainda não há downloads" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" +msgstr "Marque isto para descarregar arquivo com subrepositórios" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "Downloads estão desabilitados para este repositório" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "Download como zip" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "Marque isto para descarregar arquivo com subrepositórios" - -#: kallithea/templates/summary/summary.html:125 +#: kallithea/tests/data/templates/summary/summary.html.py:196 #, fuzzy msgid "With subrepos" msgstr "com subrepositórios" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "Tamanho do Repositório" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "Feed" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 #, fuzzy msgid "Latest Changes" msgstr "Mudanças mais recentes" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 #, fuzzy msgid "Quick Start" msgstr "Início rápido" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "Descarregar %s como %s" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "%s Tags" - -#: kallithea/templates/tags/tags.html:26 -#, fuzzy -msgid "Compare Tags" -msgstr "Comparar tags" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "Painel de Controle" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "Lembre-se de mim" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "Altere o seu avatar em" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "Usando" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "Opção de varredura" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "Web" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "Requer SSL para operações de VCS" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "Itens do dashboard" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "filtro rápido..." + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "Esqueceu a senha ?" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "Antecessor" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, fuzzy, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "O estado do changeset foi alterado para" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, fuzzy, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, fuzzy, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, fuzzy, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +#, fuzzy +msgid "The comment closed the pull request with status" +msgstr "%s comentou no pull request \"%s\"" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +#, fuzzy +msgid "The comment was made with status" +msgstr "O pull request foi fechado com o estado" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "Veja este usuário aqui" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "Tamanho do Repositório" #~ msgid "increase diff context to %(num)s lines" #~ msgstr "" @@ -6243,9 +7045,6 @@ #~ msgid "No Files" #~ msgstr "Nenhum Arquivo" -#~ msgid "" -#~ msgstr "" - #~ msgid "Username \"%(username)s\" is forbidden" #~ msgstr "O username \\\"%(username)s\\\" é proibido" @@ -6480,3 +7279,244 @@ #~ msgid "You can only delete files with revision being a valid branch " #~ msgstr "" +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "Confirma invalidar cache do repositório" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "Comentários interpretados usando a sintaxe %s com suporte a %s." + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" + +#~ msgid "Comment preview" +#~ msgstr "Visualizar comentário" + +#~ msgid "Preview" +#~ msgstr "Visualizar" + +#~ msgid "New file mode" +#~ msgstr "" + +#~ msgid "Missing changesets since the previous pull request:" +#~ msgstr "" + +#~ msgid "New changesets on %s %s since the previous pull request:" +#~ msgstr "" + +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "" +#~ "This pull request is based on " +#~ "another %s revision and there is " +#~ "no simple diff." +#~ msgstr "" + +#~ msgid "No changes found on %s %s since previous version." +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "" + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "No changesets found for updating this pull request." +#~ msgstr "" + +#~ msgid "Git pull requests don't support updates yet." +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "carregando ..." + +#~ msgid "Repository no access" +#~ msgstr "Nenhum acesso ao repositório" + +#~ msgid "Repository read access" +#~ msgstr "Acesso de leitura ao repositório" + +#~ msgid "Repository write access" +#~ msgstr "Acesso de escrita ao repositório" + +#~ msgid "Repository admin access" +#~ msgstr "Acesso administrativo ao repositório" + +#~ msgid "Repository Group no access" +#~ msgstr "Nenhum acesso ao Grupo de Repositórios" + +#~ msgid "Repository Group read access" +#~ msgstr "Acesso de leitura ao Grupo de Repositórios" + +#~ msgid "Repository Group write access" +#~ msgstr "Acesso de escrita ao Grupo de Repositórios" + +#~ msgid "Repository Group admin access" +#~ msgstr "Acesso administrativo ao Grupo de Repositórios" + +#~ msgid "Repository creation disabled" +#~ msgstr "Criação de repositórios desabilitada" + +#~ msgid "Repository creation enabled" +#~ msgstr "Criação de repositórios habilitada" + +#~ msgid "Repository forking disabled" +#~ msgstr "Bifurcação de repositórios desabilitada" + +#~ msgid "Repository forking enabled" +#~ msgstr "Bifurcação de repositórios habilitada" + +#~ msgid "Register disabled" +#~ msgstr "Registro desabilitado" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "Registro de novo usuário no Kallithea com ativação manual" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "Registro de novo usuário no Kallithea com auto-ativação" + +#~ msgid "Not Reviewed" +#~ msgstr "Não Revisado" + +#~ msgid "Rejected" +#~ msgstr "Rejeitado" + +#~ msgid "Under Review" +#~ msgstr "Sob Revisão" + +#~ msgid "Repository group no access" +#~ msgstr "Sem acesso ao grupo de repositórios" + +#~ msgid "Repository group read access" +#~ msgstr "Acesso de leitura ao grupo de repositórios" + +#~ msgid "Repository group write access" +#~ msgstr "Acesso de escrita ao grupo de repositórios" + +#~ msgid "Repository group admin access" +#~ msgstr "Acesso administrativo ao grupo de repositórios" + +#~ msgid "User group no access" +#~ msgstr "Sem acesso ao grupo de usuários" + +#~ msgid "User group read access" +#~ msgstr "Acesso de leitura ao grupo de usuários" + +#~ msgid "User group write access" +#~ msgstr "Acesso de escrita ao grupo de usuários" + +#~ msgid "User group admin access" +#~ msgstr "Acesso administrativo ao grupo de usuários" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "Criação de Grupo de Repositórios desatilibada" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "Criação de Grupo de Repositórios habilitada" + +#~ msgid "User Group creation disabled" +#~ msgstr "Criação de Grupo de Usuários desabilitada" + +#~ msgid "User Group creation enabled" +#~ msgstr "Criação de Grupo de Usuários habilitada" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "Registro de Usuário com ativação manual de conta" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "Registro de Usuário com ativação automática de conta" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "%(user)s solicita sua revisão no pull request $%(pr_id)s: %(pr_title)s" + +#~ msgid "repositories" +#~ msgstr "repositórios" + +#~ msgid "No repositories found." +#~ msgstr "Nenhum repositório encontrado." + +#~ msgid "There are no branches yet" +#~ msgstr "Ainda não há ramos" + +#~ msgid "There are no tags yet" +#~ msgstr "Ainda não há etiquetas" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "Ainda não há marcadores" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "%s Bookmarks" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "%s Ramos" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "Editando arquivo" + +#~ msgid "Update" +#~ msgstr "usuário [atualizado]" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "Crie novo pull request" + +#~ msgid "%s Tags" +#~ msgstr "%s Tags" + +#~ msgid "Compare Tags" +#~ msgstr "Comparar tags" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/ru/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/ru/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/ru/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -12,17 +12,17 @@ # SkryabinD , 2014 # softforwinxp , 2013 # zhmylove , 2013 -# Andrew Shadura , 2015 +# Andrew Shadura , 2015, 2016. # msgid "" msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" "PO-Revision-Date: 2017-01-05 14:58+0000\n" "Last-Translator: Andrew Shadura \n" "Language-Team: Russian " -"\n" +"\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,451 +32,492 @@ "X-Generator: Weblate 2.11-dev\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "Ещё не было изменений" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "Ничего" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(закрыто)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "Отображать пробелы" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "Игнорировать пробелы" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "Увеличить контекст до %(num)s строк" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "Нет такой ревизии в этом репозитории" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "" -"Нельзя редактировать статус изменений, связанных с закрытыми pull-" -"request'ами" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "Выбрать набор изменений" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "Перейти на верхушку репозитория" + +#: kallithea/controllers/compare.py:73 +#, fuzzy +#| msgid "Cannot compare repositories without using common ancestor" +msgid "Cannot compare repositories of different types" +msgstr "Невозможно сравнивать репозитории без общего предка" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "Невозможно сравнивать репозитории без общего предка" +#: kallithea/controllers/error.py:70 +msgid "No response" +msgstr "Нет ответа" + #: kallithea/controllers/error.py:71 -msgid "No response" -msgstr "Нет ответа" - -#: kallithea/controllers/error.py:72 msgid "Unknown error" msgstr "Неизвестная ошибка" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "Запрос не распознан сервером из-за неправильного синтаксиса." -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "Несанкционированный доступ к ресурсу" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "У вас нет прав для просмотра этой страницы" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "Ресурс не найден" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." msgstr "Сервер не может выполнить запрос из-за неправильного условия в запросе." -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "Изменения в репозитории %s" - -#: kallithea/controllers/feed.py:56 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "Изменения оказались слишком большими и были вырезаны..." + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "%s выполнил коммит в %s" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 #, python-format msgid "%s %s feed" msgstr "Лента новостей %s %s" -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "Изменения оказались слишком большими и были вырезаны..." - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "%s выполнил коммит в %s" - -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "Изменения в репозитории %s" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "Нажмите чтобы добавить новый файл" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "Нет файлов. %s" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, python-format msgid "%s at %s" msgstr "%s (%s)" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "Репозиторий заблокировал %s в %s" -#: kallithea/controllers/files.py:317 -#, fuzzy -#| msgid "You can only delete files with revision being a valid branch " +#: kallithea/controllers/files.py:309 msgid "You can only delete files with revision being a valid branch" msgstr "Вы можете удалять файлы только в ревизии, связанной с существующей веткой " -#: kallithea/controllers/files.py:328 +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "Файл %s удалён с помощью Kallithea" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "Файл %s удалён" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "Во время коммита произошла ошибка" -#: kallithea/controllers/files.py:377 -#, fuzzy -#| msgid "You can only edit files with revision being a valid branch " +#: kallithea/controllers/files.py:369 msgid "You can only edit files with revision being a valid branch" msgstr "" "Вы можете редактировать файлы только в ревизии, связанной с существующей " "веткой " -#: kallithea/controllers/files.py:391 +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "Файл %s отредактирован с помощью Kallithea" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "Без изменений" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "Изменения применены в %s" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "Файл добавлен с помощью Kallithea" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "Пусто" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "Безымянный" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "" "Расположение должно быть относительным путем, и не должно содержать " "\"..\" в пути" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "Возможность скачивать отключена" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "Неизвестная ревизия %s" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "Пустой репозиторий" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "Неизвестный тип архива" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "Набор изменений" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "Ветки" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "Метки" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "Произошла ошибка во время создания форка репозитория %s" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "Группы" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "Репозитории" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "Ветка" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "Закрытые ветки" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "Тэги" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "Закладки" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "Публичный журнал" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "Журнал" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "Неверная капча" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "Регистрация в Kallithea прошла успешно" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "Регистрация в %s прошла успешно" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" -msgstr "Код для сброса пароля отправлен" - -#: kallithea/controllers/login.py:246 +msgstr "Код для сброса пароля отправлена" + +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" msgstr "Неверный код сброса пароля" -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "Пароль обновлён" -#: kallithea/controllers/pullrequests.py:124 +#: kallithea/controllers/pullrequests.py:73 +#, python-format +msgid "Invalid reviewer \"%s\" specified" +msgstr "" + +#: kallithea/controllers/pullrequests.py:135 #, python-format msgid "%s (closed)" msgstr "%s (закрыта)" -#: kallithea/controllers/pullrequests.py:152 +#: kallithea/controllers/pullrequests.py:162 #: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 msgid "Changeset" msgstr "Изменения" -#: kallithea/controllers/pullrequests.py:173 +#: kallithea/controllers/pullrequests.py:183 msgid "Special" msgstr "Специальный" -#: kallithea/controllers/pullrequests.py:174 +#: kallithea/controllers/pullrequests.py:184 msgid "Peer branches" msgstr "Ветки участника" -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 msgid "Bookmarks" msgstr "Закладки" -#: kallithea/controllers/pullrequests.py:310 +#: kallithea/controllers/pullrequests.py:326 #, python-format msgid "Error creating pull request: %s" msgstr "Ошибка при создании pull-запроса: %s" -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "Нет описания" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "Pull-запрос создан успешно" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 -#, python-format -msgid "Invalid reviewer \"%s\" specified" -msgstr "" - -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "Произошла ошибка при создании pull-запроса" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "Отсутствующие ревизии относительно предыдущего pull-запроса:" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "Новые ревизии на %s %s относительно предыдущего pull-запроса:" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "Этот pull-запрос основан на другой ревизии %s, простой diff невозможен." - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "Нет изменений на %s %s относительно предыдущей версии." - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "Закрыт, замещён %s ." - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "Pull-запрос создан успешно" + +#: kallithea/controllers/pullrequests.py:381 +#, fuzzy +#| msgid "Pull request update created" +msgid "New pull request iteration created" msgstr "Обновление для pull-запроса создано" -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "Нет описания" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "Pull-запрос обновлён" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "Pull-запрос успешно удалён" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, fuzzy, python-format +#| msgid "Changeset for %s %s not found in %s" +msgid "Revision %s not found in %s" +msgstr "Набор изменений не найден" + +#: kallithea/controllers/pullrequests.py:518 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "Нет изменений для обновления этого pull-запроса." + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "Этот pull-запрос уже принят на ветку %s." -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "Этот pull-запрос был закрыт и не может быть обновлён." -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "Этот pull-запрос может быть обновлён из %s:" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +#, fuzzy +#| msgid "No changesets found for updating this pull request." +msgid "No additional changesets found for iterating on this pull request." msgstr "Нет изменений для обновления этого pull-запроса." -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "Внимание: Ветка %s имеет ещё одну верхушку: %s." -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." +#: kallithea/controllers/pullrequests.py:571 +#, fuzzy +#| msgid "Git pull requests don't support updates yet." +msgid "Git pull requests don't support iterating yet." msgstr "Обновление pull-запросы git не поддерживается." -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:573 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "Нет изменений для обновления этого pull-запроса." + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "Закрыт." - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, fuzzy, python-format +msgid "Successfully deleted pull request %s" +msgstr "Pull-запрос успешно удалён" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "Недопустимый поисковый запрос. Попробуйте заключить его в кавычки." -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "Индексы отсутствуют. Пожалуйста, запустите индексатор Whoosh" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "Произошла ошибка при выполнении этого поиска." -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "Нет данных" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "Статистические данные отключены для этого репозитария" @@ -488,152 +529,156 @@ msgid "error occurred during update of auth settings" msgstr "произошла ошибка при обновлении настроек авторизации" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "Стандартные настройки успешно обновлены" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "Произошла ошибка при обновлении стандартных настроек" -#: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 #, fuzzy msgid "Forever" msgstr "навсегда" -#: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 +#: kallithea/controllers/admin/gists.py:59 +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 msgid "5 minutes" msgstr "5 минут" +#: kallithea/controllers/admin/gists.py:60 +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" +msgstr "1 час" + #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" -msgstr "1 час" - -#: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 msgid "1 day" msgstr "1 день" -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/gists.py:62 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "1 месяц" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "Срок" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "Произошла ошибка во время создания gist-записи" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "Gist-запись %s удалена" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" -msgstr "Без изменений" - -#: kallithea/controllers/admin/gists.py:262 +msgstr "Неизменный" + +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "Данные gist-записи обновлены" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "Произошла ошибка при обновлении gist-записи %s" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" "Вы не можете изменить данные этого пользователя, поскольку он важен для " "работы всего приложения" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "Ваша учетная запись успешно обновлена" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "Произошла ошибка при обновлении пользователя %s" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "Ошибка при обновлении пароля" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "Пользователю добавлен e-mail %s" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "Произошла ошибка при сохранении e-mail" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "E-mail пользователя удалён" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "API-ключ успешно создан" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "API-ключ успешно сброшен" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "API-ключ успешно удалён" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "Чтение" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" -msgstr "Запись" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "Чтение" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "Запись" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -641,277 +686,294 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "Администратор" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "Отключено" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "Разрешена, с ручной активацией учётной записи" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "Разрешена, с автоматической активацией учётной записи" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "Ручная активация внешней учетной записи" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "Автоматическая активация внешней учетной записи" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "Отключено" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "Разрешена, с ручной активацией учётной записи" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "Разрешена, с автоматической активацией учётной записи" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "Ручная активация внешней учетной записи" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "Автоматическая активация внешней учетной записи" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "Включено" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "Глобальные привилегии успешно обновлены" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "Произошла ошибка во время обновления привилегий" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "Произошла ошибка при создании группы репозиториев %s" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "Создана новая группа репозиториев %s" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "Группа репозиториев %s обновлена" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "Произошла ошибка при обновлении группы репозиториев %s" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "Данная группа содержит %s репозитариев и не может быть удалена" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "Группа содержит в себе %s подгрупп и не может быть удалён" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "Группа репозиториев %s удалена" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "Произошла ошибка при удалении группы репозиториев %s" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "Администратор не может отозвать свои привелегии" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "Привилегии группы репозиториев обновлены" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "Произошла ошибка при отзыве привелегии" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "Произошла ошибка при создании репозитория %s" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "Репозиторий %s создан из %s" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "Сделан форк(копия) репозитория %s на %s" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "Репозиторий %s создан" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "Репозитарий %s успешно обновлён" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "Произошла ошибка во время обновления репозитория %s" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "Форки %s отсоединены" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "Удалены форки репозитория %s" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "Репозиторий %s удалён" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "Невозможно удалить %s, у него всё ещё есть форки" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "Произошла ошибка во время удаления %s" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "Привилегии репозитория обновлены" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during creation of field" +msgid "An error occurred during creation of field: %r" msgstr "Произошла ошибка при создании поля" -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "Произошла ошибка при удалении поля" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "-- Не форк --" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "Видимость репозитория в публичном журнале обновлена" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "Произошла ошибка при установке репозитария в общедоступный журнал" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "Ничего" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "Репозиторий %s отмечен как форк %s" -#: kallithea/controllers/admin/repos.py:521 +#: kallithea/controllers/admin/repos.py:480 msgid "An error occurred during this operation" msgstr "Произошла ошибка при выполнении операции" -#: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 msgid "Repository has been locked" msgstr "Репозиторий заблокирован" -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 msgid "Repository has been unlocked" msgstr "Репозиторий разблокирован" -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 +#: kallithea/controllers/admin/repos.py:502 +#: kallithea/controllers/admin/repos.py:521 msgid "An error occurred during unlocking" msgstr "Произошла ошибка во время разблокирования" -#: kallithea/controllers/admin/repos.py:582 +#: kallithea/controllers/admin/repos.py:533 msgid "Cache invalidation successful" msgstr "Кэш сброшен" -#: kallithea/controllers/admin/repos.py:586 +#: kallithea/controllers/admin/repos.py:537 msgid "An error occurred during cache invalidation" msgstr "Произошла ошибка при очистке кэша" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "Внесены изменения из удалённого репозитория" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "Произошла ошибка при внесении изменений из удалённого репозитория" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "Произошла ошибка при удалении статистики репозитория" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "Обновлены настройки VCS" -#: kallithea/controllers/admin/settings.py:174 +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 msgid "" "Unable to activate hgsubversion support. The \"hgsubversion\" library is " "missing" @@ -919,351 +981,351 @@ "Невозможно включить поддержку hgsubversion. Библиотека «hgsubversion» " "отсутствует" -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 msgid "Error occurred while updating application settings" msgstr "Произошла ошибка при обновлении настроек приложения" -#: kallithea/controllers/admin/settings.py:211 +#: kallithea/controllers/admin/settings.py:174 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "Репозитории успешно пересканированы, добавлено: %s, удалено: %s." -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format -#| msgid "Invalidate cache for all repositories" msgid "Invalidated %s repositories" msgstr "Сбросить кэш для всех репозиториев" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "Обновленные параметры настройки приложения" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "Настройки визуализации обновлены" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "Произошла ошибка при обновлении настроек визуализации" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "Пожалуйста, введите адрес электронной почты" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "Задача отправки Email создана" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "Добавлена новая ловушка" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "Обновлённые ловушки" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "произошла ошибка при создании хука" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "Запланирована переиндексация базы Whoosh" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "Создана группа пользователей %s" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "Произошла ошибка при создании группы пользователей %s" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "Группа пользователей %s обновлена" -#: kallithea/controllers/admin/user_groups.py:224 +#: kallithea/controllers/admin/user_groups.py:208 #, python-format msgid "Error occurred during update of user group %s" msgstr "Произошла ошибка при обновлении группы пользователей %s" -#: kallithea/controllers/admin/user_groups.py:242 +#: kallithea/controllers/admin/user_groups.py:219 msgid "Successfully deleted user group" msgstr "Группа пользователей успешно удалена" -#: kallithea/controllers/admin/user_groups.py:247 +#: kallithea/controllers/admin/user_groups.py:224 msgid "An error occurred during deletion of user group" msgstr "Произошла ошибка при удалении группы пользователей" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "Целевая группа не может быть такой же" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "Привилегии группы пользователей обновлены" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "Обновлены привилегии" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "Произошла ошибка при сохранении привилегий" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "Пользователь %s создан" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "Произошла ошибка при создании пользователя %s" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "Пользователь успешно обновлён" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "Пользователь успешно удалён" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "Произошла ошибка при удалении пользователя" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "Добавлен IP %s в белый список пользователя" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "Произошла ошибка при сохранении IP" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "Удален IP %s из белого списка пользователя" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "IP %s заблокирован" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "" "Вы должны быть зарегистрированным пользователем, чтобы выполнить это " "действие" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "Страница доступна только авторизованным пользователям" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "Репозиторий не найден на файловой системе" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, fuzzy, python-format -#| msgid "Changeset not found" msgid "Changeset for %s %s not found in %s" msgstr "Набор изменений не найден" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "Двоичный файл" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" "Набор изменения оказался слишком большими и был урезан, используйте меню " "сравнения для показа результата сравнения" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "Изменений не обнаружено" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "Удалена ветка: %s" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "Создан тег: %s" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format -#| msgid "Changeset not found" msgid "Changeset %s not found" msgstr "Набор изменений не найден" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Показать отличия вместе %s->%s" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 #, fuzzy msgid "Compare view" msgstr "сравнение" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "и" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "на %s больше" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "версии" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, fuzzy, python-format msgid "Fork name %s" msgstr "имя форка %s" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, python-format msgid "Pull request %s" msgstr "Pull-запрос %s" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "[удален] репозиторий" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "[создан] репозиторий" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "[создан] репозиторий как форк" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "[форкнут] репозиторий" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "[обновлён] репозиторий" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "[загружен] архив из репозитория" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "[удален] репозиторий" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "[создан] пользователь" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "[обновлён] пользователь" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "[создана] группа пользователей" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "[обновлена] группа пользователей" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "[комментарий] к ревизии в репозитории" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "[прокомментировано] в запросе на внесение изменений для" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "[закрыт] Pull-запрос для" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "[отправлено] в" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "[внесены изменения с помощью Kallithea] в репозитории" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "[внесены изменения из удалённого репозитория] в репозиторий" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "[внесены изменения] из" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "[добавлен в наблюдения] репозиторий" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "[удалён из наблюдения] репозиторий" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr " и на %s больше" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "Нет файлов" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "новый файл" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "изменён" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "удалён" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "переименован" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "chmod" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1274,7 +1336,7 @@ "переименован из файловой системы. Пожалуйста, перезапустите приложение " "для сканирования репозиториев" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" @@ -1282,7 +1344,7 @@ msgstr[1] "%d лет" msgstr[2] "%d года" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" @@ -1290,7 +1352,7 @@ msgstr[1] "%d месяца" msgstr[2] "%d месяцев" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" @@ -1298,7 +1360,7 @@ msgstr[1] "%d дня" msgstr[2] "%d дней" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" @@ -1306,7 +1368,7 @@ msgstr[1] "%d часов" msgstr[2] "%d часа" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" @@ -1314,7 +1376,7 @@ msgstr[1] "%d минут" msgstr[2] "%d минуты" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" @@ -1322,703 +1384,363 @@ msgstr[1] "%d секунды" msgstr[2] "%d секунды" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "в %s" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "%s назад" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "в %s и %s" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "%s и %s назад" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "прямо сейчас" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "Репозитарий - нет доступа" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "Репозитарий - доступ на чтение" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "Репозитарий - доступ на запись" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "Репозитарий - администрирование" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "Группа Репозиториев - нет доступа" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "Группа Репозиториев - доступ на чтение" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "Группа Репозиториев - доступ на запись" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "Группа Репозиториев - администрирование" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "Администратор Kallithea" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "Создание репозиториев отключено" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "Создание репозиториев включено" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "Возможность создавать форк репозитория отключена" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "Возможность создавать форк репозитория включена" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "Регистрация отключена" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "Регистрация нового пользователя в Kallithea с ручной активацией" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "Регистрация нового пользователя в Kallithea с автоматической активацией" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "Не просмотрено" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "Одобрено" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "Отклонено" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "На рассмотрении" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "верхний уровень" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "Группа Репозиториев - нет доступа" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "Группа репозиториев - доступ на чтение" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "Группа репозиториев - доступ на запись" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "Группа репозиториев - администрирование" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "Группа пользователей - нет доступа" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "Группа пользователей - доступ на чтение" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "Группа пользователей - доступ на запись" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "Группа пользователей - администрирование" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "Создание групп репозиториев отключено" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "Создание групп репозиториев включено" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "Создание групп пользователей отключено" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "Создание групп пользователей включено" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "Регистрация отключена" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "Регистрация пользователя с ручной активацией учётной записи" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "Регистрация пользователя с автоматической активацией" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "на строке %s" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "[Упоминание]" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "верхний уровень" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "Администратор Kallithea" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 msgid "Default user has read access to new repositories" msgstr "Неавторизованные пользователи имеют право чтения новых репозиториев" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 msgid "Default user has write access to new repositories" msgstr "Неавторизованные пользователи имеют право записи в новые репозитории" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 msgid "Only admins can create repository groups" msgstr "Только администраторы могут создавать группы" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 #, fuzzy msgid "Non-admins can create repository groups" msgstr "Создана новая группа репозиториев %s" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 #, fuzzy msgid "Only admins can create user groups" msgstr "Создавать группы пользователей" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 #, fuzzy msgid "Non-admins can create user groups" msgstr "Создавать группы пользователей" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 #, fuzzy msgid "Only admins can fork repositories" msgstr "Местонахождение репозиториев" -#: kallithea/model/db.py:1696 +#: kallithea/model/db.py:1745 #, fuzzy -#| msgid "Non-admins can can fork repositories" msgid "Non-admins can fork repositories" msgstr "Сбросить кэш для всех репозиториев" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "Регистрация отключена" + +#: kallithea/model/db.py:1748 #, fuzzy msgid "User registration with manual account activation" msgstr "Регистрация пользователя с ручной активацией учётной записи" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 #, fuzzy msgid "User registration with automatic account activation" msgstr "Регистрация пользователя с автоматической активацией" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 #, fuzzy msgid "Not reviewed" msgstr "Не просмотрено" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 #, fuzzy msgid "Under review" msgstr "На рассмотрении" -#: kallithea/model/forms.py:57 +#: kallithea/model/db.py:2278 +#, fuzzy +#| msgid "Approved" +msgid "Not approved" +msgstr "Одобрено" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "Одобрено" + +#: kallithea/model/forms.py:58 msgid "Please enter a login" msgstr "Пожалуйста, введите логин" -#: kallithea/model/forms.py:58 +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "Введите значение длиной не менее %(min)i символов" -#: kallithea/model/forms.py:66 +#: kallithea/model/forms.py:67 msgid "Please enter a password" msgstr "Пожалуйста, введите пароль" -#: kallithea/model/forms.py:67 +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "Введите не менее %(min)i символов" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" -#: kallithea/model/notification.py:255 +#: kallithea/model/notification.py:240 #, python-format msgid "%(user)s commented on changeset %(age)s" msgstr "%(user)s оставил комментарий к набору изменений %(age)s" -#: kallithea/model/notification.py:256 +#: kallithea/model/notification.py:241 #, python-format msgid "%(user)s sent message %(age)s" msgstr "%(user)s отправил сообщение %(age)s" -#: kallithea/model/notification.py:257 +#: kallithea/model/notification.py:242 #, python-format msgid "%(user)s mentioned you %(age)s" msgstr "%(user)s упомянул вас %(age)s" -#: kallithea/model/notification.py:258 +#: kallithea/model/notification.py:243 #, python-format msgid "%(user)s registered in Kallithea %(age)s" msgstr "%(user)s зарегистрировался в Kallithea %(age)s" -#: kallithea/model/notification.py:259 +#: kallithea/model/notification.py:244 #, python-format msgid "%(user)s opened new pull request %(age)s" msgstr "%(user)s открыл новый pull-запрос %(age)s" -#: kallithea/model/notification.py:260 +#: kallithea/model/notification.py:245 #, python-format msgid "%(user)s commented on pull request %(age)s" msgstr "%(user)s оставил комментарий к pull-запросу %(age)s" -#: kallithea/model/notification.py:267 +#: kallithea/model/notification.py:252 #, python-format msgid "%(user)s commented on changeset at %(when)s" msgstr "%(user)s оставил комментарий к набору изменений %(when)s" -#: kallithea/model/notification.py:268 +#: kallithea/model/notification.py:253 #, python-format msgid "%(user)s sent message at %(when)s" msgstr "%(user)s отправил сообщение %(when)s" -#: kallithea/model/notification.py:269 +#: kallithea/model/notification.py:254 #, python-format msgid "%(user)s mentioned you at %(when)s" msgstr "%(user)s упомянул вас %(when)s" -#: kallithea/model/notification.py:270 +#: kallithea/model/notification.py:255 #, python-format msgid "%(user)s registered in Kallithea at %(when)s" msgstr "%(user)s зарегистрировался в Kallithea %(when)s" -#: kallithea/model/notification.py:271 +#: kallithea/model/notification.py:256 #, python-format msgid "%(user)s opened new pull request at %(when)s" msgstr "%(user)s открыл новый pull-запрос %(when)s" -#: kallithea/model/notification.py:272 +#: kallithea/model/notification.py:257 #, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "%(user)s оставил комментарий к pull-запросу %(when)s" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, fuzzy, python-format +#| msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "[прокомментировано] в запросе на внесение изменений для" + +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" msgstr "Новый пользователь \"%(new_username)s\" зарегистрирован" -#: kallithea/model/notification.py:308 -#, fuzzy, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "%(user)s просит вас рассмотреть pull request #%(pr_id)s: %(pr_title)s" - -#: kallithea/model/notification.py:309 -#, fuzzy, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "[прокомментировано] в запросе на внесение изменений для" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "Закрыт" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, fuzzy, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "%(user)s просит вас рассмотреть pull request #%(pr_id)s: %(pr_title)s" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Cannot create empty pull request" +msgstr "Ошибка при создании pull-запроса: %s" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +#, fuzzy +#| msgid "Confirm to delete this pull request" +msgid "You are not authorized to create the pull request" +msgstr "Подтвердите удаление этого pull-request'а" + +#: kallithea/model/pull_request.py:341 +#, fuzzy +#| msgid "Missing changesets since the previous pull request:" +msgid "Missing changesets since the previous iteration:" +msgstr "Отсутствующие ревизии относительно предыдущего pull-запроса:" + +#: kallithea/model/pull_request.py:348 +#, fuzzy, python-format +#| msgid "New changesets on %s %s since the previous pull request:" +msgid "New changesets on %s %s since the previous iteration:" +msgstr "Новые ревизии на %s %s относительно предыдущего pull-запроса:" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, fuzzy, python-format +#| msgid "" "This pull request is based on another %s revision and there is no +#| simple " "diff." +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "Этот pull-запрос основан на другой ревизии %s, простой diff невозможен." + +#: kallithea/model/pull_request.py:364 +#, fuzzy, python-format +#| msgid "No changes found on %s %s since previous version." +msgid "No changes found on %s %s since previous iteration." +msgstr "Нет изменений на %s %s относительно предыдущей версии." + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "последняя версия" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "Регистрация нового пользователя" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 #, fuzzy msgid "You can't remove this user since it is crucial for the entire application" msgstr "" "Вы не можете удалить пользователя, поскольку это критично для работы " "всего приложения" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " @@ -2027,7 +1749,7 @@ "Пользователь \"%s\" всё ещё является владельцем %s репозиториев и поэтому" " не может быть удалён. Смените владельца или удалите эти репозитории: %s" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" @@ -2037,7 +1759,7 @@ "поэтому не может быть удалён. Смените владельца или удалите данные " "группы: %s" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " @@ -2047,37 +1769,37 @@ "поэтому не может быть удалён. Смените владельца или удалите данные " "группы: %s" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "Ссылка сброса пароля" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 #, fuzzy msgid "Password reset notification" msgstr "Ссылка сброса пароля" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "Значение не может быть пустым списком" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "Пользователь с именем \"%(username)s\" уже существует" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, fuzzy, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "Имя \"%(username)s\" недопустимо" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 #, fuzzy msgid "" "Username may only contain alphanumeric characters underscores, periods or" @@ -2087,25 +1809,25 @@ "подчеркивания, точки и тире; а так же должно начинаться с буквы, цифры " "либо с символа подчеркивания" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "Имя \"%(username)s\" недопустимо" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "Неверное имя группы пользователей" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "Группа пользователей \"%(usergroup)s\" уже существует" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" @@ -2113,107 +1835,107 @@ "имя группы пользователей может содержать только буквы, цифры, символы " "подчеркивания, точки и тире; а так же должно начинаться с буквы или цифры" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "Невозможно использовать эту группу как родителя" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "Группа \"%(group_name)s\" уже существует" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "Репозитарий с именем \"%(group_name)s\" уже существует" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "Недопустимые символы (не ascii) в пароле" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "Неверно задан старый пароль" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "Пароли не совпадают" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 #, fuzzy msgid "Invalid username or password" msgstr "неверный пароль" -#: kallithea/model/validators.py:331 +#: kallithea/model/validators.py:310 msgid "Token mismatch" msgstr "Несовпадение токенов" -#: kallithea/model/validators.py:345 +#: kallithea/model/validators.py:326 #, fuzzy, python-format msgid "Repository name %(repo)s is not allowed" msgstr "Имя репозитория %(repo)s запрещено" -#: kallithea/model/validators.py:347 +#: kallithea/model/validators.py:328 #, python-format msgid "Repository named %(repo)s already exists" msgstr "Репозитарий %(repo)s уже существует" -#: kallithea/model/validators.py:348 +#: kallithea/model/validators.py:329 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "Репозитарий \"%(repo)s\" уже существует в группе \"%(group)s\"" -#: kallithea/model/validators.py:350 +#: kallithea/model/validators.py:331 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "Группа репозиториев \"%(repo)s\" уже существует" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 #, fuzzy msgid "Invalid repository URL" msgstr "приватный репозиторий" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "Тип форка будет совпадать с родительским" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "У вас недостаточно прав для создания репозиториев в этой группе" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "недостаточно прав для создания репозитория в корневом каталоге" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "У Вас недостаточно привилегий для создания группы в этом месте" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "Данное имя пользователя или группы пользователей недопустимо" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "Этот путь ошибочен" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 #, fuzzy msgid "This email address is already in use" msgstr "Этот E-mail уже занят" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, fuzzy, python-format msgid "Email address \"%(email)s\" not found" msgstr "\"%(email)s\" не существует." -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" @@ -2221,402 +1943,408 @@ "Для входа по LDAP должно быть указано значение аттрибута CN - это " "эквивалент имени пользователя" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "Пожалуйста, введите существующий IPv4 или IPv6 адре" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" "Значение маски подсети должно быть в пределах от 0 до 32 (%(bits)r - " "неверно)" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" "Ключевое имя может только состоять из букв, символа подчеркивания, тире " "или чисел" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "Файла нет в каталоге" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "О программе" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "Панель управления" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "фильтр..." - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "репозитории" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "Добавить репозиторий" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "Добавить группу репозиториев" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "Вы имеете администраторские права на эту группу и можете редактировать её" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "Изменить группу репозиториев" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "Имя группы" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository group" +msgid "Repository Group" +msgstr "Группа репозиториев" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "Описание" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "Имя" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "Репозиторий" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "Последнее изменение" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "Состояние" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "Владелец" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "По возрастанию" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "По убыванию" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "Репозитарии не найдены." - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "Ошибка данных." - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "Загрузка..." - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "Войти" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "Войти в %s" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "Имя пользователя" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "Пароль" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "Запомнить" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "Забыли пароль?" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "Нет аккаунта?" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "Войти" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "Сброс пароля" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, python-format msgid "Reset Your Password to %s" msgstr "Сброс пароля для %s" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 msgid "Reset Your Password" msgstr "Сброс пароля" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "Почтовый адрес" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "Капча" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" msgstr "Послать ссылку сброса пароля" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 #, fuzzy msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "Ссылка для сброса пароля была отправлена на соответствующий e-mail." -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 #, fuzzy msgid "New Password" msgstr "Новый пароль" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 #, fuzzy msgid "Confirm New Password" msgstr "Подтвердите новый пароль" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "Регистрация" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "Регистра на %s" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "Повторите пароль" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "Имя" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "Фамилия" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "E-mail" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "Пожалуйста, подождите, пока администратор подтвердит Вашу регистрацию." -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "Ветки ещё не созданы" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "Закрытые ветки" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "Метки отсутсвуют" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "Закладок ещё нет" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 msgid "Admin Journal" msgstr "Журнал администратора" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "Фильтр журнала..." #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 msgid "Filter" msgstr "Отфильтровать" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2625,59 +2353,60 @@ msgstr[2] "%s записи" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "Действие" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "Репозиторий" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "Дата" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "С IP" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "Действия ещё не производились" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "Настройки аутентификации" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "Аутентификация" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "Плагины аутентификации" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "Включенные плагины" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 #, fuzzy msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " @@ -2686,90 +2415,117 @@ "Список плагинов, разделенных запятой. Kallithea будет пробовать " "аутентифицировать пользователя в порядке указания плагинов" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "Доступные встроенные плагины" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "Плагин" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "Сохранить" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 msgid "Repository Defaults" msgstr "Значения по умолчанию" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "Тип" -#: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 msgid "Private repository" msgstr "Приватный репозиторий" -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." msgstr "Приватные репозитории видны только их участникам." -#: kallithea/templates/admin/defaults/defaults.html:53 -#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 msgid "Enable statistics" msgstr "Включить статистику" -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 msgid "Enable statistics window on summary page." msgstr "Включить окно статистики на странице «Общие сведения»." -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 msgid "Enable downloads" msgstr "Включить скачивание" -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 msgid "Enable download menu on summary page." msgstr "Включить меню скачивания на странице «Общие сведения»." -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 msgid "Enable locking" msgstr "Включить блокирование" -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "Включить автоблокировку для репозитория." @@ -2778,45 +2534,63 @@ msgid "Edit Gist" msgstr "Правка gist-записи" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "Описание..." -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "Истекает" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 #, fuzzy msgid "Never" msgstr "никогда" @@ -2826,279 +2600,412 @@ msgstr "Обновить" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "Отмена" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "Приватная gist-запись для пользователя %s" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "Публичная gist-запись для пользователя %s" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "Публичные gist-записи" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "Создать новую gist-запись" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "Создано" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "Gist-записи отсутствуют" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "Сброс" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "Gist" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "URL" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "Удалить" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "Подтвердите удаление этой gist-записи" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "Редактировать" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "Редактировать" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "Показать только текст" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "создана" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "Показать только текст" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "Мой Аккаунт" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "Профиль" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 #, fuzzy msgid "Email Addresses" msgstr "Новый E-mail" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "API-ключи" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 #, fuzzy msgid "Owned Repositories" msgstr "репозитории" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 #, fuzzy msgid "Watched Repositories" msgstr "Создать репозитории" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 #, fuzzy msgid "Show Permissions" msgstr "Скопировать привилегии" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, fuzzy, python-format msgid "Confirm to reset this API key: %s" msgstr "Подтвердите сброс этого API-ключа: %s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 #, fuzzy msgid "Expired" msgstr "Истекает" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, fuzzy, python-format msgid "Confirm to remove this API key: %s" msgstr "Подтвердите удаление этого API-ключа: %s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 #, fuzzy msgid "Remove" msgstr "Удалено" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 #, fuzzy msgid "No additional API keys specified" msgstr "Дополнительные адреса e-mail не указаны" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 #, fuzzy msgid "New API key" msgstr "Ключ" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "Добавить" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "Основной" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "Подтвердите удаление E-mail: %s" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "Нет дополнительных адресов e-mail." -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "Новый E-mail" @@ -3106,131 +3013,174 @@ msgid "Change Your Account Password" msgstr "Смена пароля" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "Текущий пароль" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "Новый пароль" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "Подтвердите новый пароль" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +#, fuzzy +msgid "Current IP" +msgstr "текущий IP-адрес" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, fuzzy, python-format +#| msgid "Change your avatar at" +msgid "Change %s avatar at" msgstr "Измените аватар через сайт" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "Используется" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "Аватары отключены" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "Не указан email. Пожалуйста, обновите ваш email." - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -#, fuzzy -msgid "Current IP" -msgstr "текущий IP-адрес" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 msgid "Repositories You Own" msgstr "Репозитории, где Вы — владелец" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." -msgstr "Записи не найдены." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "Имя" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 msgid "Repositories You are Watching" msgstr "Репозитории, за которыми Вы наблюдаете" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "Мои уведомления" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "Всё" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "Комментарии" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "Pull-запросы" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" msgstr "Отметить все как прочтённые" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +#, fuzzy +#| msgid "Mark All Read" +msgid "Mark as read" +msgstr "Отметить все как прочтённые" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "Уведомлений нет" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "Показать уведомление" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "Уведомления" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 msgid "Default Permissions" msgstr "Стандартные привилегии" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "Белый список IP" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "Анонимный доступ" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " @@ -3240,24 +3190,30 @@ "репозитория. Учтите, что ранее установленные привилегии по умолчанию " "будут сброшены" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "Существующий репозиторий?" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "Группа репозиториев" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " @@ -3267,21 +3223,26 @@ "репозиториев. Учтите, что ранее установленные привилегии по умолчанию для" " групп репозиториев будут сброшены" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 #, fuzzy msgid "Apply to all existing repository groups" msgstr "Удалить эту группу репозиториев" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "Группа пользователей" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 #, fuzzy msgid "" "All default permissions on each user group will be reset to chosen " @@ -3292,107 +3253,136 @@ "пользователей. Учтите, что ранее установленные привилегии по умолчанию " "для групп пользователей будут сброшены" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 msgid "Permissions for the Default user on new user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 #, fuzzy msgid "Top level repository creation" msgstr "Создание репозитория" -#: kallithea/templates/admin/permissions/permissions_globals.html:64 +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 msgid "Enable this to allow non-admins to create repositories at the top level." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:65 +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 msgid "" "Note: This will also give all users API access to create repositories " "everywhere. That might change in future versions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "Создание групп пользователей" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "Создание форка репозитория" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "Регистрация" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "Активация сторонней учетной записи" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "Подтвердите удаление IP %s" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "Все IP-адреса разрешены." -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "Новый IP-адрес" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "Группы репозиториев" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "Имя группы" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "Родительская группа" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3401,31 +3391,42 @@ msgid "%s Repository Group Settings" msgstr "Настройки группы репозиториев %s" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "Добавить подгруппу" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "Настройки" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "Дополнительно" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "Привилегии" @@ -3449,12 +3450,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "Создано" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3466,8 +3469,30 @@ msgid "Delete this repository group" msgstr "Удалить эту группу репозиториев" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#, fuzzy +#| msgid "disabled" +msgid "Visible" +msgstr "отключено" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "Add Repository" +msgid "Add repos" +msgstr "Добавить репозиторий" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +#, fuzzy +#| msgid "Add user group" +msgid "Add/Edit groups" +msgstr "Добавить группу пользователей" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 #, fuzzy msgid "User/User Group" @@ -3475,8 +3500,8 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 #, fuzzy @@ -3485,36 +3510,36 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 #, fuzzy msgid "Revoke" msgstr "отозвать" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "Добавить новый" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 #, fuzzy msgid "Apply to children" msgstr "применить к дочерним" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" @@ -3522,69 +3547,81 @@ "Включить автоблокировку для группы. Эта опция будет применена ко всем " "дочерним группам и репозиториям" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "Удалить эту группу" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Confirm to delete this group" msgstr "Подтвердите удаление этой группы пользователей" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "Repository Group: %s" +msgid "Repository group %s" +msgstr "Группа репозиториев: %s" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "Домой" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "с" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 msgid "Repository Groups Administration" msgstr "Администрирование групп репозиториев" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 msgid "Number of Top-level Repositories" msgstr "Число репозиториев верхнего уровня" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "[создан] репозиторий" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "Короткое и осмысленное. Для развернутого описания используйте файл README." -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "Опционально выбрать группу, в которую поместить данный репозиторий." -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "Тип создаваемого репозитория." -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "Ревизия для выгрузки" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3613,56 +3650,69 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, python-format msgid "%s Repository Settings" msgstr "Настройки репозитория %s" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "Дополнительные поля" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "Удалённый" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "Статистика" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 msgid "Parent" msgstr "Родительская группа" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "Набор" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." msgstr "Вручную сделать этот репозиторий форком выбранного из списка." -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 msgid "Public Journal Visibility" msgstr "Доступ к публичному журналу" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "Удалить из общедоступного журнала" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 msgid "Add to Public Journal" msgstr "Добавить в публичный журнал" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." @@ -3670,36 +3720,44 @@ "Все производимые с этим репозиторием действия будут отображаться в " "публичном журнале." -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 msgid "Change Locking" msgstr "Включить блокирование" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 msgid "Confirm to unlock repository." msgstr "Подтвердите снятие блокировки с репозитория." -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 msgid "Unlock Repository" msgstr "Разблокировать репозиторий" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 #, python-format msgid "Locked by %s on %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 msgid "Confirm to lock repository." msgstr "Подтвердите блокировку репозитория." -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 msgid "Lock Repository" msgstr "Заблокировать репозиторий" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "Репозиторий не заблокирован" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3707,17 +3765,21 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "Подтвердите удаление этого репозитория: %s" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 msgid "Delete this Repository" msgstr "Удалить этот репозиторий" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" @@ -3725,15 +3787,18 @@ msgstr[1] "Данный репозиторий имеет %s копии" msgstr[2] "Данный репозиторий имеет %s копий" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "Отсоединить fork'и" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "Удалить fork'и" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3744,110 +3809,116 @@ msgid "Invalidate Repository Cache" msgstr "Сбросить кэш репозитория" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -msgid "Confirm to invalidate repository cache." -msgstr "Подтвердите сброс кэша." - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "Ручной сброс кэша репозитория. При первом доступе кэш восстановится." -#: kallithea/templates/admin/repos/repo_edit_caches.html:12 +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 msgid "List of Cached Values" msgstr "Список кешированных значений" -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 +#: kallithea/templates/admin/repos/repo_edit_caches.html:12 msgid "Prefix" msgstr "Префикс" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "Ключ" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "Активный" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "Подтвердите удаление этого поля: %s" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "Ключ" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "Имя поля" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "Введите краткое имя поля" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "Описание поля" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "Введите описание поля" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." msgstr "Дополнительные поля отключены." -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 #, fuzzy msgid "Private Repository" msgstr "приватный репозиторий" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "[forked] repository" +msgid "Fork of repository" +msgstr "[форкнут] репозиторий" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 #, fuzzy msgid "Remote repository URL" msgstr "Репозиторий %s создан" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 #, fuzzy msgid "Pull Changes from Remote Repository" msgstr "[внесены изменения из удалённого репозитория] в репозиторий" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 #, fuzzy msgid "Confirm to pull changes from remote repository." msgstr "Подтвердите скачивание изменений." -#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 #, fuzzy msgid "Permanent Repository ID" msgstr "приватный репозиторий" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3857,37 +3928,37 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 #, fuzzy msgid "Remote repository" msgstr "[создан] репозиторий" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 #, fuzzy msgid "Repository URL" msgstr "Репозиторий" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" "Ревизия по умолчанию, из которой будет производиться выгрузка файлов при " "скачивании" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "Изменить владельца репозитория." +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_statistics.html:6 -msgid "Processed commits" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 msgid "Processed progress" msgstr "" @@ -3900,277 +3971,331 @@ msgstr "Подтвердите сброс статистики." #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 msgid "Repositories Administration" msgstr "Администрирование репозиториев" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 msgid "Settings Administration" msgstr "Администрирование настроек" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "Хуки" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "Отправить" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "Брендинг сайта" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "Приветствие для HTTP-аутентификации" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 msgid "Save Settings" msgstr "Сохранить настройки" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 msgid "Custom Hooks" msgstr "Пользовательские хуки" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "Не удалось удалить хук" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" +#: kallithea/templates/admin/settings/settings_mapping.html:4 +#, fuzzy +#| msgid "Rescan option" +msgid "Rescan options" msgstr "Опции пересканирования" -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 #, fuzzy msgid "Delete records of missing repositories" msgstr "Поиск по репозиториям" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "Сбросить кэш для всех репозиториев" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "Сбросить кэш для всех репозиториев." -#: kallithea/templates/admin/settings/settings_mapping.html:23 +#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 msgid "Install Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "Опции создания индекса" -#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 msgid "Build from scratch" msgstr "Сборка с нуля" -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/templates/admin/settings/settings_search.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "Перестроить индекс" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Kallithea version" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." msgstr "" #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Kallithea version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 -msgid "Git version" -msgstr "Версия Git" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" +msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:10 -msgid "Upgrade info endpoint" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "Версия Git" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 +msgid "Upgrade info endpoint" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "Веб" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "Запрашивать SSL для операций с VCS" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "Показывать размер репозитория после отправки" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "Логировать пользовательские команды отправки" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "Логировать пользовательские команды получения" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "Обновлять репозиторий после отправки (hg update)" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 msgid "Mercurial extensions" msgstr "Расширения Mercurial" -#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 msgid "Enable largefiles extension" msgstr "Включить поддержку больших файлов" -#: kallithea/templates/admin/settings/settings_vcs.html:51 +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 msgid "Enable hgsubversion extension" msgstr "Включить поддержку hgsubversion" -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 msgid "Location of repositories" msgstr "Местонахождение репозиториев" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." @@ -4178,37 +4303,44 @@ "Нажмите для разблокирования. Изменения вступят в силу после перезагрузки " "Kallithea." -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "Главное" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "Использовать дополнительные поля в репозиториях" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "Позволяет хранить дополнительные поля в репозиториях." -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "Отображать версию Kallithea" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4225,102 +4357,126 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "Ссылка для клонирования" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "Элементы панели" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repository Size" +msgid "Repository page size" +msgstr "Размер репозитория" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "Иконки" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "Показывать иконки публичных репозиториев" +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "Показывать иконки приватных репозиториев" + #: kallithea/templates/admin/settings/settings_visual.html:84 -msgid "Show private repository icon on repositories" -msgstr "Показывать иконки приватных репозиториев" - -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "Показывать иконки публичных репозиториев." -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 #, fuzzy msgid "Meta Tagging" msgstr "Метатегирование" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "Добавить группу пользователей" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 #, fuzzy msgid "Show Members" msgstr "участники" @@ -4331,13 +4487,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "Участники" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "Подтвердите удаление следующей группы пользователей: %s" @@ -4346,48 +4504,59 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "Нет участников" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "Выбранные участники группы" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "Доступные участники" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 msgid "User Groups Administration" msgstr "Администрирование групп пользователей" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "Добавить пользователя" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "Пользователи" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "Подтверждение пароля" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4397,12 +4566,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4411,7 +4582,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "Подтвердите удаление пользователя %s" @@ -4420,402 +4592,459 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "Подтвердите новый пароль" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 msgid "Users Administration" msgstr "Администрирование пользователей" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "Экземпляр сервера: %s" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "Репозиторий Mercurial" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "Git репозиторий" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "Создать форк" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "Общие сведения" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "История изменений" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "Файлы" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "Переключиться на" - -#: kallithea/templates/base/base.html:145 -#: kallithea/templates/base/base.html:147 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 msgid "Options" msgstr "Опции" +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "Сравнить форк" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "Сравнить" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" +msgstr "Поиск" + #: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 -msgid "Compare Fork" -msgstr "Сравнить форк" - -#: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "Сравнить" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "Поиск" - -#: kallithea/templates/base/base.html:163 +#: kallithea/tests/data/templates/base/base.html.py:399 msgid "Unlock" msgstr "Разблокировать" -#: kallithea/templates/base/base.html:165 +#: kallithea/templates/base/base.html:157 +#: kallithea/tests/data/templates/base/base.html.py:405 msgid "Lock" msgstr "Заблокировать" -#: kallithea/templates/base/base.html:173 +#: kallithea/templates/base/base.html:165 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "Наблюдать" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "Не наблюдать" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "Форк" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "Создать Pull запрос" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "Показать pull-запросы для %s" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "Переключиться на" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "Показать последнюю активность" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "Общедоступный журнал" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "Показать публичные записи" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "Gist" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "Все публичные Gist-записи" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "Мои публичные Gist-записи" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "Мои приватные Gist-записи" -#: kallithea/templates/base/base.html:246 +#: kallithea/templates/base/base.html:319 +#: kallithea/tests/data/templates/base/base.html.py:540 msgid "Search in repositories" msgstr "Поиск по репозиториям" -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 #: kallithea/templates/pullrequests/pullrequest_show_my.html:6 #: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 msgid "My Pull Requests" msgstr "Мои Pull-запросы" -#: kallithea/templates/base/base.html:289 +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 msgid "Not Logged In" msgstr "Не авторизован" -#: kallithea/templates/base/base.html:296 +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 msgid "Login to Your Account" msgstr "Авторизоваться" -#: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" +#: kallithea/templates/base/base.html:385 +#, fuzzy +#| msgid "Forgot password ?" +msgid "Forgot password?" msgstr "Забыли пароль?" -#: kallithea/templates/base/base.html:346 +#: kallithea/templates/base/base.html:389 +#, fuzzy +#| msgid "Don't have an account ?" +msgid "Don't have an account?" +msgstr "Нет аккаунта?" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "Выход" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 #, fuzzy msgid "Inherit defaults" msgstr "Значения по умолчанию" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "Создать репозитории" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "Опция разрешает пользователю создавать репозитарии" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "Опция разрешает пользователю создавать репозитарии" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "Создавать группы пользователей" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "Опция разрешает пользователю создавать группы пользователей" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "Создавать fork от репозиториев" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" "Выберите эту опцию чтобы разрешить данному пользователю создавать fork'и " "репозиториев" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "Показать" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "Привилегии еще не назначены" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "Привилегия" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "Изменить привилегии" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 -msgid "Add Another Comment" -msgstr "Добавить ещё один комментарий" - -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 -msgid "Stop following this repository" -msgstr "Отменить наблюдение за репозиторием" - -#: kallithea/templates/base/root.html:24 -msgid "Start following this repository" -msgstr "Наблюдать за репозиторием" - #: kallithea/templates/base/root.html:25 -msgid "Group" -msgstr "Группа" +#: kallithea/tests/data/templates/base/root.html.py:85 +msgid "Add Another Comment" +msgstr "Добавить ещё один комментарий" #: kallithea/templates/base/root.html:26 -msgid "members" -msgstr "участники" +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 +msgid "Stop following this repository" +msgstr "Отменить наблюдение за репозиторием" #: kallithea/templates/base/root.html:27 -msgid "Loading ..." -msgstr "Загрузка..." +#: kallithea/tests/data/templates/base/root.html.py:89 +msgid "Start following this repository" +msgstr "Наблюдать за репозиторием" #: kallithea/templates/base/root.html:28 +#: kallithea/tests/data/templates/base/root.html.py:91 +msgid "Group" +msgstr "Группа" + +#: kallithea/templates/base/root.html:29 +#: kallithea/tests/data/templates/base/root.html.py:93 +msgid "members" +msgstr "участники" + +#: kallithea/templates/base/root.html:30 +#: kallithea/tests/data/templates/base/root.html.py:95 +msgid "Loading ..." +msgstr "Загрузка..." + +#: kallithea/templates/base/root.html:31 +#: kallithea/tests/data/templates/base/root.html.py:97 msgid "loading ..." msgstr "загрузка..." -#: kallithea/templates/base/root.html:29 +#: kallithea/templates/base/root.html:32 +#: kallithea/tests/data/templates/base/root.html.py:99 msgid "Search truncated" msgstr "Поиск усечен" -#: kallithea/templates/base/root.html:30 +#: kallithea/templates/base/root.html:33 +#: kallithea/tests/data/templates/base/root.html.py:101 msgid "No matching files" msgstr "Нет совпадений" -#: kallithea/templates/base/root.html:31 +#: kallithea/templates/base/root.html:34 +#: kallithea/tests/data/templates/base/root.html.py:103 #, fuzzy msgid "Open New Pull Request from {0}" msgstr "Комментарий в pull-запросе" -#: kallithea/templates/base/root.html:32 +#: kallithea/templates/base/root.html:35 +#: kallithea/tests/data/templates/base/root.html.py:105 msgid "Open New Pull Request for {0} → {1}" msgstr "" -#: kallithea/templates/base/root.html:33 +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 #, fuzzy msgid "Show Selected Changesets {0} → {1}" msgstr "Показать выбранные наборы изменений: __S → __E" -#: kallithea/templates/base/root.html:34 +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 msgid "Selection Link" msgstr "Ссылка выбора" -#: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 +#: kallithea/templates/base/root.html:38 +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 msgid "Collapse Diff" msgstr "Свернуть сравнение" -#: kallithea/templates/base/root.html:36 +#: kallithea/templates/base/root.html:39 +#: kallithea/tests/data/templates/base/root.html.py:113 msgid "Expand Diff" msgstr "Раскрыть сравнение" -#: kallithea/templates/base/root.html:37 +#: kallithea/templates/base/root.html:40 +#: kallithea/tests/data/templates/base/root.html.py:115 msgid "Failed to revoke permission" msgstr "Не удалось отозвать привилегии" -#: kallithea/templates/base/root.html:38 +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 msgid "Confirm to revoke permission for {0}: {1} ?" msgstr "Подтвердите удаление привилегии для {0}: {1} ?" -#: kallithea/templates/base/root.html:39 -msgid "enabled" -msgstr "включено" - -#: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "отключено" - -#: kallithea/templates/base/root.html:42 +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "Выбрать набор изменений" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" msgstr "Выбрать набор изменений" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "Закладки %s" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "Автор" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "Ревизия" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "Ветки %s" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" -msgstr "" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "По возрастанию" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "По убыванию" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "Записи не найдены." + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "Ошибка данных." + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." +msgstr "Загрузка..." #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "Логи изменений %s" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" @@ -4823,207 +5052,290 @@ msgstr[1] "Показаны %d из %d ревизий" msgstr[2] "Показаны %d из %d ревизий" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "Очистить выбор" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 msgid "Go to tip of repository" msgstr "Перейти на верхушку репозитория" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "Сравнить fork с %s" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "Сравнить форк с родительским репозиторием (%s)" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" msgstr "Отфильтровать ветку:" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, fuzzy, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" "Статус набора изенений: %s⏎\n" "Кликрните, чтобы перейти к соответствующему pull-request'у #%s" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, fuzzy, python-format +msgid "Changeset status: %s by %s" msgstr "Статус набора изменений: %s" -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "Комментарии отсутствуют" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "Закладка %s" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "Метка %s" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "Ветка %s" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "Изменений ещё нет" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "Удалено" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "Изменено" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "Добавлено" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "Затрагивает %s файлов" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "Ревизия" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "Возраст" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "Автор" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "Ссылки" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "Добавить или загрузить файлы через Kallithea" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 #, fuzzy msgid "Push new repository" msgstr "Отправить новый репозиторий" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "Существующий репозиторий?" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "%s Изменения" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "Статут изменений" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "Отобразить в формате diff" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "Применить разностное исправление (Patch diff)" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "Скачать diff" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 #, fuzzy msgid "Merge" msgstr "свести" -#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 msgid "Grafted from:" msgstr "Перенесено из:" +#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" +msgstr "" + #: kallithea/templates/changeset/changeset.html:129 -msgid "Transplanted from:" -msgstr "" - -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 #, fuzzy msgid "Replaced by:" msgstr "Создано" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 #, fuzzy msgid "Preceded by:" msgstr "Создано" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" @@ -5031,9 +5343,12 @@ msgstr[1] "%s файлов изменено" msgstr[2] "%s файла изменено" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" @@ -5041,92 +5356,124 @@ msgstr[1] "%s файла изменёно: %s добавления, %s удаления" msgstr[2] "%s файлов изменёно: %s добавлений, %s удалений" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "Показать полный diff" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 #, fuzzy msgid "No revisions" msgstr "версии" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 #, fuzzy msgid "on pull request" msgstr "Комментарий в pull-запросе" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 msgid "No title" msgstr "Нет заголовка" -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "Нет изменений" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 msgid "Delete comment?" msgstr "Удалить комментарий?" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "Последние изменения" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +#, fuzzy +msgid "Commenting on line." msgstr "Комментарий к строке {1}." -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" -"Парсинг комментариев выполнен с использованием синтаксиса %s с поддержкой" -" %s." - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +#, fuzzy +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." msgstr "" "Используйте @имя_пользователя в тексте, чтобы отправить оповещение " -"указанному пользователю" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "Предварительный просмотр комментария" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +"указанному пользователю." + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +msgid "Set changeset status" +msgstr "Изменить статус ревизии" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +msgid "No change" +msgstr "Без изменений" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "Комментарий в pull-запросе" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +msgid "Close" +msgstr "Закрыть" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." msgstr "Применение..." -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "Комментировать" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "Предпросмотр" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "Вам необходимо авторизоваться, чтобы оставлять комментарии." -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "Авторизоваться сейчас" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "Скрыть" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" @@ -5134,7 +5481,8 @@ msgstr[1] "%d комментария" msgstr[2] "%d комментариев" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, python-format msgid "%d inline" msgid_plural "%d inline" @@ -5142,7 +5490,8 @@ msgstr[1] "%d к строкам" msgstr[2] "%d к строкам" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" @@ -5150,128 +5499,171 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -#, fuzzy -msgid "Use @username inside this text to notify another user." -msgstr "" -"Используйте @имя_пользователя в тексте, чтобы отправить оповещение " -"указанному пользователю." - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -msgid "Set changeset status" -msgstr "Изменить статус ревизии" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -msgid "No change" -msgstr "Без изменений" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -msgid "Close" -msgstr "Закрыть" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "%s Изменения" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "Статус набора изменений: %s" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "Затронутые файлы" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +#, fuzzy +#| msgid "file removed" +msgid "File before" +msgstr "файл удалён" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "Неизменный" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "Удалён" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "Переименован" + +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Неизвестная ревизия %s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "Безымянный" + +#: kallithea/templates/changeset/diff_block.html:55 +#, fuzzy +#| msgid "file added" +msgid "File after" +msgstr "файл удалён" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 msgid "Show full diff for this file" msgstr "Показать полный diff для этого файла" -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 msgid "Show full side-by-side diff for this file" msgstr "Показать полный diff для этого файла" -#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 msgid "Show inline comments" msgstr "Показать комментарии в строках" -#: kallithea/templates/changeset/diff_block.html:86 -msgid "Deleted" -msgstr "Удалён" - -#: kallithea/templates/changeset/diff_block.html:89 -msgid "Renamed" -msgstr "Переименован" - #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "Нет изменений" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "Предок" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +#, fuzzy +#| msgid "Common ancestor" +msgid "Merge Ancestor" +msgstr "Общий предок" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "Показать merge diff" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "Общий предок" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "Показать merge diff" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "отстаёт на" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, python-format msgid "%s changesets" msgstr "%s изменений" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 msgid "behind" msgstr "от" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "%s Сравнить" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" @@ -5279,109 +5671,190 @@ msgstr[1] "Показать %s commit'а" msgstr[2] "Показать %s commit'ов" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "Показать полный diff" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "Публичный репозиторий" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "Изменений ещё не было" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "Подписаться на ленту RSS %s" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "Подписаться на ленту Atom %s" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "%(user)s оставил комментарий к набору изменений %(age)s" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "Comment from %s on %s changeset %s" +msgid "Comment on Changeset \"%s\"" msgstr "Комментарий от %s к набору изменений %s %s" -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "Состояние набора изменений изменено на" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset flow" +msgid "Changeset on" +msgstr "Поток изменений" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "Ветка" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "Последние изменения" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "This pull request has been closed and can not be updated." +msgid "The pull request has been closed." +msgstr "Этот pull-запрос был закрыт и не может быть обновлён." + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "Здравствуйте, %s" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 #, fuzzy msgid "We have received a request to reset the password for your account." msgstr "Мы отправили запрос на создание нового пароля для вашего аккаунта." -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, fuzzy, python-format +#| msgid "%s mentioned you on %s pull request \"%s\"" +msgid "Mention on Pull Request %s \"%s\" by %s" msgstr "%s упомянул Вас в комментарии к pull-запросу %s \"%s\"" -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, fuzzy, python-format +#| msgid "%s requested your review of %s pull request \"%s\"" +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" msgstr "%s запросил рецензирование pull-запроса %s \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "Комментарий в pull-запросе" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +#, fuzzy +#| msgid "Date" +msgid "at" +msgstr "Дата" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" +msgstr "" + #: kallithea/templates/email_templates/pull_request_comment.html:4 -#, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -msgid "The comment closed the pull request with status" -msgstr "Комментарий закрыл pull-запрос со статусом" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "Комментарий оставлен со статусом" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" -msgstr "Подробнее о пользователе" +#, fuzzy, python-format +#| msgid "%s mentioned you on %s pull request \"%s\"" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "%s упомянул Вас в комментарии к pull-запросу %s \"%s\"" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Pull request %s from %s#%s" +msgid "Pull Request %s \"%s\" Closed" +msgstr "Pull-запросы %s от %s#%s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "[commented] on pull request for" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "[прокомментировано] в запросе на внесение изменений для" + +#: kallithea/templates/email_templates/registration.html:22 +#, fuzzy +#| msgid "Group name" +msgid "Full Name" +msgstr "Имя группы" #: kallithea/templates/files/diff_2way.html:15 #, python-format @@ -5399,82 +5872,105 @@ msgstr "Сравнение файла %s" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "%s Файлы" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "%s Файлов добавлено" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "Расположение" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "или" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "Режим нового файла" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +#, fuzzy +msgid "New file type" +msgstr "новый файл" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 msgid "Commit Changes" msgstr "Применить изменения" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "Предыдущая ревизия" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "Следующая ревизия" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "Отслеживать данную ветку" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "Загружается список файлов..." -#: kallithea/templates/files/files_browser.html:61 +#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 msgid "Size" msgstr "Размер" -#: kallithea/templates/files/files_browser.html:62 +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 msgid "Last Revision" msgstr "Последняя версия" -#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 msgid "Last Modified" msgstr "Последнее изменение" -#: kallithea/templates/files/files_browser.html:64 +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 msgid "Last Committer" msgstr "Автор последней ревизии" @@ -5484,7 +5980,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "" @@ -5497,25 +5993,24 @@ msgid "Edit file" msgstr "Редактировать файл" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "Исходный код" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "Редактирование файла" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" @@ -5523,76 +6018,105 @@ msgstr[1] "%s авторов" msgstr[2] "%s автора" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" -msgstr "" +#: kallithea/templates/files/files_source.html:34 +#, fuzzy, python-format +#| msgid "Deleted branch: %s" +msgid "Edit on Branch: %s" +msgstr "Удалена ветка: %s" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" +msgstr "Редактирование файлов разрешено только в HEAD-ревизии данной ветки" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "Редактирование файлов разрешено только в HEAD-ревизии данной ветки" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "Бинарный файл (%s)" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +msgid "File is too big to display." +msgstr "Файл слишком большой для отображения." + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "Показать полный diff." + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" -msgstr "Файл слишком большой для отображения" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." +msgstr "Показать только текст." #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "аннотация" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "По заданному пути файлы отсутствуют" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "%s Наблюдатели" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "Наблюдатели" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "Наблюдать за репозиторием" @@ -5601,72 +6125,82 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "Имя форка" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" "Ревизия по умолчанию, из которой будет производиться выгрузка файлов при " "скачивании." -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "Приватный" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "Скопировать привилегии" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "Скопировать привилегии с форкнутого репозитория" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "Обновлять после клонирования" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "Скачивать исходники после создания клона" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "Форки %s" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "Ответвления" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "Форкнуто" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "Форки ещё не созданы" -#: kallithea/templates/journal/journal.html:21 +#: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 msgid "ATOM journal feed" msgstr "Лента журнала ATOM" -#: kallithea/templates/journal/journal.html:22 +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "Лента журнала RSS" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "Мои репозитории" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "Записи отсуствуют" @@ -5680,34 +6214,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "Новый pull-запрос" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "Заголовок" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "Написать короткое писание по этому запросу" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "Поток изменений" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "Первоначальный репозиторий" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "Репозиторий назначения" @@ -5743,7 +6288,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "Закрыто" @@ -5761,34 +6308,42 @@ msgstr "Подтвердите удаление этого pull-request'а" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, fuzzy, python-format msgid "%s Pull Request %s" msgstr "%s Pull-запрос #%s" #: kallithea/templates/pullrequests/pullrequest_show.html:10 -#, fuzzy, python-format +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 +#, python-format msgid "Pull request %s from %s#%s" -msgstr "Pull-запросы №%s от %s#%s" - -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +msgstr "Pull-запросы %s от %s#%s" + +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 #, fuzzy msgid "Summarize the changes" msgstr "Применить изменения" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "Еще не рассмотренный" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" @@ -5796,84 +6351,115 @@ msgstr[1] "%d рецензента" msgstr[2] "%d рецензентов" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "Запрос на внесение изменений был рассмотрен всеми рецензентами" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 msgid "There are no reviewers" msgstr "Нет рецензентов" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 #, fuzzy msgid "on" msgstr "ничего" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "Принять изменения" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 #, fuzzy -msgid "Update" -msgstr "[обновлён] пользователь" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#| msgid "Registration" +msgid "Next iteration" +msgstr "Регистрация" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "Сохранить изменения" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +msgid "Cancel Changes" +msgstr "Отменить изменения" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 msgid "Pull Request Reviewers" msgstr "Рецензенты pull-запросов" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 msgid "Remove reviewer" msgstr "Удалить рецензента" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 msgid "Potential Reviewers" msgstr "Потенциальные рецензенты" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "Сохранить изменения" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -#, fuzzy -msgid "Save as New Pull Request" -msgstr "Создать новый pull запрос" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -msgid "Cancel Changes" -msgstr "Отменить изменения" - -#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 #, fuzzy msgid "Pull Request Content" msgstr "Статус pull-request'а был изменен" +#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" +msgstr "Общий предок" + #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 #, python-format msgid "%s Pull Requests" @@ -5881,7 +6467,6 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Pull Requests from %s'" msgid "Pull Requests from '%s'" msgstr "Pull-запросы от %s" @@ -5890,244 +6475,469 @@ msgid "Pull Requests to '%s'" msgstr "Pull-запросы для %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "Создать новый pull-запрос" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, fuzzy, python-format msgid "Show Pull Requests to %s" msgstr "Pull-запросы для %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, fuzzy, python-format msgid "Show Pull Requests from '%s'" msgstr "Pull запросы от %s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 #, fuzzy msgid "Show closed pull requests (in addition to open pull requests)" msgstr "Показать закрытые pull-запросы" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 #, fuzzy msgid "Pull Requests Created by Me" msgstr "Рецензенты запросов на внесение изменений Pull request" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +#, fuzzy +#| msgid "Pull Request Reviewers" +msgid "Pull Requests Needing My Review" +msgstr "Рецензенты pull-запросов" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 #, fuzzy msgid "Pull Requests I Participate In" msgstr "Моё участие" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 msgid "Search in All Repositories" msgstr "Поиск по всем репозиториям" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "Фраза для поиска" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "Критерий поиска" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "Содержимое файлов" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "Сообщения коммитов" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "Имя файла" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "Недостаточно прав" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "ATOM лента репозитория %s" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "RSS лента репозитория %s" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "Включено" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "Полученная статистика: " -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "файлы" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "Показать еще" -#: kallithea/templates/summary/statistics.html:390 +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 msgid "commits" msgstr "commit'ы" +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "файлы добавлены" + +#: kallithea/templates/summary/statistics.html:390 +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "файлы изменены" + #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "файлы добавлены" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" -msgstr "файлы изменены" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" +msgstr "файлы удалены" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" -msgstr "файлы удалены" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "commit" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" +msgstr "файл удалён" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" -msgstr "commit" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" +msgstr "файл изменён" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "файл удалён" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "файл изменён" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "файл удалён" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "%s общие сведения" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "Репозитарий заблокирован %s" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "Репозиторий разблокирован" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "Форк от" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "Клонировать из" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "Показать по ID" + #: kallithea/templates/summary/summary.html:72 -msgid "Clone URL" -msgstr "Ссылка для клонирования" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" msgstr "Показать по имени" -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "Показать по ID" - -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "Популярные файлы" -#: kallithea/templates/summary/summary.html:108 +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 msgid "Download" msgstr "Скачать" -#: kallithea/templates/summary/summary.html:112 +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 msgid "There are no downloads yet" msgstr "Скачиваний ещё нет" -#: kallithea/templates/summary/summary.html:114 +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 msgid "Downloads are disabled for this repository" msgstr "Скачивание отключено в этом репозитории" -#: kallithea/templates/summary/summary.html:120 +#: kallithea/templates/summary/summary.html:108 +#: kallithea/tests/data/templates/summary/summary.html.py:190 msgid "Download as zip" msgstr "Скачать в zip" -#: kallithea/templates/summary/summary.html:125 +#: kallithea/templates/summary/summary.html:112 +#: kallithea/tests/data/templates/summary/summary.html.py:194 msgid "Check this to download archive with subrepos" msgstr "Отметьте для скачивания архива с дочерними репозиториями" -#: kallithea/templates/summary/summary.html:125 -#, fuzzy +#: kallithea/templates/summary/summary.html:114 +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" -msgstr "с дочерними репозиториями" - -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "Размер репозитория" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +msgstr "С дочерними репозиториями" + +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "Лента новостей" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 msgid "Latest Changes" msgstr "Последние изменения" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 msgid "Quick Start" msgstr "Быстрый старт" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "Скачать %s как %s" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "%s Меток" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" -msgstr "Сравнить теги" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "Панель управления" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "Имя группы" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "Запомнить" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "Измените аватар через сайт" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "Используется" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "Не указан email. Пожалуйста, обновите ваш email." + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "Опции пересканирования" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "Веб" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "Запрашивать SSL для операций с VCS" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "Элементы панели" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "фильтр..." + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "Забыли пароль?" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "Предок" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "Комментарий от %s к набору изменений %s %s" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "Состояние набора изменений изменено на" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "%s упомянул Вас в комментарии к pull-запросу %s \"%s\"" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "%s запросил рецензирование pull-запроса %s \"%s\"" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "Комментарий закрыл pull-запрос со статусом" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "Комментарий оставлен со статусом" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "Подробнее о пользователе" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "Размер репозитория" #~ msgid "No comments." #~ msgstr "Нет комментариев." @@ -6138,9 +6948,6 @@ #~ msgid "journal" #~ msgstr "журнал" -#~ msgid "unmodified" -#~ msgstr "" - #~ msgid "Locked repository" #~ msgstr "Закрытый репозиторий" @@ -6162,9 +6969,6 @@ #~ msgid "No Files" #~ msgstr "Файлов нет" -#~ msgid "" -#~ msgstr "" - #~ msgid "Username \"%(username)s\" is forbidden" #~ msgstr "Имя \"%(username)s\" отклонено" @@ -6177,12 +6981,6 @@ #~ msgid "invalid clone URL" #~ msgstr "неверный URL для клонирования" -#~ msgid "Invalid clone URL, provide a valid clone http(s)/svn+http(s)/ssh URL" -#~ msgstr "" - -#~ msgid "Revisions %(revs)s are already part of pull request or have set status" -#~ msgstr "" - #~ msgid "Defaults" #~ msgstr "Значения по умолчанию" @@ -6195,24 +6993,6 @@ #~ msgid "My Permissions" #~ msgstr "Мои привилегии" -#~ msgid "expires" -#~ msgstr "" - -#~ msgid "reset" -#~ msgstr "" - -#~ msgid "expired" -#~ msgstr "" - -#~ msgid "remove" -#~ msgstr "" - -#~ msgid "No additional api keys specified" -#~ msgstr "" - -#~ msgid "New api key" -#~ msgstr "" - #~ msgid "delete" #~ msgstr "удалить" @@ -6243,15 +7023,6 @@ #~ msgid "admin" #~ msgstr "администратор" -#~ msgid "user/user group" -#~ msgstr "" - -#~ msgid "delegated admin" -#~ msgstr "" - -#~ msgid "Import existing repository ?" -#~ msgstr "" - #~ msgid "Optional URL from which repository should be cloned." #~ msgstr "Опциональный URL, с которого требуется склонировать репозиторий." @@ -6261,93 +7032,21 @@ #~ msgid "Pull Changes from Remote Location" #~ msgstr "Получить изменения с удалённой стороны" -#~ msgid "This repository does not have a remote URL set." -#~ msgstr "" - #~ msgid "Non-changeable id" #~ msgstr "Неизменяемый id" #~ msgid "edit" #~ msgstr "редактировать" -#~ msgid "new value" -#~ msgstr "" - -#~ msgid "URL used for doing remote pulls." -#~ msgstr "" - -#~ msgid "Email prefix" -#~ msgstr "" - -#~ msgid "Kallithea email from" -#~ msgstr "" - -#~ msgid "Error email from" -#~ msgstr "" - -#~ msgid "Error email recipients" -#~ msgstr "" - -#~ msgid "SMTP server" -#~ msgstr "" - -#~ msgid "SMTP username" -#~ msgstr "" - -#~ msgid "SMTP password" -#~ msgstr "" - -#~ msgid "SMTP port" -#~ msgstr "" - -#~ msgid "SMTP use TLS" -#~ msgstr "" - -#~ msgid "SMTP use SSL" -#~ msgstr "" - -#~ msgid "SMTP auth" -#~ msgstr "" - #~ msgid "Destroy old data" #~ msgstr "Уничтожить все данные" -#~ msgid "check for updates" -#~ msgstr "" - #~ msgid "Default permissions" #~ msgstr "Стандартные привилегии" -#~ msgid "user groups" -#~ msgstr "" - -#~ msgid "Inherit from defaults" -#~ msgstr "" - -#~ msgid "show" -#~ msgstr "" - -#~ msgid "parent rev." -#~ msgstr "" - -#~ msgid "child rev." -#~ msgstr "" - -#~ msgid "no revisions" -#~ msgstr "" - #~ msgid "Status change from pull request" #~ msgstr "Изменение статуса" -#~ msgid "Status change on changeset" -#~ msgstr "" - -#~ msgid "Comment on changeset" -#~ msgstr "" - -#~ msgid "revision" -#~ msgstr "" - #~ msgid "Mimetype" #~ msgstr "Тип файла" @@ -6357,9 +7056,6 @@ #~ msgid "Latest vote: %s" #~ msgstr "Последняя оценка: %s" -#~ msgid "Nobody voted" -#~ msgstr "" - #~ msgid "owner" #~ msgstr "владелец" @@ -6381,9 +7077,262 @@ #~ msgid "You can generate it by clicking following URL" #~ msgstr "Вы можете заново сгенерировать его, перейдя по следующей ссылке" -#~ msgid "Please ignore this email if you did not request a new password ." -#~ msgstr "" - #~ msgid "Created by" #~ msgstr "Создано" +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "Закрыт, замещён %s ." + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "Закрыт." + +#~ msgid "Changeset not found" +#~ msgstr "Набор изменений не найден" + +#~ msgid "Repository no access" +#~ msgstr "Репозитарий - нет доступа" + +#~ msgid "Repository read access" +#~ msgstr "Репозитарий - доступ на чтение" + +#~ msgid "Repository write access" +#~ msgstr "Репозитарий - доступ на запись" + +#~ msgid "Repository admin access" +#~ msgstr "Репозитарий - администрирование" + +#~ msgid "Repository Group no access" +#~ msgstr "Группа Репозиториев - нет доступа" + +#~ msgid "Repository Group read access" +#~ msgstr "Группа Репозиториев - доступ на чтение" + +#~ msgid "Repository Group write access" +#~ msgstr "Группа Репозиториев - доступ на запись" + +#~ msgid "Repository Group admin access" +#~ msgstr "Группа Репозиториев - администрирование" + +#~ msgid "Repository creation disabled" +#~ msgstr "Создание репозиториев отключено" + +#~ msgid "Repository creation enabled" +#~ msgstr "Создание репозиториев включено" + +#~ msgid "Repository forking disabled" +#~ msgstr "Возможность создавать форк репозитория отключена" + +#~ msgid "Repository forking enabled" +#~ msgstr "Возможность создавать форк репозитория включена" + +#~ msgid "Register disabled" +#~ msgstr "Регистрация отключена" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "Регистрация нового пользователя в Kallithea с ручной активацией" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "Регистрация нового пользователя в Kallithea с автоматической активацией" + +#~ msgid "Not Reviewed" +#~ msgstr "Не просмотрено" + +#~ msgid "Rejected" +#~ msgstr "Отклонено" + +#~ msgid "Under Review" +#~ msgstr "На рассмотрении" + +#~ msgid "Repository group no access" +#~ msgstr "Группа Репозиториев - нет доступа" + +#~ msgid "Repository group read access" +#~ msgstr "Группа репозиториев - доступ на чтение" + +#~ msgid "Repository group write access" +#~ msgstr "Группа репозиториев - доступ на запись" + +#~ msgid "Repository group admin access" +#~ msgstr "Группа репозиториев - администрирование" + +#~ msgid "User group no access" +#~ msgstr "Группа пользователей - нет доступа" + +#~ msgid "User group read access" +#~ msgstr "Группа пользователей - доступ на чтение" + +#~ msgid "User group write access" +#~ msgstr "Группа пользователей - доступ на запись" + +#~ msgid "User group admin access" +#~ msgstr "Группа пользователей - администрирование" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "Создание групп репозиториев отключено" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "Создание групп репозиториев включено" + +#~ msgid "User Group creation disabled" +#~ msgstr "Создание групп пользователей отключено" + +#~ msgid "User Group creation enabled" +#~ msgstr "Создание групп пользователей включено" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "Регистрация пользователя с ручной активацией учётной записи" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "Регистрация пользователя с автоматической активацией" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "%(user)s просит вас рассмотреть pull request #%(pr_id)s: %(pr_title)s" + +#~ msgid "repositories" +#~ msgstr "репозитории" + +#~ msgid "No repositories found." +#~ msgstr "Репозитарии не найдены." + +#~ msgid "There are no branches yet" +#~ msgstr "Ветки ещё не созданы" + +#~ msgid "There are no tags yet" +#~ msgstr "Метки отсутсвуют" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "Закладок ещё нет" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "включено" + +#~ msgid "%s Bookmarks" +#~ msgstr "Закладки %s" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "Ветки %s" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "Редактирование файла" + +#~ msgid "Update" +#~ msgstr "[обновлён] пользователь" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "Создать новый pull запрос" + +#~ msgid "%s Tags" +#~ msgstr "%s Меток" + +#~ msgid "Compare Tags" +#~ msgstr "Сравнить теги" + +#~ msgid "" +#~ "Changing status on a changeset " +#~ "associated with a closed pull request" +#~ " is not allowed" +#~ msgstr "" +#~ "Нельзя редактировать статус изменений, " +#~ "связанных с закрытыми pull-request'ами" + +#~ msgid "You have successfully registered into Kallithea" +#~ msgstr "Регистрация в Kallithea прошла успешно" + +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "Этот pull-запрос может быть обновлён из %s:" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "Подтвердите сброс кэша." + +#~ msgid "" +#~ "Changeset status: %s\n" +#~ "Click to open associated pull request %s" +#~ msgstr "" +#~ "Статус набора изенений: %s⏎\n" +#~ "Кликрните, чтобы перейти к соответствующему pull-request'у #%s" + +#~ msgid "Commenting on line {1}." +#~ msgstr "Комментарий к строке {1}." + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "" +#~ "Парсинг комментариев выполнен с использованием" +#~ " синтаксиса %s с поддержкой %s." + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" +#~ "Используйте @имя_пользователя в тексте, чтобы" +#~ " отправить оповещение указанному пользователю" + +#~ msgid "Comment preview" +#~ msgstr "Предварительный просмотр комментария" + +#~ msgid "Preview" +#~ msgstr "Предпросмотр" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "" +#~ "Используйте @имя_пользователя в тексте, чтобы" +#~ " отправить оповещение указанному пользователю." + +#~ msgid "New file mode" +#~ msgstr "Режим нового файла" + +#~ msgid "File is too big to display" +#~ msgstr "Файл слишком большой для отображения" + +#~ msgid "Save as New Pull Request" +#~ msgstr "Создать новый pull запрос" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/sk/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/sk/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/sk/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -7,456 +7,491 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" "PO-Revision-Date: 2015-04-01 12:59+0200\n" "Last-Translator: Andrew Shadura \n" "Language-Team: Slovak " "\n" -"Language: sk\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 2.3-dev\n" +"Generated-By: Babel 1.3\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "Zatiaľ nie sú žiadne zmeny" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(zatvorené)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "Ukázať medzery" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "Ignorovať medzery" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "Taká revízia neexistuje" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "Prázdny repozitár" + +#: kallithea/controllers/compare.py:73 +msgid "Cannot compare repositories of different types" +msgstr "" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" -#: kallithea/controllers/error.py:71 +#: kallithea/controllers/error.py:70 #, fuzzy msgid "No response" msgstr "Neznáma revízia %s" -#: kallithea/controllers/error.py:72 +#: kallithea/controllers/error.py:71 msgid "Unknown error" msgstr "" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "" -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "Nemáte oprávnenie na zobrazenie tejto stránky" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." msgstr "" -#: kallithea/controllers/feed.py:55 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "" + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 +#, python-format +msgid "%s %s feed" +msgstr "" + +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 #, python-format msgid "Changes on %s repository" msgstr "Zmeny na repozitáre %s" -#: kallithea/controllers/feed.py:56 -#, python-format -msgid "%s %s feed" -msgstr "" - -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "" - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "" - -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "Kliknite pre pridanie nového súboru" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "Zatiaľ nie sú žiadne súbory. %s" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, python-format msgid "%s at %s" msgstr "" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "Tento repozitár bol uzamknutý používateľom %s dňa %s" -#: kallithea/controllers/files.py:317 +#: kallithea/controllers/files.py:309 msgid "You can only delete files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:328 +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "Zmazaný súbor %s cez Kallithea" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "Úspešne zmazaný súbor %s" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "Došlo k chybe pri ukladaní" -#: kallithea/controllers/files.py:377 +#: kallithea/controllers/files.py:369 msgid "You can only edit files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:391 +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "Žiadne zmeny" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "Pridaný súbor cez Kallithea" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "Žiadny obsah" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "Sťahovanie vypnuté" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "Neznáma revízia %s" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "Prázdny repozitár" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "Zmeny" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "Vetvy" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "Tagy" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "Skupiny" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "Repozitáre" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "Vetva" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "Záložka" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 #, fuzzy msgid "Bad captcha" msgstr "zlá captcha" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" msgstr "" -#: kallithea/controllers/login.py:246 +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" msgstr "" -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "Úspešne aktualizované heslo" -#: kallithea/controllers/pullrequests.py:124 +#: kallithea/controllers/pullrequests.py:73 +#, python-format +msgid "Invalid reviewer \"%s\" specified" +msgstr "" + +#: kallithea/controllers/pullrequests.py:135 #, python-format msgid "%s (closed)" msgstr "%s (zatvorené)" -#: kallithea/controllers/pullrequests.py:152 +#: kallithea/controllers/pullrequests.py:162 #: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 msgid "Changeset" msgstr "" -#: kallithea/controllers/pullrequests.py:173 +#: kallithea/controllers/pullrequests.py:183 msgid "Special" msgstr "" -#: kallithea/controllers/pullrequests.py:174 +#: kallithea/controllers/pullrequests.py:184 msgid "Peer branches" msgstr "" -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 msgid "Bookmarks" msgstr "Záložky" -#: kallithea/controllers/pullrequests.py:310 +#: kallithea/controllers/pullrequests.py:326 #, python-format msgid "Error creating pull request: %s" msgstr "" -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 -#, python-format -msgid "Invalid reviewer \"%s\" specified" -msgstr "" - -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "" - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "" - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" -msgstr "" - -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "" + +#: kallithea/controllers/pullrequests.py:381 +msgid "New pull request iteration created" +msgstr "" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, python-format +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." -msgstr "" - -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +msgid "No additional changesets found for iterating on this pull request." +msgstr "" + +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "" - -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:571 +msgid "Git pull requests don't support iterating yet." +msgstr "" + +#: kallithea/controllers/pullrequests.py:573 +#, python-format +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "" - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, fuzzy, python-format +msgid "Successfully deleted pull request %s" +msgstr "Úspešne zmazaný súbor %s" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "" -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "Došlo k chybe počas vyhľadávania." -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "" @@ -468,149 +503,153 @@ msgid "error occurred during update of auth settings" msgstr "" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "" +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "" + #: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 -msgid "Forever" -msgstr "" +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" +msgstr "5 minút" #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" -msgstr "5 minút" +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" +msgstr "1 hodina" #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" -msgstr "1 hodina" +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 +msgid "1 day" +msgstr "1 deň" #: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 -msgid "1 day" -msgstr "1 deň" - -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "1 mesiac" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "Došlo k chybe pri vytváraní gist" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" msgstr "" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "Došlo k chybe pri aktualizácii gist %s" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "Došlo k chybe pri aktualizácii hesla užívateľa" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "Došlo k chybe pri ukladaní e-mailovej adresy" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" msgstr "" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -618,623 +657,643 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" -msgstr "" - -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "Error occurred during gist creation" +msgid "An error occurred during creation of field: %r" +msgstr "Došlo k chybe pri vytváraní gist" + +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "Nič" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "" +#: kallithea/controllers/admin/repos.py:480 +msgid "An error occurred during this operation" +msgstr "" + +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 +#, fuzzy +msgid "Repository has been locked" +msgstr "Tento repozitár bol uzamknutý používateľom %s dňa %s" + +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 +#, fuzzy +msgid "Repository has been unlocked" +msgstr "Tento repozitár bol uzamknutý používateľom %s dňa %s" + +#: kallithea/controllers/admin/repos.py:502 #: kallithea/controllers/admin/repos.py:521 -msgid "An error occurred during this operation" +msgid "An error occurred during unlocking" +msgstr "" + +#: kallithea/controllers/admin/repos.py:533 +msgid "Cache invalidation successful" msgstr "" #: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 -#, fuzzy -msgid "Repository has been locked" -msgstr "Tento repozitár bol uzamknutý používateľom %s dňa %s" - -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 -#, fuzzy -msgid "Repository has been unlocked" -msgstr "Tento repozitár bol uzamknutý používateľom %s dňa %s" - -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 -msgid "An error occurred during unlocking" -msgstr "" - -#: kallithea/controllers/admin/repos.py:582 -msgid "Cache invalidation successful" -msgstr "" - -#: kallithea/controllers/admin/repos.py:586 msgid "An error occurred during cache invalidation" msgstr "" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "" +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 +msgid "" +"Unable to activate hgsubversion support. The \"hgsubversion\" library is " +"missing" +msgstr "" + +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 +msgid "Error occurred while updating application settings" +msgstr "" + #: kallithea/controllers/admin/settings.py:174 -msgid "" -"Unable to activate hgsubversion support. The \"hgsubversion\" library is " -"missing" -msgstr "" - -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 -msgid "Error occurred while updating application settings" -msgstr "" - -#: kallithea/controllers/admin/settings.py:211 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "" -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format #| msgid "Watched Repositories" msgid "Invalidated %s repositories" msgstr "Repozitáre" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "" +#: kallithea/controllers/admin/user_groups.py:208 +#, python-format +msgid "Error occurred during update of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:219 +msgid "Successfully deleted user group" +msgstr "" + #: kallithea/controllers/admin/user_groups.py:224 -#, python-format -msgid "Error occurred during update of user group %s" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:242 -msgid "Successfully deleted user group" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:247 msgid "An error occurred during deletion of user group" msgstr "" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, python-format msgid "Changeset for %s %s not found in %s" msgstr "" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format #| msgid "Set changeset status" msgid "Changeset %s not found" msgstr "Zmeny" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 msgid "Compare view" msgstr "" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, python-format msgid "Fork name %s" msgstr "" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, python-format msgid "Pull request %s" msgstr "" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr "" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1242,7 +1301,7 @@ "repositories" msgstr "" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" @@ -1250,7 +1309,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" @@ -1258,7 +1317,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" @@ -1266,7 +1325,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" @@ -1274,7 +1333,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" @@ -1282,7 +1341,7 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" @@ -1290,1267 +1349,920 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 msgid "Default user has read access to new repositories" msgstr "" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 msgid "Default user has write access to new repositories" msgstr "" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 msgid "Only admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 msgid "Non-admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 msgid "Only admins can create user groups" msgstr "" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 msgid "Non-admins can create user groups" msgstr "" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 #, fuzzy msgid "Only admins can fork repositories" msgstr "Repozitáre" -#: kallithea/model/db.py:1696 +#: kallithea/model/db.py:1745 #, fuzzy -#| msgid "Non-admins can can fork repositories" msgid "Non-admins can fork repositories" msgstr "Repozitáre" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" msgstr "" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 #, fuzzy msgid "Not reviewed" msgstr "" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 #, fuzzy msgid "Under review" msgstr "" -#: kallithea/model/forms.py:57 -msgid "Please enter a login" +#: kallithea/model/db.py:2278 +msgid "Not approved" +msgstr "" + +#: kallithea/model/db.py:2279 +msgid "Approved" msgstr "" #: kallithea/model/forms.py:58 +msgid "Please enter a login" +msgstr "" + +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "" -#: kallithea/model/forms.py:66 -msgid "Please enter a password" -msgstr "" - #: kallithea/model/forms.py:67 +msgid "Please enter a password" +msgstr "" + +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" +#: kallithea/model/notification.py:240 +#, python-format +msgid "%(user)s commented on changeset %(age)s" +msgstr "" + +#: kallithea/model/notification.py:241 +#, python-format +msgid "%(user)s sent message %(age)s" +msgstr "" + +#: kallithea/model/notification.py:242 +#, python-format +msgid "%(user)s mentioned you %(age)s" +msgstr "" + +#: kallithea/model/notification.py:243 +#, python-format +msgid "%(user)s registered in Kallithea %(age)s" +msgstr "" + +#: kallithea/model/notification.py:244 +#, python-format +msgid "%(user)s opened new pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:245 +#, python-format +msgid "%(user)s commented on pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:252 +#, python-format +msgid "%(user)s commented on changeset at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:253 +#, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:254 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + #: kallithea/model/notification.py:255 #, python-format -msgid "%(user)s commented on changeset %(age)s" +msgid "%(user)s registered in Kallithea at %(when)s" msgstr "" #: kallithea/model/notification.py:256 #, python-format -msgid "%(user)s sent message %(age)s" +msgid "%(user)s opened new pull request at %(when)s" msgstr "" #: kallithea/model/notification.py:257 #, python-format -msgid "%(user)s mentioned you %(age)s" -msgstr "" - -#: kallithea/model/notification.py:258 -#, python-format -msgid "%(user)s registered in Kallithea %(age)s" -msgstr "" - -#: kallithea/model/notification.py:259 -#, python-format -msgid "%(user)s opened new pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:260 -#, python-format -msgid "%(user)s commented on pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:267 -#, python-format -msgid "%(user)s commented on changeset at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:268 -#, python-format -msgid "%(user)s sent message at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:269 -#, python-format -msgid "%(user)s mentioned you at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:270 -#, python-format -msgid "%(user)s registered in Kallithea at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:271 -#, python-format -msgid "%(user)s opened new pull request at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:272 -#, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, python-format +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "" + +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" msgstr "" -#: kallithea/model/notification.py:308 -#, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:309 -#, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +msgid "Cannot create empty pull request" +msgstr "" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +msgid "You are not authorized to create the pull request" +msgstr "" + +#: kallithea/model/pull_request.py:341 +msgid "Missing changesets since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:348 +#, python-format +msgid "New changesets on %s %s since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, python-format +msgid "No changes found on %s %s since previous iteration." +msgstr "" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 msgid "You can't remove this user since it is crucial for the entire application" msgstr "" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories: %s" msgstr "" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" " owners or remove those repository groups: %s" msgstr "" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " "owners or remove those user groups: %s" msgstr "" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 msgid "Password reset notification" msgstr "" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with an alphanumeric character or underscore" msgstr "" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 msgid "Invalid username or password" msgstr "" +#: kallithea/model/validators.py:310 +msgid "Token mismatch" +msgstr "" + +#: kallithea/model/validators.py:326 +#, python-format +msgid "Repository name %(repo)s is not allowed" +msgstr "" + +#: kallithea/model/validators.py:328 +#, python-format +msgid "Repository named %(repo)s already exists" +msgstr "" + +#: kallithea/model/validators.py:329 +#, python-format +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "" + #: kallithea/model/validators.py:331 -msgid "Token mismatch" -msgstr "" - -#: kallithea/model/validators.py:345 -#, python-format -msgid "Repository name %(repo)s is not allowed" -msgstr "" - -#: kallithea/model/validators.py:347 -#, python-format -msgid "Repository named %(repo)s already exists" -msgstr "" - -#: kallithea/model/validators.py:348 -#, python-format -msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" -msgstr "" - -#: kallithea/model/validators.py:350 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 #, fuzzy msgid "Invalid repository URL" msgstr "Odblokovať repozitár" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 msgid "This email address is already in use" msgstr "" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, python-format msgid "Email address \"%(email)s\" not found" msgstr "" -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "" - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository URL" +msgid "Repository Group" +msgstr "Repozitáre" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "" - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "" - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "" - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, python-format msgid "Reset Your Password to %s" msgstr "" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 msgid "Reset Your Password" msgstr "" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" msgstr "" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 msgid "New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 msgid "Confirm New Password" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 msgid "Admin Journal" msgstr "" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "" #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 msgid "Filter" msgstr "" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, python-format msgid "%s Entry" msgid_plural "%s Entries" @@ -2559,149 +2271,177 @@ msgstr[2] "%s záznamov" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 #, fuzzy msgid "Repository Defaults" msgstr "Repozitáre" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "" +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 +msgid "Private repository" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" + #: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 -msgid "Private repository" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 +msgid "Enable statistics" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 +msgid "Enable statistics window on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 +msgid "Enable downloads" msgstr "" #: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 +msgid "Enable download menu on summary page." +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 +msgid "Enable locking" +msgstr "" + +#: kallithea/templates/admin/defaults/defaults.html:61 #: kallithea/templates/admin/repos/repo_edit_settings.html:84 -msgid "Enable statistics" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 -msgid "Enable statistics window on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 -msgid "Enable downloads" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 -msgid "Enable download menu on summary page." -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 -msgid "Enable locking" -msgstr "" - -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "" @@ -2710,45 +2450,63 @@ msgid "Edit Gist" msgstr "" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "" -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 msgid "Never" msgstr "" @@ -2757,273 +2515,406 @@ msgstr "" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 msgid "Email Addresses" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 #, fuzzy msgid "Owned Repositories" msgstr "Repozitáre" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 #, fuzzy msgid "Watched Repositories" msgstr "Repozitáre" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 msgid "Show Permissions" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, python-format msgid "Confirm to reset this API key: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 msgid "Expired" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, python-format msgid "Confirm to remove this API key: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 msgid "Remove" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 msgid "New API key" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "" @@ -3031,280 +2922,360 @@ msgid "Change Your Account Password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, python-format +msgid "Change %s avatar at" msgstr "" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 msgid "Repositories You Own" msgstr "Vaše repozitáre" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" msgstr "" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 msgid "Repositories You are Watching" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" msgstr "" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +msgid "Mark as read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 msgid "Default Permissions" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "Repozitáre" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " "will be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 msgid "Apply to all existing repository groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 msgid "" "All default permissions on each user group will be reset to chosen " "permission, note that all custom default permission on user groups will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 +msgid "Permissions for the Default user on new user groups." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 +msgid "Top level repository creation" +msgstr "" + #: kallithea/templates/admin/permissions/permissions_globals.html:55 -msgid "Permissions for the Default user on new user groups." +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 +msgid "Enable this to allow non-admins to create repositories at the top level." +msgstr "" + +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 +msgid "" +"Note: This will also give all users API access to create repositories " +"everywhere. That might change in future versions." msgstr "" #: kallithea/templates/admin/permissions/permissions_globals.html:60 -msgid "Top level repository creation" -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:64 -msgid "Enable this to allow non-admins to create repositories at the top level." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:65 -msgid "" -"Note: This will also give all users API access to create repositories " -"everywhere. That might change in future versions." -msgstr "" - -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3313,31 +3284,42 @@ msgid "%s Repository Group Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "" @@ -3361,12 +3343,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3378,16 +3362,34 @@ msgid "Delete this repository group" msgstr "" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +msgid "Visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "No response" +msgid "Add repos" +msgstr "Neznáma revízia %s" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +msgid "Add/Edit groups" +msgstr "" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 msgid "User/User Group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 msgid "Default" @@ -3395,103 +3397,115 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 msgid "Revoke" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 msgid "Apply to children" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 #, fuzzy msgid "Confirm to delete this group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "Repository Defaults" +msgid "Repository group %s" +msgstr "Repozitáre" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 msgid "Repository Groups Administration" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 msgid "Number of Top-level Repositories" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "Prázdny repozitár" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3520,91 +3534,112 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, fuzzy, python-format msgid "%s Repository Settings" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 msgid "Parent" msgstr "" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 msgid "Public Journal Visibility" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 msgid "Add to Public Journal" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 msgid "Change Locking" msgstr "" +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 +msgid "Confirm to unlock repository." +msgstr "" + +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 +msgid "Unlock Repository" +msgstr "Odblokovať repozitár" + #: kallithea/templates/admin/repos/repo_edit_advanced.html:52 -msgid "Confirm to unlock repository." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 -msgid "Unlock Repository" -msgstr "Odblokovať repozitár" - -#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 #, python-format msgid "Locked by %s on %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 msgid "Confirm to lock repository." msgstr "Potvrdenie blokovania repozitára." -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 msgid "Lock Repository" msgstr "Zablokovať repozitár" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3612,17 +3647,21 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 msgid "Delete this Repository" msgstr "Vymazať tento repozitár" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, fuzzy, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" @@ -3630,15 +3669,18 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3649,110 +3691,116 @@ msgid "Invalidate Repository Cache" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -msgid "Confirm to invalidate repository cache." -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 +msgid "List of Cached Values" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_caches.html:12 -msgid "List of Cached Values" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 msgid "Prefix" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 #, fuzzy msgid "Private Repository" msgstr "Prázdny repozitár" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "Go to tip of repository" +msgid "Fork of repository" +msgstr "Prázdny repozitár" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 #, fuzzy msgid "Remote repository URL" msgstr "Prázdny repozitár" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 #, fuzzy msgid "Pull Changes from Remote Repository" msgstr "Zmeny na repozitáre %s" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 #, fuzzy msgid "Confirm to pull changes from remote repository." msgstr "Potvrdenie blokovania repozitára." -#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 #, fuzzy msgid "Permanent Repository ID" msgstr "Prázdny repozitár" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3762,35 +3810,35 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 #, fuzzy msgid "Remote repository" msgstr "Prázdny repozitár" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 #, fuzzy msgid "Repository URL" msgstr "Repozitáre" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_statistics.html:6 -msgid "Processed commits" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 msgid "Processed progress" msgstr "" @@ -3803,313 +3851,372 @@ msgstr "" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 msgid "Repositories Administration" msgstr "" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 msgid "Settings Administration" msgstr "" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 msgid "Save Settings" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 msgid "Custom Hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" -msgstr "" - -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:4 +msgid "Rescan options" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:23 -msgid "Install Git hooks" -msgstr "" - #: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "" +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + #: kallithea/templates/admin/settings/settings_search.html:12 -msgid "Build from scratch" -msgstr "" - -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 msgid "Kallithea version" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 -msgid "Git version" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Upgrade info endpoint" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 msgid "Mercurial extensions" msgstr "" +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 +msgid "Enable largefiles extension" +msgstr "" + +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 +msgid "Enable hgsubversion extension" +msgstr "" + #: kallithea/templates/admin/settings/settings_vcs.html:47 -msgid "Enable largefiles extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:51 -msgid "Enable hgsubversion extension" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 #, fuzzy msgid "Location of repositories" msgstr "Repozitáre" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4126,101 +4233,125 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +msgid "Clone URL" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "Repositories" +msgid "Repository page size" +msgstr "Repozitáre" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "" + #: kallithea/templates/admin/settings/settings_visual.html:84 -msgid "Show private repository icon on repositories" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 msgid "Meta Tagging" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 msgid "Show Members" msgstr "" @@ -4230,13 +4361,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "" @@ -4245,48 +4378,59 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 msgid "User Groups Administration" msgstr "" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4296,12 +4440,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4310,7 +4456,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "" @@ -4319,400 +4466,453 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 msgid "Users Administration" msgstr "" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "" - -#: kallithea/templates/base/base.html:145 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 +msgid "Options" +msgstr "" + #: kallithea/templates/base/base.html:147 -msgid "Options" +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" msgstr "" #: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 -msgid "Compare Fork" +#: kallithea/tests/data/templates/base/base.html.py:399 +msgid "Unlock" msgstr "" #: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "" - -#: kallithea/templates/base/base.html:163 -msgid "Unlock" +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" msgstr "" #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "" -#: kallithea/templates/base/base.html:246 -msgid "Search in repositories" -msgstr "" - -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 -msgid "My Pull Requests" -msgstr "" - -#: kallithea/templates/base/base.html:289 -msgid "Not Logged In" -msgstr "" - -#: kallithea/templates/base/base.html:296 -msgid "Login to Your Account" -msgstr "" - #: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" -msgstr "" - -#: kallithea/templates/base/base.html:346 +#: kallithea/tests/data/templates/base/base.html.py:540 +msgid "Search in repositories" +msgstr "" + +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 +msgid "My Pull Requests" +msgstr "" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 +msgid "Not Logged In" +msgstr "" + +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 +msgid "Login to Your Account" +msgstr "" + +#: kallithea/templates/base/base.html:385 +msgid "Forgot password?" +msgstr "" + +#: kallithea/templates/base/base.html:389 +msgid "Don't have an account?" +msgstr "" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 #, fuzzy msgid "Inherit defaults" msgstr "Repozitáre" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 -#, fuzzy -msgid "Add Another Comment" -msgstr "" - -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 -msgid "Stop following this repository" -msgstr "" - -#: kallithea/templates/base/root.html:24 -msgid "Start following this repository" -msgstr "" - #: kallithea/templates/base/root.html:25 -msgid "Group" +#: kallithea/tests/data/templates/base/root.html.py:85 +#, fuzzy +msgid "Add Another Comment" msgstr "" #: kallithea/templates/base/root.html:26 -msgid "members" +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 +msgid "Stop following this repository" msgstr "" #: kallithea/templates/base/root.html:27 -msgid "Loading ..." +#: kallithea/tests/data/templates/base/root.html.py:89 +msgid "Start following this repository" msgstr "" #: kallithea/templates/base/root.html:28 -msgid "loading ..." +#: kallithea/tests/data/templates/base/root.html.py:91 +msgid "Group" msgstr "" #: kallithea/templates/base/root.html:29 -msgid "Search truncated" +#: kallithea/tests/data/templates/base/root.html.py:93 +msgid "members" msgstr "" #: kallithea/templates/base/root.html:30 -msgid "No matching files" +#: kallithea/tests/data/templates/base/root.html.py:95 +msgid "Loading ..." msgstr "" #: kallithea/templates/base/root.html:31 -#, fuzzy -msgid "Open New Pull Request from {0}" -msgstr "Zmena stavu" +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." +msgstr "" #: kallithea/templates/base/root.html:32 -msgid "Open New Pull Request for {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" msgstr "" #: kallithea/templates/base/root.html:33 -msgid "Show Selected Changesets {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" msgstr "" #: kallithea/templates/base/root.html:34 -msgid "Selection Link" -msgstr "" +#: kallithea/tests/data/templates/base/root.html.py:103 +#, fuzzy +msgid "Open New Pull Request from {0}" +msgstr "Zmena stavu" #: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 -msgid "Collapse Diff" +#: kallithea/tests/data/templates/base/root.html.py:105 +msgid "Open New Pull Request for {0} → {1}" msgstr "" #: kallithea/templates/base/root.html:36 -msgid "Expand Diff" +#: kallithea/tests/data/templates/base/root.html.py:107 +msgid "Show Selected Changesets {0} → {1}" msgstr "" #: kallithea/templates/base/root.html:37 -msgid "Failed to revoke permission" +#: kallithea/tests/data/templates/base/root.html.py:109 +msgid "Selection Link" msgstr "" #: kallithea/templates/base/root.html:38 -msgid "Confirm to revoke permission for {0}: {1} ?" +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 +msgid "Collapse Diff" msgstr "" #: kallithea/templates/base/root.html:39 -msgid "enabled" +#: kallithea/tests/data/templates/base/root.html.py:113 +msgid "Expand Diff" msgstr "" #: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "" - -#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/base/root.html.py:115 +msgid "Failed to revoke permission" +msgstr "" + +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 +msgid "Confirm to revoke permission for {0}: {1} ?" +msgstr "" + +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" msgstr "" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." msgstr "" #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" @@ -4720,203 +4920,286 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 #, fuzzy msgid "Go to tip of repository" msgstr "Prázdny repozitár" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" msgstr "" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, fuzzy, python-format +msgid "Changeset status: %s by %s" +msgstr "Zmeny" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 #, fuzzy msgid "Push new repository" msgstr "Prázdny repozitár" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 msgid "Merge" msgstr "" +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 +msgid "Grafted from:" +msgstr "" + #: kallithea/templates/changeset/changeset.html:123 -msgid "Grafted from:" +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" msgstr "" #: kallithea/templates/changeset/changeset.html:129 -msgid "Transplanted from:" -msgstr "" - -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 msgid "Replaced by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 msgid "Preceded by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" @@ -4924,9 +5207,12 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" @@ -4934,89 +5220,124 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 #, fuzzy msgid "No revisions" msgstr "Neznáma revízia %s" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 #, fuzzy msgid "on pull request" msgstr "Zmena stavu" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 msgid "No title" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "%s zmien" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 #, fuzzy msgid "Delete comment?" msgstr "" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "Posledné zmeny" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +#, fuzzy +msgid "Set changeset status" +msgstr "Zmeny" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +#, fuzzy +msgid "No change" +msgstr "Žiadne zmeny" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "Zmena stavu" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +#, fuzzy +msgid "Close" +msgstr "(zatvorené)" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" @@ -5024,7 +5345,8 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, fuzzy, python-format msgid "%d inline" msgid_plural "%d inline" @@ -5032,7 +5354,8 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" @@ -5040,128 +5363,161 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -msgid "Use @username inside this text to notify another user." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -#, fuzzy -msgid "Set changeset status" -msgstr "Zmeny" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -#, fuzzy -msgid "No change" -msgstr "Žiadne zmeny" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -#, fuzzy -msgid "Close" -msgstr "(zatvorené)" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +msgid "File before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:40 +msgid "Modified" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 +msgid "Deleted" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 +msgid "Renamed" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "Neznáma revízia %s" + +#: kallithea/templates/changeset/diff_block.html:52 +msgid "No file after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:55 +msgid "File after" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 msgid "Show full diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 msgid "Show full side-by-side diff for this file" msgstr "" -#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 msgid "Show inline comments" msgstr "" -#: kallithea/templates/changeset/diff_block.html:86 -msgid "Deleted" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:89 -msgid "Renamed" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, fuzzy, python-format msgid "%s changesets" msgstr "%s zmien" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 msgid "behind" msgstr "" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" @@ -5169,107 +5525,179 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "Set changeset status" +msgid "Comment on Changeset \"%s\"" +msgstr "Zmeny" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changesets" +msgid "Changeset on" +msgstr "Zmeny" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "Vetva" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "Posledné zmeny" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "Repository has been locked" +msgid "The pull request has been closed." +msgstr "Tento repozitár bol uzamknutý používateľom %s dňa %s" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 msgid "We have received a request to reset the password for your account." msgstr "" -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "Zmena stavu" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +msgid "at" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 #, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -msgid "The comment closed the pull request with status" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "Pull Request %s \"%s\" Closed" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "on pull request" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "Zmena stavu" + +#: kallithea/templates/email_templates/registration.html:22 +msgid "Full Name" msgstr "" #: kallithea/templates/files/diff_2way.html:15 @@ -5288,83 +5716,105 @@ msgstr "" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +msgid "New file type" +msgstr "" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 #, fuzzy msgid "Commit Changes" msgstr "Žiadne zmeny" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "" -#: kallithea/templates/files/files_browser.html:61 -msgid "Size" -msgstr "" - -#: kallithea/templates/files/files_browser.html:62 -msgid "Last Revision" -msgstr "" - #: kallithea/templates/files/files_browser.html:63 -msgid "Last Modified" +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 +msgid "Size" msgstr "" #: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 +msgid "Last Revision" +msgstr "" + +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 +msgid "Last Modified" +msgstr "" + +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 msgid "Last Committer" msgstr "" @@ -5374,7 +5824,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "" @@ -5387,25 +5837,24 @@ msgid "Edit file" msgstr "" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" @@ -5413,76 +5862,104 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" +#: kallithea/templates/files/files_source.html:34 +#, python-format +msgid "Edit on Branch: %s" +msgstr "" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" msgstr "" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +msgid "File is too big to display." +msgstr "" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." msgstr "" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "" @@ -5491,70 +5968,80 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "" -#: kallithea/templates/journal/journal.html:21 -msgid "ATOM journal feed" -msgstr "" - #: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 +msgid "ATOM journal feed" +msgstr "" + +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "" @@ -5568,34 +6055,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "" @@ -5630,7 +6128,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "" @@ -5648,33 +6148,41 @@ msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, python-format msgid "%s Pull Request %s" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, python-format msgid "Pull request %s from %s#%s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 msgid "Summarize the changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" @@ -5682,81 +6190,112 @@ msgstr[1] "" msgstr[2] "" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 #, fuzzy msgid "There are no reviewers" msgstr "Zatiaľ nie sú reviewers" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 msgid "on" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -msgid "Update" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +msgid "Next iteration" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +msgid "Cancel Changes" +msgstr "Zrušiť zmeny" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 msgid "Pull Request Reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 #, fuzzy msgid "Remove reviewer" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 #, fuzzy msgid "Potential Reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -msgid "Save as New Pull Request" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -msgid "Cancel Changes" -msgstr "Zrušiť zmeny" +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 +msgid "Pull Request Content" +msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:296 -msgid "Pull Request Content" +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 @@ -5766,7 +6305,6 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Open New Pull Request from {0}" msgid "Pull Requests from '%s'" msgstr "Zmena stavu" @@ -5775,239 +6313,463 @@ msgid "Pull Requests to '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, python-format msgid "Show Pull Requests to %s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, python-format msgid "Show Pull Requests from '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 msgid "Pull Requests Created by Me" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +msgid "Pull Requests Needing My Review" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 msgid "Pull Requests I Participate In" msgstr "" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 msgid "Search in All Repositories" msgstr "" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "" -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "" +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "" + #: kallithea/templates/summary/statistics.html:390 -msgid "commits" +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" msgstr "" #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" +#: kallithea/tests/data/templates/summary/statistics.html.py:153 +msgid "files removed" msgstr "" #: kallithea/templates/summary/statistics.html:393 -msgid "files removed" +#: kallithea/tests/data/templates/summary/statistics.html.py:155 +msgid "commit" +msgstr "" + +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 +msgid "file added" msgstr "" #: kallithea/templates/summary/statistics.html:395 -msgid "commit" +#: kallithea/tests/data/templates/summary/statistics.html.py:159 +msgid "file changed" msgstr "" #: kallithea/templates/summary/statistics.html:396 -msgid "file added" -msgstr "" - -#: kallithea/templates/summary/statistics.html:397 -msgid "file changed" -msgstr "" - -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "" + #: kallithea/templates/summary/summary.html:72 -msgid "Clone URL" -msgstr "" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" msgstr "" -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "" - -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "" +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "" + #: kallithea/templates/summary/summary.html:108 -msgid "Download" +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" msgstr "" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" msgstr "" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "" - -#: kallithea/templates/summary/summary.html:125 +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" msgstr "" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 msgid "Latest Changes" msgstr "Posledné zmeny" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 msgid "Quick Start" msgstr "" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" msgstr "" #~ msgid "increase diff context to %(num)s lines" @@ -6061,9 +6823,6 @@ #~ msgid "No Files" #~ msgstr "" -#~ msgid "" -#~ msgstr "" - #~ msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" #~ msgstr "" @@ -6370,9 +7129,271 @@ #~ msgid "You can only edit files with revision being a valid branch " #~ msgstr "" -#~ msgid "Changeset not found" +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "" + +#~ msgid "Commenting on line {1}." +#~ msgstr "" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" + +#~ msgid "Comment preview" +#~ msgstr "" + +#~ msgid "Preview" +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "" + +#~ msgid "New file mode" +#~ msgstr "" + +#~ msgid "File is too big to display" +#~ msgstr "" + +#~ msgid "Save as New Pull Request" #~ msgstr "" #~ msgid "Pull Requests from %s'" #~ msgstr "" +#~ msgid "Missing changesets since the previous pull request:" +#~ msgstr "" + +#~ msgid "New changesets on %s %s since the previous pull request:" +#~ msgstr "" + +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "" +#~ "This pull request is based on " +#~ "another %s revision and there is " +#~ "no simple diff." +#~ msgstr "" + +#~ msgid "No changes found on %s %s since previous version." +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "" + +#~ msgid "Pull request update created" +#~ msgstr "" + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "No changesets found for updating this pull request." +#~ msgstr "" + +#~ msgid "Git pull requests don't support updates yet." +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "" + +#~ msgid "An error occurred during creation of field" +#~ msgstr "" + +#~ msgid "Changeset not found" +#~ msgstr "" + +#~ msgid "Repository no access" +#~ msgstr "" + +#~ msgid "Repository read access" +#~ msgstr "" + +#~ msgid "Repository write access" +#~ msgstr "" + +#~ msgid "Repository admin access" +#~ msgstr "" + +#~ msgid "Repository Group no access" +#~ msgstr "" + +#~ msgid "Repository Group read access" +#~ msgstr "" + +#~ msgid "Repository Group write access" +#~ msgstr "" + +#~ msgid "Repository Group admin access" +#~ msgstr "" + +#~ msgid "Repository creation disabled" +#~ msgstr "" + +#~ msgid "Repository creation enabled" +#~ msgstr "" + +#~ msgid "Repository forking disabled" +#~ msgstr "" + +#~ msgid "Repository forking enabled" +#~ msgstr "" + +#~ msgid "Register disabled" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "" + +#~ msgid "Not Reviewed" +#~ msgstr "" + +#~ msgid "Rejected" +#~ msgstr "" + +#~ msgid "Under Review" +#~ msgstr "" + +#~ msgid "Repository group no access" +#~ msgstr "" + +#~ msgid "Repository group read access" +#~ msgstr "" + +#~ msgid "Repository group write access" +#~ msgstr "" + +#~ msgid "Repository group admin access" +#~ msgstr "" + +#~ msgid "User group no access" +#~ msgstr "" + +#~ msgid "User group read access" +#~ msgstr "" + +#~ msgid "User group write access" +#~ msgstr "" + +#~ msgid "User group admin access" +#~ msgstr "" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "" + +#~ msgid "User Group creation disabled" +#~ msgstr "" + +#~ msgid "User Group creation enabled" +#~ msgstr "" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "repositories" +#~ msgstr "" + +#~ msgid "No repositories found." +#~ msgstr "" + +#~ msgid "There are no branches yet" +#~ msgstr "" + +#~ msgid "There are no tags yet" +#~ msgstr "" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "" + +#~ msgid "Update" +#~ msgstr "" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "" + +#~ msgid "%s Tags" +#~ msgstr "" + +#~ msgid "Compare Tags" +#~ msgstr "" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/zh_CN/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/zh_CN/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/zh_CN/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -9,619 +9,657 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" -"PO-Revision-Date: 2014-12-12 14:19+0200\n" -"Last-Translator: Michal Čihař \n" -"Language-Team: Simplified Chinese " +"POT-Creation-Date: 2017-07-27 13:13+0200\n" +"PO-Revision-Date: 2016-03-24 15:03+0000\n" +"Last-Translator: YFdyh000 \n" +"Language-Team: Chinese (China) " "\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2.6-dev\n" +"Generated-By: Babel 1.3\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "还没有修订集" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "无" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" -msgstr "" - -#: kallithea/controllers/changeset.py:89 +msgstr "(已关闭)" + +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" -msgstr "" - -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +msgstr "显示空白" + +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" -msgstr "" - -#: kallithea/controllers/changeset.py:169 +msgstr "忽略空白" + +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" -msgstr "" - -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +msgstr "增加差异上下文到 %(num)s 行" + +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "确认锁定版本库" + +#: kallithea/controllers/compare.py:73 +msgid "Cannot compare repositories of different types" +msgstr "" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" +#: kallithea/controllers/error.py:70 +msgid "No response" +msgstr "无响应" + #: kallithea/controllers/error.py:71 -#, fuzzy -msgid "No response" -msgstr "修订" - -#: kallithea/controllers/error.py:72 msgid "Unknown error" -msgstr "" - -#: kallithea/controllers/error.py:100 +msgstr "未知错误" + +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "由于错误的语法,服务器无法对请求进行响应。" -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "未授权的资源访问" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "无权访问该页面" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "资源未找到" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." msgstr "服务进入非预期的混乱状态,这会阻止它对请求进行响应。" -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "%s库的修改" - -#: kallithea/controllers/feed.py:56 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 +#: kallithea/templates/changeset/changeset.html:195 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 +msgid "Changeset was too big and was cut off..." +msgstr "修订集太大并已被截断..." + +#: kallithea/controllers/feed.py:84 +#, python-format +msgid "%s committed on %s" +msgstr "" + +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 #, python-format msgid "%s %s feed" msgstr "%s %s订阅" -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 -#: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 -msgid "Changeset was too big and was cut off..." -msgstr "修订集太大已被截断......" - -#: kallithea/controllers/feed.py:91 -#, python-format -msgid "%s committed on %s" -msgstr "" - -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "%s库的修改" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" -msgstr "" - -#: kallithea/controllers/files.py:92 +msgstr "点击这里添加新文件" + +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" -msgstr "" - -#: kallithea/controllers/files.py:193 -#, fuzzy, python-format +msgstr "这里还没有文件。%s" + +#: kallithea/controllers/files.py:191 +#, python-format msgid "%s at %s" -msgstr "%s零%s" - -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +msgstr "%s 在 %s" + +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "版本库由%s于%s锁定" -#: kallithea/controllers/files.py:317 +#: kallithea/controllers/files.py:309 msgid "You can only delete files with revision being a valid branch" -msgstr "" - -#: kallithea/controllers/files.py:328 +msgstr "您只能删除有效分支的修订中的文件" + +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" -msgstr "" - -#: kallithea/controllers/files.py:350 +msgstr "删除文件 %s 通过 Kallithea" + +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" -msgstr "" - -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +msgstr "成功删除文件 %s" + +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "提交时发生错误" -#: kallithea/controllers/files.py:377 +#: kallithea/controllers/files.py:369 msgid "You can only edit files with revision being a valid branch" -msgstr "" - -#: kallithea/controllers/files.py:391 +msgstr "您只能编辑有效分支的修订中的文件" + +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" -msgstr "" - -#: kallithea/controllers/files.py:407 +msgstr "已编辑文件 %s 通过 Kallithea" + +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "无变更" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "成功提交到%s" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" -msgstr "" - -#: kallithea/controllers/files.py:464 +msgstr "已添加文件通过 Kallithea" + +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "无内容" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "无文件名" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" -msgstr "" - -#: kallithea/controllers/files.py:537 +msgstr "下载已禁用" + +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "未知版本%s" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "空版本库" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "未知包类型" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "修订集" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "分支" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "标签" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "在复刻版本库%s的时候发生错误" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" -msgstr "" - -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +msgstr "组" + +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "版本库" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" -msgstr "" - -#: kallithea/controllers/home.py:136 +msgstr "分支" + +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "已关闭分支" + +#: kallithea/controllers/home.py:132 msgid "Tag" -msgstr "" - -#: kallithea/controllers/home.py:142 +msgstr "标签" + +#: kallithea/controllers/home.py:138 msgid "Bookmark" -msgstr "" - -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +msgstr "书签" + +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "公共日志" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "日志" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" -msgstr "" - -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "" - -#: kallithea/controllers/login.py:197 -#, fuzzy +msgstr "验证码错误" + +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "您已成功注册 %s" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" -msgstr "密码重置链接已经发送" - -#: kallithea/controllers/login.py:246 -#, fuzzy +msgstr "密码重置确认码已经发送" + +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" -msgstr "密码重置链接已经发送" - -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +msgstr "无效的密码重置令牌" + +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" -msgstr "" - -#: kallithea/controllers/pullrequests.py:124 -#, python-format -msgid "%s (closed)" -msgstr "" - -#: kallithea/controllers/pullrequests.py:152 -#: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 -msgid "Changeset" -msgstr "修订集" - -#: kallithea/controllers/pullrequests.py:173 -msgid "Special" -msgstr "" - -#: kallithea/controllers/pullrequests.py:174 -msgid "Peer branches" -msgstr "" - -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 -msgid "Bookmarks" -msgstr "书签" - -#: kallithea/controllers/pullrequests.py:310 -#, python-format -msgid "Error creating pull request: %s" -msgstr "" - -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -#, fuzzy -msgid "No description" -msgstr "描述" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "成功提交拉取请求" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 +msgstr "成功更新密码" + +#: kallithea/controllers/pullrequests.py:73 #, python-format msgid "Invalid reviewer \"%s\" specified" -msgstr "" - -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 -#, fuzzy +msgstr "指定的审核者 \"%s\" 无效" + +#: kallithea/controllers/pullrequests.py:135 +#, python-format +msgid "%s (closed)" +msgstr "%s (已关闭)" + +#: kallithea/controllers/pullrequests.py:162 +#: kallithea/templates/changeset/changeset.html:12 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 +msgid "Changeset" +msgstr "修订集" + +#: kallithea/controllers/pullrequests.py:183 +msgid "Special" +msgstr "特殊" + +#: kallithea/controllers/pullrequests.py:184 +msgid "Peer branches" +msgstr "同等分支" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 +msgid "Bookmarks" +msgstr "书签" + +#: kallithea/controllers/pullrequests.py:326 +#, python-format +msgid "Error creating pull request: %s" +msgstr "创建拉取请求出错:%s" + +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" -msgstr "提交拉取请求时发生错误" - -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "" - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "" - -#: kallithea/controllers/pullrequests.py:470 -#, fuzzy -msgid "Pull request update created" -msgstr "拉取请求检视人员" - -#: kallithea/controllers/pullrequests.py:514 -#, fuzzy +msgstr "创建拉取请求时发生错误" + +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "成功提交拉取请求" + +#: kallithea/controllers/pullrequests.py:381 +#, fuzzy +#| msgid "Pull request update created" +msgid "New pull request iteration created" +msgstr "拉取请求更新已创建" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "无描述" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" -msgstr "拉取请求" - -#: kallithea/controllers/pullrequests.py:529 +msgstr "拉取请求已更新" + +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "成功删除拉取请求" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, fuzzy, python-format +#| msgid "Changeset for %s %s not found in %s" +msgid "Revision %s not found in %s" +msgstr "未找到修订集" + +#: kallithea/controllers/pullrequests.py:518 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "没有找到更新此拉取请求的修订集。" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." -msgstr "" - -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +#, fuzzy +#| msgid "No changesets found for updating this pull request." +msgid "No additional changesets found for iterating on this pull request." +msgstr "没有找到更新此拉取请求的修订集。" + +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "" - -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:571 +msgid "Git pull requests don't support iterating yet." +msgstr "" + +#: kallithea/controllers/pullrequests.py:573 +#, fuzzy, python-format +#| msgid "No changesets found for updating this pull request." +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "没有找到更新此拉取请求的修订集。" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "" -#: kallithea/controllers/pullrequests.py:729 -#, fuzzy -msgid "Closing." -msgstr "使用中" - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, fuzzy, python-format +msgid "Successfully deleted pull request %s" +msgstr "成功删除拉取请求" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "错误的搜索。请尝试用引号包含它。" -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "没有索引用于搜索。请运行whoosh索引器" -#: kallithea/controllers/search.py:144 -#, fuzzy +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." -msgstr "在搜索操作中发生异常" - -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 -#, fuzzy +msgstr "搜索操作期间发生错误。" + +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" -msgstr "数据未加载" - -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +msgstr "数据尚未就绪" + +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "该版本库统计功能已经禁用" #: kallithea/controllers/admin/auth_settings.py:135 msgid "Auth settings updated successfully" -msgstr "" +msgstr "验证设置更新成功" #: kallithea/controllers/admin/auth_settings.py:146 msgid "error occurred during update of auth settings" -msgstr "" - -#: kallithea/controllers/admin/defaults.py:97 +msgstr "验证设置更新时发生错误" + +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "默认设置已经成功更新" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" -msgstr "" - -#: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 +msgstr "默认值更新时发生错误" + +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 #, fuzzy msgid "Forever" msgstr "检视者" +#: kallithea/controllers/admin/gists.py:59 +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" +msgstr "5 分钟" + #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" -msgstr "" +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" +msgstr "1 小时" #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" -msgstr "" +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 +msgid "1 day" +msgstr "1 天" #: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 -msgid "1 day" -msgstr "" - -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" -msgstr "" - -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +msgstr "1 个月" + +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" -msgstr "" - -#: kallithea/controllers/admin/gists.py:146 +msgstr "终身" + +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" -msgstr "" - -#: kallithea/controllers/admin/gists.py:184 +msgstr "gist 创建时发生错误" + +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" -msgstr "" - -#: kallithea/controllers/admin/gists.py:233 -#, fuzzy +msgstr "已删除 gist %s" + +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" -msgstr "最后修改于" - -#: kallithea/controllers/admin/gists.py:262 +msgstr "未修改" + +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" -msgstr "" - -#: kallithea/controllers/admin/gists.py:267 +msgstr "成功更新 gist 内容" + +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" -msgstr "" - -#: kallithea/controllers/admin/gists.py:270 +msgstr "成功更新 gist 数据" + +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" -msgstr "" - -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +msgstr "gist %s 更新时发生错误" + +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "由于是系统帐号,无法编辑该用户" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "你的帐号已经更新完成" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" -msgstr "" - -#: kallithea/controllers/admin/my_account.py:178 +msgstr "用户 %s 更新时发生错误" + +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" -msgstr "" - -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +msgstr "用户密码更新时发生错误" + +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "已为用户添加电子邮件 %s" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "保存电子邮件时发生错误" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "成功删除用户电子邮件" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" -msgstr "" - -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +msgstr "API 密钥创建成功" + +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" -msgstr "" - -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +msgstr "API 密钥重置成功" + +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "读" +msgstr "API 密钥删除成功" #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" -msgstr "写" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "读" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "写" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -629,625 +667,642 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "管理" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "停用" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "停用" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "已允许手动激活账号" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "已允许自动激活账号" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "外部账号手动激活" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "外部账号自动激活" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "启用" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:139 +msgstr "全局权限更新成功" + +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" -msgstr "" - -#: kallithea/controllers/admin/repo_groups.py:188 +msgstr "权限更新时发生错误" + +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "这个组内有%s个版本库因而无法删除" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "版本库%s成功更新" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, fuzzy, python-format msgid "Cannot delete repository %s which still has forks" msgstr "无法删除%s因为它还有其他分复刻本库" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "在删除%s的时候发生错误" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" -msgstr "" - -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, fuzzy, python-format +#| msgid "An error occurred during deletion of user" +msgid "An error occurred during creation of field: %r" +msgstr "删除用户时发生错误" + +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "成功更新在公共日志中的可见性" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "设置版本库到公共日志时发生错误" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "无" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "成功将版本库%s标记为复刻自%s" -#: kallithea/controllers/admin/repos.py:521 +#: kallithea/controllers/admin/repos.py:480 msgid "An error occurred during this operation" msgstr "在搜索操作中发生错误" -#: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 #, fuzzy msgid "Repository has been locked" msgstr "版本库未锁定" -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 #, fuzzy msgid "Repository has been unlocked" msgstr "版本库未锁定" -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 +#: kallithea/controllers/admin/repos.py:502 +#: kallithea/controllers/admin/repos.py:521 msgid "An error occurred during unlocking" msgstr "解锁时发生错误" -#: kallithea/controllers/admin/repos.py:582 +#: kallithea/controllers/admin/repos.py:533 msgid "Cache invalidation successful" msgstr "" -#: kallithea/controllers/admin/repos.py:586 +#: kallithea/controllers/admin/repos.py:537 msgid "An error occurred during cache invalidation" msgstr "清除缓存时发生错误" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "成功拉取自远程路径" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "从远程路径拉取时发生错误" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "删除版本库统计时发生错误" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "成功更新版本控制系统设置" -#: kallithea/controllers/admin/settings.py:174 +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 msgid "" "Unable to activate hgsubversion support. The \"hgsubversion\" library is " "missing" msgstr "" -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 msgid "Error occurred while updating application settings" msgstr "" -#: kallithea/controllers/admin/settings.py:211 +#: kallithea/controllers/admin/settings.py:174 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "" -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format -#| msgid "Invalidate Repository Cache" msgid "Invalidated %s repositories" msgstr "清除版本库缓存" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "更新应用设置" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "成功更新可视化设置" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "新建钩子" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "更新钩子" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "Whoosh重新索引任务调度" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "" +#: kallithea/controllers/admin/user_groups.py:208 +#, python-format +msgid "Error occurred during update of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:219 +msgid "Successfully deleted user group" +msgstr "" + #: kallithea/controllers/admin/user_groups.py:224 -#, python-format -msgid "Error occurred during update of user group %s" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:242 -msgid "Successfully deleted user group" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:247 msgid "An error occurred during deletion of user group" msgstr "" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "保存权限时发生错误" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "用户更新成功" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "删除用户时发生错误" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "必须是注册用户才能进行此操作" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "必须登录才能访问该页面" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, fuzzy, python-format -#| msgid "Changeset not found" msgid "Changeset for %s %s not found in %s" msgstr "未找到修订集" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" -msgstr "修订集因过大而被截断,可查看原始修订集作为替代" - -#: kallithea/lib/diffs.py:92 +msgstr "修订集过大并已被截断,使用差异菜单查看此差异" + +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "未发现差异" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "已经删除分支%s" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "创建标签%s" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format -#| msgid "Changeset not found" msgid "Changeset %s not found" msgstr "未找到修订集" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" -msgstr "显示合并的修订集%s->%s" - -#: kallithea/lib/helpers.py:678 +msgstr "显示所有合并的修订集 %s->%s" + +#: kallithea/lib/helpers.py:668 #, fuzzy msgid "Compare view" msgstr "比较显示" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "还有" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "%s个" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "修订" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, fuzzy, python-format msgid "Fork name %s" msgstr "复刻名称%s" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, fuzzy, python-format msgid "Pull request %s" msgstr "拉取请求#%s" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "[删除]版本库" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "[创建]版本库" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "[创建]复刻版本库" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "[复刻]版本库" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "[更新]版本库" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "[删除]版本库" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "[创建]用户" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "[更新]用户" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "[评论]了版本库中的修订" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "[评论]拉取请求" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "[关闭] 拉取请求" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "[推送]到" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "[通过Kallithea提交]到版本库" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "[远程拉取]到版本库" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "[拉取]自" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "[开始关注]版本库" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "[停止关注]版本库" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr " 还有%s个" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "无文件" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1255,1515 +1310,1225 @@ "repositories" msgstr "版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启Kallithea以重新扫描版本库" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d年" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d月" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d天" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d时" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d分" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d秒" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "%s" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "%s前" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "%s零%s" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "%s零%s前" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "刚才" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "无版本库访问权限" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "版本库读取权限" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "版本库写入权限" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "版本库管理权限" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "无版本库组访问权限" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "版本库组读取权限" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "版本库组写入" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "版本库组管理权限" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "Kallithea 管理员" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "禁用创建版本库" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "允许创建版本库" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "禁用复刻版本库" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "允许复刻版本库" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "禁用注册" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "用手动激活注册新用户" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "用自动激活注册新用户" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "未检视" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "已批准" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "驳回" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "检视中" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "在%s行" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "[提及]" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "Kallithea 管理员" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 #, fuzzy msgid "Default user has read access to new repositories" msgstr "未授权的资源访问" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 #, fuzzy msgid "Default user has write access to new repositories" msgstr "未授权的资源访问" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 #, fuzzy msgid "Only admins can create repository groups" msgstr "没有在该版本库组中创建版本库的权限" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 #, fuzzy msgid "Non-admins can create repository groups" msgstr "没有在该版本库组中创建版本库的权限" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 msgid "Only admins can create user groups" msgstr "" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 msgid "Non-admins can create user groups" msgstr "" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 #, fuzzy msgid "Only admins can fork repositories" msgstr "创建版本库" -#: kallithea/model/db.py:1696 -#, fuzzy -#| msgid "Non-admins can can fork repositories" +#: kallithea/model/db.py:1745 +#, fuzzy msgid "Non-admins can fork repositories" msgstr "创建版本库" -#: kallithea/model/db.py:1699 +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" msgstr "" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 #, fuzzy msgid "Not reviewed" msgstr "未检视" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 #, fuzzy msgid "Under review" msgstr "检视中" -#: kallithea/model/forms.py:57 +#: kallithea/model/db.py:2278 +#, fuzzy +#| msgid "Approved" +msgid "Not approved" +msgstr "已批准" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "已批准" + +#: kallithea/model/forms.py:58 msgid "Please enter a login" msgstr "请登录" -#: kallithea/model/forms.py:58 +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "输入一个不少于%(min)i个字符的值" -#: kallithea/model/forms.py:66 +#: kallithea/model/forms.py:67 msgid "Please enter a password" msgstr "请输入密码" -#: kallithea/model/forms.py:67 +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "输入少于%(min)i个字符" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" -#: kallithea/model/notification.py:255 +#: kallithea/model/notification.py:240 #, python-format msgid "%(user)s commented on changeset %(age)s" -msgstr "" - -#: kallithea/model/notification.py:256 +msgstr "%(user)s 已评论修订集在 %(age)s" + +#: kallithea/model/notification.py:241 #, python-format msgid "%(user)s sent message %(age)s" msgstr "" -#: kallithea/model/notification.py:257 +#: kallithea/model/notification.py:242 #, python-format msgid "%(user)s mentioned you %(age)s" msgstr "" -#: kallithea/model/notification.py:258 +#: kallithea/model/notification.py:243 #, python-format msgid "%(user)s registered in Kallithea %(age)s" msgstr "" -#: kallithea/model/notification.py:259 +#: kallithea/model/notification.py:244 #, fuzzy, python-format msgid "%(user)s opened new pull request %(age)s" msgstr "成功提交拉取请求" -#: kallithea/model/notification.py:260 +#: kallithea/model/notification.py:245 #, fuzzy, python-format msgid "%(user)s commented on pull request %(age)s" msgstr "[评论]拉取请求" -#: kallithea/model/notification.py:267 +#: kallithea/model/notification.py:252 #, python-format msgid "%(user)s commented on changeset at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:268 +msgstr "%(user)s 已评论修订集于 %(when)s" + +#: kallithea/model/notification.py:253 #, python-format msgid "%(user)s sent message at %(when)s" msgstr "" -#: kallithea/model/notification.py:269 +#: kallithea/model/notification.py:254 #, python-format msgid "%(user)s mentioned you at %(when)s" msgstr "" -#: kallithea/model/notification.py:270 +#: kallithea/model/notification.py:255 #, python-format msgid "%(user)s registered in Kallithea at %(when)s" msgstr "" -#: kallithea/model/notification.py:271 +#: kallithea/model/notification.py:256 #, python-format msgid "%(user)s opened new pull request at %(when)s" msgstr "" -#: kallithea/model/notification.py:272 +#: kallithea/model/notification.py:257 #, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, fuzzy, python-format +#| msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "[评论] %(repo_name)s 修订集 %(short_id)s 在 %(branch)s" + +#: kallithea/model/notification.py:291 #, fuzzy, python-format msgid "New user %(new_username)s registered" msgstr "用户名称 %(new_username)s 无效" -#: kallithea/model/notification.py:308 -#, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:309 -#, fuzzy, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "[评论]拉取请求" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 #, fuzzy msgid "Closing" msgstr "使用中" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +#, fuzzy, python-format +#| msgid "Error creating pull request: %s" +msgid "Cannot create empty pull request" +msgstr "创建拉取请求出错:%s" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +#, fuzzy +#| msgid "Confirm to delete this pull request" +msgid "You are not authorized to create the pull request" +msgstr "确认删除拉取请求" + +#: kallithea/model/pull_request.py:341 +#, fuzzy +#| msgid "Missing changesets since the previous pull request:" +msgid "Missing changesets since the previous iteration:" +msgstr "缺少上次拉取请求之后的修订集:" + +#: kallithea/model/pull_request.py:348 +#, fuzzy, python-format +#| msgid "New changesets on %s %s since the previous pull request:" +msgid "New changesets on %s %s since the previous iteration:" +msgstr "在上次拉取请求之后,在 %s %s 上的新修订集:" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, fuzzy, python-format +#| msgid "New changesets on %s %s since the previous pull request:" +msgid "No changes found on %s %s since previous iteration." +msgstr "在上次拉取请求之后,在 %s %s 上的新修订集:" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "最新tip版本" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 #, fuzzy msgid "You can't remove this user since it is crucial for the entire application" msgstr "由于是系统帐号,无法删除该用户" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, fuzzy, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories: %s" msgstr "由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, fuzzy, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" " owners or remove those repository groups: %s" msgstr "由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, fuzzy, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " "owners or remove those user groups: %s" msgstr "由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 #, fuzzy msgid "Password reset notification" msgstr "确认密码" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "值不能为空" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "用户名称%(username)s已经存在" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, fuzzy, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "用户名称 %(username)s 无效" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with an alphanumeric character or underscore" msgstr "" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "用户名称 %(username)s 无效" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "不能将这个组作为parent" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "组 \"%(group_name)s\" 已经存在" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "已经存在名为 \"%(group_name)s\" 的版本库" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "密码含有无效(非ASCII)字符" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "密码不符" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 #, fuzzy msgid "Invalid username or password" msgstr "无效密码" -#: kallithea/model/validators.py:331 +#: kallithea/model/validators.py:310 msgid "Token mismatch" msgstr "令牌不匹配" -#: kallithea/model/validators.py:345 +#: kallithea/model/validators.py:326 #, fuzzy, python-format msgid "Repository name %(repo)s is not allowed" msgstr "版本库名称不能为%(repo)s" -#: kallithea/model/validators.py:347 +#: kallithea/model/validators.py:328 #, python-format msgid "Repository named %(repo)s already exists" msgstr "已经存在版本库%(repo)s" -#: kallithea/model/validators.py:348 +#: kallithea/model/validators.py:329 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "版本库组 \"%(group)s\" 中已经存在版本库 \"%(repo)s\"" -#: kallithea/model/validators.py:350 +#: kallithea/model/validators.py:331 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 #, fuzzy msgid "Invalid repository URL" msgstr "私有版本库" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "复刻版本库必须和父版本库类型相同" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "没有在该版本库组中创建版本库的权限" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "不是一个合法的路径" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 #, fuzzy msgid "This email address is already in use" msgstr "该邮件地址已被使用" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, fuzzy, python-format msgid "Email address \"%(email)s\" not found" msgstr "邮件地址\"%(email)s\"不存在" -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "LDAP 登陆属性的 CN 必须指定 - 这个名字作为用户名" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "控制面板" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "快速过滤..." - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "版本库" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository group" +msgid "Repository Group" +msgstr "版本库组" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "描述" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "名称" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "版本库" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "最后修改" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "Tip" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "所有者" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "点击以升序排列" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "点击以降序排列" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "" - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "数据错误" - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "载入中..." - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "登录" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "帐号" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "密码" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "记住密码" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "忘记了密码?" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "还没有帐号?" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "登录" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 -#, fuzzy, python-format +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 +#, python-format msgid "Reset Your Password to %s" msgstr "" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 #, fuzzy msgid "Reset Your Password" msgstr "忘记了密码?" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 #, fuzzy msgid "Send Password Reset Email" msgstr "确认新密码" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 #, fuzzy msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "密码重置地址已经发送到邮件" -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 #, fuzzy msgid "New Password" msgstr "新密码" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 #, fuzzy msgid "Confirm New Password" msgstr "新密码" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "注册" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "确认密码" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "名" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "姓" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "电子邮件" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "没有任何分支" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "没有任何标签" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "无书签" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 #, fuzzy msgid "Admin Journal" msgstr "系统日志" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "日志过滤..." #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 #, fuzzy msgid "Filter" msgstr "过滤" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, fuzzy, python-format msgid "%s Entry" msgid_plural "%s Entries" msgstr[0] "%s条" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "操作" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "版本库" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "日期" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "来源IP" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "无操作" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "保存" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 #, fuzzy msgid "Repository Defaults" msgstr "版本库默认设置" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "类型" -#: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 msgid "Private repository" msgstr "私有版本库" -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." msgstr "私有版本库只对成员可见。" -#: kallithea/templates/admin/defaults/defaults.html:53 -#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 msgid "Enable statistics" msgstr "启用统计" -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 msgid "Enable statistics window on summary page." -msgstr "启用概况页的统计窗口" - -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 +msgstr "启用概况页面上的统计窗口。" + +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 msgid "Enable downloads" msgstr "启用下载" -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 msgid "Enable download menu on summary page." -msgstr "启用概况页的下载菜单" - -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 +msgstr "启用概况页面上的下载菜单。" + +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 msgid "Enable locking" msgstr "启用锁定" -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." -msgstr "启用版本库的拉取锁定" +msgstr "启用版本库的拉取锁定。" #: kallithea/templates/admin/gists/edit.html:5 #: kallithea/templates/admin/gists/edit.html:18 msgid "Edit Gist" msgstr "" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "" -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 #, fuzzy msgid "Never" msgstr "检视者" @@ -2773,276 +2538,409 @@ msgstr "" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "重置" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "删除" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "我的账户" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 #, fuzzy msgid "Email Addresses" msgstr "增加邮箱" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 #, fuzzy msgid "Owned Repositories" msgstr "版本库" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 #, fuzzy msgid "Watched Repositories" msgstr "创建版本库" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 #, fuzzy msgid "Show Permissions" msgstr "拷贝权限" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, fuzzy, python-format msgid "Confirm to reset this API key: %s" msgstr "确认删除用户:%s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 msgid "Expired" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, fuzzy, python-format msgid "Confirm to remove this API key: %s" msgstr "确认删除用户:%s" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 #, fuzzy msgid "Remove" msgstr "移除" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 msgid "New API key" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "增加" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "确认删除邮箱:%s" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "增加邮箱" @@ -3051,320 +2949,414 @@ msgid "Change Your Account Password" msgstr "忘记了密码?" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "新密码" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, fuzzy, python-format +#| msgid "Change your avatar at" +msgid "Change %s avatar at" msgstr "修改你的头像" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "使用中" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 #, fuzzy msgid "Repositories You Own" msgstr "版本库" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." -msgstr "没有找到记录" +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "名称" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 #, fuzzy msgid "Repositories You are Watching" msgstr "版本库路径" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "我的通知" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "全部" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "评论" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 #, fuzzy msgid "Mark All Read" msgstr "全部标记为已读" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +#, fuzzy +#| msgid "Mark All Read" +msgid "Mark as read" +msgstr "全部标记为已读" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "无通知" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 #, fuzzy msgid "Show Notification" msgstr "显示通知" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "通知" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 #, fuzzy msgid "Default Permissions" msgstr "默认权限" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "匿名访问" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "已有版本库?" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "版本库组" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " "will be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 #, fuzzy msgid "Apply to all existing repository groups" msgstr "已有版本库?" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 msgid "" "All default permissions on each user group will be reset to chosen " "permission, note that all custom default permission on user groups will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 msgid "Permissions for the Default user on new user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 #, fuzzy msgid "Top level repository creation" msgstr "建立版本库" -#: kallithea/templates/admin/permissions/permissions_globals.html:64 +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 msgid "Enable this to allow non-admins to create repositories at the top level." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:65 +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 msgid "" "Note: This will also give all users API access to create repositories " "everywhere. That might change in future versions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "版本库复刻" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "注册" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "确认删除用户:%s" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "组名" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "上级组" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit.html:5 -#, fuzzy, python-format +#, python-format msgid "%s Repository Group Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "设置" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "权限" @@ -3388,12 +3380,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "创建于" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3403,16 +3397,36 @@ msgid "Delete this repository group" msgstr "" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#, fuzzy +#| msgid "Disabled" +msgid "Visible" +msgstr "停用" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "No response" +msgid "Add repos" +msgstr "无响应" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +msgid "Add/Edit groups" +msgstr "" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 msgid "User/User Group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 #, fuzzy @@ -3421,114 +3435,126 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 #, fuzzy msgid "Revoke" msgstr "移除" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 #, fuzzy msgid "Apply to children" msgstr "应用到成员" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" msgstr "启用组的拉取锁定。这个选项将应用到组内的其他组和版本库" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 #, fuzzy msgid "Confirm to delete this group" msgstr "确认删除用户:%s" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "Repository group" +msgid "Repository group %s" +msgstr "版本库组" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "首页" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "有" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 #, fuzzy msgid "Repository Groups Administration" msgstr "版本库管理员" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 #, fuzzy msgid "Number of Top-level Repositories" msgstr "顶层版本库数量" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "[创建]版本库" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "保持简短。用README文件来写更长的描述。" -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." -msgstr "可选的,选择一个组将版本库放到其中" - -#: kallithea/templates/admin/repos/repo_add_base.html:59 +msgstr "可选的选择一个组将版本库放到其中。" + +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." -msgstr "要创建的版本库类型" - -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +msgstr "要创建的版本库类型。" + +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "默认修订" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" msgstr "" #: kallithea/templates/admin/repos/repo_creating.html:9 -#, fuzzy, python-format +#, python-format msgid "%s Creating Repository" msgstr "" @@ -3550,101 +3576,122 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 -#, fuzzy, python-format +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 +#, python-format msgid "%s Repository Settings" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "远程" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "统计" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 #, fuzzy msgid "Parent" msgstr "上级组" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 #, fuzzy msgid "Manually set this repository as a fork of another from the list." msgstr "从列表中手动设置这个版本库复刻自另一版本库" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 #, fuzzy msgid "Public Journal Visibility" msgstr "公共日志" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "从公共日志删除" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 #, fuzzy msgid "Add to Public Journal" msgstr "公共日志" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 #, fuzzy msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." msgstr "任何人都可以在公共日志上看到这个版本库上的所有动作" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 #, fuzzy msgid "Change Locking" msgstr "启用锁定" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 #, fuzzy msgid "Confirm to unlock repository." msgstr "确认解锁版本库" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 #, fuzzy msgid "Unlock Repository" msgstr "公共版本库" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 #, python-format msgid "Locked by %s on %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 #, fuzzy msgid "Confirm to lock repository." msgstr "确认锁定版本库" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 #, fuzzy msgid "Lock Repository" msgstr "公共版本库" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "版本库未锁定" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3652,32 +3699,39 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "确认删除版本库:%s" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 #, fuzzy msgid "Delete this Repository" msgstr "[删除]版本库" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 -#, fuzzy, python-format +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 +#, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" msgstr[0] "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3689,114 +3743,119 @@ msgid "Invalidate Repository Cache" msgstr "清除版本库缓存" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -#, fuzzy -msgid "Confirm to invalidate repository cache." -msgstr "确认清除版本库缓存" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 #, fuzzy msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "手动清除版本库缓存。之后第一次访问的时候将重建缓存" -#: kallithea/templates/admin/repos/repo_edit_caches.html:12 +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 #, fuzzy msgid "List of Cached Values" msgstr "缓存值列表" -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 +#: kallithea/templates/admin/repos/repo_edit_caches.html:12 msgid "Prefix" msgstr "前缀" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "键" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "启用" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 #, fuzzy msgid "Extra fields are disabled." msgstr "禁用注册" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 #, fuzzy msgid "Private Repository" msgstr "私有版本库" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "[forked] repository" +msgid "Fork of repository" +msgstr "[复刻]版本库" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 #, fuzzy msgid "Remote repository URL" msgstr "[创建]版本库" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 #, fuzzy msgid "Pull Changes from Remote Repository" msgstr "[远程拉取]到版本库" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 #, fuzzy msgid "Confirm to pull changes from remote repository." msgstr "确认从远程拉取修订集" -#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 #, fuzzy msgid "Permanent Repository ID" msgstr "私有版本库" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3806,35 +3865,35 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 #, fuzzy msgid "Remote repository" msgstr "[创建]版本库" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 #, fuzzy msgid "Repository URL" msgstr "版本库" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "文件浏览、下载、whoosh和README的默认修订版本" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." -msgstr "修改这个版本库的所有者" +msgstr "修改这个版本库的所有者。" + +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" #: kallithea/templates/admin/repos/repo_edit_statistics.html:6 -msgid "Processed commits" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 msgid "Processed progress" msgstr "" @@ -3849,319 +3908,380 @@ msgstr "确认移除当前统计" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 #, fuzzy msgid "Repositories Administration" msgstr "版本库管理员" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 #, fuzzy msgid "Settings Administration" msgstr "系统设置" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "钩子" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "发送" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 #, fuzzy msgid "Save Settings" msgstr "保存设置" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 #, fuzzy msgid "Custom Hooks" msgstr "自定义钩子" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "移除钩子失败" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" -msgstr "" - -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:4 +#, fuzzy +#| msgid "Description" +msgid "Rescan options" +msgstr "描述" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:23 -msgid "Install Git hooks" -msgstr "" - #: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "" +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + #: kallithea/templates/admin/settings/settings_search.html:12 -msgid "Build from scratch" -msgstr "" - -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "重新索引" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 msgid "Kallithea version" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 #, fuzzy msgid "Git version" msgstr "编辑权限" -#: kallithea/templates/admin/settings/settings_system.html:9 +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 msgid "Git path" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Upgrade info endpoint" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "网络" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "推送后显示版本库大小" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "记录用户推送命令" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "记录用户拉取命令" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "推送后更新版本库(hg update)" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 #, fuzzy msgid "Mercurial extensions" msgstr "Mercurial扩展" -#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 msgid "Enable largefiles extension" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:51 +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 msgid "Enable hgsubversion extension" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 #, fuzzy msgid "Location of repositories" msgstr "创建版本库" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "通用" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4178,103 +4298,128 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +#, fuzzy +msgid "Clone URL" +msgstr "克隆地址" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "repositories" +msgid "Repository page size" +msgstr "版本库" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "图标" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "显示公共版本库图标" -#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 msgid "Show private repository icon on repositories" msgstr "显示私有版本库图标" -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/templates/admin/settings/settings_visual.html:84 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 #, fuzzy msgid "Show public/private icons next to repository names." msgstr "显示公共版本库图标" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 #, fuzzy msgid "Meta Tagging" msgstr "元标记" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 #, fuzzy msgid "Show Members" msgstr "成员" @@ -4285,13 +4430,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "成员" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "" @@ -4300,49 +4447,60 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "还没有成员" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "启用成员" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 #, fuzzy msgid "User Groups Administration" msgstr "用户管理员" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "添加用户" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "用户" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "确认密码" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4352,12 +4510,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4366,7 +4526,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "确认删除用户:%s" @@ -4375,968 +4536,1266 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "确认新密码" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 #, fuzzy msgid "Users Administration" msgstr "用户管理员" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "Mercurial版本库" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "Git版本库" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 #, fuzzy msgid "Create Fork" msgstr "创建于" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "概况" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "修订记录" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "浏览" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "" - -#: kallithea/templates/base/base.html:145 -#: kallithea/templates/base/base.html:147 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 msgid "Options" msgstr "选项" -#: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 #, fuzzy msgid "Compare Fork" msgstr "比较复刻" -#: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 msgid "Compare" msgstr "比较显示" -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 #: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 msgid "Search" msgstr "搜索" -#: kallithea/templates/base/base.html:163 +#: kallithea/templates/base/base.html:155 +#: kallithea/tests/data/templates/base/base.html.py:399 msgid "Unlock" msgstr "" +#: kallithea/templates/base/base.html:157 +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" +msgstr "" + #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "复刻" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "公共日志" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "" -#: kallithea/templates/base/base.html:246 +#: kallithea/templates/base/base.html:319 +#: kallithea/tests/data/templates/base/base.html.py:540 msgid "Search in repositories" msgstr "" -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 #: kallithea/templates/pullrequests/pullrequest_show_my.html:6 #: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 #, fuzzy msgid "My Pull Requests" msgstr "拉取请求" -#: kallithea/templates/base/base.html:289 +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 msgid "Not Logged In" msgstr "" -#: kallithea/templates/base/base.html:296 +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 #, fuzzy msgid "Login to Your Account" msgstr "登录" -#: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" +#: kallithea/templates/base/base.html:385 +#, fuzzy +#| msgid "Forgot password ?" +msgid "Forgot password?" msgstr "忘记密码?" -#: kallithea/templates/base/base.html:346 +#: kallithea/templates/base/base.html:389 +#, fuzzy +#| msgid "Don't have an account ?" +msgid "Don't have an account?" +msgstr "还没有帐号?" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "退出" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 #, fuzzy msgid "Inherit defaults" msgstr "版本库默认设置" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "创建版本库" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "复刻版本库" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "显示" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "权限" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "编辑权限" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 +#: kallithea/templates/base/root.html:25 +#: kallithea/tests/data/templates/base/root.html.py:85 #, fuzzy msgid "Add Another Comment" msgstr "%d条评论" -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 +#: kallithea/templates/base/root.html:26 +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 msgid "Stop following this repository" msgstr "停止关注该版本库" -#: kallithea/templates/base/root.html:24 +#: kallithea/templates/base/root.html:27 +#: kallithea/tests/data/templates/base/root.html.py:89 msgid "Start following this repository" msgstr "开始关注该版本库" -#: kallithea/templates/base/root.html:25 +#: kallithea/templates/base/root.html:28 +#: kallithea/tests/data/templates/base/root.html.py:91 msgid "Group" msgstr "组" -#: kallithea/templates/base/root.html:26 +#: kallithea/templates/base/root.html:29 +#: kallithea/tests/data/templates/base/root.html.py:93 msgid "members" msgstr "成员" -#: kallithea/templates/base/root.html:27 +#: kallithea/templates/base/root.html:30 +#: kallithea/tests/data/templates/base/root.html.py:95 msgid "Loading ..." msgstr "" -#: kallithea/templates/base/root.html:28 -msgid "loading ..." -msgstr "" - -#: kallithea/templates/base/root.html:29 -msgid "Search truncated" -msgstr "" - -#: kallithea/templates/base/root.html:30 -msgid "No matching files" -msgstr "" - #: kallithea/templates/base/root.html:31 -#, fuzzy -msgid "Open New Pull Request from {0}" -msgstr "[评论]拉取请求" +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." +msgstr "" #: kallithea/templates/base/root.html:32 -msgid "Open New Pull Request for {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" msgstr "" #: kallithea/templates/base/root.html:33 -#, fuzzy -msgid "Show Selected Changesets {0} → {1}" -msgstr "显示合并的修订集%s->%s" +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" +msgstr "" #: kallithea/templates/base/root.html:34 +#: kallithea/tests/data/templates/base/root.html.py:103 +#, fuzzy +msgid "Open New Pull Request from {0}" +msgstr "[评论]拉取请求" + +#: kallithea/templates/base/root.html:35 +#: kallithea/tests/data/templates/base/root.html.py:105 +msgid "Open New Pull Request for {0} → {1}" +msgstr "" + +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 +msgid "Show Selected Changesets {0} → {1}" +msgstr "显示选中的修订集 {0} → {1}" + +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 #, fuzzy msgid "Selection Link" msgstr "选择链接" -#: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 +#: kallithea/templates/base/root.html:38 +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 #, fuzzy msgid "Collapse Diff" msgstr "文件差异" -#: kallithea/templates/base/root.html:36 +#: kallithea/templates/base/root.html:39 +#: kallithea/tests/data/templates/base/root.html.py:113 #, fuzzy msgid "Expand Diff" msgstr "文件差异" -#: kallithea/templates/base/root.html:37 +#: kallithea/templates/base/root.html:40 +#: kallithea/tests/data/templates/base/root.html.py:115 msgid "Failed to revoke permission" msgstr "" -#: kallithea/templates/base/root.html:38 +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 msgid "Confirm to revoke permission for {0}: {1} ?" msgstr "" -#: kallithea/templates/base/root.html:39 -msgid "enabled" -msgstr "" - -#: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "" - -#: kallithea/templates/base/root.html:42 -#, fuzzy +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "选择修订集" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" -msgstr "%s修订集" - -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "%s书签" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "作者" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "修订" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "%s分支" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" -msgstr "" +msgstr "指定修订集" + +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "点击以升序排列" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "点击以降序排列" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "没有找到记录。" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "数据错误。" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." +msgstr "载入中..." #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "%s修订记录" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "显示%d/%d个版本" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "清除选择" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 #, fuzzy msgid "Go to tip of repository" msgstr "确认锁定版本库" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 #, fuzzy msgid "Branch filter:" msgstr "过滤" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" - -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +"修订集状态:%s 由 %s\n" +"点击打开相关联的拉取请求 %s" + +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, python-format +msgid "Changeset status: %s by %s" +msgstr "修订集状态:%s 由 %s" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +msgstr "修订集有评论" + +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "没有任何变更" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "修订" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "作者" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "通过Kallithea直接添加或者上传文件" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 #, fuzzy msgid "Push new repository" msgstr "推送新版本库" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "已有版本库?" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" -msgstr "%s修订集" +msgstr "%s 修订集" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "修订集状态" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 #, fuzzy msgid "Merge" msgstr "合并" -#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 #, fuzzy msgid "Grafted from:" msgstr "创建于" -#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/templates/changeset/changeset.html:123 +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 msgid "Transplanted from:" msgstr "" -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/templates/changeset/changeset.html:129 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 #, fuzzy msgid "Replaced by:" msgstr "创建于" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 #, fuzzy msgid "Preceded by:" msgstr "创建于" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "修改%s个文件" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" msgstr[0] "修改%s个文件包括%s行插入和%s行删除" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 #, fuzzy msgid "No revisions" msgstr "修订" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 #, fuzzy msgid "on pull request" msgstr "[评论]拉取请求" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 #, fuzzy msgid "No title" msgstr "无文件" -#: kallithea/templates/changeset/changeset_file_comment.html:24 -#, fuzzy +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 msgid "on this changeset" -msgstr "无修订" - -#: kallithea/templates/changeset/changeset_file_comment.html:30 +msgstr "在此修订集" + +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 #, fuzzy msgid "Delete comment?" msgstr "%d条评论" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "文件已更改" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +#, fuzzy +msgid "Commenting on line." msgstr "在{1}行上评论" -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "评论使用%s语法并支持%s" - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -#, fuzzy -msgid "Use @username inside this text to notify another user" +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +#, fuzzy +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." msgstr "在文本中使用 @用户名 以发送通知到该Kallithea用户" -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +msgid "Set changeset status" +msgstr "设置修订集状态" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +#, fuzzy +msgid "No change" +msgstr "无变更" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "[评论]拉取请求" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +#, fuzzy +msgid "Close" +msgstr "已关闭" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 #, fuzzy msgid "Submitting ..." msgstr "提交中……" -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "评论" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." -msgstr "必须登录才能评论" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +msgstr "您必须登录才能评论。" + +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "现在登陆" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "隐藏" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d条评论" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, fuzzy, python-format msgid "%d inline" msgid_plural "%d inline" msgstr[0] "(%d内嵌)" -#: kallithea/templates/changeset/changeset_file_comment.html:108 -#, fuzzy, python-format +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 +#, python-format msgid "%d general" msgid_plural "%d general" msgstr[0] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -#, fuzzy -msgid "Use @username inside this text to notify another user." -msgstr "在文本中使用 @用户名 以发送通知到该Kallithea用户" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -#, fuzzy -msgid "Set changeset status" -msgstr "修订集状态" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -#, fuzzy -msgid "No change" -msgstr "无变更" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -#, fuzzy -msgid "Close" -msgstr "已关闭" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" -msgstr "%s修订集" - -#: kallithea/templates/changeset/changeset_range.html:56 +msgstr "%s 修订集" + +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "修订集状态:%s" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "影响文件" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 -msgid "Show full diff for this file" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 -msgid "Show full side-by-side diff for this file" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:38 -msgid "Show inline comments" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:86 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +#, fuzzy +#| msgid "file removed" +msgid "File before" +msgstr "文件已删除" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "未修改" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 #, fuzzy msgid "Deleted" msgstr "删除" -#: kallithea/templates/changeset/diff_block.html:89 +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 #, fuzzy msgid "Renamed" msgstr "读" +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "未知版本%s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "No filename" +msgid "No file after" +msgstr "无文件名" + +#: kallithea/templates/changeset/diff_block.html:55 +#, fuzzy +#| msgid "file added" +msgid "File after" +msgstr "文件已添加" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 +msgid "Show full diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 +msgid "Show full side-by-side diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 +msgid "Show inline comments" +msgstr "" + #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" -msgstr "无修订" - -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:44 +msgstr "无修订集" + +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:46 +msgstr "此列表中首个(最旧)修订集" + +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:48 +msgstr "此列表中末个(最近)修订集" + +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" +msgstr "修订集在此列表中的位置" #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "" -#: kallithea/templates/compare/compare_cs.html:99 -#, fuzzy, python-format +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 +#, python-format msgid "%s changesets" -msgstr "%s修订集" - -#: kallithea/templates/compare/compare_cs.html:100 +msgstr "%s 修订集" + +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 #, fuzzy msgid "behind" msgstr "重新索引" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" msgstr[0] "显示%s个提交" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "公共版本库" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" -msgstr "无修订" - -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +msgstr "尚无任何修订集" + +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "订阅%s的RSS" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "订阅%s的Atom" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "%(user)s 已评论修订集在 %(age)s" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "%(user)s commented on changeset %(age)s" +msgid "Comment on Changeset \"%s\"" +msgstr "%(user)s 已评论修订集在 %(age)s" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changeset" +msgid "Changeset on" +msgstr "修订集" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branch" +msgid "branch" +msgstr "分支" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "文件已更改" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "Repository has been locked" +msgid "The pull request has been closed." +msgstr "版本库未锁定" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 #, fuzzy msgid "We have received a request to reset the password for your account." msgstr "我们收到重置你用户密码的请求。" -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 +#: kallithea/templates/email_templates/pull_request.html:4 #, fuzzy, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, fuzzy, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#| msgid "[commented] on pull request for" +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "[评论]拉取请求" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy +#| msgid "on pull request" +msgid "Pull request from" +msgstr "[评论]拉取请求" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +#, fuzzy +#| msgid "Date" +msgid "at" +msgstr "日期" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 #, fuzzy, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -#, fuzzy -msgid "The comment closed the pull request with status" +#| msgid "%(user)s commented on pull request %(age)s" +msgid "Mention in Comment on Pull Request %s \"%s\"" msgstr "[评论]拉取请求" -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" -msgstr "查看用户" +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Pull request %s from %s#%s" +msgid "Pull Request %s \"%s\" Closed" +msgstr "拉取请求#%s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "[commented] on pull request for" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "[评论]拉取请求" + +#: kallithea/templates/email_templates/registration.html:22 +#, fuzzy +#| msgid "Group name" +msgid "Full Name" +msgstr "组名" #: kallithea/templates/files/diff_2way.html:15 #, python-format @@ -5354,84 +5813,107 @@ msgstr "" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "位置" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "或者" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +#, fuzzy +msgid "New file type" +msgstr "未知包类型" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 #, fuzzy msgid "Commit Changes" msgstr "提交修改" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "加载文件列表..." -#: kallithea/templates/files/files_browser.html:61 +#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 msgid "Size" msgstr "大小" -#: kallithea/templates/files/files_browser.html:62 +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 msgid "Last Revision" msgstr "最后修订号" -#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 #, fuzzy msgid "Last Modified" msgstr "最后修改于" -#: kallithea/templates/files/files_browser.html:64 +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 #, fuzzy msgid "Last Committer" msgstr "最后提交者" @@ -5442,7 +5924,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "" @@ -5455,173 +5937,212 @@ msgid "Edit file" msgstr "" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "编辑文件" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "%s个作者" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" +#: kallithea/templates/files/files_source.html:34 +#, fuzzy, python-format +#| msgid "Deleted branch: %s" +msgid "Edit on Branch: %s" +msgstr "已经删除分支%s" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" msgstr "" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "二进制文件(%s)" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +#, fuzzy +msgid "File is too big to display." +msgstr "文件过大,不能显示" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" -msgstr "文件过大,不能显示" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." +msgstr "" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "显示注释" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "指定的路径中没有文件" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "%s个关注者" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "关注者" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" -msgstr "开始关注 - " +msgstr "开始关注 -" #: kallithea/templates/forks/fork.html:5 #, python-format msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "复刻名称" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 #, fuzzy msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "文件浏览、下载、whoosh和README的默认修订版本" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "私有" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "拷贝权限" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "从被复刻版本库拷贝权限" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "克隆后更新" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "完成克隆后检出源代码" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "%s个复刻" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "复刻" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "无复刻" -#: kallithea/templates/journal/journal.html:21 +#: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 msgid "ATOM journal feed" msgstr "订阅日志ATOM" -#: kallithea/templates/journal/journal.html:22 +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "订阅日志RSS" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "没有条目" @@ -5635,35 +6156,46 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 #, fuzzy msgid "New Pull Request" msgstr "新建拉取请求" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "标题" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "" @@ -5700,7 +6232,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "已关闭" @@ -5719,122 +6253,161 @@ msgstr "确认删除拉取请求" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, fuzzy, python-format msgid "%s Pull Request %s" msgstr "拉取请求#%s" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, fuzzy, python-format msgid "Pull request %s from %s#%s" msgstr "拉取请求#%s" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 #, fuzzy msgid "Summarize the changes" msgstr "提交修改" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "还未检视的检视人员" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "%d个检视者" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 #, fuzzy msgid "There are no reviewers" msgstr "没有任何分支" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 #, fuzzy msgid "on" msgstr "无" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -#, fuzzy -msgid "Update" -msgstr "[更新]用户" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 +#, fuzzy +#| msgid "Registration" +msgid "Next iteration" +msgstr "注册" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 msgid "Current revision - no change" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:213 +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 +msgid "Save Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 +#, fuzzy +msgid "Cancel Changes" +msgstr "无变更" + +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 #, fuzzy msgid "Pull Request Reviewers" msgstr "拉取请求检视人员" -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 #, fuzzy msgid "Remove reviewer" msgstr "检视者" -#: kallithea/templates/pullrequests/pullrequest_show.html:250 +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 msgid "Type name of reviewer to add" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:258 +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 #, fuzzy msgid "Potential Reviewers" msgstr "%d个检视者" -#: kallithea/templates/pullrequests/pullrequest_show.html:261 +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 msgid "Click to add the repository owner as reviewer:" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:284 -msgid "Save Changes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -#, fuzzy -msgid "Save as New Pull Request" -msgstr "新建拉取请求" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 -#, fuzzy -msgid "Cancel Changes" -msgstr "无变更" - -#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 #, fuzzy msgid "Pull Request Content" msgstr "拉取请求" +#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 #, python-format msgid "%s Pull Requests" @@ -5842,7 +6415,6 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Pull Requests from %s'" msgid "Pull Requests from '%s'" msgstr "拉取请求#%s" @@ -5851,252 +6423,474 @@ msgid "Pull Requests to '%s'" msgstr "拉取请求#%s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 #, fuzzy msgid "Open New Pull Request" msgstr "新建拉取请求" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, fuzzy, python-format msgid "Show Pull Requests to %s" msgstr "拉取请求#%s" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 -#, fuzzy, python-format +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 +#, python-format msgid "Show Pull Requests from '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 #, fuzzy msgid "Pull Requests Created by Me" msgstr "拉取请求检视人员" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +#, fuzzy +#| msgid "Pull Request Reviewers" +msgid "Pull Requests Needing My Review" +msgstr "拉取请求检视人员" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 #, fuzzy msgid "Pull Requests I Participate In" msgstr "我参与的" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 #, fuzzy msgid "Search in All Repositories" msgstr "在所有的版本库中搜索" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "搜索短语" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "搜索范围" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "文件内容" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "提交信息" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "文件名" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "权限不足" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " -msgstr "已收集的统计:" - -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +msgstr "已收集的统计: " + +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "文件" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "" +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "提交" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "文件已添加" + #: kallithea/templates/summary/statistics.html:390 -msgid "commits" -msgstr "提交" +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "文件已更改" #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "文件已添加" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" -msgstr "文件已更改" - -#: kallithea/templates/summary/statistics.html:393 +#: kallithea/tests/data/templates/summary/statistics.html.py:153 msgid "files removed" msgstr "文件已删除" -#: kallithea/templates/summary/statistics.html:395 +#: kallithea/templates/summary/statistics.html:393 +#: kallithea/tests/data/templates/summary/statistics.html.py:155 msgid "commit" msgstr "提交" -#: kallithea/templates/summary/statistics.html:396 +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 msgid "file added" msgstr "文件已添加" -#: kallithea/templates/summary/statistics.html:397 +#: kallithea/templates/summary/statistics.html:395 +#: kallithea/tests/data/templates/summary/statistics.html.py:159 msgid "file changed" msgstr "文件已更改" -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/templates/summary/statistics.html:396 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "文件已删除" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "%s概要" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "版本库由%s锁定" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "版本库未锁定" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "复刻自" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "克隆自" -#: kallithea/templates/summary/summary.html:72 -#, fuzzy -msgid "Clone URL" -msgstr "克隆地址" - -#: kallithea/templates/summary/summary.html:78 -msgid "Show by Name" -msgstr "以名字显示" - -#: kallithea/templates/summary/summary.html:79 +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 msgid "Show by ID" msgstr "按ID显示" -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:72 +#: kallithea/tests/data/templates/summary/summary.html.py:143 +msgid "Show by Name" +msgstr "以名字显示" + +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "文件趋势图" +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 +msgid "Download" +msgstr "下载" + +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 +msgid "There are no downloads yet" +msgstr "无下载" + +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 +msgid "Downloads are disabled for this repository" +msgstr "这个版本库的下载已经禁用" + #: kallithea/templates/summary/summary.html:108 -msgid "Download" -msgstr "下载" +#: kallithea/tests/data/templates/summary/summary.html.py:190 +msgid "Download as zip" +msgstr "zip打包下载" #: kallithea/templates/summary/summary.html:112 -msgid "There are no downloads yet" -msgstr "无下载" +#: kallithea/tests/data/templates/summary/summary.html.py:194 +msgid "Check this to download archive with subrepos" +msgstr "勾选以下载包含子版本库的压缩包" #: kallithea/templates/summary/summary.html:114 -msgid "Downloads are disabled for this repository" -msgstr "这个版本库的下载已经禁用" - -#: kallithea/templates/summary/summary.html:120 -msgid "Download as zip" -msgstr "zip打包下载" - -#: kallithea/templates/summary/summary.html:125 -msgid "Check this to download archive with subrepos" -msgstr "勾选以下载包含子版本库的压缩包" - -#: kallithea/templates/summary/summary.html:125 +#: kallithea/tests/data/templates/summary/summary.html.py:196 #, fuzzy msgid "With subrepos" msgstr "包括子版本库" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 #, fuzzy msgid "Latest Changes" msgstr "文件已更改" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 #, fuzzy msgid "Quick Start" msgstr "快速入门" -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "下载%s为%s包" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "%s标签" - -#: kallithea/templates/tags/tags.html:26 -#, fuzzy -msgid "Compare Tags" -msgstr "比较标签" - -#~ msgid "increase diff context to %(num)s lines" -#~ msgstr "" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "控制面板" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "记住密码" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "修改你的头像" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "使用" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "网络" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "快速过滤..." + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "忘记密码?" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +#, fuzzy +msgid "The comment closed the pull request with status" +msgstr "[评论]拉取请求" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "查看用户" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" +msgstr "" #~ msgid "No comments." #~ msgstr "%d条评论" @@ -6107,27 +6901,6 @@ #~ msgid "journal" #~ msgstr "日志" -#~ msgid "bad captcha" -#~ msgstr "" - -#~ msgid "forever" -#~ msgstr "" - -#~ msgid "unmodified" -#~ msgstr "" - -#~ msgid "Locked repository" -#~ msgstr "" - -#~ msgid "Unlocked repository" -#~ msgstr "" - -#~ msgid "Unlocked" -#~ msgstr "" - -#~ msgid "Locked" -#~ msgstr "" - #~ msgid "Repository has been %s" #~ msgstr "版本库已被%s" @@ -6137,12 +6910,6 @@ #~ msgid "No Files" #~ msgstr "没有文件" -#~ msgid "" -#~ msgstr "" - -#~ msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" -#~ msgstr "" - #~ msgid "Username \"%(username)s\" is forbidden" #~ msgstr "不允许用户名 \"%(username)s\"" @@ -6158,69 +6925,24 @@ #~ msgid "Invalid clone URL, provide a valid clone http(s)/svn+http(s)/ssh URL" #~ msgstr "无效的克隆地址,提供一个有效的克隆 http(s)或svn+http(s)地址" -#~ msgid "Revisions %(revs)s are already part of pull request or have set status" +#~ msgid "" #~ msgstr "修订%(revs)s已经包含在拉取请求中或者或者已经设置状态" #~ msgid "Defaults" #~ msgstr "默认设置" -#~ msgid "never" -#~ msgstr "" - -#~ msgid "My Emails" -#~ msgstr "" - #~ msgid "Watched" #~ msgstr "关注的" #~ msgid "My Permissions" #~ msgstr "我的权限" -#~ msgid "expires" -#~ msgstr "" - -#~ msgid "Confirm to reset this api key: %s" -#~ msgstr "" - -#~ msgid "reset" -#~ msgstr "" - -#~ msgid "expired" -#~ msgstr "" - -#~ msgid "Confirm to remove this api key: %s" -#~ msgstr "" - -#~ msgid "remove" -#~ msgstr "" - -#~ msgid "No additional api keys specified" -#~ msgstr "" - -#~ msgid "New api key" -#~ msgstr "" - #~ msgid "delete" #~ msgstr "删除" -#~ msgid "current IP" -#~ msgstr "" - #~ msgid "Permissions Administration" #~ msgstr "权限管理" -#~ msgid "Overview" -#~ msgstr "" - -#~ msgid "Overwrite existing settings" -#~ msgstr "" - -#~ msgid "Default IP Whitelist for All Users" -#~ msgstr "" - -#~ msgid "Confirm to delete this ip: %s" -#~ msgstr "" - #~ msgid "Default User Permissions Overview" #~ msgstr "默认权限" @@ -6236,15 +6958,6 @@ #~ msgid "admin" #~ msgstr "管理" -#~ msgid "user/user group" -#~ msgstr "" - -#~ msgid "delegated admin" -#~ msgstr "" - -#~ msgid "Import existing repository ?" -#~ msgstr "" - #~ msgid "Optional URL from which repository should be cloned." #~ msgstr "可选的,指定版本库应该从哪个http[s]地址克隆。" @@ -6254,138 +6967,291 @@ #~ msgid "Pull Changes from Remote Location" #~ msgstr "从远程路径拉取修订集" -#~ msgid "This repository does not have a remote URL set." -#~ msgstr "" - -#~ msgid "Non-changeable id" -#~ msgstr "" - #~ msgid "edit" #~ msgstr "编辑" -#~ msgid "new value" -#~ msgstr "" - -#~ msgid "URL used for doing remote pulls." -#~ msgstr "" - -#~ msgid "Email prefix" -#~ msgstr "" - -#~ msgid "Kallithea email from" -#~ msgstr "" - -#~ msgid "Error email from" -#~ msgstr "" - -#~ msgid "Error email recipients" -#~ msgstr "" - -#~ msgid "SMTP server" -#~ msgstr "" - -#~ msgid "SMTP username" -#~ msgstr "" - -#~ msgid "SMTP password" -#~ msgstr "" - -#~ msgid "SMTP port" -#~ msgstr "" - -#~ msgid "SMTP use TLS" -#~ msgstr "" - -#~ msgid "SMTP use SSL" -#~ msgstr "" - -#~ msgid "SMTP auth" -#~ msgstr "" - -#~ msgid "Destroy old data" -#~ msgstr "" - -#~ msgid "check for updates" -#~ msgstr "" - #~ msgid "Default permissions" #~ msgstr "默认权限" -#~ msgid "user groups" -#~ msgstr "" - -#~ msgid "Inherit from defaults" -#~ msgstr "" - -#~ msgid "show" -#~ msgstr "" - -#~ msgid "parent rev." -#~ msgstr "" - -#~ msgid "child rev." -#~ msgstr "" - -#~ msgid "no revisions" -#~ msgstr "" - #~ msgid "Status change from pull request" #~ msgstr "状态修改为%s" -#~ msgid "Status change on changeset" -#~ msgstr "" - -#~ msgid "Comment on changeset" -#~ msgstr "" - -#~ msgid "revision" -#~ msgstr "" - #~ msgid "Mimetype" #~ msgstr "MIME类型" #~ msgid "My Repos" #~ msgstr "我的版本库" -#~ msgid "Latest vote: %s" -#~ msgstr "" - -#~ msgid "Nobody voted" -#~ msgstr "" - -#~ msgid "%s Pull Request #%s" -#~ msgstr "" - -#~ msgid "Pull request #%s from %s#%s" -#~ msgstr "" - #~ msgid "owner" #~ msgstr "所有者" -#~ msgid "Your new password" -#~ msgstr "" - -#~ msgid "Your new Kallithea password:%s" -#~ msgstr "" - #~ msgid "Open New Pull Request for Selected Changesets" #~ msgstr "为选择的变更集创建新的拉取请求" -#~ msgid "Show Selected Changesets __S → __E" -#~ msgstr "" - #~ msgid "You can generate it by clicking following URL" #~ msgstr "点击下面的链接以重新生成密码:" -#~ msgid "Please ignore this email if you did not request a new password ." -#~ msgstr "" - #~ msgid "Created by" #~ msgstr "创建于" -#~ msgid "You can only delete files with revision being a valid branch " +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "" +#~ "This pull request is based on " +#~ "another %s revision and there is " +#~ "no simple diff." +#~ msgstr "" + +#~ msgid "No changes found on %s %s since previous version." +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "已关闭,被 %s 替换。" + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "Git pull requests don't support updates yet." +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "关闭。" + +#~ msgid "An error occurred during creation of field" +#~ msgstr "" + +#~ msgid "Changeset not found" +#~ msgstr "未找到修订集" + +#~ msgid "Repository no access" +#~ msgstr "无版本库访问权限" + +#~ msgid "Repository read access" +#~ msgstr "版本库读取权限" + +#~ msgid "Repository write access" +#~ msgstr "版本库写入权限" + +#~ msgid "Repository admin access" +#~ msgstr "版本库管理权限" + +#~ msgid "Repository Group no access" +#~ msgstr "无版本库组访问权限" + +#~ msgid "Repository Group read access" +#~ msgstr "版本库组读取权限" + +#~ msgid "Repository Group write access" +#~ msgstr "版本库组写入" + +#~ msgid "Repository Group admin access" +#~ msgstr "版本库组管理权限" + +#~ msgid "Repository creation disabled" +#~ msgstr "禁用创建版本库" + +#~ msgid "Repository creation enabled" +#~ msgstr "允许创建版本库" + +#~ msgid "Repository forking disabled" +#~ msgstr "禁用复刻版本库" + +#~ msgid "Repository forking enabled" +#~ msgstr "允许复刻版本库" + +#~ msgid "Register disabled" +#~ msgstr "禁用注册" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "用手动激活注册新用户" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "用自动激活注册新用户" + +#~ msgid "Not Reviewed" +#~ msgstr "未检视" + +#~ msgid "Rejected" +#~ msgstr "驳回" + +#~ msgid "Under Review" +#~ msgstr "检视中" + +#~ msgid "Repository group no access" +#~ msgstr "" + +#~ msgid "Repository group read access" +#~ msgstr "" + +#~ msgid "Repository group write access" +#~ msgstr "" + +#~ msgid "Repository group admin access" +#~ msgstr "" + +#~ msgid "User group no access" +#~ msgstr "" + +#~ msgid "User group read access" +#~ msgstr "" + +#~ msgid "User group write access" +#~ msgstr "" + +#~ msgid "User group admin access" +#~ msgstr "" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "" + +#~ msgid "User Group creation disabled" +#~ msgstr "" + +#~ msgid "User Group creation enabled" +#~ msgstr "" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" #~ msgstr "" -#~ msgid "You can only edit files with revision being a valid branch " +#~ msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "[评论]拉取请求" + +#~ msgid "No repositories found." +#~ msgstr "" + +#~ msgid "There are no branches yet" +#~ msgstr "没有任何分支" + +#~ msgid "There are no tags yet" +#~ msgstr "没有任何标签" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "无书签" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "%s书签" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "%s分支" + +#~ msgid "Compare Branches" #~ msgstr "" +#~ msgid "Editing file" +#~ msgstr "编辑文件" + +#~ msgid "Update" +#~ msgstr "[更新]用户" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "新建拉取请求" + +#~ msgid "%s Tags" +#~ msgstr "%s标签" + +#~ msgid "Compare Tags" +#~ msgstr "比较标签" + +#~ msgid "" +#~ "Changing status on a changeset " +#~ "associated with a closed pull request" +#~ " is not allowed" +#~ msgstr "" + +#~ msgid "You have successfully registered into Kallithea" +#~ msgstr "" + +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "确认清除版本库缓存" + +#~ msgid "" +#~ "Changeset status: %s\n" +#~ "Click to open associated pull request %s" +#~ msgstr "" + +#~ msgid "Commenting on line {1}." +#~ msgstr "在{1}行上评论" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "评论使用%s语法并支持%s" + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "在文本中使用 @用户名 以发送通知到该Kallithea用户" + +#~ msgid "Comment preview" +#~ msgstr "" + +#~ msgid "Preview" +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "在文本中使用 @用户名 以发送通知到该Kallithea用户" + +#~ msgid "New file mode" +#~ msgstr "" + +#~ msgid "File is too big to display" +#~ msgstr "文件过大,不能显示" + +#~ msgid "Save as New Pull Request" +#~ msgstr "新建拉取请求" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/i18n/zh_TW/LC_MESSAGES/kallithea.po --- a/kallithea/i18n/zh_TW/LC_MESSAGES/kallithea.po Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/i18n/zh_TW/LC_MESSAGES/kallithea.po Thu Jun 07 01:46:02 2018 +0200 @@ -7,454 +7,491 @@ msgstr "" "Project-Id-Version: Kallithea 0.3\n" "Report-Msgid-Bugs-To: translations@kallithea-scm.org\n" -"POT-Creation-Date: 2017-07-25 16:37+0200\n" +"POT-Creation-Date: 2017-07-27 13:13+0200\n" "PO-Revision-Date: 2017-03-10 18:26+0000\n" "Last-Translator: mao \n" "Language-Team: Chinese (Traditional) " -"\n" +"\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 2.12\n" +"Generated-By: Babel 1.3\n" #: kallithea/controllers/changelog.py:86 -#: kallithea/controllers/pullrequests.py:238 kallithea/lib/base.py:512 +#: kallithea/controllers/pullrequests.py:256 kallithea/lib/base.py:613 msgid "There are no changesets yet" msgstr "" -#: kallithea/controllers/changelog.py:165 -#: kallithea/controllers/admin/permissions.py:61 -#: kallithea/controllers/admin/permissions.py:65 -#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/changelog.py:164 +#: kallithea/controllers/admin/permissions.py:62 +#: kallithea/controllers/admin/permissions.py:66 +#: kallithea/controllers/admin/permissions.py:70 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:104 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:88 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:7 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:7 #: kallithea/templates/base/perms_summary.html:14 +#: kallithea/tests/data/templates/base/perms_summary.html.py:57 msgid "None" msgstr "無" -#: kallithea/controllers/changelog.py:168 kallithea/controllers/files.py:196 +#: kallithea/controllers/changelog.py:167 kallithea/controllers/files.py:194 msgid "(closed)" msgstr "(已關閉)" -#: kallithea/controllers/changeset.py:89 +#: kallithea/controllers/changeset.py:85 msgid "Show whitespace" msgstr "顯示空格" -#: kallithea/controllers/changeset.py:96 kallithea/controllers/changeset.py:103 -#: kallithea/templates/files/diff_2way.html:55 +#: kallithea/controllers/changeset.py:92 kallithea/controllers/changeset.py:99 +#: kallithea/templates/files/diff_2way.html:53 msgid "Ignore whitespace" msgstr "忽略空格" -#: kallithea/controllers/changeset.py:169 +#: kallithea/controllers/changeset.py:165 #, python-format msgid "Increase diff context to %(num)s lines" msgstr "增加 diff 上下文至 %(num)s 行" -#: kallithea/controllers/changeset.py:212 kallithea/controllers/files.py:96 -#: kallithea/controllers/files.py:116 kallithea/controllers/files.py:742 +#: kallithea/controllers/changeset.py:230 kallithea/controllers/files.py:98 +#: kallithea/controllers/files.py:118 kallithea/controllers/files.py:726 msgid "Such revision does not exist for this repository" msgstr "" -#: kallithea/controllers/changeset.py:383 -msgid "" -"Changing status on a changeset associated with a closed pull request is " -"not allowed" -msgstr "" - -#: kallithea/controllers/compare.py:161 kallithea/templates/base/root.html:41 -msgid "Select changeset" -msgstr "" - -#: kallithea/controllers/compare.py:261 +#: kallithea/controllers/compare.py:67 +#, fuzzy, python-format +#| msgid "Go to tip of repository" +msgid "Could not find other repository %s" +msgstr "Git 版本庫" + +#: kallithea/controllers/compare.py:73 +msgid "Cannot compare repositories of different types" +msgstr "" + +#: kallithea/controllers/compare.py:240 +msgid "Cannot show empty diff" +msgstr "" + +#: kallithea/controllers/compare.py:242 +msgid "No ancestor found for merge diff" +msgstr "" + +#: kallithea/controllers/compare.py:246 +msgid "Multiple merge ancestors found for merge compare" +msgstr "" + +#: kallithea/controllers/compare.py:262 msgid "Cannot compare repositories without using common ancestor" msgstr "" -#: kallithea/controllers/error.py:71 +#: kallithea/controllers/error.py:70 msgid "No response" msgstr "未回應" -#: kallithea/controllers/error.py:72 +#: kallithea/controllers/error.py:71 msgid "Unknown error" msgstr "" -#: kallithea/controllers/error.py:100 +#: kallithea/controllers/error.py:84 msgid "The request could not be understood by the server due to malformed syntax." msgstr "" -#: kallithea/controllers/error.py:103 +#: kallithea/controllers/error.py:87 msgid "Unauthorized access to resource" msgstr "" -#: kallithea/controllers/error.py:105 +#: kallithea/controllers/error.py:89 msgid "You don't have permission to view this page" msgstr "您沒有權限瀏覽這個頁面" -#: kallithea/controllers/error.py:107 +#: kallithea/controllers/error.py:91 msgid "The resource could not be found" msgstr "找不到這個資源" -#: kallithea/controllers/error.py:109 +#: kallithea/controllers/error.py:93 msgid "" "The server encountered an unexpected condition which prevented it from " "fulfilling the request." msgstr "" -#: kallithea/controllers/feed.py:55 -#, python-format -msgid "Changes on %s repository" -msgstr "修改於版本庫 %s" - -#: kallithea/controllers/feed.py:56 -#, python-format -msgid "%s %s feed" -msgstr "" - -#: kallithea/controllers/feed.py:87 -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/controllers/feed.py:80 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:332 +#: kallithea/tests/data/templates/changeset/changeset.html.py:347 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:180 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:195 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:420 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:447 msgid "Changeset was too big and was cut off..." msgstr "" -#: kallithea/controllers/feed.py:91 +#: kallithea/controllers/feed.py:84 #, python-format msgid "%s committed on %s" msgstr "%s 評論於 %s" -#: kallithea/controllers/files.py:91 +#: kallithea/controllers/feed.py:116 kallithea/controllers/feed.py:148 +#, python-format +msgid "%s %s feed" +msgstr "" + +#: kallithea/controllers/feed.py:118 kallithea/controllers/feed.py:150 +#, python-format +msgid "Changes on %s repository" +msgstr "修改於版本庫 %s" + +#: kallithea/controllers/files.py:93 msgid "Click here to add new file" msgstr "" -#: kallithea/controllers/files.py:92 +#: kallithea/controllers/files.py:94 #, python-format msgid "There are no files yet. %s" msgstr "" -#: kallithea/controllers/files.py:193 +#: kallithea/controllers/files.py:191 #, python-format msgid "%s at %s" msgstr "" -#: kallithea/controllers/files.py:305 kallithea/controllers/files.py:365 -#: kallithea/controllers/files.py:432 +#: kallithea/controllers/files.py:297 kallithea/controllers/files.py:357 +#: kallithea/controllers/files.py:424 #, python-format msgid "This repository has been locked by %s on %s" msgstr "" -#: kallithea/controllers/files.py:317 +#: kallithea/controllers/files.py:309 msgid "You can only delete files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:328 +#: kallithea/controllers/files.py:320 #, python-format msgid "Deleted file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:350 +#: kallithea/controllers/files.py:342 #, python-format msgid "Successfully deleted file %s" msgstr "" -#: kallithea/controllers/files.py:354 kallithea/controllers/files.py:420 -#: kallithea/controllers/files.py:501 +#: kallithea/controllers/files.py:346 kallithea/controllers/files.py:412 +#: kallithea/controllers/files.py:493 msgid "Error occurred during commit" msgstr "" -#: kallithea/controllers/files.py:377 +#: kallithea/controllers/files.py:369 msgid "You can only edit files with revision being a valid branch" msgstr "" -#: kallithea/controllers/files.py:391 +#: kallithea/controllers/files.py:383 #, python-format msgid "Edited file %s via Kallithea" msgstr "" -#: kallithea/controllers/files.py:407 +#: kallithea/controllers/files.py:399 msgid "No changes" msgstr "沒有修改" -#: kallithea/controllers/files.py:416 kallithea/controllers/files.py:490 +#: kallithea/controllers/files.py:408 kallithea/controllers/files.py:482 #, python-format msgid "Successfully committed to %s" msgstr "成功遞交至 %s" -#: kallithea/controllers/files.py:443 +#: kallithea/controllers/files.py:435 msgid "Added file via Kallithea" msgstr "" -#: kallithea/controllers/files.py:464 +#: kallithea/controllers/files.py:456 msgid "No content" msgstr "" -#: kallithea/controllers/files.py:468 +#: kallithea/controllers/files.py:460 msgid "No filename" msgstr "" -#: kallithea/controllers/files.py:493 +#: kallithea/controllers/files.py:485 msgid "Location must be relative path and must not contain .. in path" msgstr "" -#: kallithea/controllers/files.py:526 +#: kallithea/controllers/files.py:517 msgid "Downloads disabled" msgstr "" -#: kallithea/controllers/files.py:537 +#: kallithea/controllers/files.py:528 #, python-format msgid "Unknown revision %s" msgstr "未知修訂 %s" -#: kallithea/controllers/files.py:539 +#: kallithea/controllers/files.py:530 msgid "Empty repository" msgstr "空的版本庫" -#: kallithea/controllers/files.py:541 +#: kallithea/controllers/files.py:532 msgid "Unknown archive type" msgstr "未知的存檔類型" -#: kallithea/controllers/files.py:771 +#: kallithea/controllers/files.py:755 #: kallithea/templates/changeset/changeset_range.html:9 -#: kallithea/templates/email_templates/pull_request.html:15 -#: kallithea/templates/pullrequests/pullrequest.html:97 +#: kallithea/templates/email_templates/pull_request.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:84 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:242 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:92 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:88 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:152 msgid "Changesets" msgstr "變更" -#: kallithea/controllers/files.py:772 kallithea/controllers/pullrequests.py:176 -#: kallithea/model/scm.py:820 kallithea/templates/switch_to_list.html:3 -#: kallithea/templates/branches/branches.html:10 +#: kallithea/controllers/files.py:756 kallithea/controllers/pullrequests.py:186 +#: kallithea/model/scm.py:705 msgid "Branches" msgstr "分支" -#: kallithea/controllers/files.py:773 kallithea/controllers/pullrequests.py:177 -#: kallithea/model/scm.py:831 kallithea/templates/switch_to_list.html:25 -#: kallithea/templates/tags/tags.html:10 +#: kallithea/controllers/files.py:757 kallithea/controllers/pullrequests.py:187 +#: kallithea/model/scm.py:716 msgid "Tags" msgstr "標籤" -#: kallithea/controllers/forks.py:186 +#: kallithea/controllers/forks.py:176 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: kallithea/controllers/home.py:84 +#: kallithea/controllers/home.py:77 msgid "Groups" msgstr "" -#: kallithea/controllers/home.py:89 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:106 +#: kallithea/controllers/home.py:87 kallithea/templates/index.html:5 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:90 #: kallithea/templates/admin/repos/repo_add.html:12 #: kallithea/templates/admin/repos/repo_add.html:16 #: kallithea/templates/admin/repos/repos.html:9 #: kallithea/templates/admin/users/user_edit_advanced.html:6 -#: kallithea/templates/base/base.html:60 kallithea/templates/base/base.html:77 -#: kallithea/templates/base/base.html:124 -#: kallithea/templates/base/base.html:390 -#: kallithea/templates/base/base.html:562 +#: kallithea/templates/base/base.html:56 kallithea/templates/base/base.html:73 +#: kallithea/templates/base/base.html:452 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:119 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:138 +#: kallithea/tests/data/templates/base/base.html.py:122 +#: kallithea/tests/data/templates/base/base.html.py:243 +#: kallithea/tests/data/templates/base/base.html.py:325 +#: kallithea/tests/data/templates/base/base.html.py:654 +#: kallithea/tests/data/templates/base/base.html.py:690 msgid "Repositories" msgstr "版本庫" -#: kallithea/controllers/home.py:130 +#: kallithea/controllers/home.py:120 #: kallithea/templates/files/files_add.html:32 #: kallithea/templates/files/files_delete.html:23 #: kallithea/templates/files/files_edit.html:32 +#: kallithea/tests/data/templates/files/files_add.html.py:219 msgid "Branch" msgstr "" -#: kallithea/controllers/home.py:136 +#: kallithea/controllers/home.py:126 +msgid "Closed Branches" +msgstr "" + +#: kallithea/controllers/home.py:132 msgid "Tag" msgstr "" -#: kallithea/controllers/home.py:142 +#: kallithea/controllers/home.py:138 msgid "Bookmark" msgstr "" -#: kallithea/controllers/journal.py:111 kallithea/controllers/journal.py:153 +#: kallithea/controllers/journal.py:113 kallithea/controllers/journal.py:155 #: kallithea/templates/journal/public_journal.html:4 #: kallithea/templates/journal/public_journal.html:21 msgid "Public Journal" msgstr "開放日誌" -#: kallithea/controllers/journal.py:115 kallithea/controllers/journal.py:157 -#: kallithea/templates/base/base.html:222 -#: kallithea/templates/journal/journal.html:4 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/controllers/journal.py:117 kallithea/controllers/journal.py:159 +#: kallithea/templates/base/base.html:295 +#: kallithea/templates/journal/journal.html:5 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/base/base.html.py:498 +#: kallithea/tests/data/templates/journal/journal.html.py:124 +#: kallithea/tests/data/templates/journal/journal.html.py:228 msgid "Journal" msgstr "日誌" -#: kallithea/controllers/login.py:146 kallithea/controllers/login.py:192 +#: kallithea/controllers/login.py:142 kallithea/controllers/login.py:188 msgid "Bad captcha" msgstr "" -#: kallithea/controllers/login.py:152 -msgid "You have successfully registered into Kallithea" -msgstr "" - -#: kallithea/controllers/login.py:197 +#: kallithea/controllers/login.py:148 +#, python-format +msgid "You have successfully registered with %s" +msgstr "" + +#: kallithea/controllers/login.py:193 msgid "A password reset confirmation code has been sent" msgstr "密碼重設的確認碼已寄出" -#: kallithea/controllers/login.py:246 +#: kallithea/controllers/login.py:242 msgid "Invalid password reset token" msgstr "無效的密碼重設確認碼" -#: kallithea/controllers/login.py:251 -#: kallithea/controllers/admin/my_account.py:167 +#: kallithea/controllers/login.py:247 +#: kallithea/controllers/admin/my_account.py:157 msgid "Successfully updated password" msgstr "" -#: kallithea/controllers/pullrequests.py:124 -#, python-format -msgid "%s (closed)" -msgstr "" - -#: kallithea/controllers/pullrequests.py:152 -#: kallithea/templates/changeset/changeset.html:12 -#: kallithea/templates/email_templates/changeset_comment.html:17 -msgid "Changeset" -msgstr "" - -#: kallithea/controllers/pullrequests.py:173 -msgid "Special" -msgstr "" - -#: kallithea/controllers/pullrequests.py:174 -msgid "Peer branches" -msgstr "" - -#: kallithea/controllers/pullrequests.py:175 kallithea/model/scm.py:826 -#: kallithea/templates/switch_to_list.html:38 -#: kallithea/templates/bookmarks/bookmarks.html:10 -msgid "Bookmarks" -msgstr "" - -#: kallithea/controllers/pullrequests.py:310 -#, python-format -msgid "Error creating pull request: %s" -msgstr "" - -#: kallithea/controllers/pullrequests.py:356 -#: kallithea/controllers/pullrequests.py:503 -msgid "No description" -msgstr "無描述" - -#: kallithea/controllers/pullrequests.py:363 -msgid "Successfully opened new pull request" -msgstr "" - -#: kallithea/controllers/pullrequests.py:366 -#: kallithea/controllers/pullrequests.py:453 -#: kallithea/controllers/pullrequests.py:510 +#: kallithea/controllers/pullrequests.py:73 #, python-format msgid "Invalid reviewer \"%s\" specified" msgstr "" -#: kallithea/controllers/pullrequests.py:369 -#: kallithea/controllers/pullrequests.py:456 +#: kallithea/controllers/pullrequests.py:135 +#, python-format +msgid "%s (closed)" +msgstr "" + +#: kallithea/controllers/pullrequests.py:162 +#: kallithea/templates/changeset/changeset.html:12 +#: kallithea/tests/data/templates/changeset/changeset.html.py:408 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:97 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:91 +msgid "Changeset" +msgstr "" + +#: kallithea/controllers/pullrequests.py:183 +msgid "Special" +msgstr "" + +#: kallithea/controllers/pullrequests.py:184 +msgid "Peer branches" +msgstr "" + +#: kallithea/controllers/pullrequests.py:185 kallithea/model/scm.py:711 +msgid "Bookmarks" +msgstr "" + +#: kallithea/controllers/pullrequests.py:326 +#, python-format +msgid "Error creating pull request: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:353 +#: kallithea/controllers/pullrequests.py:376 msgid "Error occurred while creating pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:401 -msgid "Missing changesets since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:408 -#, python-format -msgid "New changesets on %s %s since the previous pull request:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:415 -msgid "Ancestor didn't change - show diff since previous version:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:422 -#, python-format -msgid "" -"This pull request is based on another %s revision and there is no simple " -"diff." -msgstr "" - -#: kallithea/controllers/pullrequests.py:424 -#, python-format -msgid "No changes found on %s %s since previous version." -msgstr "" - -#: kallithea/controllers/pullrequests.py:462 -#, python-format -msgid "Closed, replaced by %s ." -msgstr "" - -#: kallithea/controllers/pullrequests.py:470 -msgid "Pull request update created" -msgstr "" - -#: kallithea/controllers/pullrequests.py:514 +#: kallithea/controllers/pullrequests.py:358 +msgid "Successfully opened new pull request" +msgstr "" + +#: kallithea/controllers/pullrequests.py:381 +msgid "New pull request iteration created" +msgstr "" + +#: kallithea/controllers/pullrequests.py:410 +#, python-format +msgid "Meanwhile, the following reviewers have been added: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:414 +#, python-format +msgid "Meanwhile, the following reviewers have been removed: %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:430 +#: kallithea/model/pull_request.py:234 +msgid "No description" +msgstr "無描述" + +#: kallithea/controllers/pullrequests.py:439 msgid "Pull request updated" msgstr "" -#: kallithea/controllers/pullrequests.py:529 +#: kallithea/controllers/pullrequests.py:453 msgid "Successfully deleted pull request" msgstr "" -#: kallithea/controllers/pullrequests.py:595 +#: kallithea/controllers/pullrequests.py:491 +#, python-format +msgid "Revision %s not found in %s" +msgstr "" + +#: kallithea/controllers/pullrequests.py:518 +#, python-format +msgid "Error: changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:532 #, python-format msgid "This pull request has already been merged to %s." msgstr "" -#: kallithea/controllers/pullrequests.py:597 +#: kallithea/controllers/pullrequests.py:534 msgid "This pull request has been closed and can not be updated." msgstr "" -#: kallithea/controllers/pullrequests.py:615 -#, python-format -msgid "This pull request can be updated with changes on %s:" -msgstr "" - -#: kallithea/controllers/pullrequests.py:619 -msgid "No changesets found for updating this pull request." -msgstr "" - -#: kallithea/controllers/pullrequests.py:627 +#: kallithea/controllers/pullrequests.py:552 +#, python-format +msgid "The following additional changes are available on %s:" +msgstr "" + +#: kallithea/controllers/pullrequests.py:556 +msgid "No additional changesets found for iterating on this pull request." +msgstr "" + +#: kallithea/controllers/pullrequests.py:564 #, python-format msgid "Note: Branch %s has another head: %s." msgstr "" -#: kallithea/controllers/pullrequests.py:633 -msgid "Git pull requests don't support updates yet." -msgstr "" - -#: kallithea/controllers/pullrequests.py:724 +#: kallithea/controllers/pullrequests.py:571 +msgid "Git pull requests don't support iterating yet." +msgstr "" + +#: kallithea/controllers/pullrequests.py:573 +#, python-format +msgid "Error: some changesets not found when displaying pull request from %s." +msgstr "" + +#: kallithea/controllers/pullrequests.py:598 +msgid "The diff can't be shown - the PR revisions could not be found." +msgstr "" + +#: kallithea/controllers/pullrequests.py:665 msgid "No permission to change pull request status" msgstr "" -#: kallithea/controllers/pullrequests.py:729 -msgid "Closing." -msgstr "關閉中。" - -#: kallithea/controllers/search.py:135 +#: kallithea/controllers/pullrequests.py:676 +#, fuzzy, python-format +msgid "Successfully deleted pull request %s" +msgstr "成功遞交至 %s" + +#: kallithea/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "無效的查詢。請使用跳脫字元。" -#: kallithea/controllers/search.py:140 +#: kallithea/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "沒有任何索引可以搜尋。請執行 whoosh 建立索引" -#: kallithea/controllers/search.py:144 +#: kallithea/controllers/search.py:143 msgid "An error occurred during search operation." msgstr "" -#: kallithea/controllers/summary.py:180 -#: kallithea/templates/summary/summary.html:384 +#: kallithea/controllers/summary.py:173 +#: kallithea/templates/summary/summary.html:360 +#: kallithea/tests/data/templates/summary/summary.html.py:293 msgid "No data ready yet" msgstr "" -#: kallithea/controllers/summary.py:183 -#: kallithea/templates/summary/summary.html:98 +#: kallithea/controllers/summary.py:176 +#: kallithea/templates/summary/summary.html:88 +#: kallithea/tests/data/templates/summary/summary.html.py:161 msgid "Statistics are disabled for this repository" msgstr "這個版本庫的統計功能已停用" @@ -466,149 +503,153 @@ msgid "error occurred during update of auth settings" msgstr "" -#: kallithea/controllers/admin/defaults.py:97 +#: kallithea/controllers/admin/defaults.py:75 msgid "Default settings updated successfully" msgstr "" -#: kallithea/controllers/admin/defaults.py:112 +#: kallithea/controllers/admin/defaults.py:90 msgid "Error occurred during update of defaults" msgstr "" +#: kallithea/controllers/admin/gists.py:58 +#: kallithea/controllers/admin/my_account.py:232 +#: kallithea/controllers/admin/users.py:250 +msgid "Forever" +msgstr "" + #: kallithea/controllers/admin/gists.py:59 -#: kallithea/controllers/admin/my_account.py:243 -#: kallithea/controllers/admin/users.py:285 -msgid "Forever" +#: kallithea/controllers/admin/my_account.py:233 +#: kallithea/controllers/admin/users.py:251 +msgid "5 minutes" msgstr "" #: kallithea/controllers/admin/gists.py:60 -#: kallithea/controllers/admin/my_account.py:244 -#: kallithea/controllers/admin/users.py:286 -msgid "5 minutes" +#: kallithea/controllers/admin/my_account.py:234 +#: kallithea/controllers/admin/users.py:252 +msgid "1 hour" msgstr "" #: kallithea/controllers/admin/gists.py:61 -#: kallithea/controllers/admin/my_account.py:245 -#: kallithea/controllers/admin/users.py:287 -msgid "1 hour" +#: kallithea/controllers/admin/my_account.py:235 +#: kallithea/controllers/admin/users.py:253 +msgid "1 day" msgstr "" #: kallithea/controllers/admin/gists.py:62 -#: kallithea/controllers/admin/my_account.py:246 -#: kallithea/controllers/admin/users.py:288 -msgid "1 day" -msgstr "" - -#: kallithea/controllers/admin/gists.py:63 -#: kallithea/controllers/admin/my_account.py:247 -#: kallithea/controllers/admin/users.py:289 +#: kallithea/controllers/admin/my_account.py:236 +#: kallithea/controllers/admin/users.py:254 msgid "1 month" msgstr "" -#: kallithea/controllers/admin/gists.py:67 -#: kallithea/controllers/admin/my_account.py:249 -#: kallithea/controllers/admin/users.py:291 +#: kallithea/controllers/admin/gists.py:66 +#: kallithea/controllers/admin/my_account.py:238 +#: kallithea/controllers/admin/users.py:256 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:65 +#: kallithea/templates/admin/users/user_edit_api_keys.html:65 msgid "Lifetime" msgstr "" -#: kallithea/controllers/admin/gists.py:146 +#: kallithea/controllers/admin/gists.py:141 msgid "Error occurred during gist creation" msgstr "" -#: kallithea/controllers/admin/gists.py:184 +#: kallithea/controllers/admin/gists.py:159 #, python-format msgid "Deleted gist %s" msgstr "" -#: kallithea/controllers/admin/gists.py:233 +#: kallithea/controllers/admin/gists.py:200 msgid "Unmodified" msgstr "未修改" -#: kallithea/controllers/admin/gists.py:262 +#: kallithea/controllers/admin/gists.py:229 msgid "Successfully updated gist content" msgstr "" -#: kallithea/controllers/admin/gists.py:267 +#: kallithea/controllers/admin/gists.py:234 msgid "Successfully updated gist data" msgstr "" -#: kallithea/controllers/admin/gists.py:270 +#: kallithea/controllers/admin/gists.py:237 #, python-format msgid "Error occurred during update of gist %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:70 kallithea/model/user.py:215 -#: kallithea/model/user.py:237 +#: kallithea/controllers/admin/my_account.py:69 kallithea/model/user.py:214 +#: kallithea/model/user.py:235 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: kallithea/controllers/admin/my_account.py:129 +#: kallithea/controllers/admin/my_account.py:119 msgid "Your account was updated successfully" msgstr "您的帳號已更新完成" -#: kallithea/controllers/admin/my_account.py:144 -#: kallithea/controllers/admin/users.py:202 +#: kallithea/controllers/admin/my_account.py:134 +#: kallithea/controllers/admin/users.py:183 #, python-format msgid "Error occurred during update of user %s" msgstr "" -#: kallithea/controllers/admin/my_account.py:178 +#: kallithea/controllers/admin/my_account.py:168 msgid "Error occurred during update of user password" msgstr "" -#: kallithea/controllers/admin/my_account.py:220 -#: kallithea/controllers/admin/users.py:415 +#: kallithea/controllers/admin/my_account.py:209 +#: kallithea/controllers/admin/users.py:371 #, python-format msgid "Added email %s to user" msgstr "" -#: kallithea/controllers/admin/my_account.py:226 -#: kallithea/controllers/admin/users.py:421 +#: kallithea/controllers/admin/my_account.py:215 +#: kallithea/controllers/admin/users.py:377 msgid "An error occurred during email saving" msgstr "" -#: kallithea/controllers/admin/my_account.py:235 -#: kallithea/controllers/admin/users.py:433 +#: kallithea/controllers/admin/my_account.py:224 +#: kallithea/controllers/admin/users.py:387 msgid "Removed email from user" msgstr "" -#: kallithea/controllers/admin/my_account.py:259 -#: kallithea/controllers/admin/users.py:308 +#: kallithea/controllers/admin/my_account.py:248 +#: kallithea/controllers/admin/users.py:273 msgid "API key successfully created" msgstr "" -#: kallithea/controllers/admin/my_account.py:271 -#: kallithea/controllers/admin/users.py:321 +#: kallithea/controllers/admin/my_account.py:257 +#: kallithea/controllers/admin/users.py:283 msgid "API key successfully reset" msgstr "" -#: kallithea/controllers/admin/my_account.py:275 -#: kallithea/controllers/admin/users.py:325 +#: kallithea/controllers/admin/my_account.py:261 +#: kallithea/controllers/admin/users.py:287 msgid "API key successfully deleted" msgstr "" -#: kallithea/controllers/admin/permissions.py:62 -#: kallithea/controllers/admin/permissions.py:66 -#: kallithea/controllers/admin/permissions.py:70 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 -#: kallithea/templates/base/perms_summary.html:15 -msgid "Read" -msgstr "讀" - #: kallithea/controllers/admin/permissions.py:63 #: kallithea/controllers/admin/permissions.py:67 #: kallithea/controllers/admin/permissions.py:71 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 -#: kallithea/templates/base/perms_summary.html:16 -msgid "Write" -msgstr "寫" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:8 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:8 +#: kallithea/templates/base/perms_summary.html:15 +#: kallithea/tests/data/templates/base/perms_summary.html.py:63 +msgid "Read" +msgstr "讀" #: kallithea/controllers/admin/permissions.py:64 #: kallithea/controllers/admin/permissions.py:68 #: kallithea/controllers/admin/permissions.py:72 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:9 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:9 +#: kallithea/templates/base/perms_summary.html:16 +#: kallithea/tests/data/templates/base/perms_summary.html.py:69 +msgid "Write" +msgstr "寫" + +#: kallithea/controllers/admin/permissions.py:65 +#: kallithea/controllers/admin/permissions.py:69 +#: kallithea/controllers/admin/permissions.py:73 #: kallithea/templates/admin/auth/auth_settings.html:9 #: kallithea/templates/admin/defaults/defaults.html:9 #: kallithea/templates/admin/permissions/permissions.html:9 @@ -616,621 +657,640 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit.html:9 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:47 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 #: kallithea/templates/admin/repos/repo_add.html:10 #: kallithea/templates/admin/repos/repo_add.html:14 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 -#: kallithea/templates/admin/repos/repos.html:9 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:10 #: kallithea/templates/admin/settings/settings.html:9 #: kallithea/templates/admin/user_groups/user_group_add.html:8 #: kallithea/templates/admin/user_groups/user_group_edit.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:10 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:9 #: kallithea/templates/admin/users/user_add.html:8 #: kallithea/templates/admin/users/user_edit.html:9 -#: kallithea/templates/admin/users/user_edit_profile.html:105 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/admin/users/users.html:55 -#: kallithea/templates/base/base.html:252 -#: kallithea/templates/base/base.html:253 -#: kallithea/templates/base/base.html:259 -#: kallithea/templates/base/base.html:260 +#: kallithea/templates/admin/users/user_edit_profile.html:81 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/admin/users/users.html:43 +#: kallithea/templates/base/base.html:325 +#: kallithea/templates/base/base.html:326 +#: kallithea/templates/base/base.html:332 +#: kallithea/templates/base/base.html:333 #: kallithea/templates/base/perms_summary.html:17 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:226 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:160 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:142 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:153 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:140 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:123 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:172 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:162 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:144 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:163 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:168 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:98 +#: kallithea/tests/data/templates/admin/users/users.html.py:119 +#: kallithea/tests/data/templates/admin/users/users.html.py:143 +#: kallithea/tests/data/templates/base/base.html.py:550 +#: kallithea/tests/data/templates/base/base.html.py:554 +#: kallithea/tests/data/templates/base/base.html.py:562 +#: kallithea/tests/data/templates/base/base.html.py:564 +#: kallithea/tests/data/templates/base/perms_summary.html.py:75 msgid "Admin" msgstr "管理" -#: kallithea/controllers/admin/permissions.py:75 -#: kallithea/controllers/admin/permissions.py:86 -#: kallithea/controllers/admin/permissions.py:91 -#: kallithea/controllers/admin/permissions.py:94 -#: kallithea/controllers/admin/permissions.py:97 -#: kallithea/controllers/admin/permissions.py:100 -#: kallithea/templates/admin/auth/auth_settings.html:40 -msgid "Disabled" -msgstr "停用" - -#: kallithea/controllers/admin/permissions.py:77 -msgid "Allowed with manual account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:79 -msgid "Allowed with automatic account activation" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:82 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1439 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1485 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1542 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1564 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1603 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1655 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1682 kallithea/model/db.py:1702 -msgid "Manual activation of external account" -msgstr "" - -#: kallithea/controllers/admin/permissions.py:83 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1440 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1486 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1565 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1604 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1656 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1683 kallithea/model/db.py:1703 -msgid "Automatic activation of external account" -msgstr "" - +#: kallithea/controllers/admin/permissions.py:76 #: kallithea/controllers/admin/permissions.py:87 -#: kallithea/controllers/admin/permissions.py:90 +#: kallithea/controllers/admin/permissions.py:92 #: kallithea/controllers/admin/permissions.py:95 #: kallithea/controllers/admin/permissions.py:98 #: kallithea/controllers/admin/permissions.py:101 -#: kallithea/templates/admin/auth/auth_settings.html:40 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:43 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:121 +msgid "Disabled" +msgstr "停用" + +#: kallithea/controllers/admin/permissions.py:78 +msgid "Allowed with manual account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:80 +msgid "Allowed with automatic account activation" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:83 kallithea/model/db.py:1751 +msgid "Manual activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:84 kallithea/model/db.py:1752 +msgid "Automatic activation of external account" +msgstr "" + +#: kallithea/controllers/admin/permissions.py:88 +#: kallithea/controllers/admin/permissions.py:91 +#: kallithea/controllers/admin/permissions.py:96 +#: kallithea/controllers/admin/permissions.py:99 +#: kallithea/controllers/admin/permissions.py:102 +#: kallithea/templates/admin/auth/auth_settings.html:42 +#: kallithea/templates/base/root.html:42 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:130 +#: kallithea/tests/data/templates/base/root.html.py:119 msgid "Enabled" msgstr "啟用" -#: kallithea/controllers/admin/permissions.py:124 +#: kallithea/controllers/admin/permissions.py:125 msgid "Global permissions updated successfully" msgstr "" -#: kallithea/controllers/admin/permissions.py:139 +#: kallithea/controllers/admin/permissions.py:140 msgid "Error occurred during update of permissions" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:188 +#: kallithea/controllers/admin/repo_groups.py:180 #, python-format msgid "Error occurred during creation of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:193 +#: kallithea/controllers/admin/repo_groups.py:185 #, python-format msgid "Created repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:250 +#: kallithea/controllers/admin/repo_groups.py:232 #, python-format msgid "Updated repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:266 +#: kallithea/controllers/admin/repo_groups.py:248 #, python-format msgid "Error occurred during update of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:284 +#: kallithea/controllers/admin/repo_groups.py:258 #, python-format msgid "This group contains %s repositories and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:291 +#: kallithea/controllers/admin/repo_groups.py:265 #, python-format msgid "This group contains %s subgroups and cannot be deleted" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:297 +#: kallithea/controllers/admin/repo_groups.py:271 #, python-format msgid "Removed repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:302 +#: kallithea/controllers/admin/repo_groups.py:276 #, python-format msgid "Error occurred during deletion of repository group %s" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:405 -#: kallithea/controllers/admin/repo_groups.py:440 -#: kallithea/controllers/admin/user_groups.py:340 +#: kallithea/controllers/admin/repo_groups.py:361 +#: kallithea/controllers/admin/repo_groups.py:391 +#: kallithea/controllers/admin/user_groups.py:305 msgid "Cannot revoke permission for yourself as admin" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:420 +#: kallithea/controllers/admin/repo_groups.py:376 msgid "Repository group permissions updated" msgstr "" -#: kallithea/controllers/admin/repo_groups.py:457 -#: kallithea/controllers/admin/repos.py:398 -#: kallithea/controllers/admin/user_groups.py:352 +#: kallithea/controllers/admin/repo_groups.py:408 +#: kallithea/controllers/admin/repos.py:362 +#: kallithea/controllers/admin/user_groups.py:317 msgid "An error occurred during revoking of permission" msgstr "" -#: kallithea/controllers/admin/repos.py:152 +#: kallithea/controllers/admin/repos.py:138 #, python-format msgid "Error creating repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:213 +#: kallithea/controllers/admin/repos.py:198 #, python-format msgid "Created repository %s from %s" msgstr "" -#: kallithea/controllers/admin/repos.py:222 +#: kallithea/controllers/admin/repos.py:207 #, python-format msgid "Forked repository %s as %s" msgstr "" -#: kallithea/controllers/admin/repos.py:225 +#: kallithea/controllers/admin/repos.py:210 #, python-format msgid "Created repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:262 +#: kallithea/controllers/admin/repos.py:239 #, python-format msgid "Repository %s updated successfully" msgstr "版本庫 %s 更新完成" -#: kallithea/controllers/admin/repos.py:283 +#: kallithea/controllers/admin/repos.py:260 #, python-format msgid "Error occurred during update of repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:310 +#: kallithea/controllers/admin/repos.py:278 #, python-format msgid "Detached %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:313 +#: kallithea/controllers/admin/repos.py:281 #, python-format msgid "Deleted %s forks" msgstr "" -#: kallithea/controllers/admin/repos.py:318 +#: kallithea/controllers/admin/repos.py:286 #, python-format msgid "Deleted repository %s" msgstr "" -#: kallithea/controllers/admin/repos.py:321 +#: kallithea/controllers/admin/repos.py:289 #, python-format msgid "Cannot delete repository %s which still has forks" msgstr "" -#: kallithea/controllers/admin/repos.py:326 +#: kallithea/controllers/admin/repos.py:294 #, python-format msgid "An error occurred during deletion of %s" msgstr "" -#: kallithea/controllers/admin/repos.py:374 +#: kallithea/controllers/admin/repos.py:338 msgid "Repository permissions updated" msgstr "" -#: kallithea/controllers/admin/repos.py:430 -msgid "An error occurred during creation of field" -msgstr "" - -#: kallithea/controllers/admin/repos.py:444 +#: kallithea/controllers/admin/repos.py:391 +#, python-format +msgid "Field validation error: %s" +msgstr "" + +#: kallithea/controllers/admin/repos.py:394 +#, python-format +msgid "An error occurred during creation of field: %r" +msgstr "" + +#: kallithea/controllers/admin/repos.py:405 msgid "An error occurred during removal of field" msgstr "" -#: kallithea/controllers/admin/repos.py:460 +#: kallithea/controllers/admin/repos.py:419 msgid "-- Not a fork --" msgstr "" -#: kallithea/controllers/admin/repos.py:491 +#: kallithea/controllers/admin/repos.py:450 msgid "Updated repository visibility in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:495 +#: kallithea/controllers/admin/repos.py:454 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: kallithea/controllers/admin/repos.py:512 +#: kallithea/controllers/admin/repos.py:471 msgid "Nothing" msgstr "" -#: kallithea/controllers/admin/repos.py:514 +#: kallithea/controllers/admin/repos.py:473 #, python-format msgid "Marked repository %s as fork of %s" msgstr "" +#: kallithea/controllers/admin/repos.py:480 +msgid "An error occurred during this operation" +msgstr "" + +#: kallithea/controllers/admin/repos.py:496 +#: kallithea/controllers/admin/repos.py:517 +msgid "Repository has been locked" +msgstr "儲存所已被鎖定" + +#: kallithea/controllers/admin/repos.py:499 +#: kallithea/controllers/admin/repos.py:514 +msgid "Repository has been unlocked" +msgstr "儲存所已打開" + +#: kallithea/controllers/admin/repos.py:502 #: kallithea/controllers/admin/repos.py:521 -msgid "An error occurred during this operation" +msgid "An error occurred during unlocking" +msgstr "" + +#: kallithea/controllers/admin/repos.py:533 +msgid "Cache invalidation successful" msgstr "" #: kallithea/controllers/admin/repos.py:537 -#: kallithea/controllers/admin/repos.py:564 -msgid "Repository has been locked" -msgstr "儲存所已被鎖定" - -#: kallithea/controllers/admin/repos.py:540 -#: kallithea/controllers/admin/repos.py:561 -msgid "Repository has been unlocked" -msgstr "儲存所已打開" - -#: kallithea/controllers/admin/repos.py:543 -#: kallithea/controllers/admin/repos.py:568 -msgid "An error occurred during unlocking" -msgstr "" - -#: kallithea/controllers/admin/repos.py:582 -msgid "Cache invalidation successful" -msgstr "" - -#: kallithea/controllers/admin/repos.py:586 msgid "An error occurred during cache invalidation" msgstr "" -#: kallithea/controllers/admin/repos.py:601 +#: kallithea/controllers/admin/repos.py:550 msgid "Pulled from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:604 +#: kallithea/controllers/admin/repos.py:553 msgid "An error occurred during pull from remote location" msgstr "" -#: kallithea/controllers/admin/repos.py:637 +#: kallithea/controllers/admin/repos.py:584 msgid "An error occurred during deletion of repository stats" msgstr "" -#: kallithea/controllers/admin/settings.py:170 +#: kallithea/controllers/admin/settings.py:135 msgid "Updated VCS settings" msgstr "" +#: kallithea/controllers/admin/settings.py:139 +#: kallithea/model/validators.py:426 +msgid "" +"Unable to activate hgsubversion support. The \"hgsubversion\" library is " +"missing" +msgstr "" + +#: kallithea/controllers/admin/settings.py:145 +#: kallithea/controllers/admin/settings.py:234 +msgid "Error occurred while updating application settings" +msgstr "" + #: kallithea/controllers/admin/settings.py:174 -msgid "" -"Unable to activate hgsubversion support. The \"hgsubversion\" library is " -"missing" -msgstr "" - -#: kallithea/controllers/admin/settings.py:180 -#: kallithea/controllers/admin/settings.py:284 -msgid "Error occurred while updating application settings" -msgstr "" - -#: kallithea/controllers/admin/settings.py:211 #, python-format msgid "Repositories successfully rescanned. Added: %s. Removed: %s." msgstr "" -#: kallithea/controllers/admin/settings.py:226 +#: kallithea/controllers/admin/settings.py:189 #, fuzzy, python-format #| msgid "Invalidate Repository Cache" msgid "Invalidated %s repositories" msgstr "確認廢止版本庫快取" -#: kallithea/controllers/admin/settings.py:280 +#: kallithea/controllers/admin/settings.py:230 msgid "Updated application settings" msgstr "更新應用設定" -#: kallithea/controllers/admin/settings.py:337 +#: kallithea/controllers/admin/settings.py:283 msgid "Updated visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:342 +#: kallithea/controllers/admin/settings.py:288 msgid "Error occurred during updating visualisation settings" msgstr "" -#: kallithea/controllers/admin/settings.py:368 +#: kallithea/controllers/admin/settings.py:312 msgid "Please enter email address" msgstr "" -#: kallithea/controllers/admin/settings.py:383 +#: kallithea/controllers/admin/settings.py:327 msgid "Send email task created" msgstr "" -#: kallithea/controllers/admin/settings.py:414 +#: kallithea/controllers/admin/settings.py:356 msgid "Added new hook" msgstr "新增hook" -#: kallithea/controllers/admin/settings.py:428 +#: kallithea/controllers/admin/settings.py:370 msgid "Updated hooks" msgstr "更新hook" -#: kallithea/controllers/admin/settings.py:432 +#: kallithea/controllers/admin/settings.py:374 msgid "Error occurred during hook creation" msgstr "" -#: kallithea/controllers/admin/settings.py:458 +#: kallithea/controllers/admin/settings.py:398 msgid "Whoosh reindex task scheduled" msgstr "Whoosh 重新索引工作排程" -#: kallithea/controllers/admin/user_groups.py:150 +#: kallithea/controllers/admin/user_groups.py:145 #, python-format msgid "Created user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:163 +#: kallithea/controllers/admin/user_groups.py:158 #, python-format msgid "Error occurred during creation of user group %s" msgstr "" -#: kallithea/controllers/admin/user_groups.py:201 +#: kallithea/controllers/admin/user_groups.py:186 #, python-format msgid "Updated user group %s" msgstr "" +#: kallithea/controllers/admin/user_groups.py:208 +#, python-format +msgid "Error occurred during update of user group %s" +msgstr "" + +#: kallithea/controllers/admin/user_groups.py:219 +msgid "Successfully deleted user group" +msgstr "" + #: kallithea/controllers/admin/user_groups.py:224 -#, python-format -msgid "Error occurred during update of user group %s" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:242 -msgid "Successfully deleted user group" -msgstr "" - -#: kallithea/controllers/admin/user_groups.py:247 msgid "An error occurred during deletion of user group" msgstr "" -#: kallithea/controllers/admin/user_groups.py:314 +#: kallithea/controllers/admin/user_groups.py:284 msgid "Target group cannot be the same" msgstr "" -#: kallithea/controllers/admin/user_groups.py:320 +#: kallithea/controllers/admin/user_groups.py:290 msgid "User group permissions updated" msgstr "" -#: kallithea/controllers/admin/user_groups.py:440 -#: kallithea/controllers/admin/users.py:384 +#: kallithea/controllers/admin/user_groups.py:401 +#: kallithea/controllers/admin/users.py:342 msgid "Updated permissions" msgstr "" -#: kallithea/controllers/admin/user_groups.py:444 -#: kallithea/controllers/admin/users.py:388 +#: kallithea/controllers/admin/user_groups.py:405 +#: kallithea/controllers/admin/users.py:346 msgid "An error occurred during permissions saving" msgstr "" -#: kallithea/controllers/admin/users.py:134 +#: kallithea/controllers/admin/users.py:125 #, python-format msgid "Created user %s" msgstr "" -#: kallithea/controllers/admin/users.py:149 +#: kallithea/controllers/admin/users.py:140 #, python-format msgid "Error occurred during creation of user %s" msgstr "" -#: kallithea/controllers/admin/users.py:182 +#: kallithea/controllers/admin/users.py:164 msgid "User updated successfully" msgstr "使用者更新完成" -#: kallithea/controllers/admin/users.py:218 +#: kallithea/controllers/admin/users.py:192 msgid "Successfully deleted user" msgstr "" -#: kallithea/controllers/admin/users.py:223 +#: kallithea/controllers/admin/users.py:197 msgid "An error occurred during deletion of user" msgstr "" -#: kallithea/controllers/admin/users.py:236 +#: kallithea/controllers/admin/users.py:205 msgid "The default user cannot be edited" msgstr "" -#: kallithea/controllers/admin/users.py:463 +#: kallithea/controllers/admin/users.py:414 #, python-format msgid "Added IP address %s to user whitelist" msgstr "" -#: kallithea/controllers/admin/users.py:469 +#: kallithea/controllers/admin/users.py:420 msgid "An error occurred while adding IP address" msgstr "" -#: kallithea/controllers/admin/users.py:483 +#: kallithea/controllers/admin/users.py:432 msgid "Removed IP address from user whitelist" msgstr "" -#: kallithea/lib/auth.py:744 +#: kallithea/lib/auth.py:777 #, python-format msgid "IP %s not allowed" msgstr "" -#: kallithea/lib/auth.py:757 -msgid "Invalid API key" -msgstr "" - -#: kallithea/lib/auth.py:785 -msgid "CSRF token leak has been detected - all form tokens have been expired" -msgstr "" - -#: kallithea/lib/auth.py:832 +#: kallithea/lib/auth.py:829 msgid "You need to be a registered user to perform this action" msgstr "您必須是註冊使用者才能執行這個動作" -#: kallithea/lib/auth.py:864 +#: kallithea/lib/auth.py:857 msgid "You need to be signed in to view this page" msgstr "您必須登入後才能瀏覽這個頁面" -#: kallithea/lib/base.py:490 +#: kallithea/lib/base.py:449 +msgid "Invalid API key" +msgstr "" + +#: kallithea/lib/base.py:508 +msgid "CSRF token leak has been detected - all form tokens have been expired" +msgstr "" + +#: kallithea/lib/base.py:591 msgid "Repository not found in the filesystem" msgstr "" -#: kallithea/lib/base.py:516 +#: kallithea/lib/base.py:617 #, python-format msgid "Changeset for %s %s not found in %s" msgstr "" -#: kallithea/lib/diffs.py:66 +#: kallithea/lib/diffs.py:68 msgid "Binary file" msgstr "" -#: kallithea/lib/diffs.py:82 +#: kallithea/lib/diffs.py:89 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: kallithea/lib/diffs.py:92 +#: kallithea/lib/diffs.py:99 msgid "No changes detected" msgstr "尚未有任何變更" -#: kallithea/lib/helpers.py:610 +#: kallithea/lib/helpers.py:600 #, python-format msgid "Deleted branch: %s" msgstr "" -#: kallithea/lib/helpers.py:612 +#: kallithea/lib/helpers.py:602 #, python-format msgid "Created tag: %s" msgstr "" -#: kallithea/lib/helpers.py:623 +#: kallithea/lib/helpers.py:613 #, fuzzy, python-format #| msgid "Set changeset status" msgid "Changeset %s not found" msgstr "尚未有任何變更" -#: kallithea/lib/helpers.py:672 +#: kallithea/lib/helpers.py:662 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: kallithea/lib/helpers.py:678 +#: kallithea/lib/helpers.py:668 msgid "Compare view" msgstr "" -#: kallithea/lib/helpers.py:697 +#: kallithea/lib/helpers.py:687 msgid "and" msgstr "和" -#: kallithea/lib/helpers.py:698 +#: kallithea/lib/helpers.py:688 #, python-format msgid "%s more" msgstr "" -#: kallithea/lib/helpers.py:699 kallithea/templates/changelog/changelog.html:44 +#: kallithea/lib/helpers.py:689 kallithea/templates/changelog/changelog.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:132 msgid "revisions" msgstr "修訂" -#: kallithea/lib/helpers.py:723 +#: kallithea/lib/helpers.py:713 #, python-format msgid "Fork name %s" msgstr "分支名稱 %s" -#: kallithea/lib/helpers.py:743 +#: kallithea/lib/helpers.py:734 #, python-format msgid "Pull request %s" msgstr "提取要求 %s" -#: kallithea/lib/helpers.py:753 +#: kallithea/lib/helpers.py:744 msgid "[deleted] repository" msgstr "" -#: kallithea/lib/helpers.py:755 kallithea/lib/helpers.py:767 +#: kallithea/lib/helpers.py:746 kallithea/lib/helpers.py:758 msgid "[created] repository" msgstr "" -#: kallithea/lib/helpers.py:757 +#: kallithea/lib/helpers.py:748 msgid "[created] repository as fork" msgstr "" -#: kallithea/lib/helpers.py:759 kallithea/lib/helpers.py:769 +#: kallithea/lib/helpers.py:750 kallithea/lib/helpers.py:760 msgid "[forked] repository" msgstr "" -#: kallithea/lib/helpers.py:761 kallithea/lib/helpers.py:771 +#: kallithea/lib/helpers.py:752 kallithea/lib/helpers.py:762 msgid "[updated] repository" msgstr "" -#: kallithea/lib/helpers.py:763 +#: kallithea/lib/helpers.py:754 msgid "[downloaded] archive from repository" msgstr "" -#: kallithea/lib/helpers.py:765 +#: kallithea/lib/helpers.py:756 msgid "[delete] repository" msgstr "" -#: kallithea/lib/helpers.py:773 +#: kallithea/lib/helpers.py:764 msgid "[created] user" msgstr "" -#: kallithea/lib/helpers.py:775 +#: kallithea/lib/helpers.py:766 msgid "[updated] user" msgstr "" -#: kallithea/lib/helpers.py:777 +#: kallithea/lib/helpers.py:768 msgid "[created] user group" msgstr "" -#: kallithea/lib/helpers.py:779 +#: kallithea/lib/helpers.py:770 msgid "[updated] user group" msgstr "" -#: kallithea/lib/helpers.py:781 +#: kallithea/lib/helpers.py:772 msgid "[commented] on revision in repository" msgstr "" -#: kallithea/lib/helpers.py:783 +#: kallithea/lib/helpers.py:774 msgid "[commented] on pull request for" msgstr "" -#: kallithea/lib/helpers.py:785 +#: kallithea/lib/helpers.py:776 msgid "[closed] pull request for" msgstr "" -#: kallithea/lib/helpers.py:787 +#: kallithea/lib/helpers.py:778 msgid "[pushed] into" msgstr "" -#: kallithea/lib/helpers.py:789 +#: kallithea/lib/helpers.py:780 msgid "[committed via Kallithea] into repository" msgstr "" -#: kallithea/lib/helpers.py:791 +#: kallithea/lib/helpers.py:782 msgid "[pulled from remote] into repository" msgstr "" -#: kallithea/lib/helpers.py:793 +#: kallithea/lib/helpers.py:784 msgid "[pulled] from" msgstr "" -#: kallithea/lib/helpers.py:795 +#: kallithea/lib/helpers.py:786 msgid "[started following] repository" msgstr "" -#: kallithea/lib/helpers.py:797 +#: kallithea/lib/helpers.py:788 msgid "[stopped following] repository" msgstr "" -#: kallithea/lib/helpers.py:1125 +#: kallithea/lib/helpers.py:913 #, python-format msgid " and %s more" msgstr "" -#: kallithea/lib/helpers.py:1129 -#: kallithea/templates/compare/compare_diff.html:65 -#: kallithea/templates/pullrequests/pullrequest_show.html:326 +#: kallithea/lib/helpers.py:917 +#: kallithea/templates/compare/compare_diff.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:310 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:405 msgid "No files" msgstr "" -#: kallithea/lib/helpers.py:1195 +#: kallithea/lib/helpers.py:942 msgid "new file" msgstr "" -#: kallithea/lib/helpers.py:1198 +#: kallithea/lib/helpers.py:945 msgid "mod" msgstr "" -#: kallithea/lib/helpers.py:1201 +#: kallithea/lib/helpers.py:948 msgid "del" msgstr "" -#: kallithea/lib/helpers.py:1204 +#: kallithea/lib/helpers.py:951 msgid "rename" msgstr "" -#: kallithea/lib/helpers.py:1209 +#: kallithea/lib/helpers.py:956 msgid "chmod" msgstr "" -#: kallithea/lib/helpers.py:1445 +#: kallithea/lib/helpers.py:1230 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -1238,1455 +1298,1136 @@ "repositories" msgstr "" -#: kallithea/lib/utils2.py:415 +#: kallithea/lib/utils2.py:387 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "" -#: kallithea/lib/utils2.py:416 +#: kallithea/lib/utils2.py:388 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "" -#: kallithea/lib/utils2.py:417 +#: kallithea/lib/utils2.py:389 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "" -#: kallithea/lib/utils2.py:418 +#: kallithea/lib/utils2.py:390 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "" -#: kallithea/lib/utils2.py:419 +#: kallithea/lib/utils2.py:391 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "" -#: kallithea/lib/utils2.py:420 +#: kallithea/lib/utils2.py:392 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "" -#: kallithea/lib/utils2.py:436 +#: kallithea/lib/utils2.py:408 #, python-format msgid "in %s" msgstr "" -#: kallithea/lib/utils2.py:438 +#: kallithea/lib/utils2.py:410 #, python-format msgid "%s ago" msgstr "" -#: kallithea/lib/utils2.py:440 +#: kallithea/lib/utils2.py:412 #, python-format msgid "in %s and %s" msgstr "" -#: kallithea/lib/utils2.py:443 +#: kallithea/lib/utils2.py:415 #, python-format msgid "%s and %s ago" msgstr "" -#: kallithea/lib/utils2.py:446 +#: kallithea/lib/utils2.py:418 msgid "just now" msgstr "現在" -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1163 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1303 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1388 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1408 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1454 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1511 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1572 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1622 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1649 -msgid "Repository no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1183 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1304 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1389 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1409 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1455 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1512 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1573 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1650 -msgid "Repository read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1184 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1305 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1390 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1410 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1456 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1513 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1574 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1651 -msgid "Repository write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1185 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1306 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1391 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1411 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1457 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1514 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1515 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1575 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1652 -msgid "Repository admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1187 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1308 -msgid "Repository Group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1188 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1309 -msgid "Repository Group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1189 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1310 -msgid "Repository Group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1190 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1311 -msgid "Repository Group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1192 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1313 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1398 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1406 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1452 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1509 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1510 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1570 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1620 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1647 kallithea/model/db.py:1666 -msgid "Kallithea Administrator" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1193 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1314 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1399 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1429 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1475 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1532 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1554 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1593 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1643 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1670 -msgid "Repository creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1194 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1315 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1400 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1430 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1476 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1533 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1534 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1555 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1594 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1644 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1671 -msgid "Repository creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1195 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1316 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1401 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1432 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1478 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1535 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1557 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1596 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1648 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1675 -msgid "Repository forking disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1196 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1317 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1402 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1433 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1479 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1536 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1537 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1558 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1597 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1649 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1676 -msgid "Repository forking enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1197 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1318 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1403 -msgid "Register disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1198 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1319 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1404 -msgid "Register new user with Kallithea with manual activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1201 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1322 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1407 -msgid "Register new user with Kallithea with auto activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1650 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1763 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1838 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1934 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1980 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2040 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2062 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2101 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2154 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2200 -msgid "Not Reviewed" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1764 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1839 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1935 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1981 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2041 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2063 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2102 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2155 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2201 kallithea/model/db.py:2239 -msgid "Approved" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1765 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1840 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1936 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1982 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2042 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2064 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2103 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2156 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2202 kallithea/model/db.py:2240 -msgid "Rejected" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: kallithea/lib/dbmigrate/schema/db_1_5_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_1_5_2.py:1766 -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1841 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1937 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1983 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:2043 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:2044 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:2065 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:2104 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:2157 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:2203 -msgid "Under Review" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1252 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1270 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1300 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1357 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1358 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1379 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1471 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1498 kallithea/model/db.py:1515 -msgid "top level" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1393 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1413 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1459 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1516 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1577 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1627 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1654 -msgid "Repository group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1394 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1414 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1460 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1517 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1578 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1628 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1655 -msgid "Repository group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1395 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1415 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1461 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1518 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1579 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1629 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1656 -msgid "Repository group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_6_0.py:1396 -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1416 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1462 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1519 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1520 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1580 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1630 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1657 -msgid "Repository group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1418 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1464 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1521 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1543 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1582 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1632 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1659 -msgid "User group no access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1419 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1465 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1522 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1544 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1583 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1633 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1660 -msgid "User group read access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1420 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1466 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1523 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1545 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1584 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1634 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1661 -msgid "User group write access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1421 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1467 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1524 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1525 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1546 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1585 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1635 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1662 -msgid "User group admin access" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1423 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1469 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1526 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1548 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1587 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1637 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1664 -msgid "Repository Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1424 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1470 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1527 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1528 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1549 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1588 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1638 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1665 -msgid "Repository Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1426 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1472 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1529 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1551 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1590 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1640 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1667 -msgid "User Group creation disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1427 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1473 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1530 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1531 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1552 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1591 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1641 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1668 -msgid "User Group creation enabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1435 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1481 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1538 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1560 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1599 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1651 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1678 kallithea/model/db.py:1698 -msgid "Registration disabled" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1436 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1482 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1539 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1561 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1600 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1652 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1679 -msgid "User Registration with manual account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_1_7_0.py:1437 -#: kallithea/lib/dbmigrate/schema/db_1_8_0.py:1483 -#: kallithea/lib/dbmigrate/schema/db_2_0_0.py:1540 -#: kallithea/lib/dbmigrate/schema/db_2_0_1.py:1541 -#: kallithea/lib/dbmigrate/schema/db_2_0_2.py:1562 -#: kallithea/lib/dbmigrate/schema/db_2_1_0.py:1601 -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1653 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1680 -msgid "User Registration with automatic account activation" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1645 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1672 kallithea/model/db.py:1692 -msgid "Repository creation enabled with write permission to a repository group" -msgstr "" - -#: kallithea/lib/dbmigrate/schema/db_2_2_0.py:1646 -#: kallithea/lib/dbmigrate/schema/db_2_2_3.py:1673 kallithea/model/db.py:1693 -msgid "Repository creation disabled with write permission to a repository group" -msgstr "" - -#: kallithea/model/comment.py:72 +#: kallithea/model/comment.py:68 #, python-format msgid "on line %s" msgstr "" -#: kallithea/model/comment.py:217 kallithea/model/pull_request.py:169 +#: kallithea/model/comment.py:221 kallithea/model/pull_request.py:117 msgid "[Mention]" msgstr "" -#: kallithea/model/db.py:1668 +#: kallithea/model/db.py:1574 +msgid "top level" +msgstr "" + +#: kallithea/model/db.py:1715 +msgid "Kallithea Administrator" +msgstr "" + +#: kallithea/model/db.py:1717 msgid "Default user has no access to new repositories" msgstr "" -#: kallithea/model/db.py:1669 +#: kallithea/model/db.py:1718 msgid "Default user has read access to new repositories" msgstr "" -#: kallithea/model/db.py:1670 +#: kallithea/model/db.py:1719 msgid "Default user has write access to new repositories" msgstr "" -#: kallithea/model/db.py:1671 +#: kallithea/model/db.py:1720 msgid "Default user has admin access to new repositories" msgstr "" -#: kallithea/model/db.py:1673 +#: kallithea/model/db.py:1722 msgid "Default user has no access to new repository groups" msgstr "" -#: kallithea/model/db.py:1674 +#: kallithea/model/db.py:1723 msgid "Default user has read access to new repository groups" msgstr "" -#: kallithea/model/db.py:1675 +#: kallithea/model/db.py:1724 msgid "Default user has write access to new repository groups" msgstr "" -#: kallithea/model/db.py:1676 +#: kallithea/model/db.py:1725 msgid "Default user has admin access to new repository groups" msgstr "" -#: kallithea/model/db.py:1678 +#: kallithea/model/db.py:1727 msgid "Default user has no access to new user groups" msgstr "" -#: kallithea/model/db.py:1679 +#: kallithea/model/db.py:1728 msgid "Default user has read access to new user groups" msgstr "" -#: kallithea/model/db.py:1680 +#: kallithea/model/db.py:1729 msgid "Default user has write access to new user groups" msgstr "" -#: kallithea/model/db.py:1681 +#: kallithea/model/db.py:1730 msgid "Default user has admin access to new user groups" msgstr "" -#: kallithea/model/db.py:1683 +#: kallithea/model/db.py:1732 msgid "Only admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1684 +#: kallithea/model/db.py:1733 msgid "Non-admins can create repository groups" msgstr "" -#: kallithea/model/db.py:1686 +#: kallithea/model/db.py:1735 msgid "Only admins can create user groups" msgstr "" -#: kallithea/model/db.py:1687 +#: kallithea/model/db.py:1736 msgid "Non-admins can create user groups" msgstr "" -#: kallithea/model/db.py:1689 +#: kallithea/model/db.py:1738 msgid "Only admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1690 +#: kallithea/model/db.py:1739 msgid "Non-admins can create top level repositories" msgstr "" -#: kallithea/model/db.py:1695 +#: kallithea/model/db.py:1741 +msgid "Repository creation enabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1742 +msgid "Repository creation disabled with write permission to a repository group" +msgstr "" + +#: kallithea/model/db.py:1744 msgid "Only admins can fork repositories" msgstr "祗有管理者才能分歧版本庫" -#: kallithea/model/db.py:1696 +#: kallithea/model/db.py:1745 #, fuzzy -#| msgid "Non-admins can can fork repositories" msgid "Non-admins can fork repositories" -msgstr "非管理者可以建立分歧版本庫" - -#: kallithea/model/db.py:1699 +msgstr "建立版本庫" + +#: kallithea/model/db.py:1747 +msgid "Registration disabled" +msgstr "" + +#: kallithea/model/db.py:1748 msgid "User registration with manual account activation" msgstr "" -#: kallithea/model/db.py:1700 +#: kallithea/model/db.py:1749 msgid "User registration with automatic account activation" msgstr "" -#: kallithea/model/db.py:2238 +#: kallithea/model/db.py:2276 msgid "Not reviewed" msgstr "未審核" -#: kallithea/model/db.py:2241 +#: kallithea/model/db.py:2277 msgid "Under review" msgstr "審核中" -#: kallithea/model/forms.py:57 +#: kallithea/model/db.py:2278 +msgid "Not approved" +msgstr "" + +#: kallithea/model/db.py:2279 +msgid "Approved" +msgstr "" + +#: kallithea/model/forms.py:58 msgid "Please enter a login" msgstr "請登入" -#: kallithea/model/forms.py:58 +#: kallithea/model/forms.py:59 #, python-format msgid "Enter a value %(min)i characters long or more" msgstr "" -#: kallithea/model/forms.py:66 +#: kallithea/model/forms.py:67 msgid "Please enter a password" msgstr "請輸入密碼" -#: kallithea/model/forms.py:67 +#: kallithea/model/forms.py:68 #, python-format msgid "Enter %(min)i characters or more" msgstr "" -#: kallithea/model/forms.py:160 +#: kallithea/model/forms.py:167 msgid "Name must not contain only digits" msgstr "" +#: kallithea/model/notification.py:240 +#, python-format +msgid "%(user)s commented on changeset %(age)s" +msgstr "" + +#: kallithea/model/notification.py:241 +#, python-format +msgid "%(user)s sent message %(age)s" +msgstr "" + +#: kallithea/model/notification.py:242 +#, python-format +msgid "%(user)s mentioned you %(age)s" +msgstr "" + +#: kallithea/model/notification.py:243 +#, python-format +msgid "%(user)s registered in Kallithea %(age)s" +msgstr "" + +#: kallithea/model/notification.py:244 +#, python-format +msgid "%(user)s opened new pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:245 +#, python-format +msgid "%(user)s commented on pull request %(age)s" +msgstr "" + +#: kallithea/model/notification.py:252 +#, python-format +msgid "%(user)s commented on changeset at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:253 +#, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: kallithea/model/notification.py:254 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + #: kallithea/model/notification.py:255 #, python-format -msgid "%(user)s commented on changeset %(age)s" +msgid "%(user)s registered in Kallithea at %(when)s" msgstr "" #: kallithea/model/notification.py:256 #, python-format -msgid "%(user)s sent message %(age)s" +msgid "%(user)s opened new pull request at %(when)s" msgstr "" #: kallithea/model/notification.py:257 #, python-format -msgid "%(user)s mentioned you %(age)s" -msgstr "" - -#: kallithea/model/notification.py:258 -#, python-format -msgid "%(user)s registered in Kallithea %(age)s" -msgstr "" - -#: kallithea/model/notification.py:259 -#, python-format -msgid "%(user)s opened new pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:260 -#, python-format -msgid "%(user)s commented on pull request %(age)s" -msgstr "" - -#: kallithea/model/notification.py:267 -#, python-format -msgid "%(user)s commented on changeset at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:268 -#, python-format -msgid "%(user)s sent message at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:269 -#, python-format -msgid "%(user)s mentioned you at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:270 -#, python-format -msgid "%(user)s registered in Kallithea at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:271 -#, python-format -msgid "%(user)s opened new pull request at %(when)s" -msgstr "" - -#: kallithea/model/notification.py:272 -#, python-format msgid "%(user)s commented on pull request at %(when)s" msgstr "" -#: kallithea/model/notification.py:303 -#, python-format -msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" -msgstr "" - -#: kallithea/model/notification.py:306 +#: kallithea/model/notification.py:288 +#, python-format +msgid "" +"[Comment] %(repo_name)s changeset %(short_id)s \"%(message_short)s\" on " +"%(branch)s" +msgstr "" + +#: kallithea/model/notification.py:291 #, python-format msgid "New user %(new_username)s registered" msgstr "" -#: kallithea/model/notification.py:308 -#, python-format -msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:309 -#, python-format -msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" -msgstr "" - -#: kallithea/model/notification.py:322 +#: kallithea/model/notification.py:293 +#, python-format +msgid "" +"[Review] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:294 +#, python-format +msgid "" +"[Comment] %(repo_name)s PR %(pr_nice_id)s \"%(pr_title_short)s\" from " +"%(pr_source_branch)s by %(pr_owner_username)s" +msgstr "" + +#: kallithea/model/notification.py:307 msgid "Closing" msgstr "關閉中" -#: kallithea/model/pull_request.py:137 +#: kallithea/model/pull_request.py:76 #, python-format msgid "%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s" msgstr "" -#: kallithea/model/scm.py:812 +#: kallithea/model/pull_request.py:211 +msgid "Cannot create empty pull request" +msgstr "" + +#: kallithea/model/pull_request.py:219 +#, python-format +msgid "" +"Cannot create pull request - criss cross merge detected, please merge a " +"later %s revision to %s" +msgstr "" + +#: kallithea/model/pull_request.py:247 kallithea/model/pull_request.py:382 +msgid "You are not authorized to create the pull request" +msgstr "" + +#: kallithea/model/pull_request.py:341 +msgid "Missing changesets since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:348 +#, python-format +msgid "New changesets on %s %s since the previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:355 +msgid "Ancestor didn't change - diff since previous iteration:" +msgstr "" + +#: kallithea/model/pull_request.py:362 +#, python-format +msgid "" +"This iteration is based on another %s revision and there is no simple " +"diff." +msgstr "" + +#: kallithea/model/pull_request.py:364 +#, python-format +msgid "No changes found on %s %s since previous iteration." +msgstr "" + +#: kallithea/model/pull_request.py:390 +#, python-format +msgid "Closed, next iteration: %s ." +msgstr "" + +#: kallithea/model/scm.py:697 msgid "latest tip" msgstr "" -#: kallithea/model/user.py:192 +#: kallithea/model/user.py:189 msgid "New user registration" msgstr "" -#: kallithea/model/user.py:256 +#: kallithea/model/user.py:253 msgid "You can't remove this user since it is crucial for the entire application" msgstr "您無法移除這個使用者,因為係供整個應用使用" -#: kallithea/model/user.py:261 +#: kallithea/model/user.py:258 #, python-format msgid "" "User \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories: %s" msgstr "" -#: kallithea/model/user.py:266 +#: kallithea/model/user.py:263 #, python-format msgid "" "User \"%s\" still owns %s repository groups and cannot be removed. Switch" " owners or remove those repository groups: %s" msgstr "" -#: kallithea/model/user.py:273 +#: kallithea/model/user.py:270 #, python-format msgid "" "User \"%s\" still owns %s user groups and cannot be removed. Switch " "owners or remove those user groups: %s" msgstr "" -#: kallithea/model/user.py:360 +#: kallithea/model/user.py:364 msgid "Password reset link" msgstr "" -#: kallithea/model/user.py:408 +#: kallithea/model/user.py:413 msgid "Password reset notification" msgstr "" -#: kallithea/model/user.py:409 +#: kallithea/model/user.py:414 #, python-format msgid "" "The password to your account %s has been changed using password reset " "form." msgstr "" -#: kallithea/model/validators.py:77 kallithea/model/validators.py:78 +#: kallithea/model/validators.py:54 kallithea/model/validators.py:55 msgid "Value cannot be an empty list" msgstr "" -#: kallithea/model/validators.py:95 +#: kallithea/model/validators.py:73 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "" -#: kallithea/model/validators.py:97 +#: kallithea/model/validators.py:75 #, python-format msgid "Username \"%(username)s\" cannot be used" msgstr "" -#: kallithea/model/validators.py:99 +#: kallithea/model/validators.py:77 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with an alphanumeric character or underscore" msgstr "" -#: kallithea/model/validators.py:126 +#: kallithea/model/validators.py:104 msgid "The input is not valid" msgstr "" -#: kallithea/model/validators.py:133 +#: kallithea/model/validators.py:111 #, python-format msgid "Username %(username)s is not valid" msgstr "" -#: kallithea/model/validators.py:152 +#: kallithea/model/validators.py:131 msgid "Invalid user group name" msgstr "" -#: kallithea/model/validators.py:153 +#: kallithea/model/validators.py:132 #, python-format msgid "User group \"%(usergroup)s\" already exists" msgstr "" -#: kallithea/model/validators.py:155 +#: kallithea/model/validators.py:134 msgid "" "user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "使用者羣組名稱可以包括文數字字元、底線、句點或破折號,必須以文數字啟頭" -#: kallithea/model/validators.py:193 +#: kallithea/model/validators.py:174 msgid "Cannot assign this group as parent" msgstr "" -#: kallithea/model/validators.py:194 +#: kallithea/model/validators.py:175 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:196 +#: kallithea/model/validators.py:177 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: kallithea/model/validators.py:254 +#: kallithea/model/validators.py:233 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: kallithea/model/validators.py:269 +#: kallithea/model/validators.py:248 msgid "Invalid old password" msgstr "" -#: kallithea/model/validators.py:285 +#: kallithea/model/validators.py:264 msgid "Passwords do not match" msgstr "密碼不相符" -#: kallithea/model/validators.py:300 +#: kallithea/model/validators.py:279 msgid "Invalid username or password" msgstr "無效的用戶名稱或密碼" -#: kallithea/model/validators.py:331 +#: kallithea/model/validators.py:310 msgid "Token mismatch" msgstr "" -#: kallithea/model/validators.py:345 +#: kallithea/model/validators.py:326 #, python-format msgid "Repository name %(repo)s is not allowed" msgstr "" -#: kallithea/model/validators.py:347 +#: kallithea/model/validators.py:328 #, python-format msgid "Repository named %(repo)s already exists" msgstr "" -#: kallithea/model/validators.py:348 +#: kallithea/model/validators.py:329 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "" -#: kallithea/model/validators.py:350 +#: kallithea/model/validators.py:331 #, python-format msgid "Repository group with name \"%(repo)s\" already exists" msgstr "" -#: kallithea/model/validators.py:465 +#: kallithea/model/validators.py:449 msgid "Invalid repository URL" msgstr "無效的版本庫 URL" -#: kallithea/model/validators.py:466 +#: kallithea/model/validators.py:450 msgid "" "Invalid repository URL. It must be a valid http, https, ssh, svn+http or " "svn+https URL" msgstr "" -#: kallithea/model/validators.py:489 +#: kallithea/model/validators.py:475 msgid "Fork has to be the same type as parent" msgstr "" -#: kallithea/model/validators.py:504 +#: kallithea/model/validators.py:490 msgid "You don't have permissions to create repository in this group" msgstr "" -#: kallithea/model/validators.py:506 +#: kallithea/model/validators.py:492 msgid "no permission to create repository in root location" msgstr "" -#: kallithea/model/validators.py:556 +#: kallithea/model/validators.py:542 msgid "You don't have permissions to create a group in this location" msgstr "" -#: kallithea/model/validators.py:597 +#: kallithea/model/validators.py:582 msgid "This username or user group name is not valid" msgstr "" -#: kallithea/model/validators.py:690 +#: kallithea/model/validators.py:675 msgid "This is not a valid path" msgstr "不是一個有效的路徑" -#: kallithea/model/validators.py:705 +#: kallithea/model/validators.py:692 #, fuzzy msgid "This email address is already in use" msgstr "這個郵件位址已經使用了" -#: kallithea/model/validators.py:725 +#: kallithea/model/validators.py:712 #, python-format msgid "Email address \"%(email)s\" not found" msgstr "" -#: kallithea/model/validators.py:762 +#: kallithea/model/validators.py:749 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "" -#: kallithea/model/validators.py:774 +#: kallithea/model/validators.py:761 msgid "Please enter a valid IPv4 or IPv6 address" msgstr "" -#: kallithea/model/validators.py:775 +#: kallithea/model/validators.py:762 #, python-format msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" -#: kallithea/model/validators.py:808 +#: kallithea/model/validators.py:795 msgid "Key name can only consist of letters, underscore, dash or numbers" msgstr "" -#: kallithea/model/validators.py:822 +#: kallithea/model/validators.py:809 msgid "Filename cannot be inside a directory" msgstr "" -#: kallithea/model/validators.py:838 +#: kallithea/model/validators.py:825 #, python-format msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name" msgstr "" -#: kallithea/templates/about.html:4 kallithea/templates/about.html:17 +#: kallithea/templates/about.html:4 kallithea/templates/about.html:16 msgid "About" msgstr "" -#: kallithea/templates/index.html:5 -msgid "Dashboard" -msgstr "儀表板" - -#: kallithea/templates/index_base.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:3 -#: kallithea/templates/admin/my_account/my_account_watched.html:3 -#: kallithea/templates/admin/repo_groups/repo_groups.html:9 -#: kallithea/templates/admin/repos/repos.html:9 -#: kallithea/templates/admin/user_groups/user_groups.html:9 -#: kallithea/templates/admin/users/users.html:9 -#: kallithea/templates/bookmarks/bookmarks.html:9 -#: kallithea/templates/branches/branches.html:9 -#: kallithea/templates/journal/journal.html:9 -#: kallithea/templates/journal/journal.html:48 -#: kallithea/templates/journal/journal.html:49 -#: kallithea/templates/tags/tags.html:9 -msgid "quick filter..." -msgstr "快速過濾..." - -#: kallithea/templates/index_base.html:6 -msgid "repositories" -msgstr "個版本庫" - -#: kallithea/templates/index_base.html:20 #: kallithea/templates/index_base.html:25 +#: kallithea/templates/index_base.html:30 #: kallithea/templates/admin/repos/repo_add.html:5 #: kallithea/templates/admin/repos/repo_add.html:19 -#: kallithea/templates/admin/repos/repos.html:22 +#: kallithea/templates/admin/repos/repos.html:23 +#: kallithea/tests/data/templates/index_base.html.py:66 +#: kallithea/tests/data/templates/index_base.html.py:78 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:128 +#: kallithea/tests/data/templates/admin/repos/repo_add.html.py:146 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:107 msgid "Add Repository" msgstr "" -#: kallithea/templates/index_base.html:22 #: kallithea/templates/index_base.html:27 +#: kallithea/templates/index_base.html:32 #: kallithea/templates/admin/repo_groups/repo_group_add.html:5 #: kallithea/templates/admin/repo_groups/repo_group_add.html:13 -#: kallithea/templates/admin/repo_groups/repo_groups.html:26 +#: kallithea/templates/admin/repo_groups/repo_groups.html:25 +#: kallithea/tests/data/templates/index_base.html.py:72 +#: kallithea/tests/data/templates/index_base.html.py:84 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:157 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:175 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:107 msgid "Add Repository Group" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:90 msgid "You have admin right to this group, and can edit it" msgstr "" -#: kallithea/templates/index_base.html:32 +#: kallithea/templates/index_base.html:37 +#: kallithea/tests/data/templates/index_base.html.py:92 msgid "Edit Repository Group" msgstr "" -#: kallithea/templates/index_base.html:45 -msgid "Group Name" -msgstr "" - -#: kallithea/templates/index_base.html:46 -#: kallithea/templates/index_base.html:127 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:64 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:17 -#: kallithea/templates/admin/repo_groups/repo_groups.html:47 -#: kallithea/templates/admin/repos/repo_add_base.html:28 -#: kallithea/templates/admin/repos/repo_edit_settings.html:65 -#: kallithea/templates/admin/repos/repos.html:48 -#: kallithea/templates/admin/user_groups/user_group_add.html:40 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:15 -#: kallithea/templates/admin/user_groups/user_groups.html:47 -#: kallithea/templates/admin/users/user_edit_api_keys.html:64 -#: kallithea/templates/email_templates/changeset_comment.html:18 -#: kallithea/templates/email_templates/pull_request.html:12 -#: kallithea/templates/forks/fork.html:38 -#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/templates/index_base.html:47 +#, fuzzy +#| msgid "Repository group" +msgid "Repository Group" +msgstr "版本庫群組" + +#: kallithea/templates/index_base.html:48 +#: kallithea/templates/index_base.html:90 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:59 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:35 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:12 +#: kallithea/templates/admin/repo_groups/repo_groups.html:40 +#: kallithea/templates/admin/repos/repo_add_base.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:52 +#: kallithea/templates/admin/repos/repos.html:39 +#: kallithea/templates/admin/user_groups/user_group_add.html:33 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:10 +#: kallithea/templates/admin/user_groups/user_groups.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:59 +#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/email_templates/pull_request.html:36 +#: kallithea/templates/forks/fork.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:33 #: kallithea/templates/pullrequests/pullrequest_show.html:38 -#: kallithea/templates/pullrequests/pullrequest_show.html:63 -#: kallithea/templates/summary/summary.html:85 +#: kallithea/templates/pullrequests/pullrequest_show.html:58 +#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/index_base.html.py:100 +#: kallithea/tests/data/templates/index_base.html.py:130 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:106 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:117 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:114 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:54 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:114 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:106 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:101 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:95 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:88 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:84 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:119 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:153 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:168 +#: kallithea/tests/data/templates/summary/summary.html.py:147 msgid "Description" msgstr "描述" -#: kallithea/templates/index_base.html:125 -#: kallithea/templates/admin/my_account/my_account_repos.html:46 -#: kallithea/templates/admin/my_account/my_account_watched.html:46 -#: kallithea/templates/admin/repo_groups/repo_groups.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:9 -#: kallithea/templates/admin/repos/repo_edit_settings.html:7 -#: kallithea/templates/admin/repos/repos.html:47 -#: kallithea/templates/admin/user_groups/user_groups.html:46 -#: kallithea/templates/base/perms_summary.html:53 -#: kallithea/templates/bookmarks/bookmarks.html:49 -#: kallithea/templates/bookmarks/bookmarks_data.html:7 -#: kallithea/templates/branches/branches.html:49 -#: kallithea/templates/branches/branches_data.html:7 -#: kallithea/templates/files/files_browser.html:60 -#: kallithea/templates/journal/journal.html:187 -#: kallithea/templates/journal/journal.html:278 -#: kallithea/templates/tags/tags.html:49 -#: kallithea/templates/tags/tags_data.html:7 -msgid "Name" -msgstr "名稱" - -#: kallithea/templates/index_base.html:128 +#: kallithea/templates/index_base.html:85 +#: kallithea/templates/admin/admin_log.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/tests/data/templates/admin/admin_log.html.py:43 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:45 +msgid "Repository" +msgstr "版本庫" + +#: kallithea/templates/index_base.html:92 +#: kallithea/tests/data/templates/index_base.html.py:132 msgid "Last Change" msgstr "" -#: kallithea/templates/index_base.html:130 -#: kallithea/templates/admin/my_account/my_account_repos.html:48 -#: kallithea/templates/admin/my_account/my_account_watched.html:48 -#: kallithea/templates/admin/repos/repos.html:49 -#: kallithea/templates/journal/journal.html:189 -#: kallithea/templates/journal/journal.html:280 +#: kallithea/templates/index_base.html:94 +#: kallithea/templates/admin/my_account/my_account_repos.html:15 +#: kallithea/templates/admin/my_account/my_account_watched.html:15 +#: kallithea/templates/admin/repos/repos.html:41 +#: kallithea/tests/data/templates/index_base.html.py:134 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:36 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:36 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:116 msgid "Tip" msgstr "" -#: kallithea/templates/index_base.html:132 +#: kallithea/templates/index_base.html:95 #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:10 -#: kallithea/templates/admin/repo_groups/repo_groups.html:49 -#: kallithea/templates/admin/repos/repo_edit_settings.html:53 -#: kallithea/templates/admin/repos/repos.html:50 +#: kallithea/templates/admin/repo_groups/repo_groups.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:42 +#: kallithea/templates/admin/repos/repos.html:42 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:8 -#: kallithea/templates/admin/user_groups/user_groups.html:50 +#: kallithea/templates/admin/user_groups/user_groups.html:42 #: kallithea/templates/pullrequests/pullrequest_data.html:16 -#: kallithea/templates/pullrequests/pullrequest_show.html:156 -#: kallithea/templates/pullrequests/pullrequest_show.html:233 -#: kallithea/templates/summary/summary.html:134 +#: kallithea/templates/pullrequests/pullrequest_show.html:135 +#: kallithea/templates/pullrequests/pullrequest_show.html:228 +#: kallithea/templates/summary/summary.html:123 +#: kallithea/tests/data/templates/index_base.html.py:136 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:118 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:118 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:327 +#: kallithea/tests/data/templates/summary/summary.html.py:199 msgid "Owner" msgstr "擁有者" -#: kallithea/templates/index_base.html:140 -#: kallithea/templates/admin/my_account/my_account_repos.html:57 -#: kallithea/templates/admin/my_account/my_account_watched.html:57 -#: kallithea/templates/base/root.html:43 -#: kallithea/templates/bookmarks/bookmarks.html:79 -#: kallithea/templates/branches/branches.html:79 -#: kallithea/templates/journal/journal.html:198 -#: kallithea/templates/journal/journal.html:289 -#: kallithea/templates/tags/tags.html:79 -msgid "Click to sort ascending" -msgstr "" - -#: kallithea/templates/index_base.html:141 -#: kallithea/templates/admin/my_account/my_account_repos.html:58 -#: kallithea/templates/admin/my_account/my_account_watched.html:58 -#: kallithea/templates/base/root.html:44 -#: kallithea/templates/bookmarks/bookmarks.html:80 -#: kallithea/templates/branches/branches.html:80 -#: kallithea/templates/journal/journal.html:199 -#: kallithea/templates/journal/journal.html:290 -#: kallithea/templates/tags/tags.html:80 -msgid "Click to sort descending" -msgstr "" - -#: kallithea/templates/index_base.html:142 -msgid "No repositories found." -msgstr "" - -#: kallithea/templates/index_base.html:143 -#: kallithea/templates/admin/my_account/my_account_repos.html:60 -#: kallithea/templates/admin/my_account/my_account_watched.html:60 -#: kallithea/templates/base/root.html:46 -#: kallithea/templates/bookmarks/bookmarks.html:82 -#: kallithea/templates/branches/branches.html:82 -#: kallithea/templates/journal/journal.html:201 -#: kallithea/templates/journal/journal.html:292 -#: kallithea/templates/tags/tags.html:82 -msgid "Data error." -msgstr "" - -#: kallithea/templates/index_base.html:144 -#: kallithea/templates/admin/my_account/my_account_repos.html:61 -#: kallithea/templates/admin/my_account/my_account_watched.html:61 -#: kallithea/templates/base/base.html:140 kallithea/templates/base/root.html:47 -#: kallithea/templates/bookmarks/bookmarks.html:83 -#: kallithea/templates/branches/branches.html:83 -#: kallithea/templates/journal/journal.html:202 -#: kallithea/templates/journal/journal.html:293 -#: kallithea/templates/tags/tags.html:83 -msgid "Loading..." -msgstr "" - -#: kallithea/templates/login.html:5 kallithea/templates/login.html:15 -#: kallithea/templates/base/base.html:326 +#: kallithea/templates/login.html:5 kallithea/templates/login.html:14 +#: kallithea/templates/base/base.html:393 +#: kallithea/tests/data/templates/login.html.py:64 +#: kallithea/tests/data/templates/login.html.py:106 +#: kallithea/tests/data/templates/base/base.html.py:626 msgid "Log In" msgstr "" -#: kallithea/templates/login.html:13 +#: kallithea/templates/login.html:12 +#: kallithea/tests/data/templates/login.html.py:60 #, python-format msgid "Log In to %s" msgstr "" -#: kallithea/templates/login.html:26 kallithea/templates/register.html:24 +#: kallithea/templates/login.html:23 kallithea/templates/register.html:22 #: kallithea/templates/admin/admin_log.html:5 -#: kallithea/templates/admin/my_account/my_account_profile.html:25 -#: kallithea/templates/admin/users/user_add.html:32 -#: kallithea/templates/admin/users/user_edit_profile.html:24 -#: kallithea/templates/admin/users/users.html:50 -#: kallithea/templates/base/base.html:302 -#: kallithea/templates/pullrequests/pullrequest_show.html:166 +#: kallithea/templates/admin/my_account/my_account_profile.html:18 +#: kallithea/templates/admin/users/user_add.html:27 +#: kallithea/templates/admin/users/user_edit_profile.html:18 +#: kallithea/templates/admin/users/users.html:37 +#: kallithea/templates/base/base.html:377 +#: kallithea/templates/email_templates/registration.html:11 +#: kallithea/templates/pullrequests/pullrequest_show.html:142 +#: kallithea/tests/data/templates/login.html.py:69 +#: kallithea/tests/data/templates/register.html.py:69 +#: kallithea/tests/data/templates/admin/admin_log.html.py:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:60 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:62 +#: kallithea/tests/data/templates/admin/users/users.html.py:109 +#: kallithea/tests/data/templates/base/base.html.py:611 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:259 msgid "Username" msgstr "帳號" -#: kallithea/templates/login.html:33 kallithea/templates/register.html:33 -#: kallithea/templates/admin/my_account/my_account.html:37 -#: kallithea/templates/admin/users/user_add.html:41 -#: kallithea/templates/base/base.html:311 +#: kallithea/templates/login.html:29 kallithea/templates/register.html:29 +#: kallithea/templates/admin/my_account/my_account.html:27 +#: kallithea/templates/admin/users/user_add.html:34 +#: kallithea/templates/base/base.html:381 +#: kallithea/tests/data/templates/login.html.py:73 +#: kallithea/tests/data/templates/register.html.py:73 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:128 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:113 +#: kallithea/tests/data/templates/base/base.html.py:615 msgid "Password" msgstr "密碼" -#: kallithea/templates/login.html:44 -msgid "Remember me" -msgstr "" - -#: kallithea/templates/login.html:53 +#: kallithea/templates/login.html:39 +msgid "Stay logged in after browser restart" +msgstr "" + +#: kallithea/templates/login.html:46 +#: kallithea/tests/data/templates/login.html.py:79 msgid "Forgot your password ?" msgstr "忘記您的密碼?" -#: kallithea/templates/login.html:56 kallithea/templates/base/base.html:322 +#: kallithea/templates/login.html:49 +#: kallithea/tests/data/templates/login.html.py:83 +#: kallithea/tests/data/templates/base/base.html.py:623 msgid "Don't have an account ?" msgstr "沒有帳號?" -#: kallithea/templates/login.html:59 +#: kallithea/templates/login.html:52 +#: kallithea/tests/data/templates/login.html.py:86 msgid "Sign In" msgstr "登入" #: kallithea/templates/password_reset.html:5 +#: kallithea/tests/data/templates/password_reset.html.py:110 msgid "Password Reset" msgstr "" #: kallithea/templates/password_reset.html:12 -#: kallithea/templates/password_reset_confirmation.html:12 +#: kallithea/templates/password_reset_confirmation.html:13 +#: kallithea/tests/data/templates/password_reset.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:56 #, fuzzy, python-format msgid "Reset Your Password to %s" msgstr "" #: kallithea/templates/password_reset.html:14 #: kallithea/templates/password_reset_confirmation.html:5 -#: kallithea/templates/password_reset_confirmation.html:14 +#: kallithea/templates/password_reset_confirmation.html:15 +#: kallithea/tests/data/templates/password_reset.html.py:64 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:60 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:105 #, fuzzy msgid "Reset Your Password" msgstr "忘記您的密碼?" -#: kallithea/templates/password_reset.html:25 +#: kallithea/templates/password_reset.html:21 +#: kallithea/tests/data/templates/password_reset.html.py:69 msgid "Email Address" msgstr "" -#: kallithea/templates/password_reset.html:35 -#: kallithea/templates/register.html:79 +#: kallithea/templates/password_reset.html:29 +#: kallithea/templates/register.html:65 +#: kallithea/tests/data/templates/password_reset.html.py:75 +#: kallithea/tests/data/templates/register.html.py:95 msgid "Captcha" msgstr "" -#: kallithea/templates/password_reset.html:46 +#: kallithea/templates/password_reset.html:39 +#: kallithea/tests/data/templates/password_reset.html.py:80 msgid "Send Password Reset Email" msgstr "" -#: kallithea/templates/password_reset.html:47 +#: kallithea/templates/password_reset.html:44 +#: kallithea/tests/data/templates/password_reset.html.py:82 #, fuzzy msgid "" "A password reset link will be sent to the specified email address if it " "is registered in the system." msgstr "密碼重設連結已郵寄至您的信箱" -#: kallithea/templates/password_reset_confirmation.html:19 +#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:65 #, python-format msgid "You are about to set a new password for the email address %s." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:20 +#: kallithea/templates/password_reset_confirmation.html:21 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:67 msgid "" "Note that you must use the same browser session for this as the one used " "to request the password reset." msgstr "" -#: kallithea/templates/password_reset_confirmation.html:30 +#: kallithea/templates/password_reset_confirmation.html:26 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:73 msgid "Code you received in the email" msgstr "" -#: kallithea/templates/password_reset_confirmation.html:39 +#: kallithea/templates/password_reset_confirmation.html:33 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:77 #, fuzzy msgid "New Password" msgstr "新密碼" -#: kallithea/templates/password_reset_confirmation.html:48 +#: kallithea/templates/password_reset_confirmation.html:40 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:81 #, fuzzy msgid "Confirm New Password" msgstr "新密碼" -#: kallithea/templates/password_reset_confirmation.html:56 +#: kallithea/templates/password_reset_confirmation.html:49 +#: kallithea/tests/data/templates/password_reset_confirmation.html.py:85 msgid "Confirm" msgstr "" -#: kallithea/templates/register.html:5 kallithea/templates/register.html:14 -#: kallithea/templates/register.html:90 +#: kallithea/templates/register.html:5 kallithea/templates/register.html:15 +#: kallithea/templates/register.html:75 +#: kallithea/tests/data/templates/register.html.py:64 +#: kallithea/tests/data/templates/register.html.py:100 +#: kallithea/tests/data/templates/register.html.py:137 msgid "Sign Up" msgstr "登入" -#: kallithea/templates/register.html:12 +#: kallithea/templates/register.html:13 +#: kallithea/tests/data/templates/register.html.py:60 #, python-format msgid "Sign Up to %s" msgstr "" -#: kallithea/templates/register.html:42 +#: kallithea/templates/register.html:36 +#: kallithea/tests/data/templates/register.html.py:77 msgid "Re-enter password" msgstr "確認密碼" -#: kallithea/templates/register.html:51 -#: kallithea/templates/admin/my_account/my_account_profile.html:34 -#: kallithea/templates/admin/users/user_add.html:59 -#: kallithea/templates/admin/users/user_edit_profile.html:78 -#: kallithea/templates/admin/users/users.html:51 +#: kallithea/templates/register.html:43 +#: kallithea/templates/admin/my_account/my_account_profile.html:25 +#: kallithea/templates/admin/users/user_add.html:48 +#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/users/users.html:38 +#: kallithea/tests/data/templates/register.html.py:81 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:64 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:121 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:86 +#: kallithea/tests/data/templates/admin/users/users.html.py:111 msgid "First Name" msgstr "名" -#: kallithea/templates/register.html:60 -#: kallithea/templates/admin/my_account/my_account_profile.html:43 -#: kallithea/templates/admin/users/user_add.html:68 -#: kallithea/templates/admin/users/user_edit_profile.html:87 -#: kallithea/templates/admin/users/users.html:52 +#: kallithea/templates/register.html:50 +#: kallithea/templates/admin/my_account/my_account_profile.html:32 +#: kallithea/templates/admin/users/user_add.html:55 +#: kallithea/templates/admin/users/user_edit_profile.html:67 +#: kallithea/templates/admin/users/users.html:39 +#: kallithea/tests/data/templates/register.html.py:85 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:68 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:125 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:90 +#: kallithea/tests/data/templates/admin/users/users.html.py:113 msgid "Last Name" msgstr "姓" -#: kallithea/templates/register.html:69 -#: kallithea/templates/admin/my_account/my_account_profile.html:52 +#: kallithea/templates/register.html:57 +#: kallithea/templates/admin/my_account/my_account_profile.html:39 #: kallithea/templates/admin/settings/settings.html:31 -#: kallithea/templates/admin/users/user_add.html:77 -#: kallithea/templates/admin/users/user_edit_profile.html:33 +#: kallithea/templates/admin/users/user_add.html:62 +#: kallithea/templates/admin/users/user_edit_profile.html:25 +#: kallithea/templates/email_templates/registration.html:33 +#: kallithea/tests/data/templates/register.html.py:89 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:72 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:132 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:129 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:66 msgid "Email" msgstr "電子郵件" -#: kallithea/templates/register.html:92 +#: kallithea/templates/register.html:77 +#: kallithea/tests/data/templates/register.html.py:104 msgid "Registered accounts are ready to use and need no further action." msgstr "" -#: kallithea/templates/register.html:94 +#: kallithea/templates/register.html:79 +#: kallithea/tests/data/templates/register.html.py:108 msgid "Please wait for an administrator to activate your account." msgstr "" -#: kallithea/templates/switch_to_list.html:10 -#: kallithea/templates/branches/branches_data.html:69 -msgid "There are no branches yet" -msgstr "沒有任何分支" - -#: kallithea/templates/switch_to_list.html:16 -msgid "Closed Branches" -msgstr "" - -#: kallithea/templates/switch_to_list.html:32 -#: kallithea/templates/tags/tags_data.html:44 -msgid "There are no tags yet" -msgstr "沒有任何標籤" - -#: kallithea/templates/switch_to_list.html:45 -#: kallithea/templates/bookmarks/bookmarks_data.html:43 -msgid "There are no bookmarks yet" -msgstr "" - #: kallithea/templates/admin/admin.html:5 #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/base/base.html:59 +#: kallithea/templates/base/base.html:55 +#: kallithea/tests/data/templates/admin/admin.html.py:133 +#: kallithea/tests/data/templates/admin/admin.html.py:155 +#: kallithea/tests/data/templates/base/base.html.py:239 #, fuzzy msgid "Admin Journal" msgstr "管理員日誌" #: kallithea/templates/admin/admin.html:10 +#: kallithea/templates/journal/journal.html:10 +#: kallithea/tests/data/templates/admin/admin.html.py:127 msgid "journal filter..." msgstr "" #: kallithea/templates/admin/admin.html:12 -#: kallithea/templates/journal/journal.html:11 +#: kallithea/templates/journal/journal.html:12 +#: kallithea/tests/data/templates/admin/admin.html.py:131 +#: kallithea/tests/data/templates/journal/journal.html.py:122 #, fuzzy msgid "Filter" msgstr "檔案" #: kallithea/templates/admin/admin.html:13 -#: kallithea/templates/journal/journal.html:12 +#: kallithea/templates/journal/journal.html:13 +#: kallithea/tests/data/templates/admin/admin.html.py:135 +#: kallithea/tests/data/templates/journal/journal.html.py:126 #, fuzzy, python-format msgid "%s Entry" msgid_plural "%s Entries" msgstr[0] "" #: kallithea/templates/admin/admin_log.html:6 -#: kallithea/templates/admin/my_account/my_account_repos.html:50 -#: kallithea/templates/admin/my_account/my_account_watched.html:50 -#: kallithea/templates/admin/repo_groups/repo_groups.html:50 -#: kallithea/templates/admin/repos/repo_edit_fields.html:8 -#: kallithea/templates/admin/repos/repos.html:52 -#: kallithea/templates/admin/user_groups/user_groups.html:51 -#: kallithea/templates/admin/users/users.html:57 -#: kallithea/templates/journal/journal.html:191 -#: kallithea/templates/journal/journal.html:282 +#: kallithea/templates/admin/my_account/my_account_repos.html:16 +#: kallithea/templates/admin/repo_groups/repo_groups.html:43 +#: kallithea/templates/admin/repos/repo_edit_fields.html:9 +#: kallithea/templates/admin/repos/repos.html:44 +#: kallithea/templates/admin/user_groups/user_groups.html:43 +#: kallithea/templates/admin/users/users.html:45 +#: kallithea/tests/data/templates/admin/admin_log.html.py:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:120 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:122 +#: kallithea/tests/data/templates/admin/users/users.html.py:123 msgid "Action" msgstr "動作" -#: kallithea/templates/admin/admin_log.html:7 -#: kallithea/templates/admin/permissions/permissions_globals.html:18 -msgid "Repository" -msgstr "版本庫" - #: kallithea/templates/admin/admin_log.html:8 -#: kallithea/templates/bookmarks/bookmarks.html:51 -#: kallithea/templates/bookmarks/bookmarks_data.html:9 -#: kallithea/templates/branches/branches.html:51 -#: kallithea/templates/branches/branches_data.html:9 -#: kallithea/templates/tags/tags.html:51 -#: kallithea/templates/tags/tags_data.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:45 msgid "Date" msgstr "時間" #: kallithea/templates/admin/admin_log.html:9 +#: kallithea/tests/data/templates/admin/admin_log.html.py:47 msgid "From IP" msgstr "來源IP" -#: kallithea/templates/admin/admin_log.html:63 +#: kallithea/templates/admin/admin_log.html:61 +#: kallithea/tests/data/templates/admin/admin_log.html.py:84 msgid "No actions yet" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:5 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:246 msgid "Authentication Settings" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:11 -#: kallithea/templates/base/base.html:65 +#: kallithea/templates/base/base.html:61 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:228 +#: kallithea/tests/data/templates/base/base.html.py:263 msgid "Authentication" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:28 +#: kallithea/templates/admin/auth/auth_settings.html:27 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:114 msgid "Authentication Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:31 +#: kallithea/templates/admin/auth/auth_settings.html:29 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:116 msgid "Enabled Plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:33 +#: kallithea/templates/admin/auth/auth_settings.html:32 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:120 msgid "" "Comma-separated list of plugins; Kallithea will try user authentication " "in plugin order" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:34 +#: kallithea/templates/admin/auth/auth_settings.html:36 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:122 msgid "Available built-in plugins" msgstr "" -#: kallithea/templates/admin/auth/auth_settings.html:51 +#: kallithea/templates/admin/auth/auth_settings.html:53 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:140 msgid "Plugin" msgstr "" #: kallithea/templates/admin/auth/auth_settings.html:101 -#: kallithea/templates/admin/defaults/defaults.html:82 -#: kallithea/templates/admin/my_account/my_account_password.html:36 -#: kallithea/templates/admin/my_account/my_account_profile.html:60 -#: kallithea/templates/admin/permissions/permissions_globals.html:112 -#: kallithea/templates/admin/repo_groups/repo_group_add.html:69 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:114 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:42 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:101 -#: kallithea/templates/admin/repos/repo_edit_settings.html:127 -#: kallithea/templates/admin/settings/settings_hooks.html:53 -#: kallithea/templates/admin/user_groups/user_group_add.html:57 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:104 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:60 -#: kallithea/templates/admin/users/user_add.html:96 -#: kallithea/templates/admin/users/user_edit_profile.html:113 -#: kallithea/templates/base/default_perms_box.html:64 +#: kallithea/templates/admin/defaults/defaults.html:67 +#: kallithea/templates/admin/my_account/my_account_password.html:30 +#: kallithea/templates/admin/my_account/my_account_profile.html:47 +#: kallithea/templates/admin/permissions/permissions_globals.html:94 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:98 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:35 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:84 +#: kallithea/templates/admin/repos/repo_edit_settings.html:104 +#: kallithea/templates/admin/settings/settings_hooks.html:46 +#: kallithea/templates/admin/user_groups/user_group_add.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:88 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:46 +#: kallithea/templates/admin/users/user_add.html:80 +#: kallithea/templates/admin/users/user_edit_profile.html:89 +#: kallithea/templates/base/default_perms_box.html:56 +#: kallithea/tests/data/templates/admin/auth/auth_settings.html.py:204 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:76 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:115 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:131 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:141 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:102 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:72 msgid "Save" msgstr "儲存" #: kallithea/templates/admin/defaults/defaults.html:5 #: kallithea/templates/admin/defaults/defaults.html:11 -#: kallithea/templates/base/base.html:66 +#: kallithea/templates/base/base.html:62 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:162 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:180 +#: kallithea/tests/data/templates/base/base.html.py:267 #, fuzzy msgid "Repository Defaults" msgstr "個版本庫" -#: kallithea/templates/admin/defaults/defaults.html:33 -#: kallithea/templates/admin/repos/repo_add_base.html:55 -#: kallithea/templates/admin/repos/repo_edit_fields.html:7 +#: kallithea/templates/admin/defaults/defaults.html:27 +#: kallithea/templates/admin/repos/repo_add_base.html:42 +#: kallithea/templates/admin/repos/repo_edit_fields.html:8 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:109 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:72 msgid "Type" msgstr "類型" -#: kallithea/templates/admin/defaults/defaults.html:42 -#: kallithea/templates/admin/repos/repo_add_base.html:73 -#: kallithea/templates/admin/repos/repo_edit_settings.html:75 -#: kallithea/templates/data_table/_dt_elements.html:72 +#: kallithea/templates/admin/defaults/defaults.html:34 +#: kallithea/templates/admin/repos/repo_add_base.html:56 +#: kallithea/templates/admin/repos/repo_edit_settings.html:60 +#: kallithea/templates/data_table/_dt_elements.html:18 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:113 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:84 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:443 msgid "Private repository" msgstr "私有的版本庫" -#: kallithea/templates/admin/defaults/defaults.html:46 -#: kallithea/templates/admin/repos/repo_add_base.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:79 -#: kallithea/templates/forks/fork.html:72 +#: kallithea/templates/admin/defaults/defaults.html:37 +#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_edit_settings.html:63 +#: kallithea/templates/forks/fork.html:61 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:117 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:88 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." msgstr "" -#: kallithea/templates/admin/defaults/defaults.html:53 -#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/templates/admin/defaults/defaults.html:42 +#: kallithea/templates/admin/repos/repo_edit_settings.html:67 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:119 msgid "Enable statistics" msgstr "啟用統計" -#: kallithea/templates/admin/defaults/defaults.html:57 -#: kallithea/templates/admin/repos/repo_edit_settings.html:88 +#: kallithea/templates/admin/defaults/defaults.html:45 +#: kallithea/templates/admin/repos/repo_edit_settings.html:70 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:123 msgid "Enable statistics window on summary page." msgstr "" -#: kallithea/templates/admin/defaults/defaults.html:63 -#: kallithea/templates/admin/repos/repo_edit_settings.html:93 +#: kallithea/templates/admin/defaults/defaults.html:50 +#: kallithea/templates/admin/repos/repo_edit_settings.html:74 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:125 msgid "Enable downloads" msgstr "啟用下載" -#: kallithea/templates/admin/defaults/defaults.html:67 -#: kallithea/templates/admin/repos/repo_edit_settings.html:97 +#: kallithea/templates/admin/defaults/defaults.html:53 +#: kallithea/templates/admin/repos/repo_edit_settings.html:77 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:129 msgid "Enable download menu on summary page." msgstr "" -#: kallithea/templates/admin/defaults/defaults.html:73 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:34 -#: kallithea/templates/admin/repos/repo_edit_settings.html:102 +#: kallithea/templates/admin/defaults/defaults.html:58 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repos/repo_edit_settings.html:81 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:131 msgid "Enable locking" msgstr "" -#: kallithea/templates/admin/defaults/defaults.html:77 -#: kallithea/templates/admin/repos/repo_edit_settings.html:106 +#: kallithea/templates/admin/defaults/defaults.html:61 +#: kallithea/templates/admin/repos/repo_edit_settings.html:84 +#: kallithea/tests/data/templates/admin/defaults/defaults.html.py:135 msgid "Enable lock-by-pulling on repository." msgstr "" @@ -2695,45 +2436,63 @@ msgid "Edit Gist" msgstr "" -#: kallithea/templates/admin/gists/edit.html:36 +#: kallithea/templates/admin/gists/edit.html:35 #, python-format msgid "" "Gist was update since you started editing. Copy your changes and click " "%(here)s to reload new version." msgstr "" -#: kallithea/templates/admin/gists/edit.html:55 -#: kallithea/templates/admin/gists/new.html:39 +#: kallithea/templates/admin/gists/edit.html:51 +#: kallithea/templates/admin/gists/new.html:35 +#: kallithea/tests/data/templates/admin/gists/new.html.py:203 msgid "Gist description ..." msgstr "" -#: kallithea/templates/admin/gists/edit.html:57 -#: kallithea/templates/admin/gists/new.html:41 +#: kallithea/templates/admin/gists/edit.html:54 +#: kallithea/templates/admin/gists/new.html:38 +#: kallithea/tests/data/templates/admin/gists/new.html.py:205 msgid "Gist lifetime" msgstr "" +#: kallithea/templates/admin/gists/edit.html:59 #: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/edit.html:63 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/index.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/index.html:56 +#: kallithea/templates/admin/gists/show.html:45 #: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/gists/show.html:49 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:32 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:32 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:31 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:31 +#: kallithea/tests/data/templates/admin/gists/index.html.py:137 +#: kallithea/tests/data/templates/admin/gists/index.html.py:143 +#: kallithea/tests/data/templates/admin/gists/show.html.py:131 +#: kallithea/tests/data/templates/admin/gists/show.html.py:137 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:82 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:42 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:69 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:82 msgid "Expires" msgstr "" -#: kallithea/templates/admin/gists/edit.html:61 -#: kallithea/templates/admin/gists/index.html:57 -#: kallithea/templates/admin/gists/show.html:47 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:8 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:27 -#: kallithea/templates/admin/users/user_edit_api_keys.html:8 -#: kallithea/templates/admin/users/user_edit_api_keys.html:27 +#: kallithea/templates/admin/gists/edit.html:59 +#: kallithea/templates/admin/gists/index.html:54 +#: kallithea/templates/admin/gists/show.html:45 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:26 +#: kallithea/templates/admin/users/user_edit_api_keys.html:7 +#: kallithea/templates/admin/users/user_edit_api_keys.html:26 +#: kallithea/tests/data/templates/admin/gists/index.html.py:139 +#: kallithea/tests/data/templates/admin/gists/show.html.py:133 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:71 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:44 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:71 #, fuzzy msgid "Never" msgstr "擁有者" @@ -2743,275 +2502,408 @@ msgstr "" #: kallithea/templates/admin/gists/edit.html:146 -#: kallithea/templates/changeset/changeset_file_comment.html:81 +#: kallithea/templates/changeset/changeset_file_comment.html:103 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:189 msgid "Cancel" msgstr "" #: kallithea/templates/admin/gists/index.html:6 #: kallithea/templates/admin/gists/index.html:16 +#: kallithea/tests/data/templates/admin/gists/index.html.py:178 +#: kallithea/tests/data/templates/admin/gists/index.html.py:213 #, python-format msgid "Private Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:8 #: kallithea/templates/admin/gists/index.html:18 +#: kallithea/tests/data/templates/admin/gists/index.html.py:182 +#: kallithea/tests/data/templates/admin/gists/index.html.py:217 #, python-format msgid "Public Gists for User %s" msgstr "" #: kallithea/templates/admin/gists/index.html:10 #: kallithea/templates/admin/gists/index.html:20 +#: kallithea/tests/data/templates/admin/gists/index.html.py:186 +#: kallithea/tests/data/templates/admin/gists/index.html.py:221 msgid "Public Gists" msgstr "" #: kallithea/templates/admin/gists/index.html:37 #: kallithea/templates/admin/gists/show.html:25 -#: kallithea/templates/base/base.html:237 +#: kallithea/templates/base/base.html:310 +#: kallithea/tests/data/templates/admin/gists/index.html.py:115 +#: kallithea/tests/data/templates/admin/gists/show.html.py:115 +#: kallithea/tests/data/templates/base/base.html.py:521 msgid "Create New Gist" msgstr "" -#: kallithea/templates/admin/gists/index.html:54 -#: kallithea/templates/data_table/_dt_elements.html:141 +#: kallithea/templates/admin/gists/index.html:51 +#: kallithea/templates/data_table/_dt_elements.html:88 +#: kallithea/tests/data/templates/admin/gists/index.html.py:131 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:148 msgid "Created" msgstr "" -#: kallithea/templates/admin/gists/index.html:74 +#: kallithea/templates/admin/gists/index.html:66 +#: kallithea/tests/data/templates/admin/gists/index.html.py:155 msgid "There are no gists yet" msgstr "" #: kallithea/templates/admin/gists/new.html:5 #: kallithea/templates/admin/gists/new.html:18 +#: kallithea/tests/data/templates/admin/gists/new.html.py:127 +#: kallithea/tests/data/templates/admin/gists/new.html.py:143 msgid "New Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:47 -msgid "name this file..." -msgstr "" - -#: kallithea/templates/admin/gists/new.html:56 +#: kallithea/templates/admin/gists/new.html:45 +msgid "Name this gist ..." +msgstr "" + +#: kallithea/templates/admin/gists/new.html:53 +#: kallithea/tests/data/templates/admin/gists/new.html.py:211 msgid "Create Private Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:57 +#: kallithea/templates/admin/gists/new.html:54 +#: kallithea/tests/data/templates/admin/gists/new.html.py:213 msgid "Create Public Gist" msgstr "" -#: kallithea/templates/admin/gists/new.html:58 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:15 -#: kallithea/templates/admin/my_account/my_account_api_keys.html:70 -#: kallithea/templates/admin/my_account/my_account_emails.html:46 -#: kallithea/templates/admin/my_account/my_account_password.html:37 -#: kallithea/templates/admin/my_account/my_account_profile.html:61 -#: kallithea/templates/admin/permissions/permissions_globals.html:113 -#: kallithea/templates/admin/permissions/permissions_ips.html:39 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:115 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:43 -#: kallithea/templates/admin/repos/repo_edit_fields.html:59 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:102 -#: kallithea/templates/admin/repos/repo_edit_settings.html:128 -#: kallithea/templates/admin/settings/settings_global.html:57 -#: kallithea/templates/admin/settings/settings_vcs.html:81 -#: kallithea/templates/admin/settings/settings_visual.html:117 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:105 -#: kallithea/templates/admin/users/user_edit_api_keys.html:15 -#: kallithea/templates/admin/users/user_edit_api_keys.html:70 -#: kallithea/templates/admin/users/user_edit_emails.html:46 -#: kallithea/templates/admin/users/user_edit_ips.html:50 -#: kallithea/templates/admin/users/user_edit_profile.html:114 -#: kallithea/templates/base/default_perms_box.html:65 -#: kallithea/templates/files/files_add.html:65 -#: kallithea/templates/files/files_delete.html:44 -#: kallithea/templates/files/files_edit.html:68 -#: kallithea/templates/pullrequests/pullrequest.html:89 +#: kallithea/templates/admin/gists/new.html:55 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:73 +#: kallithea/templates/admin/my_account/my_account_emails.html:47 +#: kallithea/templates/admin/my_account/my_account_password.html:31 +#: kallithea/templates/admin/my_account/my_account_profile.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:95 +#: kallithea/templates/admin/permissions/permissions_ips.html:34 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:99 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:36 +#: kallithea/templates/admin/repos/repo_edit_fields.html:54 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:85 +#: kallithea/templates/admin/repos/repo_edit_settings.html:105 +#: kallithea/templates/admin/settings/settings_global.html:50 +#: kallithea/templates/admin/settings/settings_vcs.html:78 +#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:89 +#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/users/user_edit_api_keys.html:73 +#: kallithea/templates/admin/users/user_edit_emails.html:47 +#: kallithea/templates/admin/users/user_edit_ips.html:45 +#: kallithea/templates/admin/users/user_edit_profile.html:90 +#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/files/files_add.html:69 +#: kallithea/templates/files/files_delete.html:41 +#: kallithea/templates/files/files_edit.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:78 +#: kallithea/tests/data/templates/admin/gists/new.html.py:215 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:79 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:78 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:117 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:71 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:70 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:95 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:109 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:54 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:112 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:77 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:104 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:74 +#: kallithea/tests/data/templates/files/files_add.html.py:249 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:150 msgid "Reset" msgstr "重設" #: kallithea/templates/admin/gists/show.html:5 #: kallithea/templates/admin/gists/show.html:9 +#: kallithea/tests/data/templates/admin/gists/show.html.py:201 +#: kallithea/tests/data/templates/admin/gists/show.html.py:229 msgid "Gist" msgstr "" #: kallithea/templates/admin/gists/show.html:10 -#: kallithea/templates/email_templates/changeset_comment.html:15 -#: kallithea/templates/email_templates/pull_request.html:10 -#: kallithea/templates/email_templates/pull_request_comment.html:15 +#: kallithea/tests/data/templates/admin/gists/show.html.py:205 +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:91 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:87 +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:82 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:80 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:83 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:81 msgid "URL" msgstr "" +#: kallithea/templates/admin/gists/show.html:35 +#: kallithea/tests/data/templates/admin/gists/show.html.py:120 +msgid "Public Gist" +msgstr "" + #: kallithea/templates/admin/gists/show.html:37 -msgid "Public Gist" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:39 +#: kallithea/tests/data/templates/admin/gists/show.html.py:124 msgid "Private Gist" msgstr "" -#: kallithea/templates/admin/gists/show.html:56 -#: kallithea/templates/admin/my_account/my_account_emails.html:19 -#: kallithea/templates/admin/permissions/permissions_ips.html:12 -#: kallithea/templates/admin/repos/repo_edit_advanced.html:75 -#: kallithea/templates/admin/repos/repo_edit_fields.html:18 -#: kallithea/templates/admin/settings/settings_hooks.html:36 -#: kallithea/templates/admin/users/user_edit_emails.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:22 -#: kallithea/templates/changeset/changeset_file_comment.html:30 -#: kallithea/templates/data_table/_dt_elements.html:129 -#: kallithea/templates/data_table/_dt_elements.html:157 -#: kallithea/templates/data_table/_dt_elements.html:173 -#: kallithea/templates/data_table/_dt_elements.html:189 -#: kallithea/templates/files/files_source.html:39 -#: kallithea/templates/files/files_source.html:42 -#: kallithea/templates/files/files_source.html:45 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/templates/admin/my_account/my_account_emails.html:23 +#: kallithea/templates/admin/notifications/notifications_data.html:14 +#: kallithea/templates/admin/notifications/show_notification.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:11 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/settings/settings_hooks.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:23 +#: kallithea/templates/admin/users/user_edit_ips.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/templates/changeset/changeset_file_comment.html:93 +#: kallithea/templates/data_table/_dt_elements.html:76 +#: kallithea/templates/data_table/_dt_elements.html:104 +#: kallithea/templates/data_table/_dt_elements.html:119 +#: kallithea/templates/data_table/_dt_elements.html:134 +#: kallithea/templates/files/files_source.html:35 +#: kallithea/templates/files/files_source.html:38 +#: kallithea/templates/files/files_source.html:41 #: kallithea/templates/pullrequests/pullrequest_data.html:20 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:61 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:51 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:100 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:75 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:59 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:100 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:182 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:123 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:272 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:331 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:396 +#: kallithea/tests/data/templates/files/files_source.html.py:82 +#: kallithea/tests/data/templates/files/files_source.html.py:88 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Delete" msgstr "移除" -#: kallithea/templates/admin/gists/show.html:56 +#: kallithea/templates/admin/gists/show.html:54 +#: kallithea/tests/data/templates/admin/gists/show.html.py:146 msgid "Confirm to delete this Gist" msgstr "" +#: kallithea/templates/admin/gists/show.html:61 +#: kallithea/templates/base/perms_summary.html:44 +#: kallithea/templates/base/perms_summary.html:81 +#: kallithea/templates/base/perms_summary.html:83 +#: kallithea/templates/data_table/_dt_elements.html:69 +#: kallithea/templates/data_table/_dt_elements.html:70 +#: kallithea/templates/data_table/_dt_elements.html:97 +#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:112 +#: kallithea/templates/data_table/_dt_elements.html:113 +#: kallithea/templates/data_table/_dt_elements.html:127 +#: kallithea/templates/data_table/_dt_elements.html:128 +#: kallithea/templates/files/diff_2way.html:54 +#: kallithea/templates/files/files_source.html:37 +#: kallithea/templates/files/files_source.html:40 +#: kallithea/templates/pullrequests/pullrequest_show.html:41 +#: kallithea/tests/data/templates/admin/gists/show.html.py:153 +#: kallithea/tests/data/templates/base/perms_summary.html.py:105 +#: kallithea/tests/data/templates/base/perms_summary.html.py:154 +#: kallithea/tests/data/templates/base/perms_summary.html.py:160 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:117 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:119 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:266 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:268 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:325 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:327 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:390 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:392 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:157 +msgid "Edit" +msgstr "" + #: kallithea/templates/admin/gists/show.html:63 -#: kallithea/templates/base/perms_summary.html:43 -#: kallithea/templates/base/perms_summary.html:79 -#: kallithea/templates/base/perms_summary.html:81 -#: kallithea/templates/changeset/changeset_file_comment.html:83 -#: kallithea/templates/changeset/changeset_file_comment.html:192 -#: kallithea/templates/data_table/_dt_elements.html:122 -#: kallithea/templates/data_table/_dt_elements.html:123 -#: kallithea/templates/data_table/_dt_elements.html:150 -#: kallithea/templates/data_table/_dt_elements.html:151 -#: kallithea/templates/data_table/_dt_elements.html:165 -#: kallithea/templates/data_table/_dt_elements.html:167 -#: kallithea/templates/data_table/_dt_elements.html:181 -#: kallithea/templates/data_table/_dt_elements.html:183 -#: kallithea/templates/files/diff_2way.html:56 -#: kallithea/templates/files/files_source.html:41 -#: kallithea/templates/files/files_source.html:44 -#: kallithea/templates/pullrequests/pullrequest_show.html:41 -msgid "Edit" -msgstr "" - -#: kallithea/templates/admin/gists/show.html:65 -#: kallithea/templates/files/files_edit.html:49 -#: kallithea/templates/files/files_source.html:34 +#: kallithea/templates/files/files_edit.html:52 +#: kallithea/templates/files/files_source.html:30 +#: kallithea/tests/data/templates/admin/gists/show.html.py:156 +#: kallithea/tests/data/templates/files/files_source.html.py:73 msgid "Show as Raw" msgstr "" -#: kallithea/templates/admin/gists/show.html:73 +#: kallithea/templates/admin/gists/show.html:69 +#: kallithea/tests/data/templates/admin/gists/show.html.py:164 msgid "created" msgstr "" -#: kallithea/templates/admin/gists/show.html:86 -#: kallithea/templates/files/files_source.html:73 +#: kallithea/templates/admin/gists/show.html:82 +#: kallithea/tests/data/templates/admin/gists/show.html.py:178 msgid "Show as raw" msgstr "" #: kallithea/templates/admin/my_account/my_account.html:5 #: kallithea/templates/admin/my_account/my_account.html:9 -#: kallithea/templates/base/base.html:343 +#: kallithea/templates/base/base.html:404 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:170 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:192 +#: kallithea/tests/data/templates/base/base.html.py:644 msgid "My Account" msgstr "我的帳號" -#: kallithea/templates/admin/my_account/my_account.html:35 +#: kallithea/templates/admin/my_account/my_account.html:25 #: kallithea/templates/admin/users/user_edit.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:116 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:112 msgid "Profile" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:36 +#: kallithea/templates/admin/my_account/my_account.html:26 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:122 msgid "Email Addresses" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:38 +#: kallithea/templates/admin/my_account/my_account.html:28 #: kallithea/templates/admin/users/user_edit.html:31 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:134 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:124 msgid "API Keys" msgstr "" -#: kallithea/templates/admin/my_account/my_account.html:39 +#: kallithea/templates/admin/my_account/my_account.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:140 #, fuzzy msgid "Owned Repositories" msgstr "個版本庫" -#: kallithea/templates/admin/my_account/my_account.html:40 -#: kallithea/templates/journal/journal.html:53 +#: kallithea/templates/admin/my_account/my_account.html:30 +#: kallithea/templates/journal/journal.html:33 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:146 +#: kallithea/tests/data/templates/journal/journal.html.py:196 #, fuzzy msgid "Watched Repositories" msgstr "建立版本庫" -#: kallithea/templates/admin/my_account/my_account.html:41 +#: kallithea/templates/admin/my_account/my_account.html:31 #: kallithea/templates/admin/permissions/permissions.html:30 #: kallithea/templates/admin/user_groups/user_group_edit.html:32 #: kallithea/templates/admin/users/user_edit.html:34 +#: kallithea/tests/data/templates/admin/my_account/my_account.html.py:152 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:120 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:130 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:142 #, fuzzy msgid "Show Permissions" msgstr "權限" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:6 -#: kallithea/templates/admin/users/user_edit_api_keys.html:6 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:5 +#: kallithea/templates/admin/users/user_edit_api_keys.html:5 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:40 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:40 msgid "Built-in" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:14 -#: kallithea/templates/admin/users/user_edit_api_keys.html:14 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:13 +#: kallithea/templates/admin/users/user_edit_api_keys.html:13 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:52 #, python-format msgid "Confirm to reset this API key: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:30 -#: kallithea/templates/admin/users/user_edit_api_keys.html:30 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:29 +#: kallithea/templates/admin/users/user_edit_api_keys.html:29 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:76 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:76 msgid "Expired" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:40 -#: kallithea/templates/admin/users/user_edit_api_keys.html:40 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:39 +#: kallithea/templates/admin/users/user_edit_api_keys.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:91 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:91 #, fuzzy, python-format msgid "Confirm to remove this API key: %s" msgstr "確認移除目前的統計" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:42 -#: kallithea/templates/admin/users/user_edit_api_keys.html:42 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:41 +#: kallithea/templates/admin/users/user_edit_api_keys.html:41 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:93 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:93 #, fuzzy msgid "Remove" msgstr "移除檔案" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:49 -#: kallithea/templates/admin/users/user_edit_api_keys.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:48 +#: kallithea/templates/admin/users/user_edit_api_keys.html:48 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:99 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:99 msgid "No additional API keys specified" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:61 -#: kallithea/templates/admin/users/user_edit_api_keys.html:61 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:56 +#: kallithea/templates/admin/users/user_edit_api_keys.html:56 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:104 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:104 msgid "New API key" msgstr "" -#: kallithea/templates/admin/my_account/my_account_api_keys.html:69 -#: kallithea/templates/admin/my_account/my_account_emails.html:45 -#: kallithea/templates/admin/permissions/permissions_ips.html:38 -#: kallithea/templates/admin/repos/repo_add_base.html:81 -#: kallithea/templates/admin/repos/repo_edit_fields.html:58 -#: kallithea/templates/admin/users/user_edit_api_keys.html:69 -#: kallithea/templates/admin/users/user_edit_emails.html:45 -#: kallithea/templates/admin/users/user_edit_ips.html:49 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:72 +#: kallithea/templates/admin/my_account/my_account_emails.html:46 +#: kallithea/templates/admin/permissions/permissions_ips.html:33 +#: kallithea/templates/admin/repos/repo_add_base.html:64 +#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/users/user_edit_api_keys.html:72 +#: kallithea/templates/admin/users/user_edit_emails.html:46 +#: kallithea/templates/admin/users/user_edit_ips.html:44 +#: kallithea/tests/data/templates/admin/my_account/my_account_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:69 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:90 +#: kallithea/tests/data/templates/admin/users/user_edit_api_keys.html.py:110 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:75 msgid "Add" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:7 -#: kallithea/templates/admin/users/user_edit_emails.html:7 +#: kallithea/templates/admin/my_account/my_account_api_keys.html:81 +#, python-format +msgid "" +"\n" +"API keys are used to let scripts or services access %s using your\n" +"account, as if you had provided the script or service with your actual\n" +"password.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_api_keys.html:86 +msgid "" +"\n" +"Like passwords, API keys should therefore never be shared with others,\n" +"nor passed to untrusted scripts or services. If such sharing should\n" +"happen anyway, reset the API key on this page to prevent further use.\n" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_emails.html:9 +#: kallithea/templates/admin/users/user_edit_emails.html:9 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:45 msgid "Primary" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:20 -#: kallithea/templates/admin/users/user_edit_emails.html:20 +#: kallithea/templates/admin/my_account/my_account_emails.html:24 +#: kallithea/templates/admin/users/user_edit_emails.html:24 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:62 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:26 -#: kallithea/templates/admin/users/user_edit_emails.html:26 +#: kallithea/templates/admin/my_account/my_account_emails.html:30 +#: kallithea/templates/admin/users/user_edit_emails.html:30 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:68 msgid "No additional emails specified." msgstr "" -#: kallithea/templates/admin/my_account/my_account_emails.html:38 -#: kallithea/templates/admin/users/user_edit_emails.html:38 +#: kallithea/templates/admin/my_account/my_account_emails.html:39 +#: kallithea/templates/admin/users/user_edit_emails.html:39 +#: kallithea/tests/data/templates/admin/my_account/my_account_emails.html.py:73 msgid "New email address" msgstr "" @@ -3020,284 +2912,365 @@ msgid "Change Your Account Password" msgstr "忘記您的密碼?" -#: kallithea/templates/admin/my_account/my_account_password.html:10 +#: kallithea/templates/admin/my_account/my_account_password.html:8 msgid "Current password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:19 -#: kallithea/templates/admin/users/user_edit_profile.html:60 +#: kallithea/templates/admin/my_account/my_account_password.html:15 +#: kallithea/templates/admin/users/user_edit_profile.html:46 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:78 msgid "New password" msgstr "新密碼" -#: kallithea/templates/admin/my_account/my_account_password.html:28 +#: kallithea/templates/admin/my_account/my_account_password.html:22 msgid "Confirm new password" msgstr "" -#: kallithea/templates/admin/my_account/my_account_password.html:45 +#: kallithea/templates/admin/my_account/my_account_password.html:39 #, python-format msgid "This account is managed with %s and the password cannot be changed here" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:11 -msgid "Change your avatar at" +#: kallithea/templates/admin/my_account/my_account_perms.html:3 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:55 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:57 +msgid "Current IP" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:4 +#: kallithea/templates/admin/users/user_edit_profile.html:4 +msgid "Gravatar" +msgstr "" + +#: kallithea/templates/admin/my_account/my_account_profile.html:10 +#: kallithea/templates/admin/users/user_edit_profile.html:10 +#, fuzzy, python-format +#| msgid "Change your avatar at" +msgid "Change %s avatar at" msgstr "修改您的頭像於" #: kallithea/templates/admin/my_account/my_account_profile.html:12 -#: kallithea/templates/admin/users/user_edit_profile.html:9 -msgid "Using" -msgstr "使用中" - -#: kallithea/templates/admin/my_account/my_account_profile.html:14 -#: kallithea/templates/admin/users/user_edit_profile.html:11 +#: kallithea/templates/admin/users/user_edit_profile.html:12 +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:51 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:51 msgid "Avatars are disabled" msgstr "" -#: kallithea/templates/admin/my_account/my_account_profile.html:15 -msgid "Missing email, please update your user email address." -msgstr "" - -#: kallithea/templates/admin/my_account/my_account_profile.html:16 -#: kallithea/templates/admin/users/user_edit_profile.html:15 -msgid "Current IP" -msgstr "" - #: kallithea/templates/admin/my_account/my_account_repos.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:30 #, fuzzy msgid "Repositories You Own" msgstr "個版本庫" -#: kallithea/templates/admin/my_account/my_account_repos.html:59 -#: kallithea/templates/admin/my_account/my_account_watched.html:59 -#: kallithea/templates/base/root.html:45 -#: kallithea/templates/bookmarks/bookmarks.html:81 -#: kallithea/templates/branches/branches.html:81 -#: kallithea/templates/journal/journal.html:200 -#: kallithea/templates/journal/journal.html:291 -#: kallithea/templates/tags/tags.html:81 -msgid "No records found." -msgstr "" +#: kallithea/templates/admin/my_account/my_account_repos.html:13 +#: kallithea/templates/admin/my_account/my_account_watched.html:13 +#: kallithea/templates/admin/repo_groups/repo_groups.html:39 +#: kallithea/templates/admin/repos/repo_add_base.html:6 +#: kallithea/templates/admin/repos/repo_edit_settings.html:4 +#: kallithea/templates/admin/repos/repos.html:38 +#: kallithea/templates/admin/user_groups/user_groups.html:38 +#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/files/files_browser.html:62 +#: kallithea/tests/data/templates/index_base.html.py:128 +#: kallithea/tests/data/templates/admin/my_account/my_account_repos.html.py:34 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:34 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:112 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:44 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:112 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:112 +#: kallithea/tests/data/templates/base/perms_summary.html.py:111 +#: kallithea/tests/data/templates/files/files_browser.html.py:76 +msgid "Name" +msgstr "名稱" #: kallithea/templates/admin/my_account/my_account_watched.html:1 +#: kallithea/tests/data/templates/admin/my_account/my_account_watched.html.py:30 #, fuzzy msgid "Repositories You are Watching" msgstr "版本庫路徑" #: kallithea/templates/admin/notifications/notifications.html:5 #: kallithea/templates/admin/notifications/notifications.html:9 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:154 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:176 msgid "My Notifications" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:24 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:117 msgid "All" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:25 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:121 msgid "Comments" msgstr "" #: kallithea/templates/admin/notifications/notifications.html:26 -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:125 +#: kallithea/tests/data/templates/base/base.html.py:432 msgid "Pull Requests" msgstr "" -#: kallithea/templates/admin/notifications/notifications.html:30 +#: kallithea/templates/admin/notifications/notifications.html:29 +#: kallithea/tests/data/templates/admin/notifications/notifications.html.py:129 msgid "Mark All Read" msgstr "" -#: kallithea/templates/admin/notifications/notifications_data.html:40 +#: kallithea/templates/admin/notifications/notifications_data.html:12 +msgid "Mark as read" +msgstr "" + +#: kallithea/templates/admin/notifications/notifications_data.html:21 +#: kallithea/tests/data/templates/admin/notifications/notifications_data.html.py:76 msgid "No notifications here yet" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:5 #: kallithea/templates/admin/notifications/show_notification.html:11 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:146 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:168 msgid "Show Notification" msgstr "" #: kallithea/templates/admin/notifications/show_notification.html:9 -#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:403 +#: kallithea/tests/data/templates/admin/notifications/show_notification.html.py:144 +#: kallithea/tests/data/templates/base/base.html.py:640 msgid "Notifications" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:5 #: kallithea/templates/admin/permissions/permissions.html:11 -#: kallithea/templates/base/base.html:64 +#: kallithea/templates/base/base.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:144 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:162 +#: kallithea/tests/data/templates/base/base.html.py:259 #, fuzzy msgid "Default Permissions" msgstr "預設權限" #: kallithea/templates/admin/permissions/permissions.html:28 #: kallithea/templates/admin/settings/settings.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:108 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:120 msgid "Global" msgstr "" #: kallithea/templates/admin/permissions/permissions.html:29 #: kallithea/templates/admin/users/user_edit.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions.html.py:114 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:130 msgid "IP Whitelist" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:7 +#: kallithea/templates/admin/permissions/permissions_globals.html:4 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:39 msgid "Anonymous access" msgstr "訪客權限" -#: kallithea/templates/admin/permissions/permissions_globals.html:13 +#: kallithea/templates/admin/permissions/permissions_globals.html:9 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:43 #, python-format msgid "" "Allow access to Kallithea without needing to log in. Anonymous users use " "%s user permissions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:25 +#: kallithea/templates/admin/permissions/permissions_globals.html:18 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:51 msgid "" "All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/permissions/permissions_globals.html:19 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:53 #, fuzzy msgid "Apply to all existing repositories" msgstr "建立版本庫" -#: kallithea/templates/admin/permissions/permissions_globals.html:27 +#: kallithea/templates/admin/permissions/permissions_globals.html:23 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:55 msgid "Permissions for the Default user on new repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:32 -#: kallithea/templates/admin/repos/repo_add_base.html:37 -#: kallithea/templates/admin/repos/repo_edit_settings.html:35 -#: kallithea/templates/data_table/_dt_elements.html:202 -#: kallithea/templates/forks/fork.html:48 +#: kallithea/templates/admin/permissions/permissions_globals.html:26 +#: kallithea/templates/admin/repos/repo_add_base.html:28 +#: kallithea/templates/admin/repos/repo_edit_settings.html:28 +#: kallithea/templates/data_table/_dt_elements.html:147 +#: kallithea/templates/forks/fork.html:42 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:57 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:60 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:297 msgid "Repository group" msgstr "版本庫群組" -#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/admin/permissions/permissions_globals.html:31 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:63 msgid "" "All default permissions on each repository group will be reset to chosen " "permission, note that all custom default permission on repository groups " "will be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:40 +#: kallithea/templates/admin/permissions/permissions_globals.html:32 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:65 msgid "Apply to all existing repository groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:41 +#: kallithea/templates/admin/permissions/permissions_globals.html:36 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:67 msgid "Permissions for the Default user on new repository groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:46 -#: kallithea/templates/data_table/_dt_elements.html:209 +#: kallithea/templates/admin/permissions/permissions_globals.html:39 +#: kallithea/templates/data_table/_dt_elements.html:154 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:69 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:206 msgid "User group" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:53 +#: kallithea/templates/admin/permissions/permissions_globals.html:44 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:75 msgid "" "All default permissions on each user group will be reset to chosen " "permission, note that all custom default permission on user groups will " "be lost" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:54 +#: kallithea/templates/admin/permissions/permissions_globals.html:45 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:77 msgid "Apply to all existing user groups" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/templates/admin/permissions/permissions_globals.html:49 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:79 msgid "Permissions for the Default user on new user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/templates/admin/permissions/permissions_globals.html:52 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:81 #, fuzzy msgid "Top level repository creation" msgstr "版本庫建立" -#: kallithea/templates/admin/permissions/permissions_globals.html:64 +#: kallithea/templates/admin/permissions/permissions_globals.html:55 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:85 msgid "Enable this to allow non-admins to create repositories at the top level." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:65 +#: kallithea/templates/admin/permissions/permissions_globals.html:56 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:87 msgid "" "Note: This will also give all users API access to create repositories " "everywhere. That might change in future versions." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/templates/admin/permissions/permissions_globals.html:60 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:89 msgid "Repository creation with group write access" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/templates/admin/permissions/permissions_globals.html:63 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:93 msgid "" "With this, write permission to a repository group allows creating " "repositories inside that group. Without this, group write permissions " "mean nothing." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:79 +#: kallithea/templates/admin/permissions/permissions_globals.html:67 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:95 msgid "User group creation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:83 +#: kallithea/templates/admin/permissions/permissions_globals.html:70 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:99 msgid "Enable this to allow non-admins to create user groups." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:88 +#: kallithea/templates/admin/permissions/permissions_globals.html:74 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:101 msgid "Repository forking" msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:92 +#: kallithea/templates/admin/permissions/permissions_globals.html:77 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:105 msgid "Enable this to allow non-admins to fork repositories." msgstr "" -#: kallithea/templates/admin/permissions/permissions_globals.html:97 +#: kallithea/templates/admin/permissions/permissions_globals.html:81 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:107 msgid "Registration" msgstr "註冊" -#: kallithea/templates/admin/permissions/permissions_globals.html:105 +#: kallithea/templates/admin/permissions/permissions_globals.html:87 +#: kallithea/tests/data/templates/admin/permissions/permissions_globals.html.py:111 msgid "External auth account activation" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:13 -#: kallithea/templates/admin/users/user_edit_ips.html:23 +#: kallithea/templates/admin/permissions/permissions_ips.html:12 +#: kallithea/templates/admin/users/user_edit_ips.html:22 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:52 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:60 #, fuzzy, python-format msgid "Confirm to delete this IP address: %s" msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:19 -#: kallithea/templates/admin/users/user_edit_ips.html:30 +#: kallithea/templates/admin/permissions/permissions_ips.html:18 +#: kallithea/templates/admin/users/user_edit_ips.html:29 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:58 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:66 msgid "All IP addresses are allowed." msgstr "" -#: kallithea/templates/admin/permissions/permissions_ips.html:30 -#: kallithea/templates/admin/users/user_edit_ips.html:42 +#: kallithea/templates/admin/permissions/permissions_ips.html:25 +#: kallithea/templates/admin/users/user_edit_ips.html:37 +#: kallithea/tests/data/templates/admin/permissions/permissions_ips.html.py:63 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:71 msgid "New IP address" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_add.html:11 #: kallithea/templates/admin/repo_groups/repo_group_edit.html:11 -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:105 -#: kallithea/templates/admin/repo_groups/repo_groups.html:10 -#: kallithea/templates/base/base.html:61 kallithea/templates/base/base.html:80 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:89 +#: kallithea/templates/admin/repo_groups/repo_groups.html:9 +#: kallithea/templates/base/base.html:57 kallithea/templates/base/base.html:76 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:155 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:142 +#: kallithea/tests/data/templates/base/base.html.py:247 +#: kallithea/tests/data/templates/base/base.html.py:696 msgid "Repository Groups" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:33 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:8 -#: kallithea/templates/admin/user_groups/user_group_add.html:32 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:7 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:28 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:5 +#: kallithea/templates/admin/user_groups/user_group_add.html:27 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:4 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:113 msgid "Group name" msgstr "群組名稱" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:51 -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:26 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:42 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:19 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:121 msgid "Group parent" msgstr "父群組" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:60 -#: kallithea/templates/admin/repos/repo_add_base.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:49 +#: kallithea/templates/admin/repos/repo_add_base.html:35 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:125 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:66 msgid "Copy parent group permissions" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_add.html:64 -#: kallithea/templates/admin/repos/repo_add_base.html:50 +#: kallithea/templates/admin/repo_groups/repo_group_add.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:38 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_add.html.py:129 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:70 msgid "Copy permission set from parent repository group." msgstr "" @@ -3306,31 +3279,42 @@ msgid "%s Repository Group Settings" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:21 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:29 msgid "Add Child Group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:40 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:36 #: kallithea/templates/admin/repos/repo_edit.html:12 -#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/templates/admin/repos/repo_edit.html:25 #: kallithea/templates/admin/settings/settings.html:11 #: kallithea/templates/admin/user_groups/user_group_edit.html:29 -#: kallithea/templates/base/base.html:67 kallithea/templates/base/base.html:151 -#: kallithea/templates/data_table/_dt_elements.html:45 -#: kallithea/templates/data_table/_dt_elements.html:49 +#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:143 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:116 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:170 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:174 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:112 +#: kallithea/tests/data/templates/base/base.html.py:271 +#: kallithea/tests/data/templates/base/base.html.py:377 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:91 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:95 msgid "Settings" msgstr "設定" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:41 -#: kallithea/templates/admin/repos/repo_edit.html:46 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:37 +#: kallithea/templates/admin/repos/repo_edit.html:31 #: kallithea/templates/admin/user_groups/user_group_edit.html:30 #: kallithea/templates/admin/users/user_edit.html:33 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:128 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:136 msgid "Advanced" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit.html:42 -#: kallithea/templates/admin/repos/repo_edit.html:43 +#: kallithea/templates/admin/repo_groups/repo_group_edit.html:38 +#: kallithea/templates/admin/repos/repo_edit.html:28 #: kallithea/templates/admin/user_groups/user_group_edit.html:31 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:122 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:124 msgid "Permissions" msgstr "權限" @@ -3354,12 +3338,14 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:9 #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:7 #: kallithea/templates/admin/users/user_edit_advanced.html:8 -#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/templates/pullrequests/pullrequest_show.html:129 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:245 msgid "Created on" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:190 +#: kallithea/templates/data_table/_dt_elements.html:135 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:332 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -3369,16 +3355,36 @@ msgid "Delete this repository group" msgstr "" +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:7 +msgid "Not visible" +msgstr "" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:8 +#, fuzzy +#| msgid "Disabled" +msgid "Visible" +msgstr "停用" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:9 +#, fuzzy +#| msgid "No response" +msgid "Add repos" +msgstr "未回應" + +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:10 +msgid "Add/Edit groups" +msgstr "" + #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:11 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:12 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:11 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:11 msgid "User/User Group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:28 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:45 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:24 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:37 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:23 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:36 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:28 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:45 #, fuzzy @@ -3387,105 +3393,117 @@ #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:34 #: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:71 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:43 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:68 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:42 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:67 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:34 #: kallithea/templates/admin/user_groups/user_group_edit_perms.html:71 msgid "Revoke" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:97 -#: kallithea/templates/admin/repos/repo_edit_permissions.html:94 -#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:97 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:81 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:77 +#: kallithea/templates/admin/user_groups/user_group_edit_perms.html:81 msgid "Add new" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:103 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:87 msgid "Apply to children" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:107 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:91 msgid "Both" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:108 +#: kallithea/templates/admin/repo_groups/repo_group_edit_perms.html:92 msgid "" "Set or revoke permission to all children of that group, including non-" "private repositories and other groups if selected." msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:38 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:29 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 msgid "Remove this group" msgstr "" -#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:53 +#: kallithea/templates/admin/repo_groups/repo_group_edit_settings.html:46 #, fuzzy msgid "Confirm to delete this group" msgstr "" #: kallithea/templates/admin/repo_groups/repo_group_show.html:4 -#, python-format -msgid "%s Repository group dashboard" -msgstr "" +#, fuzzy, python-format +#| msgid "Repository group" +msgid "Repository group %s" +msgstr "版本庫群組" #: kallithea/templates/admin/repo_groups/repo_group_show.html:9 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:101 msgid "Home" msgstr "首頁" #: kallithea/templates/admin/repo_groups/repo_group_show.html:13 +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:110 msgid "with" msgstr "" #: kallithea/templates/admin/repo_groups/repo_groups.html:5 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:160 #, fuzzy msgid "Repository Groups Administration" msgstr "版本庫管理員" -#: kallithea/templates/admin/repo_groups/repo_groups.html:48 +#: kallithea/templates/admin/repo_groups/repo_groups.html:41 +#: kallithea/tests/data/templates/admin/repo_groups/repo_groups.html.py:116 #, fuzzy msgid "Number of Top-level Repositories" msgstr "建立版本庫" -#: kallithea/templates/admin/repos/repo_add_base.html:17 +#: kallithea/templates/admin/repos/repo_add_base.html:12 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:48 #, fuzzy msgid "Clone remote repository" msgstr "私有版本庫" -#: kallithea/templates/admin/repos/repo_add_base.html:22 +#: kallithea/templates/admin/repos/repo_add_base.html:16 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:52 msgid "" "Optional: URL of a remote repository. If set, the repository will be " "created as a clone from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:32 -#: kallithea/templates/admin/repos/repo_edit_settings.html:69 -#: kallithea/templates/forks/fork.html:42 +#: kallithea/templates/admin/repos/repo_add_base.html:24 +#: kallithea/templates/admin/repos/repo_edit_settings.html:55 +#: kallithea/templates/forks/fork.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:58 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:41 -#: kallithea/templates/admin/repos/repo_edit_settings.html:39 -#: kallithea/templates/forks/fork.html:52 +#: kallithea/templates/admin/repos/repo_add_base.html:31 +#: kallithea/templates/admin/repos/repo_edit_settings.html:31 +#: kallithea/templates/forks/fork.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:64 msgid "Optionally select a group to put this repository into." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:59 +#: kallithea/templates/admin/repos/repo_add_base.html:45 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:76 msgid "Type of repository to create." msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:64 -#: kallithea/templates/admin/repos/repo_edit_settings.html:44 -#: kallithea/templates/forks/fork.html:58 +#: kallithea/templates/admin/repos/repo_add_base.html:49 +#: kallithea/templates/admin/repos/repo_edit_settings.html:35 +#: kallithea/templates/forks/fork.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:78 msgid "Landing revision" msgstr "" -#: kallithea/templates/admin/repos/repo_add_base.html:68 +#: kallithea/templates/admin/repos/repo_add_base.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_add_base.html.py:82 msgid "" "Default revision for files page, downloads, full text search index and " "readme generation" @@ -3514,99 +3532,120 @@ msgstr "" #: kallithea/templates/admin/repos/repo_edit.html:8 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:192 #, fuzzy, python-format msgid "%s Repository Settings" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:49 +#: kallithea/templates/admin/repos/repo_edit.html:34 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:134 msgid "Extra Fields" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:52 +#: kallithea/templates/admin/repos/repo_edit.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:140 msgid "Caches" msgstr "" -#: kallithea/templates/admin/repos/repo_edit.html:55 +#: kallithea/templates/admin/repos/repo_edit.html:40 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:146 msgid "Remote" msgstr "遠端" -#: kallithea/templates/admin/repos/repo_edit.html:58 +#: kallithea/templates/admin/repos/repo_edit.html:43 #: kallithea/templates/summary/statistics.html:8 -#: kallithea/templates/summary/summary.html:171 -#: kallithea/templates/summary/summary.html:172 +#: kallithea/templates/summary/summary.html:160 +#: kallithea/templates/summary/summary.html:161 +#: kallithea/tests/data/templates/admin/repos/repo_edit.html.py:152 +#: kallithea/tests/data/templates/summary/statistics.html.py:217 +#: kallithea/tests/data/templates/summary/summary.html.py:245 +#: kallithea/tests/data/templates/summary/summary.html.py:249 msgid "Statistics" msgstr "統計" #: kallithea/templates/admin/repos/repo_edit_advanced.html:1 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:42 #, fuzzy msgid "Parent" msgstr "父群組" #: kallithea/templates/admin/repos/repo_edit_advanced.html:5 -#: kallithea/templates/admin/repos/repo_edit_fork.html:5 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:48 msgid "Set" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:8 -#: kallithea/templates/admin/repos/repo_edit_fork.html:9 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:7 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:50 msgid "Manually set this repository as a fork of another from the list." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:22 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:20 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:54 #, fuzzy msgid "Public Journal Visibility" msgstr "公開日誌" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:29 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:27 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:60 msgid "Remove from public journal" msgstr "從公開日誌移除" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:34 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:32 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:64 #, fuzzy msgid "Add to Public Journal" msgstr "公開日誌" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:40 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:37 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:67 msgid "" "All actions done in this repository will be visible to everyone in the " "public journal." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:46 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:42 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:71 #, fuzzy msgid "Change Locking" msgstr "修改紀錄" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:48 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:79 #, fuzzy msgid "Confirm to unlock repository." msgstr "確認廢止版本庫快取" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:54 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:50 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:81 #, fuzzy msgid "Unlock Repository" msgstr "公開的版本庫" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:52 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:83 #, python-format msgid "Locked by %s on %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:56 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:89 #, fuzzy msgid "Confirm to lock repository." msgstr "確認廢止版本庫快取" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:62 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:58 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:91 #, fuzzy msgid "Lock Repository" msgstr "公開的版本庫" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:64 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:60 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:93 msgid "Repository is not locked" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:68 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:63 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:96 msgid "" "Force locking on the repository. Works only when anonymous access is " "disabled. Triggering a pull locks the repository. The user who is " @@ -3614,32 +3653,39 @@ "unlock it by doing a push." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:79 -#: kallithea/templates/data_table/_dt_elements.html:130 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:72 +#: kallithea/templates/data_table/_dt_elements.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:104 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:273 #, python-format msgid "Confirm to delete this repository: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:81 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:74 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:106 #, fuzzy msgid "Delete this Repository" msgstr "公開的版本庫" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:77 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:110 #, fuzzy, python-format msgid "This repository has %s fork" msgid_plural "This repository has %s forks" msgstr[0] "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:85 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:80 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:112 msgid "Detach forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:86 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:84 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:114 msgid "Delete forks" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_advanced.html:90 +#: kallithea/templates/admin/repos/repo_edit_advanced.html:88 +#: kallithea/tests/data/templates/admin/repos/repo_edit_advanced.html.py:117 msgid "" "The deleted repository will be moved away and hidden until the " "administrator expires it. The administrator can both permanently delete " @@ -3651,111 +3697,116 @@ msgid "Invalidate Repository Cache" msgstr "確認廢止版本庫快取" -#: kallithea/templates/admin/repos/repo_edit_caches.html:4 -#, fuzzy -msgid "Confirm to invalidate repository cache." -msgstr "確認廢止版本庫快取" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:7 +#: kallithea/templates/admin/repos/repo_edit_caches.html:6 msgid "" "Manually invalidate cache for this repository. On first access, the " "repository will be cached again." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_caches.html:9 +msgid "List of Cached Values" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_caches.html:12 -msgid "List of Cached Values" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_caches.html:15 msgid "Prefix" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:16 -#: kallithea/templates/admin/repos/repo_edit_fields.html:6 +#: kallithea/templates/admin/repos/repo_edit_caches.html:13 +#: kallithea/templates/admin/repos/repo_edit_fields.html:7 msgid "Key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_caches.html:17 -#: kallithea/templates/admin/user_groups/user_group_add.html:49 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:24 -#: kallithea/templates/admin/user_groups/user_groups.html:49 -#: kallithea/templates/admin/users/user_add.html:86 -#: kallithea/templates/admin/users/user_edit_profile.html:96 -#: kallithea/templates/admin/users/users.html:54 +#: kallithea/templates/admin/repos/repo_edit_caches.html:14 +#: kallithea/templates/admin/user_groups/user_group_add.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:17 +#: kallithea/templates/admin/user_groups/user_groups.html:41 +#: kallithea/templates/admin/users/user_add.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:74 +#: kallithea/templates/admin/users/users.html:42 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:118 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:133 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:94 +#: kallithea/tests/data/templates/admin/users/users.html.py:117 msgid "Active" msgstr "啟用" -#: kallithea/templates/admin/repos/repo_edit_fields.html:5 +#: kallithea/templates/admin/repos/repo_edit_fields.html:6 msgid "Label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:19 +#: kallithea/templates/admin/repos/repo_edit_fields.html:20 #, python-format msgid "Confirm to delete this field: %s" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:33 +#: kallithea/templates/admin/repos/repo_edit_fields.html:31 msgid "New field key" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:41 +#: kallithea/templates/admin/repos/repo_edit_fields.html:38 msgid "New field label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:44 +#: kallithea/templates/admin/repos/repo_edit_fields.html:40 msgid "Enter short label" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:50 +#: kallithea/templates/admin/repos/repo_edit_fields.html:45 msgid "New field description" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:53 +#: kallithea/templates/admin/repos/repo_edit_fields.html:47 msgid "Enter description of a field" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_fields.html:66 +#: kallithea/templates/admin/repos/repo_edit_fields.html:61 msgid "Extra fields are disabled." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_permissions.html:21 +#: kallithea/templates/admin/repos/repo_edit_permissions.html:20 #, fuzzy msgid "Private Repository" msgstr "私有版本庫" -#: kallithea/templates/admin/repos/repo_edit_remote.html:3 +#: kallithea/templates/admin/repos/repo_edit_remote.html:4 +#, fuzzy +#| msgid "Go to tip of repository" +msgid "Fork of repository" +msgstr "Git 版本庫" + +#: kallithea/templates/admin/repos/repo_edit_remote.html:7 #, fuzzy msgid "Remote repository URL" msgstr "私有版本庫" -#: kallithea/templates/admin/repos/repo_edit_remote.html:9 +#: kallithea/templates/admin/repos/repo_edit_remote.html:15 #, fuzzy msgid "Pull Changes from Remote Repository" msgstr "修改於版本庫 %s" -#: kallithea/templates/admin/repos/repo_edit_remote.html:11 +#: kallithea/templates/admin/repos/repo_edit_remote.html:17 #, fuzzy msgid "Confirm to pull changes from remote repository." msgstr "確認廢止版本庫快取" -#: kallithea/templates/admin/repos/repo_edit_remote.html:17 +#: kallithea/templates/admin/repos/repo_edit_remote.html:23 msgid "This repository does not have a remote repository URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 #, fuzzy msgid "Permanent Repository ID" msgstr "私有版本庫" -#: kallithea/templates/admin/repos/repo_edit_settings.html:11 +#: kallithea/templates/admin/repos/repo_edit_settings.html:7 msgid "What is that?" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:13 +#: kallithea/templates/admin/repos/repo_edit_settings.html:9 msgid "URL by id" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:14 +#: kallithea/templates/admin/repos/repo_edit_settings.html:10 msgid "" "In case this repository is renamed or moved into another group the " "repository URL changes.\n" @@ -3765,35 +3816,35 @@ "other cases that you need to hardcode the URL into a 3rd party service." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:21 +#: kallithea/templates/admin/repos/repo_edit_settings.html:16 #, fuzzy msgid "Remote repository" msgstr "私有版本庫" -#: kallithea/templates/admin/repos/repo_edit_settings.html:25 +#: kallithea/templates/admin/repos/repo_edit_settings.html:19 #, fuzzy msgid "Repository URL" msgstr "版本庫" -#: kallithea/templates/admin/repos/repo_edit_settings.html:29 +#: kallithea/templates/admin/repos/repo_edit_settings.html:23 msgid "" "Optional: URL of a remote repository. If set, the repository can be " "pulled from this URL." msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:48 +#: kallithea/templates/admin/repos/repo_edit_settings.html:38 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" -#: kallithea/templates/admin/repos/repo_edit_settings.html:58 +#: kallithea/templates/admin/repos/repo_edit_settings.html:46 msgid "Change owner of this repository." msgstr "" +#: kallithea/templates/admin/repos/repo_edit_statistics.html:5 +msgid "Processed commits" +msgstr "" + #: kallithea/templates/admin/repos/repo_edit_statistics.html:6 -msgid "Processed commits" -msgstr "" - -#: kallithea/templates/admin/repos/repo_edit_statistics.html:7 msgid "Processed progress" msgstr "" @@ -3808,318 +3859,379 @@ msgstr "確認移除目前的統計" #: kallithea/templates/admin/repos/repos.html:5 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:156 #, fuzzy msgid "Repositories Administration" msgstr "版本庫管理員" -#: kallithea/templates/admin/repos/repos.html:51 +#: kallithea/templates/admin/repos/repos.html:43 +#: kallithea/tests/data/templates/admin/repos/repos.html.py:120 msgid "State" msgstr "" #: kallithea/templates/admin/settings/settings.html:5 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:192 #, fuzzy msgid "Settings Administration" msgstr "設定管理員" #: kallithea/templates/admin/settings/settings.html:27 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:108 msgid "VCS" msgstr "" #: kallithea/templates/admin/settings/settings.html:28 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:114 msgid "Remap and Rescan" msgstr "" #: kallithea/templates/admin/settings/settings.html:30 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:126 msgid "Visual" msgstr "" #: kallithea/templates/admin/settings/settings.html:32 -#: kallithea/templates/admin/settings/settings_vcs.html:19 +#: kallithea/templates/admin/settings/settings_vcs.html:4 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:138 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:47 msgid "Hooks" msgstr "" #: kallithea/templates/admin/settings/settings.html:33 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:144 msgid "Full Text Search" msgstr "" #: kallithea/templates/admin/settings/settings.html:34 +#: kallithea/tests/data/templates/admin/settings/settings.html.py:150 msgid "System Info" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:7 +#: kallithea/templates/admin/settings/settings_email.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:35 msgid "Send test email to" msgstr "" -#: kallithea/templates/admin/settings/settings_email.html:15 +#: kallithea/templates/admin/settings/settings_email.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_email.html.py:39 msgid "Send" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:8 +#: kallithea/templates/admin/settings/settings_global.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:35 msgid "Site branding" msgstr "" +#: kallithea/templates/admin/settings/settings_global.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:39 +msgid "Set a custom title for your Kallithea Service." +msgstr "" + #: kallithea/templates/admin/settings/settings_global.html:12 -msgid "Set a custom title for your Kallithea Service." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:41 msgid "HTTP authentication realm" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:27 -msgid "Analytics HTML block" -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:31 +#: kallithea/templates/admin/settings/settings_global.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:45 +msgid "HTML/JavaScript/CSS customization block" +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:22 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:49 msgid "" -"HTML with JavaScript for web analytics systems like Google Analytics or " -"Piwik. This will be added at the bottom of every page." -msgstr "" - -#: kallithea/templates/admin/settings/settings_global.html:37 +"HTML (possibly with JavaScript and/or CSS) that " +"will be added to the bottom of every page. This " +"can be used for web analytics systems like Google" +" Analytics or Piwik, but also to perform " +"instance-specific customizations like adding a " +"project banner at the top of every page." +msgstr "" + +#: kallithea/templates/admin/settings/settings_global.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:56 msgid "ReCaptcha public key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:41 +#: kallithea/templates/admin/settings/settings_global.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:60 msgid "Public key for reCaptcha system." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:47 +#: kallithea/templates/admin/settings/settings_global.html:40 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:62 msgid "ReCaptcha private key" msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:51 +#: kallithea/templates/admin/settings/settings_global.html:43 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:66 msgid "" "Private key for reCaptcha system. Setting this value will enable captcha " "on registration." msgstr "" -#: kallithea/templates/admin/settings/settings_global.html:56 -#: kallithea/templates/admin/settings/settings_vcs.html:80 -#: kallithea/templates/admin/settings/settings_visual.html:116 +#: kallithea/templates/admin/settings/settings_global.html:49 +#: kallithea/templates/admin/settings/settings_vcs.html:77 +#: kallithea/templates/admin/settings/settings_visual.html:115 +#: kallithea/tests/data/templates/admin/settings/settings_global.html.py:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:93 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:107 #, fuzzy msgid "Save Settings" msgstr "儲存設定" -#: kallithea/templates/admin/settings/settings_hooks.html:1 +#: kallithea/templates/admin/settings/settings_hooks.html:3 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:38 msgid "Built-in Mercurial Hooks (Read-Only)" msgstr "" -#: kallithea/templates/admin/settings/settings_hooks.html:15 +#: kallithea/templates/admin/settings/settings_hooks.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:49 msgid "" "Hooks can be used to trigger actions on certain events such as push / " "pull. They can trigger Python functions or external applications." msgstr "" #: kallithea/templates/admin/settings/settings_hooks.html:19 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:53 #, fuzzy msgid "Custom Hooks" msgstr "自訂hook" -#: kallithea/templates/admin/settings/settings_hooks.html:67 +#: kallithea/templates/admin/settings/settings_hooks.html:60 +#: kallithea/tests/data/templates/admin/settings/settings_hooks.html.py:89 msgid "Failed to remove hook" msgstr "移除hook失敗" -#: kallithea/templates/admin/settings/settings_mapping.html:6 -msgid "Rescan option" -msgstr "" - -#: kallithea/templates/admin/settings/settings_mapping.html:11 +#: kallithea/templates/admin/settings/settings_mapping.html:4 +#, fuzzy +#| msgid "Description" +msgid "Rescan options" +msgstr "描述" + +#: kallithea/templates/admin/settings/settings_mapping.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:39 msgid "Delete records of missing repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:13 +#: kallithea/templates/admin/settings/settings_mapping.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:41 msgid "" "Check this option to remove all comments, pull requests and other records" " related to repositories that no longer exist in the filesystem." msgstr "" #: kallithea/templates/admin/settings/settings_mapping.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:45 msgid "Invalidate cache for all repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:19 +#: kallithea/templates/admin/settings/settings_mapping.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:47 msgid "Check this to reload data and clear cache keys for all repositories." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:23 -msgid "Install Git hooks" -msgstr "" - #: kallithea/templates/admin/settings/settings_mapping.html:25 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:51 +msgid "Install Git hooks" +msgstr "" + +#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:53 msgid "" "Verify if Kallithea's Git hooks are installed for each repository. " "Current hooks will be updated to the latest version." msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:28 +#: kallithea/templates/admin/settings/settings_mapping.html:32 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:57 msgid "Overwrite existing Git hooks" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:30 +#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:59 msgid "" "If installing Git hooks, overwrite any existing hooks, even if they do " "not seem to come from Kallithea. WARNING: This operation will destroy any" " custom git hooks you may have deployed by hand!" msgstr "" -#: kallithea/templates/admin/settings/settings_mapping.html:35 +#: kallithea/templates/admin/settings/settings_mapping.html:41 +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:61 msgid "Rescan Repositories" msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:7 +#: kallithea/templates/admin/settings/settings_search.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:35 msgid "Index build option" msgstr "" +#: kallithea/templates/admin/settings/settings_search.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:39 +msgid "Build from scratch" +msgstr "" + #: kallithea/templates/admin/settings/settings_search.html:12 -msgid "Build from scratch" -msgstr "" - -#: kallithea/templates/admin/settings/settings_search.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:41 msgid "" "This option completely reindexeses all of the repositories for proper " "fulltext search capabilities." msgstr "" -#: kallithea/templates/admin/settings/settings_search.html:21 +#: kallithea/templates/admin/settings/settings_search.html:18 +#: kallithea/tests/data/templates/admin/settings/settings_search.html.py:43 msgid "Reindex" msgstr "重新索引" -#: kallithea/templates/admin/settings/settings_system.html:4 +#: kallithea/templates/admin/settings/settings_system.html:2 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:49 +msgid "Checking for updates..." +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:7 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 msgid "Kallithea version" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:4 -msgid "Check for updates" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:5 -msgid "Kallithea configuration file" -msgstr "" - -#: kallithea/templates/admin/settings/settings_system.html:6 -msgid "Python version" -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:7 -msgid "Platform" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:36 +msgid "Check for updates" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:8 -msgid "Git version" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:37 +msgid "Kallithea configuration file" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:9 -msgid "Git path" +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:38 +msgid "Python version" msgstr "" #: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:39 +msgid "Platform" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:11 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:40 +msgid "Git version" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:41 +msgid "Git path" +msgstr "" + +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Upgrade info endpoint" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:10 +#: kallithea/templates/admin/settings/settings_system.html:13 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:42 msgid "Note: please make sure this server can access this URL" msgstr "" -#: kallithea/templates/admin/settings/settings_system.html:15 -msgid "Checking for updates..." -msgstr "" - #: kallithea/templates/admin/settings/settings_system.html:23 +#: kallithea/tests/data/templates/admin/settings/settings_system.html.py:60 msgid "Python Packages" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:6 -msgid "Web" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:11 -msgid "Require SSL for vcs operations" -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:13 -msgid "" -"Activate to require SSL both pushing and pulling. If SSL certificate is " -"missing, it will return an HTTP Error 406: Not Acceptable." -msgstr "" - -#: kallithea/templates/admin/settings/settings_vcs.html:24 +#: kallithea/templates/admin/settings/settings_vcs.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:51 msgid "Show repository size after push" msgstr "push 後顯示版本庫大小" -#: kallithea/templates/admin/settings/settings_vcs.html:28 +#: kallithea/templates/admin/settings/settings_vcs.html:15 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:55 msgid "Log user push commands" msgstr "紀錄使用者推送命令" -#: kallithea/templates/admin/settings/settings_vcs.html:32 +#: kallithea/templates/admin/settings/settings_vcs.html:21 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:59 msgid "Log user pull commands" msgstr "紀錄使用者抓取命令" -#: kallithea/templates/admin/settings/settings_vcs.html:36 +#: kallithea/templates/admin/settings/settings_vcs.html:27 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:63 msgid "Update repository after push (hg update)" msgstr "push後更新版本庫 (hg update)" -#: kallithea/templates/admin/settings/settings_vcs.html:42 +#: kallithea/templates/admin/settings/settings_vcs.html:33 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:65 #, fuzzy msgid "Mercurial extensions" msgstr "Mercurial 版本庫" -#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/templates/admin/settings/settings_vcs.html:38 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:69 msgid "Enable largefiles extension" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:51 +#: kallithea/templates/admin/settings/settings_vcs.html:44 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:73 msgid "Enable hgsubversion extension" msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:53 +#: kallithea/templates/admin/settings/settings_vcs.html:47 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:75 msgid "" "Requires hgsubversion library to be installed. Enables cloning of remote " "Subversion repositories while converting them to Mercurial." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/templates/admin/settings/settings_vcs.html:59 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:80 #, fuzzy msgid "Location of repositories" msgstr "建立版本庫" -#: kallithea/templates/admin/settings/settings_vcs.html:69 +#: kallithea/templates/admin/settings/settings_vcs.html:64 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:84 msgid "" "Click to unlock. You must restart Kallithea in order to make this setting" " take effect." msgstr "" -#: kallithea/templates/admin/settings/settings_vcs.html:72 +#: kallithea/templates/admin/settings/settings_vcs.html:68 +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:86 msgid "" "Filesystem location where repositories are stored. After changing this " "value, a restart and rescan of the repository folder are both required." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:8 +#: kallithea/templates/admin/settings/settings_visual.html:4 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:35 msgid "General" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:13 +#: kallithea/templates/admin/settings/settings_visual.html:9 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:39 msgid "Use repository extra fields" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:15 +#: kallithea/templates/admin/settings/settings_visual.html:12 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:41 msgid "Allows storing additional customized fields per repository." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:18 +#: kallithea/templates/admin/settings/settings_visual.html:17 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:45 msgid "Show Kallithea version" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:20 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:47 msgid "Shows or hides a version number of Kallithea displayed in the footer." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:24 -msgid "Use Gravatars in Kallithea" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:30 +#: kallithea/templates/admin/settings/settings_visual.html:25 +msgid "Show user Gravatars" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:29 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:55 msgid "" "Gravatar URL allows you to use another avatar server application.\n" " The following " @@ -4136,102 +4248,127 @@ "network location/server host of running Kallithea server" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:42 +#: kallithea/templates/admin/settings/settings_visual.html:40 +#: kallithea/templates/summary/summary.html:62 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:63 +#: kallithea/tests/data/templates/summary/summary.html.py:133 +#, fuzzy +msgid "Clone URL" +msgstr "複製連結" + +#: kallithea/templates/admin/settings/settings_visual.html:43 msgid "" "Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." "\n" -" The following " +" The following " "variables are available:\n" -" {scheme} 'http' " -"or 'https' sent from running Kallithea server,\n" -" {user} current " -"user username,\n" -" {netloc} network " +" {scheme} 'http' or " +"'https' sent from running Kallithea server,\n" +" {user} current user" +" username,\n" +" {netloc} network " "location/server host of running Kallithea server,\n" -" {repo} full " +" {repo} full " "repository name,\n" -" {repoid} ID of " -"repository, can be used to contruct clone-by-id" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:55 -msgid "Dashboard items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:59 +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:54 +#, fuzzy +#| msgid "repositories" +msgid "Repository page size" +msgstr "個版本庫" + +#: kallithea/templates/admin/settings/settings_visual.html:57 msgid "" -"Number of items displayed in the main page dashboard before pagination is" -" shown." +"Number of items displayed in the repository pages before pagination is " +"shown." +msgstr "" + +#: kallithea/templates/admin/settings/settings_visual.html:62 +msgid "Admin page size" msgstr "" #: kallithea/templates/admin/settings/settings_visual.html:65 -msgid "Admin pages items" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:69 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:85 msgid "" "Number of items displayed in the admin pages grids before pagination is " "shown." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/templates/admin/settings/settings_visual.html:70 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:87 msgid "Icons" msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:80 +#: kallithea/templates/admin/settings/settings_visual.html:75 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:91 msgid "Show public repository icon on repositories" msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:81 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:95 +msgid "Show private repository icon on repositories" +msgstr "" + #: kallithea/templates/admin/settings/settings_visual.html:84 -msgid "Show private repository icon on repositories" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:86 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:97 msgid "Show public/private icons next to repository names." msgstr "" -#: kallithea/templates/admin/settings/settings_visual.html:92 +#: kallithea/templates/admin/settings/settings_visual.html:89 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:99 #, fuzzy msgid "Meta Tagging" msgstr "設定" -#: kallithea/templates/admin/settings/settings_visual.html:97 -msgid "Stylify recognised meta tags:" -msgstr "" - -#: kallithea/templates/admin/settings/settings_visual.html:111 +#: kallithea/templates/admin/settings/settings_visual.html:94 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:105 msgid "" "Parses meta tags from the repository description field and turns them " "into colored tags." msgstr "" +#: kallithea/templates/admin/settings/settings_visual.html:98 +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:103 +msgid "Stylify recognised meta tags:" +msgstr "" + #: kallithea/templates/admin/user_groups/user_group_add.html:5 msgid "Add user group" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:10 #: kallithea/templates/admin/user_groups/user_group_edit.html:11 -#: kallithea/templates/admin/user_groups/user_groups.html:10 -#: kallithea/templates/base/base.html:63 kallithea/templates/base/base.html:83 +#: kallithea/templates/admin/user_groups/user_groups.html:9 +#: kallithea/templates/base/base.html:59 kallithea/templates/base/base.html:79 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:164 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:146 +#: kallithea/tests/data/templates/base/base.html.py:255 +#: kallithea/tests/data/templates/base/base.html.py:702 msgid "User Groups" msgstr "" #: kallithea/templates/admin/user_groups/user_group_add.html:12 -#: kallithea/templates/admin/user_groups/user_groups.html:25 +#: kallithea/templates/admin/user_groups/user_groups.html:24 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:107 msgid "Add User Group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_add.html:44 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:19 +#: kallithea/templates/admin/user_groups/user_group_add.html:36 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:13 msgid "Short, optional description for this user group." msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:188 #, python-format msgid "%s user group settings" msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit.html:33 +#: kallithea/tests/data/templates/admin/user_groups/user_group_edit.html.py:136 #, fuzzy msgid "Show Members" msgstr "成員" @@ -4242,13 +4379,15 @@ msgstr "" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:6 -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:32 -#: kallithea/templates/admin/user_groups/user_groups.html:48 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:23 +#: kallithea/templates/admin/user_groups/user_groups.html:40 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:116 msgid "Members" msgstr "成員" #: kallithea/templates/admin/user_groups/user_group_edit_advanced.html:19 -#: kallithea/templates/data_table/_dt_elements.html:174 +#: kallithea/templates/data_table/_dt_elements.html:120 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:124 #, python-format msgid "Confirm to delete this user group: %s" msgstr "" @@ -4257,49 +4396,60 @@ msgid "Delete this user group" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_members.html:17 +#: kallithea/templates/admin/user_groups/user_group_edit_members.html:11 msgid "No members yet" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:40 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:26 msgid "Chosen group members" msgstr "" -#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:49 +#: kallithea/templates/admin/user_groups/user_group_edit_settings.html:39 msgid "Available members" msgstr "啟用的成員" #: kallithea/templates/admin/user_groups/user_groups.html:5 +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:164 #, fuzzy msgid "User Groups Administration" msgstr "使用者管理員" #: kallithea/templates/admin/users/user_add.html:5 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:185 msgid "Add user" msgstr "新增使用者" #: kallithea/templates/admin/users/user_add.html:10 #: kallithea/templates/admin/users/user_edit.html:11 -#: kallithea/templates/admin/users/users.html:10 -#: kallithea/templates/base/base.html:62 +#: kallithea/templates/admin/users/users.html:9 +#: kallithea/templates/base/base.html:58 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:165 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:170 +#: kallithea/tests/data/templates/admin/users/users.html.py:145 +#: kallithea/tests/data/templates/base/base.html.py:251 msgid "Users" msgstr "使用者" #: kallithea/templates/admin/users/user_add.html:12 -#: kallithea/templates/admin/users/users.html:24 +#: kallithea/templates/admin/users/users.html:23 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:167 +#: kallithea/tests/data/templates/admin/users/users.html.py:105 msgid "Add User" msgstr "" -#: kallithea/templates/admin/users/user_add.html:50 +#: kallithea/templates/admin/users/user_add.html:41 +#: kallithea/tests/data/templates/admin/users/user_add.html.py:117 msgid "Password confirmation" msgstr "" #: kallithea/templates/admin/users/user_edit.html:5 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:194 #, python-format msgid "%s user settings" msgstr "" #: kallithea/templates/admin/users/user_edit.html:30 +#: kallithea/tests/data/templates/admin/users/user_edit.html.py:118 msgid "Emails" msgstr "" @@ -4309,12 +4459,14 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:7 -#: kallithea/templates/admin/users/user_edit_profile.html:42 +#: kallithea/templates/admin/users/user_edit_profile.html:32 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:70 msgid "Source of Record" msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:9 -#: kallithea/templates/admin/users/users.html:53 +#: kallithea/templates/admin/users/users.html:41 +#: kallithea/tests/data/templates/admin/users/users.html.py:115 msgid "Last Login" msgstr "" @@ -4323,7 +4475,8 @@ msgstr "" #: kallithea/templates/admin/users/user_edit_advanced.html:21 -#: kallithea/templates/data_table/_dt_elements.html:158 +#: kallithea/templates/data_table/_dt_elements.html:105 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:397 #, python-format msgid "Confirm to delete this user: %s" msgstr "" @@ -4332,949 +4485,1247 @@ msgid "Delete this user" msgstr "" -#: kallithea/templates/admin/users/user_edit_ips.html:8 +#: kallithea/templates/admin/users/user_edit_ips.html:7 +#: kallithea/tests/data/templates/admin/users/user_edit_ips.html.py:45 #, python-format msgid "Inherited from %s" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:8 -msgid "Change avatar at" -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:12 -msgid "Missing email, please update this user email address." -msgstr "" - -#: kallithea/templates/admin/users/user_edit_profile.html:51 +#: kallithea/templates/admin/users/user_edit_profile.html:39 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:74 msgid "Name in Source of Record" msgstr "" -#: kallithea/templates/admin/users/user_edit_profile.html:69 +#: kallithea/templates/admin/users/user_edit_profile.html:53 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:82 msgid "New password confirmation" msgstr "" #: kallithea/templates/admin/users/users.html:5 +#: kallithea/tests/data/templates/admin/users/users.html.py:163 #, fuzzy msgid "Users Administration" msgstr "使用者管理員" -#: kallithea/templates/admin/users/users.html:56 +#: kallithea/templates/admin/users/users.html:44 +#: kallithea/tests/data/templates/admin/users/users.html.py:121 msgid "Auth Type" msgstr "" -#: kallithea/templates/base/base.html:18 +#: kallithea/templates/base/base.html:16 +#: kallithea/tests/data/templates/base/base.html.py:59 #, python-format msgid "Server instance: %s" msgstr "" -#: kallithea/templates/base/base.html:30 +#: kallithea/templates/base/base.html:28 +#: kallithea/tests/data/templates/base/base.html.py:78 msgid "Support" msgstr "" -#: kallithea/templates/base/base.html:90 +#: kallithea/templates/base/base.html:86 +#: kallithea/tests/data/templates/base/base.html.py:213 msgid "Mercurial repository" msgstr "Mercurial 版本庫" -#: kallithea/templates/base/base.html:93 +#: kallithea/templates/base/base.html:89 +#: kallithea/tests/data/templates/base/base.html.py:217 msgid "Git repository" msgstr "Git 版本庫" -#: kallithea/templates/base/base.html:119 +#: kallithea/templates/base/base.html:114 +#: kallithea/tests/data/templates/base/base.html.py:322 msgid "Create Fork" msgstr "" -#: kallithea/templates/base/base.html:130 -#: kallithea/templates/data_table/_dt_elements.html:13 -#: kallithea/templates/data_table/_dt_elements.html:17 +#: kallithea/templates/base/base.html:125 #: kallithea/templates/summary/summary.html:8 +#: kallithea/tests/data/templates/base/base.html.py:333 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:67 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:71 +#: kallithea/tests/data/templates/summary/summary.html.py:357 msgid "Summary" msgstr "概況" -#: kallithea/templates/base/base.html:132 -#: kallithea/templates/base/base.html:134 +#: kallithea/templates/base/base.html:127 +#: kallithea/templates/base/base.html:129 #: kallithea/templates/changelog/changelog.html:14 -#: kallithea/templates/data_table/_dt_elements.html:21 -#: kallithea/templates/data_table/_dt_elements.html:25 +#: kallithea/tests/data/templates/base/base.html.py:341 +#: kallithea/tests/data/templates/base/base.html.py:349 +#: kallithea/tests/data/templates/changelog/changelog.html.py:321 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:73 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:77 msgid "Changelog" msgstr "修改紀錄" -#: kallithea/templates/base/base.html:136 -#: kallithea/templates/data_table/_dt_elements.html:29 -#: kallithea/templates/data_table/_dt_elements.html:33 +#: kallithea/templates/base/base.html:131 #: kallithea/templates/files/files.html:11 +#: kallithea/tests/data/templates/base/base.html.py:356 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:79 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:83 +#: kallithea/tests/data/templates/files/files.html.py:184 msgid "Files" msgstr "檔案" -#: kallithea/templates/base/base.html:138 -msgid "Switch To" -msgstr "" - -#: kallithea/templates/base/base.html:145 -#: kallithea/templates/base/base.html:147 +#: kallithea/templates/base/base.html:137 +#: kallithea/templates/base/base.html:139 +#: kallithea/tests/data/templates/base/base.html.py:366 +#: kallithea/tests/data/templates/base/base.html.py:370 msgid "Options" msgstr "選項" +#: kallithea/templates/base/base.html:147 +#: kallithea/templates/forks/forks_data.html:18 +#: kallithea/tests/data/templates/base/base.html.py:383 +#: kallithea/tests/data/templates/forks/forks_data.html.py:59 +msgid "Compare Fork" +msgstr "" + +#: kallithea/templates/base/base.html:149 +#: kallithea/tests/data/templates/base/base.html.py:388 +msgid "Compare" +msgstr "" + +#: kallithea/templates/base/base.html:151 +#: kallithea/templates/base/base.html:320 +#: kallithea/templates/search/search.html:14 +#: kallithea/templates/search/search.html:67 +#: kallithea/tests/data/templates/base/base.html.py:392 +#: kallithea/tests/data/templates/base/base.html.py:544 +#: kallithea/tests/data/templates/search/search.html.py:134 +#: kallithea/tests/data/templates/search/search.html.py:185 +msgid "Search" +msgstr "搜尋" + #: kallithea/templates/base/base.html:155 -#: kallithea/templates/forks/forks_data.html:21 -msgid "Compare Fork" +#: kallithea/tests/data/templates/base/base.html.py:399 +msgid "Unlock" msgstr "" #: kallithea/templates/base/base.html:157 -#: kallithea/templates/bookmarks/bookmarks.html:56 -#: kallithea/templates/bookmarks/bookmarks_data.html:13 -#: kallithea/templates/branches/branches.html:56 -#: kallithea/templates/branches/branches_data.html:13 -#: kallithea/templates/tags/tags.html:56 -#: kallithea/templates/tags/tags_data.html:13 -msgid "Compare" -msgstr "" - -#: kallithea/templates/base/base.html:159 -#: kallithea/templates/base/base.html:247 -#: kallithea/templates/search/search.html:14 -#: kallithea/templates/search/search.html:54 -msgid "Search" -msgstr "搜尋" - -#: kallithea/templates/base/base.html:163 -msgid "Unlock" +#: kallithea/tests/data/templates/base/base.html.py:405 +msgid "Lock" msgstr "" #: kallithea/templates/base/base.html:165 -msgid "Lock" -msgstr "" - -#: kallithea/templates/base/base.html:173 +#: kallithea/tests/data/templates/base/base.html.py:413 msgid "Follow" msgstr "" -#: kallithea/templates/base/base.html:174 +#: kallithea/templates/base/base.html:166 +#: kallithea/tests/data/templates/base/base.html.py:415 msgid "Unfollow" msgstr "" -#: kallithea/templates/base/base.html:177 -#: kallithea/templates/data_table/_dt_elements.html:37 -#: kallithea/templates/data_table/_dt_elements.html:41 -#: kallithea/templates/forks/fork.html:9 +#: kallithea/templates/base/base.html:169 kallithea/templates/forks/fork.html:9 +#: kallithea/tests/data/templates/base/base.html.py:419 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:85 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:89 msgid "Fork" msgstr "分支" -#: kallithea/templates/base/base.html:178 -#: kallithea/templates/pullrequests/pullrequest.html:88 +#: kallithea/templates/base/base.html:170 +#: kallithea/templates/pullrequests/pullrequest.html:77 +#: kallithea/tests/data/templates/base/base.html.py:423 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:148 msgid "Create Pull Request" msgstr "" -#: kallithea/templates/base/base.html:183 +#: kallithea/templates/base/base.html:175 +#: kallithea/tests/data/templates/base/base.html.py:430 #, python-format msgid "Show Pull Requests for %s" msgstr "" -#: kallithea/templates/base/base.html:221 +#: kallithea/templates/base/base.html:188 +#: kallithea/tests/data/templates/base/base.html.py:439 +msgid "Switch To" +msgstr "" + +#: kallithea/templates/base/base.html:198 +#: kallithea/templates/base/base.html:458 +#: kallithea/tests/data/templates/base/base.html.py:441 +#: kallithea/tests/data/templates/base/base.html.py:656 +msgid "No matches found" +msgstr "" + +#: kallithea/templates/base/base.html:294 +#: kallithea/tests/data/templates/base/base.html.py:494 msgid "Show recent activity" msgstr "" -#: kallithea/templates/base/base.html:227 -#: kallithea/templates/base/base.html:228 +#: kallithea/templates/base/base.html:300 +#: kallithea/templates/base/base.html:301 +#: kallithea/tests/data/templates/base/base.html.py:504 +#: kallithea/tests/data/templates/base/base.html.py:508 msgid "Public journal" msgstr "公開日誌" -#: kallithea/templates/base/base.html:233 +#: kallithea/templates/base/base.html:306 +#: kallithea/tests/data/templates/base/base.html.py:513 msgid "Show public gists" msgstr "" -#: kallithea/templates/base/base.html:234 +#: kallithea/templates/base/base.html:307 +#: kallithea/tests/data/templates/base/base.html.py:517 msgid "Gists" msgstr "" -#: kallithea/templates/base/base.html:238 +#: kallithea/templates/base/base.html:311 +#: kallithea/tests/data/templates/base/base.html.py:525 msgid "All Public Gists" msgstr "" -#: kallithea/templates/base/base.html:240 +#: kallithea/templates/base/base.html:313 +#: kallithea/tests/data/templates/base/base.html.py:531 msgid "My Public Gists" msgstr "" -#: kallithea/templates/base/base.html:241 +#: kallithea/templates/base/base.html:314 +#: kallithea/tests/data/templates/base/base.html.py:535 msgid "My Private Gists" msgstr "" -#: kallithea/templates/base/base.html:246 -msgid "Search in repositories" -msgstr "" - -#: kallithea/templates/base/base.html:269 -#: kallithea/templates/base/base.html:270 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 -#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 -msgid "My Pull Requests" -msgstr "" - -#: kallithea/templates/base/base.html:289 -msgid "Not Logged In" -msgstr "" - -#: kallithea/templates/base/base.html:296 -msgid "Login to Your Account" -msgstr "" - #: kallithea/templates/base/base.html:319 -msgid "Forgot password ?" +#: kallithea/tests/data/templates/base/base.html.py:540 +msgid "Search in repositories" +msgstr "" + +#: kallithea/templates/base/base.html:342 +#: kallithea/templates/base/base.html:343 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:6 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:10 +#: kallithea/tests/data/templates/base/base.html.py:573 +#: kallithea/tests/data/templates/base/base.html.py:577 +msgid "My Pull Requests" +msgstr "" + +#: kallithea/templates/base/base.html:367 +#: kallithea/tests/data/templates/base/base.html.py:602 +msgid "Not Logged In" +msgstr "" + +#: kallithea/templates/base/base.html:375 +#: kallithea/tests/data/templates/base/base.html.py:607 +msgid "Login to Your Account" +msgstr "" + +#: kallithea/templates/base/base.html:385 +#, fuzzy +#| msgid "Forgot password ?" +msgid "Forgot password?" msgstr "忘記密碼?" -#: kallithea/templates/base/base.html:346 +#: kallithea/templates/base/base.html:389 +#, fuzzy +#| msgid "Don't have an account ?" +msgid "Don't have an account?" +msgstr "沒有帳號?" + +#: kallithea/templates/base/base.html:407 +#: kallithea/tests/data/templates/base/base.html.py:648 msgid "Log Out" msgstr "登出" -#: kallithea/templates/base/base.html:395 -msgid "No matches found" -msgstr "" - -#: kallithea/templates/base/base.html:524 -msgid "Keyboard shortcuts" -msgstr "" - -#: kallithea/templates/base/base.html:533 -msgid "Site-wide shortcuts" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:14 +#: kallithea/templates/base/default_perms_box.html:11 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:47 #, fuzzy msgid "Inherit defaults" msgstr "個版本庫" -#: kallithea/templates/base/default_perms_box.html:19 +#: kallithea/templates/base/default_perms_box.html:15 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:51 #, python-format msgid "" "Select to inherit global settings, IP whitelist and permissions from the " "%s." msgstr "" -#: kallithea/templates/base/default_perms_box.html:28 +#: kallithea/templates/base/default_perms_box.html:23 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:54 msgid "Create repositories" msgstr "建立版本庫" +#: kallithea/templates/base/default_perms_box.html:27 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:58 +msgid "Select this option to allow repository creation for this user" +msgstr "" + #: kallithea/templates/base/default_perms_box.html:33 -msgid "Select this option to allow repository creation for this user" -msgstr "" - -#: kallithea/templates/base/default_perms_box.html:40 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:60 msgid "Create user groups" msgstr "" -#: kallithea/templates/base/default_perms_box.html:45 +#: kallithea/templates/base/default_perms_box.html:37 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:64 msgid "Select this option to allow user group creation for this user" msgstr "" -#: kallithea/templates/base/default_perms_box.html:52 +#: kallithea/templates/base/default_perms_box.html:43 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:66 msgid "Fork repositories" msgstr "" -#: kallithea/templates/base/default_perms_box.html:57 +#: kallithea/templates/base/default_perms_box.html:47 +#: kallithea/tests/data/templates/base/default_perms_box.html.py:70 msgid "Select this option to allow repository forking for this user" msgstr "" #: kallithea/templates/base/perms_summary.html:13 -#: kallithea/templates/changelog/changelog.html:42 +#: kallithea/templates/changelog/changelog.html:39 +#: kallithea/tests/data/templates/base/perms_summary.html.py:51 +#: kallithea/tests/data/templates/changelog/changelog.html.py:128 msgid "Show" msgstr "顯示" #: kallithea/templates/base/perms_summary.html:22 +#: kallithea/tests/data/templates/base/perms_summary.html.py:80 msgid "No permissions defined yet" msgstr "" #: kallithea/templates/base/perms_summary.html:30 -#: kallithea/templates/base/perms_summary.html:54 +#: kallithea/templates/base/perms_summary.html:55 +#: kallithea/tests/data/templates/base/perms_summary.html.py:90 +#: kallithea/tests/data/templates/base/perms_summary.html.py:113 msgid "Permission" msgstr "" #: kallithea/templates/base/perms_summary.html:32 -#: kallithea/templates/base/perms_summary.html:56 +#: kallithea/templates/base/perms_summary.html:57 +#: kallithea/tests/data/templates/base/perms_summary.html.py:94 +#: kallithea/tests/data/templates/base/perms_summary.html.py:117 msgid "Edit Permission" msgstr "" -#: kallithea/templates/base/perms_summary.html:90 +#: kallithea/templates/base/perms_summary.html:92 +#: kallithea/tests/data/templates/base/perms_summary.html.py:169 msgid "No permission defined" msgstr "" -#: kallithea/templates/base/root.html:22 +#: kallithea/templates/base/root.html:25 +#: kallithea/tests/data/templates/base/root.html.py:85 #, fuzzy msgid "Add Another Comment" msgstr "" -#: kallithea/templates/base/root.html:23 -#: kallithea/templates/data_table/_dt_elements.html:214 +#: kallithea/templates/base/root.html:26 +#: kallithea/tests/data/templates/base/root.html.py:87 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:242 msgid "Stop following this repository" msgstr "停止追蹤這個版本庫" -#: kallithea/templates/base/root.html:24 +#: kallithea/templates/base/root.html:27 +#: kallithea/tests/data/templates/base/root.html.py:89 msgid "Start following this repository" msgstr "開始追蹤這個版本庫" -#: kallithea/templates/base/root.html:25 +#: kallithea/templates/base/root.html:28 +#: kallithea/tests/data/templates/base/root.html.py:91 msgid "Group" msgstr "群組" -#: kallithea/templates/base/root.html:26 +#: kallithea/templates/base/root.html:29 +#: kallithea/tests/data/templates/base/root.html.py:93 msgid "members" msgstr "成員" -#: kallithea/templates/base/root.html:27 +#: kallithea/templates/base/root.html:30 +#: kallithea/tests/data/templates/base/root.html.py:95 msgid "Loading ..." msgstr "" -#: kallithea/templates/base/root.html:28 -msgid "loading ..." -msgstr "" - -#: kallithea/templates/base/root.html:29 -msgid "Search truncated" -msgstr "" - -#: kallithea/templates/base/root.html:30 -msgid "No matching files" -msgstr "" - #: kallithea/templates/base/root.html:31 -msgid "Open New Pull Request from {0}" +#: kallithea/tests/data/templates/base/root.html.py:97 +msgid "loading ..." msgstr "" #: kallithea/templates/base/root.html:32 -msgid "Open New Pull Request for {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:99 +msgid "Search truncated" msgstr "" #: kallithea/templates/base/root.html:33 -msgid "Show Selected Changesets {0} → {1}" +#: kallithea/tests/data/templates/base/root.html.py:101 +msgid "No matching files" msgstr "" #: kallithea/templates/base/root.html:34 -msgid "Selection Link" +#: kallithea/tests/data/templates/base/root.html.py:103 +msgid "Open New Pull Request from {0}" msgstr "" #: kallithea/templates/base/root.html:35 -#: kallithea/templates/changeset/diff_block.html:8 +#: kallithea/tests/data/templates/base/root.html.py:105 +msgid "Open New Pull Request for {0} → {1}" +msgstr "" + +#: kallithea/templates/base/root.html:36 +#: kallithea/tests/data/templates/base/root.html.py:107 +msgid "Show Selected Changesets {0} → {1}" +msgstr "" + +#: kallithea/templates/base/root.html:37 +#: kallithea/tests/data/templates/base/root.html.py:109 +msgid "Selection Link" +msgstr "" + +#: kallithea/templates/base/root.html:38 +#: kallithea/templates/changeset/diff_block.html:7 +#: kallithea/tests/data/templates/base/root.html.py:111 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:55 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:230 #, fuzzy msgid "Collapse Diff" msgstr "檔案差異" -#: kallithea/templates/base/root.html:36 +#: kallithea/templates/base/root.html:39 +#: kallithea/tests/data/templates/base/root.html.py:113 #, fuzzy msgid "Expand Diff" msgstr "檔案差異" -#: kallithea/templates/base/root.html:37 +#: kallithea/templates/base/root.html:40 +#: kallithea/tests/data/templates/base/root.html.py:115 msgid "Failed to revoke permission" msgstr "" -#: kallithea/templates/base/root.html:38 +#: kallithea/templates/base/root.html:41 +#: kallithea/tests/data/templates/base/root.html.py:117 msgid "Confirm to revoke permission for {0}: {1} ?" msgstr "" -#: kallithea/templates/base/root.html:39 -msgid "enabled" -msgstr "" - -#: kallithea/templates/base/root.html:40 -msgid "disabled" -msgstr "" - -#: kallithea/templates/base/root.html:42 +#: kallithea/templates/base/root.html:44 +#: kallithea/templates/compare/compare_diff.html:108 +#: kallithea/tests/data/templates/base/root.html.py:123 +msgid "Select changeset" +msgstr "" + +#: kallithea/templates/base/root.html:45 +#: kallithea/tests/data/templates/base/root.html.py:125 msgid "Specify changeset" msgstr "" -#: kallithea/templates/bookmarks/bookmarks.html:5 -#, python-format -msgid "%s Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:26 -msgid "Compare Bookmarks" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:53 -#: kallithea/templates/bookmarks/bookmarks_data.html:10 -#: kallithea/templates/branches/branches.html:53 -#: kallithea/templates/branches/branches_data.html:10 -#: kallithea/templates/changelog/changelog_summary_data.html:10 -#: kallithea/templates/tags/tags.html:53 -#: kallithea/templates/tags/tags_data.html:10 -msgid "Author" -msgstr "" - -#: kallithea/templates/bookmarks/bookmarks.html:54 -#: kallithea/templates/bookmarks/bookmarks_data.html:12 -#: kallithea/templates/branches/branches.html:54 -#: kallithea/templates/branches/branches_data.html:12 -#: kallithea/templates/changelog/changelog_summary_data.html:7 -#: kallithea/templates/files/files_browser.html:32 -#: kallithea/templates/pullrequests/pullrequest.html:62 -#: kallithea/templates/pullrequests/pullrequest.html:78 -#: kallithea/templates/tags/tags.html:54 -#: kallithea/templates/tags/tags_data.html:12 -msgid "Revision" -msgstr "修訂" - -#: kallithea/templates/branches/branches.html:5 -#, python-format -msgid "%s Branches" -msgstr "" - -#: kallithea/templates/branches/branches.html:26 -msgid "Compare Branches" +#: kallithea/templates/base/root.html:46 +#: kallithea/tests/data/templates/base/root.html.py:127 +msgid "Click to sort ascending" +msgstr "" + +#: kallithea/templates/base/root.html:47 +#: kallithea/tests/data/templates/base/root.html.py:129 +msgid "Click to sort descending" +msgstr "" + +#: kallithea/templates/base/root.html:48 +#: kallithea/tests/data/templates/base/root.html.py:131 +msgid "No records found." +msgstr "" + +#: kallithea/templates/base/root.html:49 +#: kallithea/tests/data/templates/base/root.html.py:133 +msgid "Data error." +msgstr "" + +#: kallithea/templates/base/root.html:50 +#: kallithea/tests/data/templates/base/root.html.py:135 +msgid "Loading..." msgstr "" #: kallithea/templates/changelog/changelog.html:6 +#: kallithea/tests/data/templates/changelog/changelog.html.py:354 #, python-format msgid "%s Changelog" msgstr "" #: kallithea/templates/changelog/changelog.html:21 +#: kallithea/tests/data/templates/changelog/changelog.html.py:332 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "" -#: kallithea/templates/changelog/changelog.html:49 +#: kallithea/templates/changelog/changelog.html:45 +#: kallithea/tests/data/templates/changelog/changelog.html.py:141 msgid "Clear selection" msgstr "" -#: kallithea/templates/changelog/changelog.html:55 +#: kallithea/templates/changelog/changelog.html:52 +#: kallithea/tests/data/templates/changelog/changelog.html.py:147 #, fuzzy msgid "Go to tip of repository" msgstr "Git 版本庫" -#: kallithea/templates/changelog/changelog.html:60 -#: kallithea/templates/forks/forks_data.html:19 +#: kallithea/templates/changelog/changelog.html:57 +#: kallithea/templates/forks/forks_data.html:16 +#: kallithea/tests/data/templates/changelog/changelog.html.py:151 +#: kallithea/tests/data/templates/forks/forks_data.html.py:55 #, python-format msgid "Compare fork with %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:62 +#: kallithea/templates/changelog/changelog.html:59 +#: kallithea/tests/data/templates/changelog/changelog.html.py:155 #, python-format msgid "Compare fork with parent repository (%s)" msgstr "" -#: kallithea/templates/changelog/changelog.html:66 +#: kallithea/templates/changelog/changelog.html:63 #: kallithea/templates/files/files.html:29 +#: kallithea/tests/data/templates/changelog/changelog.html.py:158 +#: kallithea/tests/data/templates/files/files.html.py:117 msgid "Branch filter:" msgstr "" -#: kallithea/templates/changelog/changelog.html:92 -#: kallithea/templates/changelog/changelog_summary_data.html:20 +#: kallithea/templates/changelog/changelog.html:86 +#: kallithea/templates/changelog/changelog_summary_data.html:18 +#: kallithea/tests/data/templates/changelog/changelog.html.py:183 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:61 #, python-format msgid "" -"Changeset status: %s\n" +"Changeset status: %s by %s\n" "Click to open associated pull request %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:96 -#: kallithea/templates/compare/compare_cs.html:24 -#, python-format -msgid "Changeset status: %s" -msgstr "" - -#: kallithea/templates/changelog/changelog.html:115 -#: kallithea/templates/compare/compare_cs.html:63 +#: kallithea/templates/changelog/changelog.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:22 +#: kallithea/tests/data/templates/changelog/changelog.html.py:191 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:69 +#, fuzzy, python-format +msgid "Changeset status: %s by %s" +msgstr "尚未有任何變更" + +#: kallithea/templates/changelog/changelog.html:107 +#: kallithea/templates/compare/compare_cs.html:76 +#: kallithea/tests/data/templates/changelog/changelog.html.py:217 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:116 msgid "Expand commit message" msgstr "" -#: kallithea/templates/changelog/changelog.html:124 -#: kallithea/templates/compare/compare_cs.html:30 +#: kallithea/templates/changelog/changelog.html:116 +#: kallithea/templates/compare/compare_cs.html:41 +#: kallithea/tests/data/templates/changelog/changelog.html.py:225 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:71 msgid "Changeset has comments" msgstr "" -#: kallithea/templates/changelog/changelog.html:134 -#: kallithea/templates/changelog/changelog_summary_data.html:54 -#: kallithea/templates/changeset/changeset.html:94 -#: kallithea/templates/changeset/changeset_range.html:92 +#: kallithea/templates/changelog/changelog.html:151 +#: kallithea/templates/changelog/changelog_summary_data.html:53 +#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset_range.html:84 +#: kallithea/tests/data/templates/changelog/changelog.html.py:234 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:103 +#: kallithea/tests/data/templates/changeset/changeset.html.py:216 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:200 #, python-format msgid "Bookmark %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:140 -#: kallithea/templates/changelog/changelog_summary_data.html:60 -#: kallithea/templates/changeset/changeset.html:101 -#: kallithea/templates/changeset/changeset_range.html:98 +#: kallithea/templates/changelog/changelog.html:157 +#: kallithea/templates/changelog/changelog_summary_data.html:59 +#: kallithea/templates/changeset/changeset.html:85 +#: kallithea/templates/changeset/changeset_range.html:90 +#: kallithea/templates/compare/compare_cs.html:82 +#: kallithea/templates/pullrequests/pullrequest_show.html:177 +#: kallithea/tests/data/templates/changelog/changelog.html.py:240 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:109 +#: kallithea/tests/data/templates/changeset/changeset.html.py:223 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:206 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:120 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:295 #, python-format msgid "Tag %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:145 -#: kallithea/templates/changelog/changelog_summary_data.html:65 -#: kallithea/templates/changeset/changeset.html:106 -#: kallithea/templates/changeset/changeset_range.html:102 +#: kallithea/templates/changelog/changelog.html:162 +#: kallithea/templates/changelog/changelog_summary_data.html:64 +#: kallithea/templates/changeset/changeset.html:90 +#: kallithea/templates/changeset/changeset_range.html:94 +#: kallithea/tests/data/templates/changelog/changelog.html.py:246 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:115 +#: kallithea/tests/data/templates/changeset/changeset.html.py:230 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:212 #, python-format msgid "Branch %s" msgstr "" -#: kallithea/templates/changelog/changelog.html:309 +#: kallithea/templates/changelog/changelog.html:326 +#: kallithea/tests/data/templates/changelog/changelog.html.py:289 msgid "There are no changes yet" msgstr "尚未有任何變更" #: kallithea/templates/changelog/changelog_details.html:4 -#: kallithea/templates/changeset/changeset.html:77 +#: kallithea/templates/changeset/changeset.html:98 +#: kallithea/tests/data/templates/changeset/changeset.html.py:187 msgid "Removed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:5 -#: kallithea/templates/changeset/changeset.html:78 +#: kallithea/templates/changeset/changeset.html:99 +#: kallithea/tests/data/templates/changeset/changeset.html.py:191 msgid "Changed" msgstr "" #: kallithea/templates/changelog/changelog_details.html:6 -#: kallithea/templates/changeset/changeset.html:79 -#: kallithea/templates/changeset/diff_block.html:79 +#: kallithea/templates/changeset/changeset.html:100 +#: kallithea/templates/changeset/diff_block.html:38 +#: kallithea/tests/data/templates/changeset/changeset.html.py:195 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:110 msgid "Added" msgstr "" #: kallithea/templates/changelog/changelog_details.html:8 #: kallithea/templates/changelog/changelog_details.html:9 #: kallithea/templates/changelog/changelog_details.html:10 -#: kallithea/templates/changeset/changeset.html:81 -#: kallithea/templates/changeset/changeset.html:82 -#: kallithea/templates/changeset/changeset.html:83 +#: kallithea/templates/changeset/changeset.html:102 +#: kallithea/templates/changeset/changeset.html:103 +#: kallithea/templates/changeset/changeset.html:104 +#: kallithea/tests/data/templates/changeset/changeset.html.py:201 +#: kallithea/tests/data/templates/changeset/changeset.html.py:203 +#: kallithea/tests/data/templates/changeset/changeset.html.py:205 #, python-format msgid "Affected %s files" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:7 +#: kallithea/templates/files/files_browser.html:32 +#: kallithea/templates/pullrequests/pullrequest.html:52 +#: kallithea/templates/pullrequests/pullrequest.html:68 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:43 +#: kallithea/tests/data/templates/files/files_browser.html.py:52 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:134 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:146 +msgid "Revision" +msgstr "修訂" + #: kallithea/templates/changelog/changelog_summary_data.html:8 -#: kallithea/templates/files/files_add.html:60 -#: kallithea/templates/files/files_delete.html:39 -#: kallithea/templates/files/files_edit.html:63 +#: kallithea/templates/files/files_add.html:64 +#: kallithea/templates/files/files_delete.html:34 +#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:45 +#: kallithea/tests/data/templates/files/files_add.html.py:243 msgid "Commit Message" msgstr "" #: kallithea/templates/changelog/changelog_summary_data.html:9 #: kallithea/templates/pullrequests/pullrequest_data.html:17 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:47 msgid "Age" msgstr "" +#: kallithea/templates/changelog/changelog_summary_data.html:10 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:49 +msgid "Author" +msgstr "" + #: kallithea/templates/changelog/changelog_summary_data.html:11 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:51 msgid "Refs" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:81 +#: kallithea/templates/changelog/changelog_summary_data.html:79 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:127 msgid "Add or upload files directly via Kallithea" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:84 +#: kallithea/templates/changelog/changelog_summary_data.html:82 #: kallithea/templates/files/files_add.html:21 #: kallithea/templates/files/files_ypjax.html:9 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:131 +#: kallithea/tests/data/templates/files/files_add.html.py:159 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:46 msgid "Add New File" msgstr "" -#: kallithea/templates/changelog/changelog_summary_data.html:90 +#: kallithea/templates/changelog/changelog_summary_data.html:88 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:134 #, fuzzy msgid "Push new repository" msgstr "私有版本庫" -#: kallithea/templates/changelog/changelog_summary_data.html:98 +#: kallithea/templates/changelog/changelog_summary_data.html:96 +#: kallithea/tests/data/templates/changelog/changelog_summary_data.html.py:148 msgid "Existing repository?" msgstr "" #: kallithea/templates/changeset/changeset.html:8 +#: kallithea/tests/data/templates/changeset/changeset.html.py:436 #, python-format msgid "%s Changeset" msgstr "" #: kallithea/templates/changeset/changeset.html:36 +#: kallithea/tests/data/templates/changeset/changeset.html.py:154 msgid "Parent rev." msgstr "" #: kallithea/templates/changeset/changeset.html:42 +#: kallithea/tests/data/templates/changeset/changeset.html.py:156 msgid "Child rev." msgstr "" -#: kallithea/templates/changeset/changeset.html:50 -#: kallithea/templates/changeset/changeset_file_comment.html:37 -#: kallithea/templates/changeset/changeset_range.html:48 +#: kallithea/templates/changeset/changeset.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:162 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:105 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:154 msgid "Changeset status" msgstr "" #: kallithea/templates/changeset/changeset.html:54 -#: kallithea/templates/changeset/diff_block.html:27 -#: kallithea/templates/files/diff_2way.html:49 +#: kallithea/templates/changeset/diff_block.html:64 +#: kallithea/templates/files/diff_2way.html:47 +#: kallithea/tests/data/templates/changeset/changeset.html.py:169 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:161 msgid "Raw diff" msgstr "" #: kallithea/templates/changeset/changeset.html:57 +#: kallithea/tests/data/templates/changeset/changeset.html.py:173 msgid "Patch diff" msgstr "" #: kallithea/templates/changeset/changeset.html:60 -#: kallithea/templates/changeset/diff_block.html:30 -#: kallithea/templates/files/diff_2way.html:52 +#: kallithea/templates/changeset/diff_block.html:66 +#: kallithea/templates/files/diff_2way.html:50 +#: kallithea/tests/data/templates/changeset/changeset.html.py:177 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:165 msgid "Download diff" msgstr "" -#: kallithea/templates/changeset/changeset.html:89 -#: kallithea/templates/changeset/changeset_range.html:88 +#: kallithea/templates/changeset/changeset.html:73 +#: kallithea/templates/changeset/changeset_range.html:80 +#: kallithea/tests/data/templates/changeset/changeset.html.py:210 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:195 #, fuzzy msgid "Merge" msgstr "合併" +#: kallithea/templates/changeset/changeset.html:117 +#: kallithea/tests/data/templates/changeset/changeset.html.py:250 +msgid "Grafted from:" +msgstr "" + #: kallithea/templates/changeset/changeset.html:123 -msgid "Grafted from:" +#: kallithea/tests/data/templates/changeset/changeset.html.py:260 +msgid "Transplanted from:" msgstr "" #: kallithea/templates/changeset/changeset.html:129 -msgid "Transplanted from:" -msgstr "" - -#: kallithea/templates/changeset/changeset.html:135 +#: kallithea/tests/data/templates/changeset/changeset.html.py:267 msgid "Replaced by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:149 +#: kallithea/templates/changeset/changeset.html:143 +#: kallithea/tests/data/templates/changeset/changeset.html.py:288 msgid "Preceded by:" msgstr "" -#: kallithea/templates/changeset/changeset.html:166 -#: kallithea/templates/compare/compare_diff.html:54 -#: kallithea/templates/pullrequests/pullrequest_show.html:318 +#: kallithea/templates/changeset/changeset.html:160 +#: kallithea/templates/compare/compare_diff.html:59 +#: kallithea/templates/pullrequests/pullrequest_show.html:303 +#: kallithea/tests/data/templates/changeset/changeset.html.py:311 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:152 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:396 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "" -#: kallithea/templates/changeset/changeset.html:168 -#: kallithea/templates/compare/compare_diff.html:56 -#: kallithea/templates/pullrequests/pullrequest_show.html:320 +#: kallithea/templates/changeset/changeset.html:162 +#: kallithea/templates/compare/compare_diff.html:61 +#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/tests/data/templates/changeset/changeset.html.py:315 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:156 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:400 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" msgstr[0] "" -#: kallithea/templates/changeset/changeset.html:182 +#: kallithea/templates/changeset/changeset.html:176 #: kallithea/templates/changeset/changeset.html:195 -#: kallithea/templates/pullrequests/pullrequest_show.html:339 -#: kallithea/templates/pullrequests/pullrequest_show.html:363 +#: kallithea/templates/compare/compare_diff.html:81 +#: kallithea/templates/pullrequests/pullrequest_show.html:322 +#: kallithea/templates/pullrequests/pullrequest_show.html:348 +#: kallithea/tests/data/templates/changeset/changeset.html.py:336 +#: kallithea/tests/data/templates/changeset/changeset.html.py:351 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:424 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:451 msgid "Show full diff anyway" msgstr "" -#: kallithea/templates/changeset/changeset.html:247 -#: kallithea/templates/changeset/changeset.html:284 +#: kallithea/templates/changeset/changeset.html:233 +#: kallithea/templates/changeset/changeset.html:270 +#: kallithea/tests/data/templates/changeset/changeset.html.py:368 +#: kallithea/tests/data/templates/changeset/changeset.html.py:378 #, fuzzy msgid "No revisions" msgstr "修訂" -#: kallithea/templates/changeset/changeset_file_comment.html:21 +#: kallithea/templates/changeset/changeset_file_comment.html:19 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:80 msgid "on pull request" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/templates/changeset/changeset_file_comment.html:20 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:84 #, fuzzy msgid "No title" msgstr "沒有檔案" -#: kallithea/templates/changeset/changeset_file_comment.html:24 +#: kallithea/templates/changeset/changeset_file_comment.html:22 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:88 #, fuzzy msgid "on this changeset" msgstr "沒有修改" -#: kallithea/templates/changeset/changeset_file_comment.html:30 +#: kallithea/templates/changeset/changeset_file_comment.html:29 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:96 #, fuzzy msgid "Delete comment?" msgstr "" #: kallithea/templates/changeset/changeset_file_comment.html:37 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:107 #, fuzzy msgid "Status change" msgstr "多個檔案修改" -#: kallithea/templates/changeset/changeset_file_comment.html:59 -msgid "Commenting on line {1}." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:60 -#: kallithea/templates/changeset/changeset_file_comment.html:148 -#, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:62 -msgid "Use @username inside this text to notify another user" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:72 -#: kallithea/templates/changeset/changeset_file_comment.html:184 -msgid "Comment preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:77 +#: kallithea/templates/changeset/changeset_file_comment.html:57 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:148 +msgid "Commenting on line." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:58 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:150 +msgid "" +"Comments are in plain text. Use @username inside this text to notify " +"another user." +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:65 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:154 +#, fuzzy +msgid "Set changeset status" +msgstr "尚未有任何變更" + +#: kallithea/templates/changeset/changeset_file_comment.html:67 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:158 +msgid "Vote for pull request status" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:73 +#: kallithea/templates/changeset/diff_block.html:46 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:161 +#, fuzzy +msgid "No change" +msgstr "沒有修改" + +#: kallithea/templates/changeset/changeset_file_comment.html:86 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:178 +#, fuzzy +msgid "Finish pull request" +msgstr "文件內容" + +#: kallithea/templates/changeset/changeset_file_comment.html:89 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:180 +msgid "Close" +msgstr "" + +#: kallithea/templates/changeset/changeset_file_comment.html:101 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:185 msgid "Submitting ..." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:80 -#: kallithea/templates/changeset/changeset_file_comment.html:190 +#: kallithea/templates/changeset/changeset_file_comment.html:102 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:187 msgid "Comment" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:82 -#: kallithea/templates/changeset/changeset_file_comment.html:191 -msgid "Preview" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:197 msgid "You need to be logged in to comment." msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:90 +#: kallithea/templates/changeset/changeset_file_comment.html:110 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:201 msgid "Login now" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:94 +#: kallithea/templates/changeset/changeset_file_comment.html:114 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:203 msgid "Hide" msgstr "" -#: kallithea/templates/changeset/changeset_file_comment.html:106 +#: kallithea/templates/changeset/changeset_file_comment.html:126 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:41 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" -#: kallithea/templates/changeset/changeset_file_comment.html:107 +#: kallithea/templates/changeset/changeset_file_comment.html:127 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:42 #, fuzzy, python-format msgid "%d inline" msgid_plural "%d inline" msgstr[0] "" -#: kallithea/templates/changeset/changeset_file_comment.html:108 +#: kallithea/templates/changeset/changeset_file_comment.html:128 +#: kallithea/tests/data/templates/changeset/changeset_file_comment.html.py:43 #, python-format msgid "%d general" msgid_plural "%d general" msgstr[0] "" -#: kallithea/templates/changeset/changeset_file_comment.html:150 -msgid "Use @username inside this text to notify another user." -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:157 -msgid "Vote for pull request status" -msgstr "" - -#: kallithea/templates/changeset/changeset_file_comment.html:159 -#, fuzzy -msgid "Set changeset status" -msgstr "尚未有任何變更" - -#: kallithea/templates/changeset/changeset_file_comment.html:163 -#, fuzzy -msgid "No change" -msgstr "沒有修改" - -#: kallithea/templates/changeset/changeset_file_comment.html:176 -msgid "Close" -msgstr "" - #: kallithea/templates/changeset/changeset_range.html:5 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:272 #, python-format msgid "%s Changesets" msgstr "" -#: kallithea/templates/changeset/changeset_range.html:56 +#: kallithea/templates/changeset/changeset_range.html:43 +#: kallithea/templates/compare/compare_cs.html:37 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:65 +#, python-format +msgid "Changeset status: %s" +msgstr "" + +#: kallithea/templates/changeset/changeset_range.html:50 +#: kallithea/tests/data/templates/changeset/changeset_range.html.py:162 msgid "Files affected" msgstr "" -#: kallithea/templates/changeset/diff_block.html:21 -#: kallithea/templates/files/diff_2way.html:43 -msgid "Show full diff for this file" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:24 -#: kallithea/templates/changeset/diff_block.html:98 -#: kallithea/templates/files/diff_2way.html:46 -msgid "Show full side-by-side diff for this file" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:38 -msgid "Show inline comments" -msgstr "" - -#: kallithea/templates/changeset/diff_block.html:86 +#: kallithea/templates/changeset/diff_block.html:30 +msgid "No file before" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:33 +#, fuzzy +#| msgid "file removed" +msgid "File before" +msgstr "移除檔案" + +#: kallithea/templates/changeset/diff_block.html:40 +#, fuzzy +#| msgid "Unmodified" +msgid "Modified" +msgstr "未修改" + +#: kallithea/templates/changeset/diff_block.html:42 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:128 #, fuzzy msgid "Deleted" msgstr "刪除" -#: kallithea/templates/changeset/diff_block.html:89 +#: kallithea/templates/changeset/diff_block.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:136 #, fuzzy msgid "Renamed" msgstr "讀" +#: kallithea/templates/changeset/diff_block.html:48 +#, fuzzy, python-format +#| msgid "Unknown revision %s" +msgid "Unknown operation: %r" +msgstr "未知修訂 %s" + +#: kallithea/templates/changeset/diff_block.html:52 +#, fuzzy +#| msgid "New file type" +msgid "No file after" +msgstr "未知的存檔類型" + +#: kallithea/templates/changeset/diff_block.html:55 +#, fuzzy +#| msgid "file added" +msgid "File after" +msgstr "檔案新增" + +#: kallithea/templates/changeset/diff_block.html:60 +#: kallithea/templates/files/diff_2way.html:41 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:153 +msgid "Show full diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:62 +#: kallithea/templates/files/diff_2way.html:44 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:157 +msgid "Show full side-by-side diff for this file" +msgstr "" + +#: kallithea/templates/changeset/diff_block.html:72 +#: kallithea/tests/data/templates/changeset/diff_block.html.py:171 +msgid "Show inline comments" +msgstr "" + #: kallithea/templates/compare/compare_cs.html:4 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:48 msgid "No changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:8 -msgid "Ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:44 +#: kallithea/templates/compare/compare_cs.html:11 +msgid "Criss cross merge situation with multiple merge ancestors detected!" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:14 +msgid "" +"Please merge the target branch to your branch before creating a pull " +"request." +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:18 +msgid "Merge Ancestor" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:55 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:82 msgid "First (oldest) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:46 +#: kallithea/templates/compare/compare_cs.html:57 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:84 msgid "Last (most recent) changeset in this list" msgstr "" -#: kallithea/templates/compare/compare_cs.html:48 +#: kallithea/templates/compare/compare_cs.html:59 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:86 msgid "Position in this list of changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:76 -msgid "Show merge diff" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:86 -#: kallithea/templates/pullrequests/pullrequest_show.html:310 -msgid "Common ancestor" -msgstr "" - -#: kallithea/templates/compare/compare_cs.html:90 -msgid "No common ancestor found - repositories are unrelated" -msgstr "" - #: kallithea/templates/compare/compare_cs.html:98 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:133 +msgid "Show merge diff" +msgstr "" + +#: kallithea/templates/compare/compare_cs.html:112 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:157 msgid "is" msgstr "" -#: kallithea/templates/compare/compare_cs.html:99 +#: kallithea/templates/compare/compare_cs.html:113 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:161 #, fuzzy, python-format msgid "%s changesets" msgstr "" -#: kallithea/templates/compare/compare_cs.html:100 +#: kallithea/templates/compare/compare_cs.html:114 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:163 #, fuzzy msgid "behind" msgstr "重新索引" #: kallithea/templates/compare/compare_diff.html:6 #: kallithea/templates/compare/compare_diff.html:8 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:250 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:254 #, python-format msgid "%s Compare" msgstr "" #: kallithea/templates/compare/compare_diff.html:13 -#: kallithea/templates/compare/compare_diff.html:35 +#: kallithea/templates/compare/compare_diff.html:41 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:136 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:226 msgid "Compare Revisions" msgstr "" -#: kallithea/templates/compare/compare_diff.html:33 +#: kallithea/templates/compare/compare_diff.html:39 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:133 msgid "Swap" msgstr "" -#: kallithea/templates/compare/compare_diff.html:42 +#: kallithea/templates/compare/compare_diff.html:48 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:140 msgid "Compare revisions, branches, bookmarks, or tags." msgstr "" -#: kallithea/templates/compare/compare_diff.html:47 -#: kallithea/templates/pullrequests/pullrequest_show.html:305 +#: kallithea/templates/compare/compare_diff.html:53 +#: kallithea/templates/pullrequests/pullrequest_show.html:291 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:145 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:385 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" msgstr[0] "" -#: kallithea/templates/compare/compare_diff.html:78 -#: kallithea/templates/compare/compare_diff.html:89 +#: kallithea/templates/compare/compare_diff.html:95 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:184 +#: kallithea/tests/data/templates/compare/compare_diff.html.py:199 msgid "Show full diff" msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:74 +#: kallithea/templates/data_table/_dt_elements.html:20 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:447 msgid "Public repository" msgstr "公開的版本庫" -#: kallithea/templates/data_table/_dt_elements.html:84 +#: kallithea/templates/data_table/_dt_elements.html:31 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:460 msgid "Repository creation in progress..." msgstr "" -#: kallithea/templates/data_table/_dt_elements.html:98 +#: kallithea/templates/data_table/_dt_elements.html:45 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:183 msgid "No changesets yet" msgstr "尚未有任何變更" -#: kallithea/templates/data_table/_dt_elements.html:105 -#: kallithea/templates/data_table/_dt_elements.html:107 +#: kallithea/templates/data_table/_dt_elements.html:52 +#: kallithea/templates/data_table/_dt_elements.html:54 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:507 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:513 #, python-format msgid "Subscribe to %s rss feed" msgstr "訂閱 %s rss" -#: kallithea/templates/data_table/_dt_elements.html:113 -#: kallithea/templates/data_table/_dt_elements.html:115 +#: kallithea/templates/data_table/_dt_elements.html:60 +#: kallithea/templates/data_table/_dt_elements.html:62 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:360 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:366 #, python-format msgid "Subscribe to %s atom feed" msgstr "訂閱 %s atom" -#: kallithea/templates/data_table/_dt_elements.html:139 +#: kallithea/templates/data_table/_dt_elements.html:86 +#: kallithea/tests/data/templates/data_table/_dt_elements.html.py:144 msgid "Creating" msgstr "" -#: kallithea/templates/email_templates/changeset_comment.html:5 -#, python-format -msgid "Comment from %s on %s changeset %s mentioned you" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:7 -#, python-format -msgid "Comment from %s on %s changeset %s" -msgstr "" - -#: kallithea/templates/email_templates/changeset_comment.html:12 -msgid "The changeset status was changed to" -msgstr "" - -#: kallithea/templates/email_templates/main.html:6 -msgid "This is an automatic notification. Don't reply to this mail." -msgstr "" - -#: kallithea/templates/email_templates/password_reset.html:4 +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, python-format +msgid "Mention in Comment on Changeset \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/changeset_comment.html:4 +#, fuzzy, python-format +#| msgid "Set changeset status" +msgid "Comment on Changeset \"%s\"" +msgstr "尚未有任何變更" + +#: kallithea/templates/email_templates/changeset_comment.html:20 +#, fuzzy +#| msgid "Changesets" +msgid "Changeset on" +msgstr "變更" + +#: kallithea/templates/email_templates/changeset_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:23 +#: kallithea/templates/email_templates/pull_request_comment.html:28 +#, fuzzy +#| msgid "Branches" +msgid "branch" +msgstr "分支" + +#: kallithea/templates/email_templates/changeset_comment.html:29 +#: kallithea/templates/email_templates/pull_request.html:27 +#: kallithea/templates/email_templates/pull_request_comment.html:35 +msgid "by" +msgstr "" + +#: kallithea/templates/email_templates/comment.html:27 +#, fuzzy +#| msgid "Status change" +msgid "Status change:" +msgstr "多個檔案修改" + +#: kallithea/templates/email_templates/comment.html:33 +#, fuzzy +#| msgid "Repository has been locked" +msgid "The pull request has been closed." +msgstr "儲存所已被鎖定" + +#: kallithea/templates/email_templates/password_reset.html:9 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:49 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:49 #, python-format msgid "Hello %s" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:6 +#: kallithea/templates/email_templates/password_reset.html:16 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:51 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:51 msgid "We have received a request to reset the password for your account." msgstr "" -#: kallithea/templates/email_templates/password_reset.html:7 +#: kallithea/templates/email_templates/password_reset.html:25 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:55 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:54 +msgid "" +"This account is however managed outside this system and the password " +"cannot be changed here." +msgstr "" + +#: kallithea/templates/email_templates/password_reset.html:28 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:59 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:57 msgid "To set a new password, click the following link" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:10 +#: kallithea/templates/email_templates/password_reset.html:33 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:65 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:61 msgid "" "Should you not be able to use the link above, please type the following " "code into the password reset form" msgstr "" -#: kallithea/templates/email_templates/password_reset.html:12 +#: kallithea/templates/email_templates/password_reset.html:44 +#: kallithea/tests/data/templates/email_templates/password_reset.html.py:70 +#: kallithea/tests/data/templates/email_templates/password_reset.txt.py:66 msgid "" "If it weren't you who requested the password reset, just disregard this " "message." msgstr "" -#: kallithea/templates/email_templates/pull_request.html:5 -#, python-format -msgid "%s mentioned you on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request.html:7 -#, python-format -msgid "%s requested your review of %s pull request \"%s\"" +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Mention on Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:4 +#, python-format +msgid "Added as Reviewer of Pull Request %s \"%s\" by %s" +msgstr "" + +#: kallithea/templates/email_templates/pull_request.html:12 +#: kallithea/templates/email_templates/pull_request_comment.html:20 +#, fuzzy, python-format +#| msgid "Pull request %s" +msgid "Pull request from" +msgstr "提取要求 %s" + +#: kallithea/templates/email_templates/pull_request.html:15 +#: kallithea/templates/email_templates/pull_request.html:20 +#, fuzzy +#| msgid "Date" +msgid "at" +msgstr "時間" + +#: kallithea/templates/email_templates/pull_request.html:17 +#: kallithea/templates/email_templates/pull_request_comment.html:25 +msgid "to" msgstr "" #: kallithea/templates/email_templates/pull_request_comment.html:4 #, python-format -msgid "Comment from %s on %s pull request \"%s\"" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:9 -msgid "The comment closed the pull request with status" -msgstr "" - -#: kallithea/templates/email_templates/pull_request_comment.html:11 -msgid "The comment was made with status" -msgstr "" - -#: kallithea/templates/email_templates/registration.html:6 -msgid "View this user here" -msgstr "" +msgid "Mention in Comment on Pull Request %s \"%s\"" +msgstr "" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Pull request %s" +msgid "Pull Request %s \"%s\" Closed" +msgstr "提取要求 %s" + +#: kallithea/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +#| msgid "Pull request %s" +msgid "Comment on Pull Request %s \"%s\"" +msgstr "提取要求 %s" + +#: kallithea/templates/email_templates/registration.html:22 +#, fuzzy +#| msgid "Group name" +msgid "Full Name" +msgstr "群組名稱" #: kallithea/templates/files/diff_2way.html:15 #, python-format @@ -5292,84 +5743,107 @@ msgstr "" #: kallithea/templates/files/files.html:4 -#: kallithea/templates/files/files.html:80 +#: kallithea/templates/files/files.html:77 +#: kallithea/tests/data/templates/files/files.html.py:138 +#: kallithea/tests/data/templates/files/files.html.py:218 #, python-format msgid "%s Files" msgstr "" #: kallithea/templates/files/files_add.html:4 +#: kallithea/tests/data/templates/files/files_add.html.py:135 #, python-format msgid "%s Files Add" msgstr "" -#: kallithea/templates/files/files_add.html:40 -#: kallithea/templates/files/files_edit.html:38 +#: kallithea/templates/files/files_add.html:39 +#: kallithea/templates/files/files_edit.html:39 #: kallithea/templates/files/files_ypjax.html:3 +#: kallithea/tests/data/templates/files/files_add.html.py:225 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:35 msgid "Location" msgstr "位置" -#: kallithea/templates/files/files_add.html:42 +#: kallithea/templates/files/files_add.html:41 +#: kallithea/tests/data/templates/files/files_add.html.py:229 msgid "Enter filename..." msgstr "" -#: kallithea/templates/files/files_add.html:44 -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:233 +#: kallithea/tests/data/templates/files/files_add.html.py:237 msgid "or" msgstr "" -#: kallithea/templates/files/files_add.html:44 +#: kallithea/templates/files/files_add.html:43 +#: kallithea/tests/data/templates/files/files_add.html.py:235 msgid "Upload File" msgstr "" -#: kallithea/templates/files/files_add.html:48 +#: kallithea/templates/files/files_add.html:47 +#: kallithea/tests/data/templates/files/files_add.html.py:239 msgid "Create New File" msgstr "" #: kallithea/templates/files/files_add.html:53 -msgid "New file mode" -msgstr "" - -#: kallithea/templates/files/files_add.html:64 -#: kallithea/templates/files/files_delete.html:43 -#: kallithea/templates/files/files_edit.html:67 +#: kallithea/tests/data/templates/files/files_add.html.py:241 +#, fuzzy +msgid "New file type" +msgstr "未知的存檔類型" + +#: kallithea/templates/files/files_add.html:68 +#: kallithea/templates/files/files_delete.html:40 +#: kallithea/templates/files/files_edit.html:71 +#: kallithea/tests/data/templates/files/files_add.html.py:247 #, fuzzy msgid "Commit Changes" msgstr "遞交修改" #: kallithea/templates/files/files_browser.html:33 +#: kallithea/tests/data/templates/files/files_browser.html.py:56 msgid "Previous revision" msgstr "" #: kallithea/templates/files/files_browser.html:35 +#: kallithea/tests/data/templates/files/files_browser.html.py:62 msgid "Next revision" msgstr "" -#: kallithea/templates/files/files_browser.html:41 +#: kallithea/templates/files/files_browser.html:42 +#: kallithea/tests/data/templates/files/files_browser.html.py:68 msgid "Follow current branch" msgstr "" -#: kallithea/templates/files/files_browser.html:44 +#: kallithea/templates/files/files_browser.html:46 +#: kallithea/tests/data/templates/files/files_browser.html.py:70 msgid "Search File List" msgstr "" -#: kallithea/templates/files/files_browser.html:48 +#: kallithea/templates/files/files_browser.html:50 +#: kallithea/tests/data/templates/files/files_browser.html.py:72 msgid "Loading file list..." msgstr "載入檔案列表..." -#: kallithea/templates/files/files_browser.html:61 +#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/summary/summary.html:144 +#: kallithea/tests/data/templates/files/files_browser.html.py:78 msgid "Size" msgstr "大小" -#: kallithea/templates/files/files_browser.html:62 +#: kallithea/templates/files/files_browser.html:64 +#: kallithea/tests/data/templates/files/files_browser.html.py:80 msgid "Last Revision" msgstr "" -#: kallithea/templates/files/files_browser.html:63 +#: kallithea/templates/files/files_browser.html:65 +#: kallithea/tests/data/templates/files/files_browser.html.py:82 #, fuzzy msgid "Last Modified" msgstr "最後修改" -#: kallithea/templates/files/files_browser.html:64 +#: kallithea/templates/files/files_browser.html:66 +#: kallithea/tests/data/templates/files/files_browser.html.py:84 #, fuzzy msgid "Last Committer" msgstr "最後的遞交者" @@ -5380,7 +5854,7 @@ msgstr "" #: kallithea/templates/files/files_delete.html:12 -#: kallithea/templates/files/files_delete.html:31 +#: kallithea/templates/files/files_delete.html:30 msgid "Delete file" msgstr "" @@ -5393,100 +5867,128 @@ msgid "Edit file" msgstr "" -#: kallithea/templates/files/files_edit.html:48 -#: kallithea/templates/files/files_source.html:32 +#: kallithea/templates/files/files_edit.html:51 +#: kallithea/templates/files/files_source.html:28 +#: kallithea/tests/data/templates/files/files_source.html.py:70 msgid "Show Annotation" msgstr "" -#: kallithea/templates/files/files_edit.html:50 -#: kallithea/templates/files/files_source.html:35 -msgid "Download as Raw" -msgstr "" - #: kallithea/templates/files/files_edit.html:53 +#: kallithea/templates/files/files_source.html:31 +#: kallithea/tests/data/templates/files/files_source.html.py:75 +msgid "Download as Raw" +msgstr "" + +#: kallithea/templates/files/files_edit.html:56 msgid "Source" msgstr "" -#: kallithea/templates/files/files_edit.html:58 -msgid "Editing file" -msgstr "" - #: kallithea/templates/files/files_history_box.html:2 +#: kallithea/tests/data/templates/files/files_history_box.html.py:38 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "" -#: kallithea/templates/files/files_source.html:7 +#: kallithea/templates/files/files_source.html:6 +#: kallithea/tests/data/templates/files/files_source.html.py:44 msgid "Diff to Revision" msgstr "" -#: kallithea/templates/files/files_source.html:8 +#: kallithea/templates/files/files_source.html:7 +#: kallithea/tests/data/templates/files/files_source.html.py:46 msgid "Show at Revision" msgstr "" +#: kallithea/templates/files/files_source.html:9 +#: kallithea/tests/data/templates/files/files_source.html.py:50 +msgid "Show Full History" +msgstr "" + #: kallithea/templates/files/files_source.html:10 -msgid "Show Full History" -msgstr "" - -#: kallithea/templates/files/files_source.html:11 +#: kallithea/tests/data/templates/files/files_source.html.py:52 msgid "Show Authors" msgstr "" -#: kallithea/templates/files/files_source.html:30 +#: kallithea/templates/files/files_source.html:26 +#: kallithea/tests/data/templates/files/files_source.html.py:66 msgid "Show Source" msgstr "" -#: kallithea/templates/files/files_source.html:38 -#, python-format -msgid "Edit on Branch:%s" +#: kallithea/templates/files/files_source.html:34 +#, python-format +msgid "Edit on Branch: %s" +msgstr "" + +#: kallithea/templates/files/files_source.html:37 +#: kallithea/tests/data/templates/files/files_source.html.py:86 +msgid "Editing binary files not allowed" +msgstr "" + +#: kallithea/templates/files/files_source.html:40 +#: kallithea/tests/data/templates/files/files_source.html.py:92 +msgid "Editing files allowed only when on branch head revision" msgstr "" #: kallithea/templates/files/files_source.html:41 -msgid "Editing binary files not allowed" -msgstr "" - -#: kallithea/templates/files/files_source.html:44 -msgid "Editing files allowed only when on branch head revision" -msgstr "" - -#: kallithea/templates/files/files_source.html:45 +#: kallithea/tests/data/templates/files/files_source.html.py:94 msgid "Deleting files allowed only when on branch head revision" msgstr "" -#: kallithea/templates/files/files_source.html:63 +#: kallithea/templates/files/files_source.html:58 +#: kallithea/tests/data/templates/files/files_source.html.py:111 #, python-format msgid "Binary file (%s)" msgstr "二進位檔 (%s)" +#: kallithea/templates/files/files_source.html:69 +#: kallithea/tests/data/templates/files/files_source.html.py:125 +#, fuzzy +msgid "File is too big to display." +msgstr "顯示的檔案太大" + +#: kallithea/templates/files/files_source.html:71 +#: kallithea/tests/data/templates/files/files_source.html.py:129 +msgid "Show full annotation anyway." +msgstr "" + #: kallithea/templates/files/files_source.html:73 -msgid "File is too big to display" -msgstr "顯示的檔案太大" +#: kallithea/tests/data/templates/files/files_source.html.py:133 +msgid "Show as raw." +msgstr "" #: kallithea/templates/files/files_ypjax.html:5 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:41 msgid "annotation" msgstr "" #: kallithea/templates/files/files_ypjax.html:23 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:61 msgid "Go Back" msgstr "" #: kallithea/templates/files/files_ypjax.html:24 +#: kallithea/tests/data/templates/files/files_ypjax.html.py:63 msgid "No files at given path" msgstr "" #: kallithea/templates/followers/followers.html:5 +#: kallithea/tests/data/templates/followers/followers.html.py:135 #, python-format msgid "%s Followers" msgstr "" #: kallithea/templates/followers/followers.html:9 -#: kallithea/templates/summary/summary.html:142 -#: kallithea/templates/summary/summary.html:143 +#: kallithea/templates/summary/summary.html:129 +#: kallithea/templates/summary/summary.html:130 +#: kallithea/tests/data/templates/followers/followers.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:207 +#: kallithea/tests/data/templates/summary/summary.html.py:211 msgid "Followers" msgstr "追蹤者" -#: kallithea/templates/followers/followers_data.html:12 +#: kallithea/templates/followers/followers_data.html:9 +#: kallithea/tests/data/templates/followers/followers_data.html.py:44 msgid "Started following -" msgstr "" @@ -5495,70 +5997,80 @@ msgid "Fork repository %s" msgstr "" -#: kallithea/templates/forks/fork.html:27 +#: kallithea/templates/forks/fork.html:25 msgid "Fork name" msgstr "分支名稱" -#: kallithea/templates/forks/fork.html:62 +#: kallithea/templates/forks/fork.html:53 msgid "Default revision for files page, downloads, whoosh, and readme." msgstr "" -#: kallithea/templates/forks/fork.html:68 +#: kallithea/templates/forks/fork.html:58 msgid "Private" msgstr "私有" -#: kallithea/templates/forks/fork.html:77 +#: kallithea/templates/forks/fork.html:66 msgid "Copy permissions" msgstr "" -#: kallithea/templates/forks/fork.html:81 +#: kallithea/templates/forks/fork.html:69 msgid "Copy permissions from forked repository" msgstr "" -#: kallithea/templates/forks/fork.html:87 +#: kallithea/templates/forks/fork.html:75 msgid "Update after clone" msgstr "" -#: kallithea/templates/forks/fork.html:91 +#: kallithea/templates/forks/fork.html:78 msgid "Checkout source after making a clone" msgstr "" -#: kallithea/templates/forks/fork.html:96 +#: kallithea/templates/forks/fork.html:85 msgid "Fork this Repository" msgstr "" #: kallithea/templates/forks/forks.html:5 +#: kallithea/tests/data/templates/forks/forks.html.py:135 #, python-format msgid "%s Forks" msgstr "" #: kallithea/templates/forks/forks.html:9 -#: kallithea/templates/summary/summary.html:148 -#: kallithea/templates/summary/summary.html:149 +#: kallithea/templates/summary/summary.html:135 +#: kallithea/templates/summary/summary.html:136 +#: kallithea/tests/data/templates/forks/forks.html.py:113 +#: kallithea/tests/data/templates/summary/summary.html.py:215 +#: kallithea/tests/data/templates/summary/summary.html.py:219 msgid "Forks" msgstr "" -#: kallithea/templates/forks/forks_data.html:17 +#: kallithea/templates/forks/forks_data.html:14 +#: kallithea/tests/data/templates/forks/forks_data.html.py:49 msgid "Forked" msgstr "" -#: kallithea/templates/forks/forks_data.html:30 +#: kallithea/templates/forks/forks_data.html:24 +#: kallithea/tests/data/templates/forks/forks_data.html.py:66 msgid "There are no forks yet" msgstr "尚未有任何 fork" -#: kallithea/templates/journal/journal.html:21 +#: kallithea/templates/journal/journal.html:22 +#: kallithea/tests/data/templates/journal/journal.html.py:156 msgid "ATOM journal feed" msgstr "" -#: kallithea/templates/journal/journal.html:22 +#: kallithea/templates/journal/journal.html:23 +#: kallithea/tests/data/templates/journal/journal.html.py:160 msgid "RSS journal feed" msgstr "" -#: kallithea/templates/journal/journal.html:56 +#: kallithea/templates/journal/journal.html:34 +#: kallithea/tests/data/templates/journal/journal.html.py:200 msgid "My Repositories" msgstr "" -#: kallithea/templates/journal/journal_data.html:43 +#: kallithea/templates/journal/journal_data.html:42 +#: kallithea/tests/data/templates/journal/journal_data.html.py:82 msgid "No entries yet" msgstr "" @@ -5572,34 +6084,45 @@ #: kallithea/templates/pullrequests/pullrequest.html:4 #: kallithea/templates/pullrequests/pullrequest.html:8 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:188 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:212 msgid "New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:31 +#: kallithea/templates/pullrequests/pullrequest.html:26 #: kallithea/templates/pullrequests/pullrequest_data.html:15 #: kallithea/templates/pullrequests/pullrequest_show.html:29 -#: kallithea/templates/pullrequests/pullrequest_show.html:54 +#: kallithea/templates/pullrequests/pullrequest_show.html:51 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:115 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:144 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:164 msgid "Title" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:34 +#: kallithea/templates/pullrequests/pullrequest.html:28 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:117 msgid "Summarize the changes - or leave empty" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:43 -#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/templates/pullrequests/pullrequest.html:35 +#: kallithea/templates/pullrequests/pullrequest_show.html:60 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:121 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:170 msgid "Write a short description on this pull request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:49 +#: kallithea/templates/pullrequests/pullrequest.html:40 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:123 msgid "Changeset flow" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:56 +#: kallithea/templates/pullrequests/pullrequest.html:46 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:126 msgid "Origin repository" msgstr "" -#: kallithea/templates/pullrequests/pullrequest.html:72 +#: kallithea/templates/pullrequests/pullrequest.html:62 +#: kallithea/tests/data/templates/pullrequests/pullrequest.html.py:138 msgid "Destination repository" msgstr "" @@ -5635,7 +6158,9 @@ #: kallithea/templates/pullrequests/pullrequest_data.html:37 #: kallithea/templates/pullrequests/pullrequest_show.html:31 -#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/templates/pullrequests/pullrequest_show.html:72 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:150 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:185 msgid "Closed" msgstr "" @@ -5653,120 +6178,160 @@ msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:6 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:505 #, python-format msgid "%s Pull Request %s" msgstr "" #: kallithea/templates/pullrequests/pullrequest_show.html:10 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:483 #, python-format msgid "Pull request %s from %s#%s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:57 +#: kallithea/templates/pullrequests/pullrequest_show.html:53 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:166 #, fuzzy msgid "Summarize the changes" msgstr "遞交修改" -#: kallithea/templates/pullrequests/pullrequest_show.html:74 +#: kallithea/templates/pullrequests/pullrequest_show.html:66 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:173 msgid "Reviewer voting result" msgstr "" +#: kallithea/templates/pullrequests/pullrequest_show.html:69 +#: kallithea/templates/pullrequests/pullrequest_show.html:70 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:179 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:181 +msgid "Pull request status calculated from votes" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show.html:80 -#: kallithea/templates/pullrequests/pullrequest_show.html:81 -msgid "Pull request status calculated from votes" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:93 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:191 msgid "Still not reviewed by" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/templates/pullrequests/pullrequest_show.html:83 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:197 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" -#: kallithea/templates/pullrequests/pullrequest_show.html:99 +#: kallithea/templates/pullrequests/pullrequest_show.html:85 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:201 msgid "Pull request was reviewed by all reviewers" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:101 +#: kallithea/templates/pullrequests/pullrequest_show.html:87 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:205 #, fuzzy msgid "There are no reviewers" msgstr "沒有任何分支" -#: kallithea/templates/pullrequests/pullrequest_show.html:107 +#: kallithea/templates/pullrequests/pullrequest_show.html:92 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:208 msgid "Origin" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:113 +#: kallithea/templates/pullrequests/pullrequest_show.html:97 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:214 #, fuzzy msgid "on" msgstr "無" -#: kallithea/templates/pullrequests/pullrequest_show.html:120 +#: kallithea/templates/pullrequests/pullrequest_show.html:103 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:219 msgid "Target" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:124 +#: kallithea/templates/pullrequests/pullrequest_show.html:106 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:223 msgid "" "This is just a range of changesets and doesn't have a target or a real " "merge ancestor." msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:133 +#: kallithea/templates/pullrequests/pullrequest_show.html:114 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:230 msgid "Pull changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:173 -#, fuzzy -msgid "Update" -msgstr "時間" - -#: kallithea/templates/pullrequests/pullrequest_show.html:191 -msgid "Current revision - no change" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:213 -msgid "Pull Request Reviewers" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:238 +#: kallithea/templates/pullrequests/pullrequest_show.html:148 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:261 #, fuzzy -msgid "Remove reviewer" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:250 -msgid "Type name of reviewer to add" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:258 -#, fuzzy -msgid "Potential Reviewers" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:261 -msgid "Click to add the repository owner as reviewer:" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:284 +#| msgid "Registration" +msgid "Next iteration" +msgstr "註冊" + +#: kallithea/templates/pullrequests/pullrequest_show.html:165 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:278 +msgid "Current revision - no change" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:189 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:304 +msgid "" +"Pull request iterations do not change content once created. Select a " +"revision and save to make a new iteration." +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:197 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:371 msgid "Save Changes" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show.html:285 -msgid "Save as New Pull Request" -msgstr "" - -#: kallithea/templates/pullrequests/pullrequest_show.html:286 +#: kallithea/templates/pullrequests/pullrequest_show.html:198 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:373 +msgid "Create New Iteration with Changes" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:199 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:375 #, fuzzy msgid "Cancel Changes" msgstr "沒有修改" -#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/templates/pullrequests/pullrequest_show.html:207 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:310 +msgid "Pull Request Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:233 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:336 +#, fuzzy +msgid "Remove reviewer" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:245 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:342 +msgid "Type name of reviewer to add" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:253 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:347 +#, fuzzy +msgid "Potential Reviewers" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:256 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:349 +msgid "Click to add the repository owner as reviewer:" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show.html:281 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:380 #, fuzzy msgid "Pull Request Content" msgstr "文件內容" +#: kallithea/templates/pullrequests/pullrequest_show.html:296 +#: kallithea/tests/data/templates/compare/compare_cs.html.py:142 +#: kallithea/tests/data/templates/pullrequests/pullrequest_show.html.py:389 +msgid "Common ancestor" +msgstr "" + #: kallithea/templates/pullrequests/pullrequest_show_all.html:6 #, python-format msgid "%s Pull Requests" @@ -5774,252 +6339,474 @@ #: kallithea/templates/pullrequests/pullrequest_show_all.html:11 #, fuzzy, python-format -#| msgid "Pull request %s" msgid "Pull Requests from '%s'" -msgstr "提取要求 %s" +msgstr "文件內容" #: kallithea/templates/pullrequests/pullrequest_show_all.html:13 #, python-format msgid "Pull Requests to '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:32 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:31 msgid "Open New Pull Request" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:37 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:34 #, python-format msgid "Show Pull Requests to %s" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:39 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:36 #, python-format msgid "Show Pull Requests from '%s'" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:49 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:44 #: kallithea/templates/pullrequests/pullrequest_show_my.html:28 msgid "Hide closed pull requests (only show open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_all.html:51 +#: kallithea/templates/pullrequests/pullrequest_show_all.html:46 #: kallithea/templates/pullrequests/pullrequest_show_my.html:30 msgid "Show closed pull requests (in addition to open pull requests)" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:35 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:34 msgid "Pull Requests Created by Me" msgstr "" -#: kallithea/templates/pullrequests/pullrequest_show_my.html:38 +#: kallithea/templates/pullrequests/pullrequest_show_my.html:37 +msgid "Pull Requests Needing My Review" +msgstr "" + +#: kallithea/templates/pullrequests/pullrequest_show_my.html:40 msgid "Pull Requests I Participate In" msgstr "" #: kallithea/templates/search/search.html:6 +#: kallithea/tests/data/templates/search/search.html.py:217 #, python-format msgid "%s Search" msgstr "" #: kallithea/templates/search/search.html:8 #: kallithea/templates/search/search.html:16 +#: kallithea/tests/data/templates/search/search.html.py:189 +#: kallithea/tests/data/templates/search/search.html.py:221 #, fuzzy msgid "Search in All Repositories" msgstr "Mercurial 版本庫" -#: kallithea/templates/search/search.html:50 +#: kallithea/templates/search/search.html:47 +#: kallithea/tests/data/templates/search/search.html.py:130 msgid "Search term" msgstr "搜尋關鍵字" -#: kallithea/templates/search/search.html:62 +#: kallithea/templates/search/search.html:54 +#: kallithea/tests/data/templates/search/search.html.py:138 msgid "Search in" msgstr "搜尋範圍" -#: kallithea/templates/search/search.html:65 +#: kallithea/templates/search/search.html:56 +#: kallithea/tests/data/templates/search/search.html.py:140 msgid "File contents" msgstr "文件內容" -#: kallithea/templates/search/search.html:66 +#: kallithea/templates/search/search.html:57 +#: kallithea/tests/data/templates/search/search.html.py:141 msgid "Commit messages" msgstr "" -#: kallithea/templates/search/search.html:67 +#: kallithea/templates/search/search.html:58 +#: kallithea/tests/data/templates/search/search.html.py:142 msgid "File names" msgstr "檔案名稱" -#: kallithea/templates/search/search_commit.html:35 -#: kallithea/templates/search/search_content.html:21 -#: kallithea/templates/search/search_path.html:15 +#: kallithea/templates/search/search_commit.html:29 +#: kallithea/templates/search/search_content.html:17 +#: kallithea/templates/search/search_path.html:14 +#: kallithea/tests/data/templates/search/search_commit.html.py:68 +#: kallithea/tests/data/templates/search/search_content.html.py:53 +#: kallithea/tests/data/templates/search/search_path.html.py:47 msgid "Permission denied" msgstr "權限不足" #: kallithea/templates/summary/statistics.html:4 +#: kallithea/tests/data/templates/summary/statistics.html.py:239 #, python-format msgid "%s Statistics" msgstr "" #: kallithea/templates/summary/statistics.html:16 -#: kallithea/templates/summary/summary.html:39 +#: kallithea/templates/summary/summary.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:197 +#: kallithea/tests/data/templates/summary/summary.html.py:323 #, python-format msgid "%s ATOM feed" msgstr "" #: kallithea/templates/summary/statistics.html:17 -#: kallithea/templates/summary/summary.html:40 +#: kallithea/templates/summary/summary.html:36 +#: kallithea/tests/data/templates/summary/statistics.html.py:201 +#: kallithea/tests/data/templates/summary/summary.html.py:327 #, python-format msgid "%s RSS feed" msgstr "" -#: kallithea/templates/summary/statistics.html:36 -#: kallithea/templates/summary/summary.html:100 -#: kallithea/templates/summary/summary.html:116 +#: kallithea/templates/summary/statistics.html:32 +#: kallithea/templates/summary/summary.html:90 +#: kallithea/templates/summary/summary.html:104 +#: kallithea/tests/data/templates/summary/statistics.html.py:131 +#: kallithea/tests/data/templates/summary/summary.html.py:165 +#: kallithea/tests/data/templates/summary/summary.html.py:182 msgid "Enable" msgstr "" -#: kallithea/templates/summary/statistics.html:39 +#: kallithea/templates/summary/statistics.html:35 +#: kallithea/tests/data/templates/summary/statistics.html.py:135 msgid "Stats gathered: " msgstr "" -#: kallithea/templates/summary/statistics.html:89 -#: kallithea/templates/summary/summary.html:349 +#: kallithea/templates/summary/statistics.html:84 +#: kallithea/templates/summary/summary.html:323 +#: kallithea/tests/data/templates/summary/statistics.html.py:142 +#: kallithea/tests/data/templates/summary/summary.html.py:289 msgid "files" msgstr "檔案" -#: kallithea/templates/summary/statistics.html:113 -#: kallithea/templates/summary/summary.html:373 +#: kallithea/templates/summary/statistics.html:108 +#: kallithea/templates/summary/summary.html:349 +#: kallithea/tests/data/templates/summary/statistics.html.py:144 +#: kallithea/tests/data/templates/summary/summary.html.py:291 msgid "Show more" msgstr "" +#: kallithea/templates/summary/statistics.html:388 +#: kallithea/tests/data/templates/summary/statistics.html.py:147 +msgid "commits" +msgstr "遞交" + +#: kallithea/templates/summary/statistics.html:389 +#: kallithea/tests/data/templates/summary/statistics.html.py:149 +msgid "files added" +msgstr "多個檔案新增" + #: kallithea/templates/summary/statistics.html:390 -msgid "commits" -msgstr "遞交" +#: kallithea/tests/data/templates/summary/statistics.html.py:151 +msgid "files changed" +msgstr "多個檔案修改" #: kallithea/templates/summary/statistics.html:391 -msgid "files added" -msgstr "多個檔案新增" - -#: kallithea/templates/summary/statistics.html:392 -msgid "files changed" -msgstr "多個檔案修改" - -#: kallithea/templates/summary/statistics.html:393 +#: kallithea/tests/data/templates/summary/statistics.html.py:153 msgid "files removed" msgstr "移除多個檔案" -#: kallithea/templates/summary/statistics.html:395 +#: kallithea/templates/summary/statistics.html:393 +#: kallithea/tests/data/templates/summary/statistics.html.py:155 msgid "commit" msgstr "遞交" -#: kallithea/templates/summary/statistics.html:396 +#: kallithea/templates/summary/statistics.html:394 +#: kallithea/tests/data/templates/summary/statistics.html.py:157 msgid "file added" msgstr "檔案新增" -#: kallithea/templates/summary/statistics.html:397 +#: kallithea/templates/summary/statistics.html:395 +#: kallithea/tests/data/templates/summary/statistics.html.py:159 msgid "file changed" msgstr "檔案修改" -#: kallithea/templates/summary/statistics.html:398 +#: kallithea/templates/summary/statistics.html:396 +#: kallithea/tests/data/templates/summary/statistics.html.py:161 msgid "file removed" msgstr "移除檔案" #: kallithea/templates/summary/summary.html:4 +#: kallithea/tests/data/templates/summary/summary.html.py:406 #, python-format msgid "%s Summary" msgstr "" #: kallithea/templates/summary/summary.html:13 +#: kallithea/tests/data/templates/summary/summary.html.py:362 #, python-format msgid "Repository locked by %s" msgstr "" #: kallithea/templates/summary/summary.html:15 +#: kallithea/tests/data/templates/summary/summary.html.py:366 msgid "Repository unlocked" msgstr "" -#: kallithea/templates/summary/summary.html:22 +#: kallithea/templates/summary/summary.html:21 +#: kallithea/tests/data/templates/summary/summary.html.py:371 msgid "Fork of" msgstr "" -#: kallithea/templates/summary/summary.html:29 +#: kallithea/templates/summary/summary.html:26 +#: kallithea/tests/data/templates/summary/summary.html.py:380 msgid "Clone from" msgstr "複製由" +#: kallithea/templates/summary/summary.html:67 +#: kallithea/tests/data/templates/summary/summary.html.py:145 +msgid "Show by ID" +msgstr "" + #: kallithea/templates/summary/summary.html:72 -#, fuzzy -msgid "Clone URL" -msgstr "複製連結" - -#: kallithea/templates/summary/summary.html:78 +#: kallithea/tests/data/templates/summary/summary.html.py:143 msgid "Show by Name" msgstr "" -#: kallithea/templates/summary/summary.html:79 -msgid "Show by ID" -msgstr "" - -#: kallithea/templates/summary/summary.html:92 +#: kallithea/templates/summary/summary.html:83 +#: kallithea/tests/data/templates/summary/summary.html.py:153 msgid "Trending files" msgstr "" -#: kallithea/templates/summary/summary.html:108 +#: kallithea/templates/summary/summary.html:97 +#: kallithea/tests/data/templates/summary/summary.html.py:168 msgid "Download" msgstr "下載" -#: kallithea/templates/summary/summary.html:112 +#: kallithea/templates/summary/summary.html:100 +#: kallithea/tests/data/templates/summary/summary.html.py:174 msgid "There are no downloads yet" msgstr "沒有任何下載" -#: kallithea/templates/summary/summary.html:114 +#: kallithea/templates/summary/summary.html:102 +#: kallithea/tests/data/templates/summary/summary.html.py:178 msgid "Downloads are disabled for this repository" msgstr "這個版本庫的下載已停用" -#: kallithea/templates/summary/summary.html:120 +#: kallithea/templates/summary/summary.html:108 +#: kallithea/tests/data/templates/summary/summary.html.py:190 msgid "Download as zip" msgstr "" -#: kallithea/templates/summary/summary.html:125 +#: kallithea/templates/summary/summary.html:112 +#: kallithea/tests/data/templates/summary/summary.html.py:194 msgid "Check this to download archive with subrepos" msgstr "" -#: kallithea/templates/summary/summary.html:125 +#: kallithea/templates/summary/summary.html:114 +#: kallithea/tests/data/templates/summary/summary.html.py:196 msgid "With subrepos" msgstr "" -#: kallithea/templates/summary/summary.html:156 -msgid "Repository Size" -msgstr "" - -#: kallithea/templates/summary/summary.html:163 -#: kallithea/templates/summary/summary.html:165 +#: kallithea/templates/summary/summary.html:152 +#: kallithea/templates/summary/summary.html:154 +#: kallithea/tests/data/templates/summary/summary.html.py:234 +#: kallithea/tests/data/templates/summary/summary.html.py:240 msgid "Feed" msgstr "" -#: kallithea/templates/summary/summary.html:186 +#: kallithea/templates/summary/summary.html:174 +#: kallithea/tests/data/templates/summary/summary.html.py:254 #, fuzzy msgid "Latest Changes" msgstr "多個檔案修改" -#: kallithea/templates/summary/summary.html:188 +#: kallithea/templates/summary/summary.html:176 +#: kallithea/tests/data/templates/summary/summary.html.py:258 #, fuzzy msgid "Quick Start" msgstr "快速過濾..." -#: kallithea/templates/summary/summary.html:202 +#: kallithea/templates/summary/summary.html:191 +#: kallithea/tests/data/templates/summary/summary.html.py:265 #, python-format msgid "Readme file from revision %s:%s" msgstr "" -#: kallithea/templates/summary/summary.html:293 +#: kallithea/templates/summary/summary.html:267 +#: kallithea/tests/data/templates/summary/summary.html.py:276 #, python-format msgid "Download %s as %s" msgstr "下載 %s 為 %s" -#: kallithea/templates/tags/tags.html:5 -#, python-format -msgid "%s Tags" -msgstr "" - -#: kallithea/templates/tags/tags.html:26 -msgid "Compare Tags" +#: kallithea/tests/data/templates/index.html.py:117 +msgid "Dashboard" +msgstr "儀表板" + +#: kallithea/tests/data/templates/index_base.html.py:98 +msgid "Group Name" +msgstr "" + +#: kallithea/tests/data/templates/login.html.py:77 +msgid "Remember me" +msgstr "" + +#: kallithea/tests/data/templates/admin/gists/new.html.py:209 +msgid "name this file..." +msgstr "" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:43 +msgid "Change your avatar at" +msgstr "修改您的頭像於" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:45 +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:45 +msgid "Using" +msgstr "使用中" + +#: kallithea/tests/data/templates/admin/my_account/my_account_profile.html.py:53 +msgid "Missing email, please update your user email address." +msgstr "" + +#: kallithea/tests/data/templates/admin/repo_groups/repo_group_show.html.py:152 +#, python-format +msgid "%s Repository group dashboard" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_mapping.html.py:35 +msgid "Rescan option" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:39 +msgid "Web" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:43 +msgid "Require SSL for vcs operations" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_vcs.html.py:45 +msgid "" +"Activate to require SSL both pushing and pulling. If SSL certificate is " +"missing, it will return an HTTP Error 406: Not Acceptable." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:51 +msgid "Use Gravatars in Kallithea" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:67 +msgid "" +"Schema of clone URL construction eg. '{scheme}://{user}@{netloc}/{repo}'." +"\n" +" The following " +"variables are available:\n" +" {scheme} 'http' " +"or 'https' sent from running Kallithea server,\n" +" {user} current " +"user username,\n" +" {netloc} network " +"location/server host of running Kallithea server,\n" +" {repo} full " +"repository name,\n" +" {repoid} ID of " +"repository, can be used to construct clone-by-id" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:75 +msgid "Dashboard items" +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:79 +msgid "" +"Number of items displayed in the main page dashboard before pagination is" +" shown." +msgstr "" + +#: kallithea/tests/data/templates/admin/settings/settings_visual.html.py:81 +msgid "Admin pages items" +msgstr "" + +#: kallithea/tests/data/templates/admin/user_groups/user_groups.html.py:142 +#: kallithea/tests/data/templates/journal/journal.html.py:118 +msgid "quick filter..." +msgstr "快速過濾..." + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:43 +msgid "Change avatar at" +msgstr "" + +#: kallithea/tests/data/templates/admin/users/user_edit_profile.html.py:53 +msgid "Missing email, please update this user email address." +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:96 +msgid "Keyboard shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:98 +msgid "Site-wide shortcuts" +msgstr "" + +#: kallithea/tests/data/templates/base/base.html.py:619 +msgid "Forgot password ?" +msgstr "忘記密碼?" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:54 +msgid "Ancestor" +msgstr "" + +#: kallithea/tests/data/templates/compare/compare_cs.html.py:150 +msgid "No common ancestor found - repositories are unrelated" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:75 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:74 +#, python-format +msgid "Comment from %s on %s changeset %s mentioned you" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:79 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:77 +#, python-format +msgid "Comment from %s on %s changeset %s" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/changeset_comment.html.py:86 +#: kallithea/tests/data/templates/email_templates/changeset_comment.txt.py:82 +msgid "The changeset status was changed to" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/main.html.py:31 +#: kallithea/tests/data/templates/email_templates/main.txt.py:31 +msgid "This is an automatic notification. Don't reply to this mail." +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:75 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:74 +#, python-format +msgid "%s mentioned you on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request.html.py:79 +#: kallithea/tests/data/templates/email_templates/pull_request.txt.py:77 +#, python-format +msgid "%s requested your review of %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:65 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:65 +#, python-format +msgid "Comment from %s on %s pull request \"%s\"" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:72 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:71 +msgid "The comment closed the pull request with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/pull_request_comment.html.py:78 +#: kallithea/tests/data/templates/email_templates/pull_request_comment.txt.py:76 +msgid "The comment was made with status" +msgstr "" + +#: kallithea/tests/data/templates/email_templates/registration.html.py:47 +#: kallithea/tests/data/templates/email_templates/registration.txt.py:47 +msgid "View this user here" +msgstr "" + +#: kallithea/tests/data/templates/files/files_source.html.py:80 +#, python-format +msgid "Edit on Branch:%s" +msgstr "" + +#: kallithea/tests/data/templates/summary/summary.html.py:227 +msgid "Repository Size" msgstr "" #~ msgid "No comments." @@ -6073,9 +6860,6 @@ #~ msgid "No Files" #~ msgstr "沒有檔案" -#~ msgid "" -#~ msgstr "" - #~ msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" #~ msgstr "" @@ -6361,9 +7145,265 @@ #~ msgid "You can only edit files with revision being a valid branch " #~ msgstr "" -#~ msgid "Changeset not found" +#~ msgid "This pull request can be updated with changes on %s:" +#~ msgstr "" + +#~ msgid "Confirm to invalidate repository cache." +#~ msgstr "確認廢止版本庫快取" + +#~ msgid "Commenting on line {1}." +#~ msgstr "" + +#~ msgid "Comments parsed using %s syntax with %s support." +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user" +#~ msgstr "" + +#~ msgid "Comment preview" +#~ msgstr "" + +#~ msgid "Preview" +#~ msgstr "" + +#~ msgid "Use @username inside this text to notify another user." +#~ msgstr "" + +#~ msgid "New file mode" +#~ msgstr "" + +#~ msgid "Save as New Pull Request" #~ msgstr "" #~ msgid "Pull Requests from %s'" #~ msgstr "" +#~ msgid "Missing changesets since the previous pull request:" +#~ msgstr "" + +#~ msgid "New changesets on %s %s since the previous pull request:" +#~ msgstr "" + +#~ msgid "Ancestor didn't change - show diff since previous version:" +#~ msgstr "" + +#~ msgid "" +#~ "This pull request is based on " +#~ "another %s revision and there is " +#~ "no simple diff." +#~ msgstr "" + +#~ msgid "No changes found on %s %s since previous version." +#~ msgstr "" + +#~ msgid "Closed, replaced by %s ." +#~ msgstr "" + +#~ msgid "Pull request update created" +#~ msgstr "" + +#~ msgid "The following changes are available on %s:" +#~ msgstr "" + +#~ msgid "No changesets found for updating this pull request." +#~ msgstr "" + +#~ msgid "Git pull requests don't support updates yet." +#~ msgstr "" + +#~ msgid "Closing." +#~ msgstr "關閉中。" + +#~ msgid "An error occurred during creation of field" +#~ msgstr "" + +#~ msgid "Changeset not found" +#~ msgstr "" + +#~ msgid "Repository no access" +#~ msgstr "" + +#~ msgid "Repository read access" +#~ msgstr "" + +#~ msgid "Repository write access" +#~ msgstr "" + +#~ msgid "Repository admin access" +#~ msgstr "" + +#~ msgid "Repository Group no access" +#~ msgstr "" + +#~ msgid "Repository Group read access" +#~ msgstr "" + +#~ msgid "Repository Group write access" +#~ msgstr "" + +#~ msgid "Repository Group admin access" +#~ msgstr "" + +#~ msgid "Repository creation disabled" +#~ msgstr "" + +#~ msgid "Repository creation enabled" +#~ msgstr "" + +#~ msgid "Repository forking disabled" +#~ msgstr "" + +#~ msgid "Repository forking enabled" +#~ msgstr "" + +#~ msgid "Register disabled" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with manual activation" +#~ msgstr "" + +#~ msgid "Register new user with Kallithea with auto activation" +#~ msgstr "" + +#~ msgid "Not Reviewed" +#~ msgstr "" + +#~ msgid "Rejected" +#~ msgstr "" + +#~ msgid "Under Review" +#~ msgstr "" + +#~ msgid "Repository group no access" +#~ msgstr "" + +#~ msgid "Repository group read access" +#~ msgstr "" + +#~ msgid "Repository group write access" +#~ msgstr "" + +#~ msgid "Repository group admin access" +#~ msgstr "" + +#~ msgid "User group no access" +#~ msgstr "" + +#~ msgid "User group read access" +#~ msgstr "" + +#~ msgid "User group write access" +#~ msgstr "" + +#~ msgid "User group admin access" +#~ msgstr "" + +#~ msgid "Repository Group creation disabled" +#~ msgstr "" + +#~ msgid "Repository Group creation enabled" +#~ msgstr "" + +#~ msgid "User Group creation disabled" +#~ msgstr "" + +#~ msgid "User Group creation enabled" +#~ msgstr "" + +#~ msgid "User Registration with manual account activation" +#~ msgstr "" + +#~ msgid "User Registration with automatic account activation" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s" +#~ msgstr "" + +#~ msgid "[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s" +#~ msgstr "" + +#~ msgid "No repositories found." +#~ msgstr "" + +#~ msgid "There are no branches yet" +#~ msgstr "沒有任何分支" + +#~ msgid "There are no tags yet" +#~ msgstr "沒有任何標籤" + +#~ msgid "There are no bookmarks yet" +#~ msgstr "" + +#~ msgid "Analytics HTML block" +#~ msgstr "" + +#~ msgid "" +#~ "HTML with JavaScript for web analytics" +#~ " systems like Google Analytics or " +#~ "Piwik. This will be added at the" +#~ " bottom of every page." +#~ msgstr "" + +#~ msgid "" +#~ "Schema of clone URL construction eg. " +#~ "'{scheme}://{user}@{netloc}/{repo}'.\n" +#~ " The " +#~ "following variables are available:\n" +#~ " {scheme}" +#~ " 'http' or 'https' sent from running" +#~ " Kallithea server,\n" +#~ " {user}" +#~ " current user username,\n" +#~ " {netloc}" +#~ " network location/server host of running" +#~ " Kallithea server,\n" +#~ " {repo}" +#~ " full repository name,\n" +#~ " {repoid}" +#~ " ID of repository, can be used " +#~ "to contruct clone-by-id" +#~ msgstr "" + +#~ msgid "enabled" +#~ msgstr "" + +#~ msgid "disabled" +#~ msgstr "" + +#~ msgid "%s Bookmarks" +#~ msgstr "" + +#~ msgid "Compare Bookmarks" +#~ msgstr "" + +#~ msgid "%s Branches" +#~ msgstr "" + +#~ msgid "Compare Branches" +#~ msgstr "" + +#~ msgid "Editing file" +#~ msgstr "" + +#~ msgid "Update" +#~ msgstr "時間" + +#~ msgid "" +#~ "Pull requests do not change once " +#~ "created. Select a revision and save " +#~ "to replace this pull request with " +#~ "a new one." +#~ msgstr "" + +#~ msgid "Save Updates as New Pull Request" +#~ msgstr "" + +#~ msgid "%s Tags" +#~ msgstr "" + +#~ msgid "Compare Tags" +#~ msgstr "" + diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/__init__.py --- a/kallithea/lib/__init__.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/__init__.py Thu Jun 07 01:46:02 2018 +0200 @@ -24,30 +24,3 @@ :copyright: (c) 2013 RhodeCode GmbH, and others. :license: GPLv3, see LICENSE.md for more details. """ - -import os - -def get_current_revision(quiet=False): - """ - Returns tuple of (number, id) from repository containing this package - or None if repository could not be found. - - :param quiet: prints error for fetching revision if True - """ - - try: - from kallithea.lib.vcs import get_repo - from kallithea.lib.vcs.utils.helpers import get_scm - repopath = os.path.abspath(os.path.join(os.path.dirname(__file__), - '..', '..')) - scm = get_scm(repopath)[0] - repo = get_repo(path=repopath, alias=scm) - wk_dir = repo.workdir - cur_rev = wk_dir.get_changeset() - return (cur_rev.revision, cur_rev.short_id) - except Exception as err: - if not quiet: - print ("WARNING: Cannot retrieve kallithea's revision. " - "disregard this if you don't know what that means. " - "Original error was: %s" % err) - return None diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/annotate.py --- a/kallithea/lib/annotate.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/annotate.py Thu Jun 07 01:46:02 2018 +0200 @@ -48,7 +48,7 @@ :param headers: dictionary with headers (keys are whats in ``order`` parameter) """ - from kallithea.lib.utils import get_custom_lexer + from kallithea.lib.pygmentsutils import get_custom_lexer options['linenos'] = True formatter = AnnotateHtmlFormatter(filenode=filenode, order=order, headers=headers, @@ -68,7 +68,7 @@ following function as ``annotate_from_changeset_func``:: def changeset_to_anchor(changeset): - return '%s\n' %\ + return '%s\n' % \ (changeset.id, changeset.id) :param annotate_from_changeset_func: see above @@ -149,7 +149,7 @@ for i in range(fl, fl + lncount): if i % st == 0: if aln: - lines.append('%*d' \ + lines.append('%*d' % (la, i, mw, i)) else: lines.append('%*d' % (mw, i)) @@ -158,7 +158,7 @@ ls = '\n'.join(lines) # annotate_changesets = [tup[1] for tup in self.filenode.annotate] -## TODO: not sure what that fixes +# # TODO: not sure what that fixes # # If pygments cropped last lines break we need do that too # ln_cs = len(annotate_changesets) # ln_ = len(ls.splitlines()) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/app_globals.py --- a/kallithea/lib/app_globals.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/app_globals.py Thu Jun 07 01:46:02 2018 +0200 @@ -25,9 +25,8 @@ :copyright: (c) 2013 RhodeCode GmbH, and others. :license: GPLv3, see LICENSE.md for more details. """ - -from beaker.cache import CacheManager -from beaker.util import parse_cache_config_options +import tg +from tg import config class Globals(object): @@ -36,11 +35,18 @@ life of the application """ - def __init__(self, config): + def __init__(self): """One instance of Globals is created during application initialization and is available during requests via the 'app_globals' variable """ - self.cache = CacheManager(**parse_cache_config_options(config)) self.available_permissions = None # propagated after init_model + + @property + def cache(self): + return tg.cache + + @property + def mako_lookup(self): + return config['render_functions']['mako'].normal_loader diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/auth.py --- a/kallithea/lib/auth.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/auth.py Thu Jun 07 01:46:02 2018 +0200 @@ -24,7 +24,6 @@ :copyright: (c) 2013 RhodeCode GmbH, and others. :license: GPLv3, see LICENSE.md for more details. """ -import time import os import logging import traceback @@ -34,17 +33,16 @@ from decorator import decorator -from pylons import url, request, session -from pylons.controllers.util import abort, redirect -from pylons.i18n.translation import _ +from tg import request, session +from tg.i18n import ugettext as _ from webhelpers.pylonslib import secure_form -from sqlalchemy import or_ from sqlalchemy.orm.exc import ObjectDeletedError from sqlalchemy.orm import joinedload +from webob.exc import HTTPFound, HTTPBadRequest, HTTPForbidden, HTTPMethodNotAllowed from kallithea import __platform__, is_windows, is_unix +from kallithea.config.routing import url from kallithea.lib.vcs.utils.lazy import LazyProperty -from kallithea.model import meta from kallithea.model.meta import Session from kallithea.model.user import UserModel from kallithea.model.db import User, Repository, Permission, \ @@ -52,7 +50,7 @@ RepoGroup, UserGroupRepoGroupToPerm, UserIpMap, UserGroupUserGroupToPerm, \ UserGroup, UserApiKeys -from kallithea.lib.utils2 import safe_unicode, aslist +from kallithea.lib.utils2 import safe_str, safe_unicode, aslist from kallithea.lib.utils import get_repo_slug, get_repo_group_slug, \ get_user_group_slug, conditional_cache from kallithea.lib.caching_query import FromCache @@ -93,57 +91,45 @@ return ''.join(l) -class KallitheaCrypto(object): - - @classmethod - def hash_string(cls, str_): - """ - Cryptographic function used for password hashing based on pybcrypt - or Python's own OpenSSL wrapper on windows - - :param password: password to hash - """ - if is_windows: - return hashlib.sha256(str_).hexdigest() - elif is_unix: - import bcrypt - return bcrypt.hashpw(str_, bcrypt.gensalt(10)) - else: - raise Exception('Unknown or unsupported platform %s' \ - % __platform__) +def get_crypt_password(password): + """ + Cryptographic function used for password hashing based on pybcrypt + or Python's own OpenSSL wrapper on windows - @classmethod - def hash_check(cls, password, hashed): - """ - Checks matching password with it's hashed value, runs different - implementation based on platform it runs on - - :param password: password - :param hashed: password in hashed form - """ - - try: - password = str(password) - except UnicodeEncodeError: - log.warning('rejecting non-ascii password') - return False - if is_windows: - return hashlib.sha256(password).hexdigest() == hashed - elif is_unix: - import bcrypt - return bcrypt.hashpw(password, hashed) == hashed - else: - raise Exception('Unknown or unsupported platform %s' \ - % __platform__) - - -def get_crypt_password(password): - return KallitheaCrypto.hash_string(password) + :param password: password to hash + """ + if is_windows: + return hashlib.sha256(password).hexdigest() + elif is_unix: + import bcrypt + return bcrypt.hashpw(safe_str(password), bcrypt.gensalt(10)) + else: + raise Exception('Unknown or unsupported platform %s' + % __platform__) def check_password(password, hashed): - return KallitheaCrypto.hash_check(password, hashed) + """ + Checks matching password with it's hashed value, runs different + implementation based on platform it runs on + + :param password: password + :param hashed: password in hashed form + """ + if is_windows: + return hashlib.sha256(password).hexdigest() == hashed + elif is_unix: + import bcrypt + try: + return bcrypt.checkpw(safe_str(password), safe_str(hashed)) + except ValueError as e: + # bcrypt will throw ValueError 'Invalid hashed_password salt' on all password errors + log.error('error from bcrypt checking password: %s', e) + return False + else: + raise Exception('Unknown or unsupported platform %s' + % __platform__) def _cached_perms_data(user_id, user_is_admin, user_inherit_default_permissions, @@ -209,8 +195,8 @@ #================================================================== # default global permissions taken from the default user - default_global_perms = UserToPerm.query()\ - .filter(UserToPerm.user_id == default_user_id)\ + default_global_perms = UserToPerm.query() \ + .filter(UserToPerm.user_id == default_user_id) \ .options(joinedload(UserToPerm.permission)) for perm in default_global_perms: @@ -219,10 +205,10 @@ # defaults for repositories, taken from default user for perm in default_repo_perms: r_k = perm.UserRepoToPerm.repository.repo_name - if perm.Repository.private and not (perm.Repository.user_id == user_id): + if perm.Repository.private and not (perm.Repository.owner_id == user_id): # disable defaults for private repos, p = 'repository.none' - elif perm.Repository.user_id == user_id: + elif perm.Repository.owner_id == user_id: # set admin if owner p = 'repository.admin' else: @@ -256,15 +242,15 @@ # USER GROUPS comes first # user group global permissions - user_perms_from_users_groups = Session().query(UserGroupToPerm)\ - .options(joinedload(UserGroupToPerm.permission))\ + user_perms_from_users_groups = Session().query(UserGroupToPerm) \ + .options(joinedload(UserGroupToPerm.permission)) \ .join((UserGroupMember, UserGroupToPerm.users_group_id == - UserGroupMember.users_group_id))\ - .filter(UserGroupMember.user_id == user_id)\ + UserGroupMember.users_group_id)) \ + .filter(UserGroupMember.user_id == user_id) \ .join((UserGroup, UserGroupMember.users_group_id == - UserGroup.users_group_id))\ - .filter(UserGroup.users_group_active == True)\ - .order_by(UserGroupToPerm.users_group_id)\ + UserGroup.users_group_id)) \ + .filter(UserGroup.users_group_active == True) \ + .order_by(UserGroupToPerm.users_group_id) \ .all() # need to group here by groups since user can be in more than # one group @@ -274,24 +260,24 @@ for gr, perms in _grouped: # since user can be in multiple groups iterate over them and # select the lowest permissions first (more explicit) - ##TODO: do this^^ + # TODO: do this^^ if not gr.inherit_default_permissions: # NEED TO IGNORE all configurable permissions and # replace them with explicitly set - permissions[GLOBAL] = permissions[GLOBAL]\ + permissions[GLOBAL] = permissions[GLOBAL] \ .difference(_configurable) for perm in perms: permissions[GLOBAL].add(perm.permission.permission_name) # user specific global permissions - user_perms = Session().query(UserToPerm)\ - .options(joinedload(UserToPerm.permission))\ + user_perms = Session().query(UserToPerm) \ + .options(joinedload(UserToPerm.permission)) \ .filter(UserToPerm.user_id == user_id).all() if not user_inherit_default_permissions: # NEED TO IGNORE all configurable permissions and # replace them with explicitly set - permissions[GLOBAL] = permissions[GLOBAL]\ + permissions[GLOBAL] = permissions[GLOBAL] \ .difference(_configurable) for perm in user_perms: @@ -309,17 +295,17 @@ # user group for repositories permissions user_repo_perms_from_users_groups = \ - Session().query(UserGroupRepoToPerm, Permission, Repository,)\ + Session().query(UserGroupRepoToPerm, Permission, Repository,) \ .join((Repository, UserGroupRepoToPerm.repository_id == - Repository.repo_id))\ + Repository.repo_id)) \ .join((Permission, UserGroupRepoToPerm.permission_id == - Permission.permission_id))\ + Permission.permission_id)) \ .join((UserGroup, UserGroupRepoToPerm.users_group_id == - UserGroup.users_group_id))\ - .filter(UserGroup.users_group_active == True)\ + UserGroup.users_group_id)) \ + .filter(UserGroup.users_group_active == True) \ .join((UserGroupMember, UserGroupRepoToPerm.users_group_id == - UserGroupMember.users_group_id))\ - .filter(UserGroupMember.user_id == user_id)\ + UserGroupMember.users_group_id)) \ + .filter(UserGroupMember.user_id == user_id) \ .all() multiple_counter = collections.defaultdict(int) @@ -329,7 +315,7 @@ p = perm.Permission.permission_name cur_perm = permissions[RK][r_k] - if perm.Repository.user_id == user_id: + if perm.Repository.owner_id == user_id: # set admin if owner p = 'repository.admin' else: @@ -344,7 +330,7 @@ r_k = perm.UserRepoToPerm.repository.repo_name cur_perm = permissions[RK][r_k] # set admin if owner - if perm.Repository.user_id == user_id: + if perm.Repository.owner_id == user_id: p = 'repository.admin' else: p = perm.Permission.permission_name @@ -362,16 +348,16 @@ #====================================================================== # user group for repo groups permissions user_repo_group_perms_from_users_groups = \ - Session().query(UserGroupRepoGroupToPerm, Permission, RepoGroup)\ - .join((RepoGroup, UserGroupRepoGroupToPerm.group_id == RepoGroup.group_id))\ + Session().query(UserGroupRepoGroupToPerm, Permission, RepoGroup) \ + .join((RepoGroup, UserGroupRepoGroupToPerm.group_id == RepoGroup.group_id)) \ .join((Permission, UserGroupRepoGroupToPerm.permission_id - == Permission.permission_id))\ + == Permission.permission_id)) \ .join((UserGroup, UserGroupRepoGroupToPerm.users_group_id == - UserGroup.users_group_id))\ - .filter(UserGroup.users_group_active == True)\ + UserGroup.users_group_id)) \ + .filter(UserGroup.users_group_active == True) \ .join((UserGroupMember, UserGroupRepoGroupToPerm.users_group_id - == UserGroupMember.users_group_id))\ - .filter(UserGroupMember.user_id == user_id)\ + == UserGroupMember.users_group_id)) \ + .filter(UserGroupMember.user_id == user_id) \ .all() multiple_counter = collections.defaultdict(int) @@ -399,17 +385,17 @@ #====================================================================== # user group for user group permissions user_group_user_groups_perms = \ - Session().query(UserGroupUserGroupToPerm, Permission, UserGroup)\ + Session().query(UserGroupUserGroupToPerm, Permission, UserGroup) \ .join((UserGroup, UserGroupUserGroupToPerm.target_user_group_id - == UserGroup.users_group_id))\ + == UserGroup.users_group_id)) \ .join((Permission, UserGroupUserGroupToPerm.permission_id - == Permission.permission_id))\ + == Permission.permission_id)) \ .join((UserGroupMember, UserGroupUserGroupToPerm.user_group_id - == UserGroupMember.users_group_id))\ - .filter(UserGroupMember.user_id == user_id)\ + == UserGroupMember.users_group_id)) \ + .filter(UserGroupMember.user_id == user_id) \ .join((UserGroup, UserGroupMember.users_group_id == - UserGroup.users_group_id), aliased=True, from_joinpoint=True)\ - .filter(UserGroup.users_group_active == True)\ + UserGroup.users_group_id), aliased=True, from_joinpoint=True) \ + .filter(UserGroup.users_group_active == True) \ .all() multiple_counter = collections.defaultdict(int) @@ -422,7 +408,7 @@ p = _choose_perm(p, cur_perm) permissions[UK][g_k] = p - #user explicit permission for user groups + # user explicit permission for user groups user_user_groups_perms = Permission.get_default_user_group_perms(user_id) for perm in user_user_groups_perms: u_k = perm.UserUserGroupToPerm.user_group.users_group_name @@ -450,7 +436,7 @@ else: msg = 'controller: %s is *NOT* in API whitelist' % (controller_name) if api_key: - #if we use API key and don't have access it's a warning + # if we use API key and don't have access it's a warning log.warning(msg) else: log.debug(msg) @@ -470,24 +456,36 @@ access to Kallithea is enabled, the default user is loaded instead. `AuthUser` does not by itself authenticate users and the constructor - sets the `is_authenticated` field to False, except when falling back - to the default anonymous user (if enabled). It's up to other parts + sets the `is_authenticated` field to False. It's up to other parts of the code to check e.g. if a supplied password is correct, and if so, set `is_authenticated` to True. However, `AuthUser` does refuse to load a user that is not `active`. + + Note that Kallithea distinguishes between the default user (an actual + user in the database with username "default") and "no user" (no actual + User object, AuthUser filled with blank values and username "None"). + + If the default user is active, that will always be used instead of + "no user". On the other hand, if the default user is disabled (and + there is no login information), we instead get "no user"; this should + only happen on the login page (as all other requests are redirected). + + `is_default_user` specifically checks if the AuthUser is the user named + "default". Use `is_anonymous` to check for both "default" and "no user". """ - def __init__(self, user_id=None, dbuser=None, + def __init__(self, user_id=None, dbuser=None, authenticating_api_key=None, is_external_auth=False): self.is_authenticated = False self.is_external_auth = is_external_auth + self.authenticating_api_key = authenticating_api_key user_model = UserModel() - self.anonymous_user = User.get_default_user(cache=True) + self._default_user = User.get_default_user(cache=True) - # These attributes will be overriden by fill_data, below, unless the + # These attributes will be overridden by fill_data, below, unless the # requested user cannot be found and the default anonymous user is # not enabled. self.user_id = None @@ -511,11 +509,10 @@ # If user cannot be found, try falling back to anonymous. if not is_user_loaded: - is_user_loaded = self._fill_data(self.anonymous_user) + is_user_loaded = self._fill_data(self._default_user) - # The anonymous user is always "logged in". - if self.user_id == self.anonymous_user.user_id: - self.is_authenticated = True + self.is_default_user = (self.user_id == self._default_user.user_id) + self.is_anonymous = not is_user_loaded or self.is_default_user if not self.username: self.username = 'None' @@ -542,6 +539,42 @@ def permissions(self): return self.__get_perms(user=self, cache=False) + def has_repository_permission_level(self, repo_name, level, purpose=None): + required_perms = { + 'read': ['repository.read', 'repository.write', 'repository.admin'], + 'write': ['repository.write', 'repository.admin'], + 'admin': ['repository.admin'], + }[level] + actual_perm = self.permissions['repositories'].get(repo_name) + ok = actual_perm in required_perms + log.debug('Checking if user %r can %r repo %r (%s): %s (has %r)', + self.username, level, repo_name, purpose, ok, actual_perm) + return ok + + def has_repository_group_permission_level(self, repo_group_name, level, purpose=None): + required_perms = { + 'read': ['group.read', 'group.write', 'group.admin'], + 'write': ['group.write', 'group.admin'], + 'admin': ['group.admin'], + }[level] + actual_perm = self.permissions['repositories_groups'].get(repo_group_name) + ok = actual_perm in required_perms + log.debug('Checking if user %r can %r repo group %r (%s): %s (has %r)', + self.username, level, repo_group_name, purpose, ok, actual_perm) + return ok + + def has_user_group_permission_level(self, user_group_name, level, purpose=None): + required_perms = { + 'read': ['usergroup.read', 'usergroup.write', 'usergroup.admin'], + 'write': ['usergroup.write', 'usergroup.admin'], + 'admin': ['usergroup.admin'], + }[level] + actual_perm = self.permissions['user_groups'].get(user_group_name) + ok = actual_perm in required_perms + log.debug('Checking if user %r can %r user group %r (%s): %s (has %r)', + self.username, level, user_group_name, purpose, ok, actual_perm) + return ok + @property def api_keys(self): return self._get_api_keys() @@ -574,10 +607,8 @@ def _get_api_keys(self): api_keys = [self.api_key] - for api_key in UserApiKeys.query()\ - .filter(UserApiKeys.user_id == self.user_id)\ - .filter(or_(UserApiKeys.expires == -1, - UserApiKeys.expires >= time.time())).all(): + for api_key in UserApiKeys.query() \ + .filter_by(user_id=self.user_id, is_expired=False): api_keys.append(api_key.api_key) return api_keys @@ -627,18 +658,13 @@ return False def __repr__(self): - return ""\ - % (self.user_id, self.username, self.is_authenticated) - - def set_authenticated(self, authenticated=True): - if self.user_id != self.anonymous_user.user_id: - self.is_authenticated = authenticated + return "" \ + % (self.user_id, self.username, (self.is_authenticated or self.is_default_user)) def to_cookie(self): """ Serializes this login session to a cookie `dict`. """ return { 'user_id': self.user_id, - 'is_authenticated': self.is_authenticated, 'is_external_auth': self.is_external_auth, } @@ -652,9 +678,7 @@ user_id=cookie.get('user_id'), is_external_auth=cookie.get('is_external_auth', False), ) - if not au.is_authenticated and au.user_id is not None: - # user is not authenticated and not empty - au.set_authenticated(cookie.get('is_authenticated')) + au.is_authenticated = True return au @classmethod @@ -694,101 +718,79 @@ def set_available_permissions(config): """ - This function will propagate pylons globals with all available defined + This function will propagate globals with all available defined permission given in db. We don't want to check each time from db for new permissions since adding a new permission also requires application restart ie. to decorate new views with the newly created permission - :param config: current pylons config instance + :param config: current config instance """ log.info('getting information about all available permissions') try: - sa = meta.Session - all_perms = sa.query(Permission).all() + all_perms = Session().query(Permission).all() config['available_permissions'] = [x.permission_name for x in all_perms] finally: - meta.Session.remove() + Session.remove() #============================================================================== # CHECK DECORATORS #============================================================================== -def redirect_to_login(message=None): +def _redirect_to_login(message=None): + """Return an exception that must be raised. It will redirect to the login + page which will redirect back to the current URL after authentication. + The optional message will be shown in a flash message.""" from kallithea.lib import helpers as h - p = request.path_qs if message: h.flash(h.literal(message), category='warning') + p = request.path_qs log.debug('Redirecting to login page, origin: %s', p) - return redirect(url('login_home', came_from=p)) + return HTTPFound(location=url('login_home', came_from=p)) +# Use as decorator class LoginRequired(object): - """ - Must be logged in to execute this function else - redirect to login page + """Client must be logged in as a valid User, or we'll redirect to the login + page. - :param api_access: if enabled this checks only for valid auth token - and grants access based on valid token + If the "default" user is enabled and allow_default_user is true, that is + considered valid too. + + Also checks that IP address is allowed, and if using API key instead + of regular cookie authentication, checks that API key access is allowed + (based on `api_access` parameter and the API view whitelist). """ - def __init__(self, api_access=False): + def __init__(self, api_access=False, allow_default_user=False): self.api_access = api_access + self.allow_default_user = allow_default_user def __call__(self, func): return decorator(self.__wrapper, func) def __wrapper(self, func, *fargs, **fkwargs): controller = fargs[0] - user = controller.authuser + user = request.authuser loc = "%s:%s" % (controller.__class__.__name__, func.__name__) log.debug('Checking access for user %s @ %s', user, loc) - if not AuthUser.check_ip_allowed(user, controller.ip_addr): - return redirect_to_login(_('IP %s not allowed') % controller.ip_addr) + if not AuthUser.check_ip_allowed(user, request.ip_addr): + raise _redirect_to_login(_('IP %s not allowed') % request.ip_addr) - # check if we used an API key and it's a valid one - api_key = request.GET.get('api_key') + # Check if we used an API key to authenticate. + api_key = user.authenticating_api_key if api_key is not None: - # explicit controller is enabled or API is in our whitelist - if self.api_access or allowed_api_access(loc, api_key=api_key): - if api_key in user.api_keys: - log.info('user %s authenticated with API key ****%s @ %s', - user, api_key[-4:], loc) - return func(*fargs, **fkwargs) - else: - log.warning('API key ****%s is NOT valid', api_key[-4:]) - return redirect_to_login(_('Invalid API key')) - else: + # Check that controller is enabled for API key usage. + if not self.api_access and not allowed_api_access(loc, api_key=api_key): # controller does not allow API access log.warning('API access to %s is not allowed', loc) - return abort(403) - - # Only allow the following HTTP request methods. (We sometimes use POST - # requests with a '_method' set to 'PUT' or 'DELETE'; but that is only - # used for the route lookup, and does not affect request.method.) - if request.method not in ['GET', 'HEAD', 'POST', 'PUT']: - return abort(405) + raise HTTPForbidden() - # Also verify the _method override. This is only permitted in POST - # requests, and can specify PUT or DELETE. - _method = request.params.get('_method') - if _method is None: - pass # no override, no problem - elif request.method == 'POST' and _method.upper() in ['PUT', 'DELETE']: - pass # permitted override - else: - raise HTTPMethodNotAllowed() - - # Make sure CSRF token never appears in the URL. If so, invalidate it. - if secure_form.token_key in request.GET: - log.error('CSRF key leak detected') - session.pop(secure_form.token_key, None) - session.save() - from kallithea.lib import helpers as h - h.flash(_("CSRF token leak has been detected - all form tokens have been expired"), - category='error') + log.info('user %s authenticated with API key ****%s @ %s', + user, api_key[-4:], loc) + return func(*fargs, **fkwargs) # CSRF protection: Whenever a request has ambient authority (whether # through a session cookie or its origin IP address), it must include @@ -800,527 +802,203 @@ token = request.POST.get(secure_form.token_key) if not token or token != secure_form.authentication_token(): log.error('CSRF check failed') - return abort(403) - - # WebOb already ignores request payload parameters for anything other - # than POST/PUT, but double-check since other Kallithea code relies on - # this assumption. - if request.method not in ['POST', 'PUT'] and request.POST: - log.error('%r request with payload parameters; WebOb should have stopped this', request.method) - return abort(400) + raise HTTPForbidden() # regular user authentication if user.is_authenticated: log.info('user %s authenticated with regular auth @ %s', user, loc) return func(*fargs, **fkwargs) + elif user.is_default_user: + if self.allow_default_user: + log.info('default user @ %s', loc) + return func(*fargs, **fkwargs) + log.info('default user is not accepted here @ %s', loc) else: log.warning('user %s NOT authenticated with regular auth @ %s', user, loc) - return redirect_to_login() + raise _redirect_to_login() + +# Use as decorator class NotAnonymous(object): - """ - Must be logged in to execute this function else - redirect to login page""" + """Ensures that client is not logged in as the "default" user, and + redirects to the login page otherwise. Must be used together with + LoginRequired.""" def __call__(self, func): return decorator(self.__wrapper, func) def __wrapper(self, func, *fargs, **fkwargs): cls = fargs[0] - self.user = cls.authuser + user = request.authuser - log.debug('Checking if user is not anonymous @%s', cls) + log.debug('Checking that user %s is not anonymous @%s', user.username, cls) - anonymous = self.user.username == User.DEFAULT_USER - - if anonymous: - return redirect_to_login(_('You need to be a registered user to ' - 'perform this action')) + if user.is_default_user: + raise _redirect_to_login(_('You need to be a registered user to ' + 'perform this action')) else: return func(*fargs, **fkwargs) -class PermsDecorator(object): - """Base class for controller decorators""" +class _PermsDecorator(object): + """Base class for controller decorators with multiple permissions""" def __init__(self, *required_perms): - self.required_perms = set(required_perms) - self.user_perms = None + self.required_perms = required_perms # usually very short - a list is thus fine def __call__(self, func): return decorator(self.__wrapper, func) def __wrapper(self, func, *fargs, **fkwargs): cls = fargs[0] - self.user = cls.authuser - self.user_perms = self.user.permissions + user = request.authuser log.debug('checking %s permissions %s for %s %s', - self.__class__.__name__, self.required_perms, cls, self.user) + self.__class__.__name__, self.required_perms, cls, user) - if self.check_permissions(): - log.debug('Permission granted for %s %s', cls, self.user) + if self.check_permissions(user): + log.debug('Permission granted for %s %s', cls, user) return func(*fargs, **fkwargs) else: - log.debug('Permission denied for %s %s', cls, self.user) - anonymous = self.user.username == User.DEFAULT_USER - - if anonymous: - return redirect_to_login(_('You need to be signed in to view this page')) + log.info('Permission denied for %s %s', cls, user) + if user.is_default_user: + raise _redirect_to_login(_('You need to be signed in to view this page')) else: - # redirect with forbidden ret code - return abort(403) + raise HTTPForbidden() - def check_permissions(self): - """Dummy function for overriding""" - raise Exception('You have to write this function in child class') - - -class HasPermissionAllDecorator(PermsDecorator): - """ - Checks for access permission for all given predicates. All of them - have to be meet in order to fulfill the request - """ - - def check_permissions(self): - if self.required_perms.issubset(self.user_perms.get('global')): - return True - return False + def check_permissions(self, user): + raise NotImplementedError() -class HasPermissionAnyDecorator(PermsDecorator): - """ - Checks for access permission for any of given predicates. In order to - fulfill the request any of predicates must be meet - """ - - def check_permissions(self): - if self.required_perms.intersection(self.user_perms.get('global')): - return True - return False - - -class HasRepoPermissionAllDecorator(PermsDecorator): - """ - Checks for access permission for all given predicates for specific - repository. All of them have to be meet in order to fulfill the request +class HasPermissionAnyDecorator(_PermsDecorator): """ - - def check_permissions(self): - repo_name = get_repo_slug(request) - try: - user_perms = set([self.user_perms['repositories'][repo_name]]) - except KeyError: - return False - if self.required_perms.issubset(user_perms): - return True - return False - - -class HasRepoPermissionAnyDecorator(PermsDecorator): - """ - Checks for access permission for any of given predicates for specific - repository. In order to fulfill the request any of predicates must be meet + Checks the user has any of the given global permissions. """ - def check_permissions(self): - repo_name = get_repo_slug(request) - try: - user_perms = set([self.user_perms['repositories'][repo_name]]) - except KeyError: - return False - - if self.required_perms.intersection(user_perms): - return True - return False + def check_permissions(self, user): + global_permissions = user.permissions['global'] # usually very short + return any(p in global_permissions for p in self.required_perms) -class HasRepoGroupPermissionAllDecorator(PermsDecorator): - """ - Checks for access permission for all given predicates for specific - repository group. All of them have to be meet in order to fulfill the request - """ +class _PermDecorator(_PermsDecorator): + """Base class for controller decorators with a single permission""" - def check_permissions(self): - group_name = get_repo_group_slug(request) - try: - user_perms = set([self.user_perms['repositories_groups'][group_name]]) - except KeyError: - return False - - if self.required_perms.issubset(user_perms): - return True - return False + def __init__(self, required_perm): + _PermsDecorator.__init__(self, [required_perm]) + self.required_perm = required_perm -class HasRepoGroupPermissionAnyDecorator(PermsDecorator): +class HasRepoPermissionLevelDecorator(_PermDecorator): """ - Checks for access permission for any of given predicates for specific - repository group. In order to fulfill the request any of predicates must be meet + Checks the user has at least the specified permission level for the requested repository. """ - def check_permissions(self): - group_name = get_repo_group_slug(request) - try: - user_perms = set([self.user_perms['repositories_groups'][group_name]]) - except KeyError: - return False - - if self.required_perms.intersection(user_perms): - return True - return False + def check_permissions(self, user): + repo_name = get_repo_slug(request) + return user.has_repository_permission_level(repo_name, self.required_perm) -class HasUserGroupPermissionAllDecorator(PermsDecorator): +class HasRepoGroupPermissionLevelDecorator(_PermDecorator): """ - Checks for access permission for all given predicates for specific - user group. All of them have to be meet in order to fulfill the request + Checks the user has any of given permissions for the requested repository group. """ - def check_permissions(self): - group_name = get_user_group_slug(request) - try: - user_perms = set([self.user_perms['user_groups'][group_name]]) - except KeyError: - return False - - if self.required_perms.issubset(user_perms): - return True - return False + def check_permissions(self, user): + repo_group_name = get_repo_group_slug(request) + return user.has_repository_group_permission_level(repo_group_name, self.required_perm) -class HasUserGroupPermissionAnyDecorator(PermsDecorator): +class HasUserGroupPermissionLevelDecorator(_PermDecorator): """ Checks for access permission for any of given predicates for specific user group. In order to fulfill the request any of predicates must be meet """ - def check_permissions(self): - group_name = get_user_group_slug(request) - try: - user_perms = set([self.user_perms['user_groups'][group_name]]) - except KeyError: - return False - - if self.required_perms.intersection(user_perms): - return True - return False + def check_permissions(self, user): + user_group_name = get_user_group_slug(request) + return user.has_user_group_permission_level(user_group_name, self.required_perm) #============================================================================== # CHECK FUNCTIONS #============================================================================== -class PermsFunction(object): - """Base function for other check functions""" - - def __init__(self, *perms): - self.required_perms = set(perms) - self.user_perms = None - self.repo_name = None - self.group_name = None - - def __call__(self, check_location='', user=None): - if not user: - #TODO: remove this someday,put as user as attribute here - user = request.user - - # init auth user if not already given - if not isinstance(user, AuthUser): - user = AuthUser(user.user_id) - cls_name = self.__class__.__name__ - check_scope = { - 'HasPermissionAll': '', - 'HasPermissionAny': '', - 'HasRepoPermissionAll': 'repo:%s' % self.repo_name, - 'HasRepoPermissionAny': 'repo:%s' % self.repo_name, - 'HasRepoGroupPermissionAll': 'group:%s' % self.group_name, - 'HasRepoGroupPermissionAny': 'group:%s' % self.group_name, - }.get(cls_name, '?') - log.debug('checking cls:%s %s usr:%s %s @ %s', cls_name, - self.required_perms, user, check_scope, - check_location or 'unspecified location') - if not user: - log.debug('Empty request user') - return False - self.user_perms = user.permissions - if self.check_permissions(): - log.debug('Permission to %s granted for user: %s @ %s', - check_scope, user, - check_location or 'unspecified location') - return True +class _PermsFunction(object): + """Base function for other check functions with multiple permissions""" + + def __init__(self, *required_perms): + self.required_perms = required_perms # usually very short - a list is thus fine - else: - log.debug('Permission to %s denied for user: %s @ %s', - check_scope, user, - check_location or 'unspecified location') - return False - - def check_permissions(self): - """Dummy function for overriding""" - raise Exception('You have to write this function in child class') - - -class HasPermissionAll(PermsFunction): - def check_permissions(self): - if self.required_perms.issubset(self.user_perms.get('global')): - return True - return False - + def __nonzero__(self): + """ Defend against accidentally forgetting to call the object + and instead evaluating it directly in a boolean context, + which could have security implications. + """ + raise AssertionError(self.__class__.__name__ + ' is not a bool and must be called!') -class HasPermissionAny(PermsFunction): - def check_permissions(self): - if self.required_perms.intersection(self.user_perms.get('global')): - return True - return False - - -class HasRepoPermissionAll(PermsFunction): - def __call__(self, repo_name=None, check_location='', user=None): - self.repo_name = repo_name - return super(HasRepoPermissionAll, self).__call__(check_location, user) - - def check_permissions(self): - if not self.repo_name: - self.repo_name = get_repo_slug(request) - - try: - self._user_perms = set( - [self.user_perms['repositories'][self.repo_name]] - ) - except KeyError: - return False - if self.required_perms.issubset(self._user_perms): - return True - return False + def __call__(self, *a, **b): + raise NotImplementedError() -class HasRepoPermissionAny(PermsFunction): - def __call__(self, repo_name=None, check_location='', user=None): - self.repo_name = repo_name - return super(HasRepoPermissionAny, self).__call__(check_location, user) - - def check_permissions(self): - if not self.repo_name: - self.repo_name = get_repo_slug(request) +class HasPermissionAny(_PermsFunction): - try: - self._user_perms = set( - [self.user_perms['repositories'][self.repo_name]] - ) - except KeyError: - return False - if self.required_perms.intersection(self._user_perms): - return True - return False - + def __call__(self, purpose=None): + global_permissions = request.user.permissions['global'] # usually very short + ok = any(p in global_permissions for p in self.required_perms) -class HasRepoGroupPermissionAny(PermsFunction): - def __call__(self, group_name=None, check_location='', user=None): - self.group_name = group_name - return super(HasRepoGroupPermissionAny, self).__call__(check_location, user) - - def check_permissions(self): - try: - self._user_perms = set( - [self.user_perms['repositories_groups'][self.group_name]] - ) - except KeyError: - return False - if self.required_perms.intersection(self._user_perms): - return True - return False + log.debug('Check %s for global %s (%s): %s' % + (request.user.username, self.required_perms, purpose, ok)) + return ok -class HasRepoGroupPermissionAll(PermsFunction): - def __call__(self, group_name=None, check_location='', user=None): - self.group_name = group_name - return super(HasRepoGroupPermissionAll, self).__call__(check_location, user) +class _PermFunction(_PermsFunction): + """Base function for other check functions with a single permission""" - def check_permissions(self): - try: - self._user_perms = set( - [self.user_perms['repositories_groups'][self.group_name]] - ) - except KeyError: - return False - if self.required_perms.issubset(self._user_perms): - return True - return False + def __init__(self, required_perm): + _PermsFunction.__init__(self, [required_perm]) + self.required_perm = required_perm -class HasUserGroupPermissionAny(PermsFunction): - def __call__(self, user_group_name=None, check_location='', user=None): - self.user_group_name = user_group_name - return super(HasUserGroupPermissionAny, self).__call__(check_location, user) +class HasRepoPermissionLevel(_PermFunction): - def check_permissions(self): - try: - self._user_perms = set( - [self.user_perms['user_groups'][self.user_group_name]] - ) - except KeyError: - return False - if self.required_perms.intersection(self._user_perms): - return True - return False + def __call__(self, repo_name, purpose=None): + return request.user.has_repository_permission_level(repo_name, self.required_perm, purpose) -class HasUserGroupPermissionAll(PermsFunction): - def __call__(self, user_group_name=None, check_location='', user=None): - self.user_group_name = user_group_name - return super(HasUserGroupPermissionAll, self).__call__(check_location, user) +class HasRepoGroupPermissionLevel(_PermFunction): + + def __call__(self, group_name, purpose=None): + return request.user.has_repository_group_permission_level(group_name, self.required_perm, purpose) - def check_permissions(self): - try: - self._user_perms = set( - [self.user_perms['user_groups'][self.user_group_name]] - ) - except KeyError: - return False - if self.required_perms.issubset(self._user_perms): - return True - return False + +class HasUserGroupPermissionLevel(_PermFunction): + + def __call__(self, user_group_name, purpose=None): + return request.user.has_user_group_permission_level(user_group_name, self.required_perm, purpose) #============================================================================== # SPECIAL VERSION TO HANDLE MIDDLEWARE AUTH #============================================================================== + class HasPermissionAnyMiddleware(object): def __init__(self, *perms): self.required_perms = set(perms) - def __call__(self, user, repo_name): - # repo_name MUST be unicode, since we handle keys in permission + def __call__(self, user, repo_name, purpose=None): + # repo_name MUST be unicode, since we handle keys in ok # dict by unicode repo_name = safe_unicode(repo_name) - usr = AuthUser(user.user_id) - self.user_perms = set([usr.permissions['repositories'][repo_name]]) - self.username = user.username - self.repo_name = repo_name - return self.check_permissions() - - def check_permissions(self): - log.debug('checking VCS protocol ' - 'permissions %s for user:%s repository:%s', self.user_perms, - self.username, self.repo_name) - if self.required_perms.intersection(self.user_perms): - log.debug('Permission to repo: %s granted for user: %s @ %s', - self.repo_name, self.username, 'PermissionMiddleware') - return True - log.debug('Permission to repo: %s denied for user: %s @ %s', - self.repo_name, self.username, 'PermissionMiddleware') - return False - - -#============================================================================== -# SPECIAL VERSION TO HANDLE API AUTH -#============================================================================== -class _BaseApiPerm(object): - def __init__(self, *perms): - self.required_perms = set(perms) - - def __call__(self, check_location=None, user=None, repo_name=None, - group_name=None): - cls_name = self.__class__.__name__ - check_scope = 'user:%s' % (user) - if repo_name: - check_scope += ', repo:%s' % (repo_name) - - if group_name: - check_scope += ', repo group:%s' % (group_name) - - log.debug('checking cls:%s %s %s @ %s', - cls_name, self.required_perms, check_scope, check_location) - if not user: - log.debug('Empty User passed into arguments') - return False - - ## process user - if not isinstance(user, AuthUser): - user = AuthUser(user.user_id) - if not check_location: - check_location = 'unspecified' - if self.check_permissions(user.permissions, repo_name, group_name): - log.debug('Permission to %s granted for user: %s @ %s', - check_scope, user, check_location) - return True - - else: - log.debug('Permission to %s denied for user: %s @ %s', - check_scope, user, check_location) - return False - - def check_permissions(self, perm_defs, repo_name=None, group_name=None): - """ - implement in child class should return True if permissions are ok, - False otherwise + user = AuthUser(user.user_id) - :param perm_defs: dict with permission definitions - :param repo_name: repo name - """ - raise NotImplementedError() - - -class HasPermissionAllApi(_BaseApiPerm): - def check_permissions(self, perm_defs, repo_name=None, group_name=None): - if self.required_perms.issubset(perm_defs.get('global')): - return True - return False - - -class HasPermissionAnyApi(_BaseApiPerm): - def check_permissions(self, perm_defs, repo_name=None, group_name=None): - if self.required_perms.intersection(perm_defs.get('global')): - return True - return False - - -class HasRepoPermissionAllApi(_BaseApiPerm): - def check_permissions(self, perm_defs, repo_name=None, group_name=None): try: - _user_perms = set([perm_defs['repositories'][repo_name]]) + ok = user.permissions['repositories'][repo_name] in self.required_perms except KeyError: - log.warning(traceback.format_exc()) - return False - if self.required_perms.issubset(_user_perms): - return True - return False - + ok = False -class HasRepoPermissionAnyApi(_BaseApiPerm): - def check_permissions(self, perm_defs, repo_name=None, group_name=None): - try: - _user_perms = set([perm_defs['repositories'][repo_name]]) - except KeyError: - log.warning(traceback.format_exc()) - return False - if self.required_perms.intersection(_user_perms): - return True - return False - + log.debug('Middleware check %s for %s for repo %s (%s): %s' % (user.username, self.required_perms, repo_name, purpose, ok)) + return ok -class HasRepoGroupPermissionAnyApi(_BaseApiPerm): - def check_permissions(self, perm_defs, repo_name=None, group_name=None): - try: - _user_perms = set([perm_defs['repositories_groups'][group_name]]) - except KeyError: - log.warning(traceback.format_exc()) - return False - if self.required_perms.intersection(_user_perms): - return True - return False - -class HasRepoGroupPermissionAllApi(_BaseApiPerm): - def check_permissions(self, perm_defs, repo_name=None, group_name=None): - try: - _user_perms = set([perm_defs['repositories_groups'][group_name]]) - except KeyError: - log.warning(traceback.format_exc()) - return False - if self.required_perms.issubset(_user_perms): - return True - return False def check_ip_access(source_ip, allowed_ips=None): """ diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/auth_modules/__init__.py --- a/kallithea/lib/auth_modules/__init__.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/auth_modules/__init__.py Thu Jun 07 01:46:02 2018 +0200 @@ -17,9 +17,8 @@ import logging import traceback +import importlib -from kallithea import EXTERN_TYPE_INTERNAL -from kallithea.lib.compat import importlib from kallithea.lib.utils2 import str2bool from kallithea.lib.compat import formatted_json, hybrid_property from kallithea.lib.auth import PasswordGenerator @@ -41,7 +40,7 @@ from inspect import isfunction formencode_obj = self.formencode_obj if isfunction(formencode_obj): - #case we wrap validators into functions + # case we wrap validators into functions formencode_obj = self.formencode_obj(*args, **kwargs) return formencode_obj(*self.args, **self.kwargs) @@ -77,7 +76,6 @@ #log.debug('Initializing lazy formencode object: %s', obj) return LazyFormencode(obj, *args, **kwargs) - class ProxyGet(object): def __getattribute__(self, name): return LazyCaller(name) @@ -139,8 +137,8 @@ log.debug('Trying to fetch user `%s` from Kallithea database', username) if username: - user = User.get_by_username(username) - if not user: + user = User.get_by_username_or_email(username) + if user is None: log.debug('Fallback to fetch user in case insensitive mode') user = User.get_by_username(username, case_insensitive=True) else: @@ -289,7 +287,6 @@ extern_name=user_data["extern_name"], extern_type=self.name ) - Session().flush() # enforce user is just in given groups, all of them has to be ones # created from plugins. We store this info in _group_data JSON field groups = user_data['groups'] or [] @@ -298,10 +295,10 @@ return user_data -def importplugin(plugin): +def loadplugin(plugin): """ - Imports and returns the authentication plugin in the module named by plugin - (e.g., plugin='kallithea.lib.auth_modules.auth_internal'). Returns the + Imports, instantiates, and returns the authentication plugin in the module named by plugin + (e.g., plugin='kallithea.lib.auth_modules.auth_internal'). Returns an instance of the KallitheaAuthPluginBase subclass on success, raises exceptions on failure. raises: @@ -314,8 +311,6 @@ parts = plugin.split(u'.lib.auth_modules.auth_', 1) if len(parts) == 2: _module, pn = parts - if pn == EXTERN_TYPE_INTERNAL: - pn = "internal" plugin = u'kallithea.lib.auth_modules.auth_' + pn PLUGIN_CLASS_NAME = "KallitheaAuthPlugin" try: @@ -333,16 +328,8 @@ if not issubclass(pluginclass, KallitheaAuthPluginBase): raise TypeError("Authentication class %s.KallitheaAuthPlugin is not " "a subclass of %s" % (plugin, KallitheaAuthPluginBase)) - return pluginclass - -def loadplugin(plugin): - """ - Loads and returns an instantiated authentication plugin. - - see: importplugin - """ - plugin = importplugin(plugin)() + plugin = pluginclass() if plugin.plugin_settings.im_func != KallitheaAuthPluginBase.plugin_settings.im_func: raise TypeError("Authentication class %s.KallitheaAuthPluginBase " "has overridden the plugin_settings method, which is " @@ -350,6 +337,19 @@ return plugin +def get_auth_plugins(): + """Return a list of instances of plugins that are available and enabled""" + auth_plugins = [] + for plugin_name in Setting.get_by_name("auth_plugins").app_settings_value: + try: + plugin = loadplugin(plugin_name) + except Exception: + log.exception('Failed to load authentication module %s' % (plugin_name)) + else: + auth_plugins.append(plugin) + return auth_plugins + + def authenticate(username, password, environ=None): """ Authentication function used for access control, @@ -361,15 +361,10 @@ :returns: None if auth failed, user_data dict if auth is correct """ - auth_plugins = Setting.get_auth_plugins() - log.debug('Authentication against %s plugins', auth_plugins) - for module in auth_plugins: - try: - plugin = loadplugin(module) - except (ImportError, AttributeError, TypeError) as e: - raise ImportError('Failed to load authentication module %s : %s' - % (module, str(e))) - log.debug('Trying authentication using ** %s **', module) + auth_plugins = get_auth_plugins() + for plugin in auth_plugins: + module = plugin.__class__.__module__ + log.debug('Trying authentication using %s', module) # load plugin settings from Kallithea database plugin_name = plugin.name plugin_settings = {} @@ -377,7 +372,7 @@ conf_key = "auth_%s_%s" % (plugin_name, v["name"]) setting = Setting.get_by_name(conf_key) plugin_settings[v["name"]] = setting.app_settings_value if setting else None - log.debug('Plugin settings \n%s', formatted_json(plugin_settings)) + log.debug('Settings for auth plugin %s:\n%s', plugin_name, formatted_json(plugin_settings)) if not str2bool(plugin_settings["enabled"]): log.info("Authentication plugin %s is disabled, skipping for %s", @@ -387,7 +382,7 @@ # use plugin's method of user extraction. user = plugin.get_user(username, environ=environ, settings=plugin_settings) - log.debug('Plugin %s extracted user is `%s`', module, user) + log.debug('Plugin %s extracted user `%s`', module, user) if not plugin.accepts(user): log.debug('Plugin %s does not accept user `%s` for authentication', module, user) @@ -395,8 +390,15 @@ else: log.debug('Plugin %s accepted user `%s` for authentication', module, user) + # The user might have tried to authenticate using their email address, + # then the username variable wouldn't contain a valid username. + # But as the plugin has accepted the user, .username field should + # have a valid username, so use it for authentication purposes. + if user is not None: + username = user.username - log.info('Authenticating user using %s plugin', plugin.__module__) + log.info('Authenticating user using %s plugin', module) + # _authenticate is a wrapper for .auth() method of plugin. # it checks if .auth() sends proper data. For KallitheaExternalAuthPlugin # it also maps users to Database and maps the attributes returned @@ -405,7 +407,7 @@ user_data = plugin._authenticate(user, username, password, plugin_settings, environ=environ or {}) - log.debug('PLUGIN USER DATA: %s', user_data) + log.debug('Plugin user data: %s', user_data) if user_data is not None: log.debug('Plugin returned proper authentication data') @@ -414,17 +416,18 @@ # we failed to Auth because .auth() method didn't return the user if username: log.warning("User `%s` failed to authenticate against %s", - username, plugin.__module__) + username, module) return None + def get_managed_fields(user): """return list of fields that are managed by the user's auth source, usually some of 'username', 'firstname', 'lastname', 'email', 'active', 'password' """ - auth_plugins = Setting.get_auth_plugins() - for module in auth_plugins: + auth_plugins = get_auth_plugins() + for plugin in auth_plugins: + module = plugin.__class__.__module__ log.debug('testing %s (%s) with auth plugin %s', user, user.extern_type, module) - plugin = loadplugin(module) if plugin.name == user.extern_type: return plugin.get_managed_fields() log.error('no auth plugin %s found for %s', user.extern_type, user) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/auth_modules/auth_container.py --- a/kallithea/lib/auth_modules/auth_container.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/auth_modules/auth_container.py Thu Jun 07 01:46:02 2018 +0200 @@ -27,9 +27,9 @@ import logging from kallithea.lib import auth_modules -from kallithea.lib.utils2 import str2bool, safe_unicode +from kallithea.lib.utils2 import str2bool, safe_unicode, safe_str from kallithea.lib.compat import hybrid_property -from kallithea.model.db import User +from kallithea.model.db import User, Setting log = logging.getLogger(__name__) @@ -53,15 +53,39 @@ "name": "header", "validator": self.validators.UnicodeString(strip=True, not_empty=True), "type": "string", - "description": "Header to extract the user from", + "description": "Request header to extract the username from", "default": "REMOTE_USER", - "formname": "Header" + "formname": "Username header" + }, + { + "name": "email_header", + "validator": self.validators.UnicodeString(strip=True), + "type": "string", + "description": "Optional request header to extract the email from", + "default": "", + "formname": "Email header" + }, + { + "name": "firstname_header", + "validator": self.validators.UnicodeString(strip=True), + "type": "string", + "description": "Optional request header to extract the first name from", + "default": "", + "formname": "Firstname header" + }, + { + "name": "lastname_header", + "validator": self.validators.UnicodeString(strip=True), + "type": "string", + "description": "Optional request header to extract the last name from", + "default": "", + "formname": "Lastname header" }, { "name": "fallback_header", "validator": self.validators.UnicodeString(strip=True), "type": "string", - "description": "Header to extract the user from when main one fails", + "description": "Request header to extract the user from when main one fails", "default": "HTTP_X_FORWARDED_USER", "formname": "Fallback header" }, @@ -158,7 +182,7 @@ # only way to log in is using environ username = None if userobj: - username = getattr(userobj, 'username') + username = safe_str(getattr(userobj, 'username')) if not username: # we don't have any objects in DB, user doesn't exist, extract @@ -172,9 +196,9 @@ # old attrs fetched from Kallithea database admin = getattr(userobj, 'admin', False) active = getattr(userobj, 'active', True) - email = getattr(userobj, 'email', '') - firstname = getattr(userobj, 'firstname', '') - lastname = getattr(userobj, 'lastname', '') + email = environ.get(settings.get('email_header'), getattr(userobj, 'email', '')) + firstname = environ.get(settings.get('firstname_header'), getattr(userobj, 'firstname', '')) + lastname = environ.get(settings.get('lastname_header'), getattr(userobj, 'lastname', '')) user_data = { 'username': username, @@ -192,4 +216,11 @@ return user_data def get_managed_fields(self): - return ['username', 'password'] + fields = ['username', 'password'] + if(Setting.get_by_name('auth_container_email_header').app_settings_value): + fields.append('email') + if(Setting.get_by_name('auth_container_firstname_header').app_settings_value): + fields.append('firstname') + if(Setting.get_by_name('auth_container_lastname_header').app_settings_value): + fields.append('lastname') + return fields diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/auth_modules/auth_crowd.py --- a/kallithea/lib/auth_modules/auth_crowd.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/auth_modules/auth_crowd.py Thu Jun 07 01:46:02 2018 +0200 @@ -52,7 +52,7 @@ passwd="some_passwd", version="1") """ - if not "port" in kwargs: + if "port" not in kwargs: kwargs["port"] = "8095" self._logger = kwargs.get("logger", logging.getLogger(__name__)) self._uri = "%s://%s:%s/crowd" % (kwargs.get("method", "http"), @@ -88,14 +88,14 @@ log.debug("Sent crowd: \n%s", formatted_json({"url": url, "body": body, "headers": _headers})) - request = urllib2.Request(url, body, _headers) + req = urllib2.Request(url, body, _headers) if method: - request.get_method = lambda: method + req.get_method = lambda: method global msg msg = "" try: - rdoc = self.opener.open(request) + rdoc = self.opener.open(req) msg = "".join(rdoc.readlines()) if not msg and empty_response_ok: rval = {} @@ -131,6 +131,8 @@ class KallitheaAuthPlugin(auth_modules.KallitheaExternalAuthPlugin): + def __init__(self): + self._protocol_values = ["http", "https"] @hybrid_property def name(self): @@ -139,6 +141,14 @@ def settings(self): settings = [ { + "name": "method", + "validator": self.validators.OneOf(self._protocol_values), + "type": "select", + "values": self._protocol_values, + "description": "The protocol used to connect to the Atlassian CROWD server.", + "formname": "Protocol" + }, + { "name": "host", "validator": self.validators.UnicodeString(strip=True), "type": "string", diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/auth_modules/auth_internal.py --- a/kallithea/lib/auth_modules/auth_internal.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/auth_modules/auth_internal.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,7 +28,6 @@ import logging -from kallithea import EXTERN_TYPE_INTERNAL from kallithea.lib import auth_modules from kallithea.lib.compat import formatted_json, hybrid_property from kallithea.model.db import User @@ -42,7 +41,8 @@ @hybrid_property def name(self): - return EXTERN_TYPE_INTERNAL + # Also found as kallithea.lib.model.db.User.DEFAULT_AUTH_TYPE + return 'internal' def settings(self): return [] @@ -86,8 +86,8 @@ log.debug(formatted_json(user_data)) if userobj.active: from kallithea.lib import auth - password_match = auth.KallitheaCrypto.hash_check(password, userobj.password) - if userobj.username == User.DEFAULT_USER and userobj.active: + password_match = auth.check_password(password, userobj.password) + if userobj.is_default_user and userobj.active: log.info('user %s authenticated correctly as anonymous user', username) return user_data diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/auth_modules/auth_ldap.py --- a/kallithea/lib/auth_modules/auth_ldap.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/auth_modules/auth_ldap.py Thu Jun 07 01:46:02 2018 +0200 @@ -41,6 +41,7 @@ try: import ldap + import ldap.filter except ImportError: # means that python-ldap is not installed ldap = None @@ -48,38 +49,33 @@ class AuthLdap(object): - def __init__(self, server, base_dn, port=389, bind_dn='', bind_pass='', - tls_kind='PLAIN', tls_reqcert='DEMAND', ldap_version=3, + def __init__(self, server, base_dn, port=None, bind_dn='', bind_pass='', + tls_kind='LDAPS', tls_reqcert='DEMAND', cacertdir=None, ldap_version=3, ldap_filter='(&(objectClass=user)(!(objectClass=computer)))', search_scope='SUBTREE', attr_login='uid'): if ldap is None: raise LdapImportError self.ldap_version = ldap_version - ldap_server_type = 'ldap' self.TLS_KIND = tls_kind - - if self.TLS_KIND == 'LDAPS': - port = port or 689 - ldap_server_type = ldap_server_type + 's' - OPT_X_TLS_DEMAND = 2 self.TLS_REQCERT = getattr(ldap, 'OPT_X_TLS_%s' % tls_reqcert, OPT_X_TLS_DEMAND) - # split server into list - self.LDAP_SERVER_ADDRESS = server.split(',') - self.LDAP_SERVER_PORT = port + self.cacertdir = cacertdir - # USE FOR READ ONLY BIND TO LDAP SERVER + protocol = 'ldaps' if self.TLS_KIND == 'LDAPS' else 'ldap' + if not port: + port = 636 if self.TLS_KIND == 'LDAPS' else 389 + self.LDAP_SERVER = str(', '.join( + "%s://%s:%s" % (protocol, + host.strip(), + port) + for host in server.split(','))) + self.LDAP_BIND_DN = safe_str(bind_dn) self.LDAP_BIND_PASS = safe_str(bind_pass) - _LDAP_SERVERS = [] - for host in self.LDAP_SERVER_ADDRESS: - _LDAP_SERVERS.append("%s://%s:%s" % (ldap_server_type, - host.replace(' ', ''), - self.LDAP_SERVER_PORT)) - self.LDAP_SERVER = str(', '.join(s for s in _LDAP_SERVERS)) + self.BASE_DN = safe_str(base_dn) self.LDAP_FILTER = safe_str(ldap_filter) self.SEARCH_SCOPE = getattr(ldap, 'SCOPE_%s' % search_scope) @@ -96,10 +92,6 @@ :param password: password """ - from kallithea.lib.helpers import chop_at - - uid = chop_at(username, "@%s" % self.LDAP_SERVER_ADDRESS) - if not password: log.debug("Attempt to authenticate LDAP user " "with blank password rejected.") @@ -107,9 +99,11 @@ if "," in username: raise LdapUsernameError("invalid character in username: ,") try: - if hasattr(ldap, 'OPT_X_TLS_CACERTDIR'): - ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, - '/etc/openldap/cacerts') + if self.cacertdir: + if hasattr(ldap, 'OPT_X_TLS_CACERTDIR'): + ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, self.cacertdir) + else: + log.debug("OPT_X_TLS_CACERTDIR is not available - can't set %s", self.cacertdir) ldap.set_option(ldap.OPT_REFERRALS, ldap.OPT_OFF) ldap.set_option(ldap.OPT_RESTART, ldap.OPT_ON) ldap.set_option(ldap.OPT_TIMEOUT, 20) @@ -131,8 +125,9 @@ self.LDAP_BIND_DN) server.simple_bind_s(self.LDAP_BIND_DN, self.LDAP_BIND_PASS) - filter_ = '(&%s(%s=%s))' % (self.LDAP_FILTER, self.attr_login, - username) + filter_ = '(&%s(%s=%s))' % (self.LDAP_FILTER, + ldap.filter.escape_filter_chars(self.attr_login), + ldap.filter.escape_filter_chars(username)) log.debug("Authenticating %r filter %s at %s", self.BASE_DN, filter_, self.LDAP_SERVER) lobjects = server.search_ext_s(self.BASE_DN, self.SEARCH_SCOPE, @@ -148,26 +143,28 @@ try: log.debug('Trying simple bind with %s', dn) server.simple_bind_s(dn, safe_str(password)) - attrs = server.search_ext_s(dn, ldap.SCOPE_BASE, - '(objectClass=*)')[0][1] - break + results = server.search_ext_s(dn, ldap.SCOPE_BASE, + '(objectClass=*)') + if len(results) == 1: + dn_, attrs = results[0] + assert dn_ == dn + return dn, attrs except ldap.INVALID_CREDENTIALS: - log.debug("LDAP rejected password for user '%s' (%s): %s", - uid, username, dn) + log.debug("LDAP rejected password for user '%s': %s", + username, dn) + continue # accept authentication as another ldap user with same username - else: - log.debug("No matching LDAP objects for authentication " - "of '%s' (%s)", uid, username) - raise LdapPasswordError() + log.debug("No matching LDAP objects for authentication " + "of '%s'", username) + raise LdapPasswordError() except ldap.NO_SUCH_OBJECT: - log.debug("LDAP says no such user '%s' (%s)", uid, username) + log.debug("LDAP says no such user '%s'", username) raise LdapUsernameError() except ldap.SERVER_DOWN: - raise LdapConnectionError("LDAP can't access authentication server") - - return dn, attrs + # [0] might be {'info': "TLS error -8179:Peer's Certificate issuer is not recognized.", 'desc': "Can't contact LDAP server"} + raise LdapConnectionError("LDAP can't connect to authentication server") class KallitheaAuthPlugin(auth_modules.KallitheaExternalAuthPlugin): @@ -192,11 +189,11 @@ }, { "name": "port", - "validator": self.validators.Number(strip=True, not_empty=True), + "validator": self.validators.Number(strip=True), "type": "string", - "description": "Port that the LDAP server is listening on", - "default": 389, - "formname": "Port" + "description": "Port that the LDAP server is listening on. Defaults to 389 for PLAIN/START_TLS and 636 for LDAPS.", + "default": "", + "formname": "Custom LDAP Port" }, { "name": "dn_user", @@ -218,7 +215,7 @@ "type": "select", "values": self._tls_kind_values, "description": "TLS Type", - "default": 'PLAIN', + "default": 'LDAPS', "formname": "Connection Security" }, { @@ -230,6 +227,13 @@ "formname": "Certificate Checks" }, { + "name": "cacertdir", + "validator": self.validators.UnicodeString(strip=True), + "type": "string", + "description": "Optional: Custom CA certificate directory for validating LDAPS", + "formname": "Custom CA Certificates" + }, + { "name": "base_dn", "validator": self.validators.UnicodeString(strip=True), "type": "string", @@ -313,6 +317,7 @@ 'bind_pass': settings.get('dn_pass'), 'tls_kind': settings.get('tls_kind'), 'tls_reqcert': settings.get('tls_reqcert'), + 'cacertdir': settings.get('cacertdir'), 'ldap_filter': settings.get('filter'), 'search_scope': settings.get('search_scope'), 'attr_login': settings.get('attr_login'), @@ -353,12 +358,13 @@ log.info('user %s authenticated correctly', user_data['username']) return user_data - except (LdapUsernameError, LdapPasswordError, LdapImportError): - log.error(traceback.format_exc()) - return None - except (Exception,): - log.error(traceback.format_exc()) - return None + except LdapUsernameError: + log.info('Error authenticating %s with LDAP: User not found', username) + except LdapPasswordError: + log.info('Error authenticating %s with LDAP: Password error', username) + except LdapImportError: + log.error('Error authenticating %s with LDAP: LDAP not available', username) + return None def get_managed_fields(self): return ['username', 'firstname', 'lastname', 'email', 'password'] diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/base.py --- a/kallithea/lib/base.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/base.py Thu Jun 07 01:46:02 2018 +0200 @@ -29,40 +29,46 @@ """ import datetime +import decorator import logging import time import traceback +import warnings import webob.exc import paste.httpexceptions import paste.auth.basic import paste.httpheaders +from webhelpers.pylonslib import secure_form -from pylons import config, tmpl_context as c, request, session, url -from pylons.controllers import WSGIController -from pylons.controllers.util import redirect -from pylons.templating import render_mako as render # don't remove this import -from pylons.i18n.translation import _ +from tg import config, tmpl_context as c, request, response, session, render_template +from tg import TGController +from tg.i18n import ugettext as _ from kallithea import __version__, BACKENDS -from kallithea.lib.utils2 import str2bool, safe_unicode, AttributeDict,\ +from kallithea.config.routing import url +from kallithea.lib.utils2 import str2bool, safe_unicode, AttributeDict, \ safe_str, safe_int from kallithea.lib import auth_modules from kallithea.lib.auth import AuthUser, HasPermissionAnyMiddleware +from kallithea.lib.compat import json from kallithea.lib.utils import get_repo_slug from kallithea.lib.exceptions import UserCreationError from kallithea.lib.vcs.exceptions import RepositoryError, EmptyRepositoryError, ChangesetDoesNotExistError from kallithea.model import meta -from kallithea.model.db import Repository, Ui, User, Setting +from kallithea.model.db import PullRequest, Repository, Ui, User, Setting from kallithea.model.notification import NotificationModel from kallithea.model.scm import ScmModel -from kallithea.model.pull_request import PullRequestModel log = logging.getLogger(__name__) +def render(template_path): + return render_template({'url': url}, 'mako', template_path) + + def _filter_proxy(ip): """ HEADERS can have multiple ips inside the left-most being the original @@ -98,7 +104,7 @@ def _get_access_path(environ): path = environ.get('PATH_INFO') - org_req = environ.get('pylons.original_request') + org_req = environ.get('tg.original_request') if org_req: path = org_req.environ.get('PATH_INFO') return path @@ -117,7 +123,9 @@ auth_user = AuthUser(dbuser=user, is_external_auth=is_external_auth) - auth_user.set_authenticated() + # It should not be possible to explicitly log in as the default user. + assert not auth_user.is_default_user + auth_user.is_authenticated = True # Start new session to prevent session fixation attacks. session.invalidate() @@ -140,6 +148,42 @@ return auth_user +def check_locking_state(action, repo_name, user): + """ + Checks locking on this repository, if locking is enabled, and if lock + is present. Returns a tuple of make_lock, locked, locked_by. make_lock + can have 3 states: None (do nothing), True (make lock), and False + (release lock). This value is later propagated to hooks, telling them + what to do. + """ + locked = False # defines that locked error should be thrown to user + make_lock = None + repo = Repository.get_by_repo_name(repo_name) + locked_by = repo.locked + if repo and repo.enable_locking: + if action == 'push': + # Check if repo already is locked !, if it is compare users + user_id, _date = locked_by + if user.user_id == user_id: + log.debug('Got push from user %s, now unlocking', user) + # Unlock if we have push from the user who locked + make_lock = False + else: + # Another used tried to push - deny access with something like 423 Locked! + locked = True + if action == 'pull': + if repo.locked[0] and repo.locked[1]: + locked = True + else: + log.debug('Setting lock on repo %s by %s', repo, user) + make_lock = True + else: + log.debug('Repository %s does not have locking enabled', repo) + log.debug('FINAL locking values make_lock:%s,locked:%s,locked_by:%s', + make_lock, locked, locked_by) + return make_lock, locked, locked_by + + class BasicAuth(paste.auth.basic.AuthBasicAuthenticator): def __init__(self, realm, authfunc, auth_http_code=None): @@ -147,8 +191,14 @@ self.authfunc = authfunc self._rc_auth_http_code = auth_http_code - def build_authentication(self): + def build_authentication(self, environ): head = paste.httpheaders.WWW_AUTHENTICATE.tuples('Basic realm="%s"' % self.realm) + # Consume the whole body before sending a response + try: + request_body_size = int(environ.get('CONTENT_LENGTH', 0)) + except (ValueError): + request_body_size = 0 + environ['wsgi.input'].read(request_body_size) if self._rc_auth_http_code and self._rc_auth_http_code == '403': # return 403 if alternative http return code is specified in # Kallithea config @@ -158,22 +208,25 @@ def authenticate(self, environ): authorization = paste.httpheaders.AUTHORIZATION(environ) if not authorization: - return self.build_authentication() + return self.build_authentication(environ) (authmeth, auth) = authorization.split(' ', 1) if 'basic' != authmeth.lower(): - return self.build_authentication() + return self.build_authentication(environ) auth = auth.strip().decode('base64') _parts = auth.split(':', 1) if len(_parts) == 2: username, password = _parts if self.authfunc(username, password, environ) is not None: return username - return self.build_authentication() + return self.build_authentication(environ) __call__ = authenticate class BaseVCSController(object): + """Base controller for handling Mercurial/Git protocol requests + (coming from a VCS client, and not a browser). + """ def __init__(self, application, config): self.application = application @@ -183,7 +236,72 @@ # authenticate this VCS request using the authentication modules self.authenticate = BasicAuth('', auth_modules.authenticate, config.get('auth_ret_code')) - self.ip_addr = '0.0.0.0' + + def _authorize(self, environ, start_response, action, repo_name, ip_addr): + """Authenticate and authorize user. + + Since we're dealing with a VCS client and not a browser, we only + support HTTP basic authentication, either directly via raw header + inspection, or by using container authentication to delegate the + authentication to the web server. + + Returns (user, None) on successful authentication and authorization. + Returns (None, wsgi_app) to send the wsgi_app response to the client. + """ + # Check if anonymous access is allowed. + default_user = User.get_default_user(cache=True) + is_default_user_allowed = (default_user.active and + self._check_permission(action, default_user, repo_name, ip_addr)) + if is_default_user_allowed: + return default_user, None + + if not default_user.active: + log.debug('Anonymous access is disabled') + else: + log.debug('Not authorized to access this ' + 'repository as anonymous user') + + username = None + #============================================================== + # DEFAULT PERM FAILED OR ANONYMOUS ACCESS IS DISABLED SO WE + # NEED TO AUTHENTICATE AND ASK FOR AUTH USER PERMISSIONS + #============================================================== + + # try to auth based on environ, container auth methods + log.debug('Running PRE-AUTH for container based authentication') + pre_auth = auth_modules.authenticate('', '', environ) + if pre_auth is not None and pre_auth.get('username'): + username = pre_auth['username'] + log.debug('PRE-AUTH got %s as username', username) + + # If not authenticated by the container, running basic auth + if not username: + self.authenticate.realm = safe_str(self.config['realm']) + result = self.authenticate(environ) + if isinstance(result, str): + paste.httpheaders.AUTH_TYPE.update(environ, 'basic') + paste.httpheaders.REMOTE_USER.update(environ, result) + username = result + else: + return None, result.wsgi_application + + #============================================================== + # CHECK PERMISSIONS FOR THIS REQUEST USING GIVEN USERNAME + #============================================================== + try: + user = User.get_by_username_or_email(username) + if user is None or not user.active: + return None, webob.exc.HTTPForbidden() + except Exception: + log.error(traceback.format_exc()) + return None, webob.exc.HTTPInternalServerError() + + # check permissions for this repository + perm = self._check_permission(action, user, repo_name, ip_addr) + if not perm: + return None, webob.exc.HTTPForbidden() + + return user, None def _handle_request(self, environ, start_response): raise NotImplementedError() @@ -248,64 +366,6 @@ def _get_ip_addr(self, environ): return _get_ip_addr(environ) - def _check_ssl(self, environ): - """ - Checks the SSL check flag and returns False if SSL is not present - and required True otherwise - """ - #check if we have SSL required ! if not it's a bad request ! - if str2bool(Ui.get_by_key('push_ssl').ui_value): - org_proto = environ.get('wsgi._org_proto', environ['wsgi.url_scheme']) - if org_proto != 'https': - log.debug('proto is %s and SSL is required BAD REQUEST !', - org_proto) - return False - return True - - def _check_locking_state(self, environ, action, repo, user_id): - """ - Checks locking on this repository, if locking is enabled and lock is - present returns a tuple of make_lock, locked, locked_by. - make_lock can have 3 states None (do nothing) True, make lock - False release lock, This value is later propagated to hooks, which - do the locking. Think about this as signals passed to hooks what to do. - - """ - locked = False # defines that locked error should be thrown to user - make_lock = None - repo = Repository.get_by_repo_name(repo) - user = User.get(user_id) - - # this is kind of hacky, but due to how mercurial handles client-server - # server see all operation on changeset; bookmarks, phases and - # obsolescence marker in different transaction, we don't want to check - # locking on those - obsolete_call = environ['QUERY_STRING'] in ['cmd=listkeys',] - locked_by = repo.locked - if repo and repo.enable_locking and not obsolete_call: - if action == 'push': - #check if it's already locked !, if it is compare users - user_id, _date = repo.locked - if user.user_id == user_id: - log.debug('Got push from user %s, now unlocking', user) - # unlock if we have push from user who locked - make_lock = False - else: - # we're not the same user who locked, ban with 423 ! - locked = True - if action == 'pull': - if repo.locked[0] and repo.locked[1]: - locked = True - else: - log.debug('Setting lock on repo %s by %s', repo, user) - make_lock = True - - else: - log.debug('Repository %s do not have locking enabled', repo) - log.debug('FINAL locking values make_lock:%s,locked:%s,locked_by:%s', - make_lock, locked, locked_by) - return make_lock, locked, locked_by - def __call__(self, environ, start_response): start = time.time() try: @@ -316,11 +376,11 @@ meta.Session.remove() -class BaseController(WSGIController): +class BaseController(TGController): - def __before__(self): + def _before(self, *args, **kwargs): """ - __before__ is called before controller methods and after __call__ + _before is called before controller methods and after __call__ """ c.kallithea_version = __version__ rc_config = Setting.get_app_settings() @@ -331,8 +391,8 @@ ## DB stored c.visual.show_public_icon = str2bool(rc_config.get('show_public_icon')) c.visual.show_private_icon = str2bool(rc_config.get('show_private_icon')) - c.visual.stylify_metatags = str2bool(rc_config.get('stylify_metatags')) - c.visual.dashboard_items = safe_int(rc_config.get('dashboard_items', 100)) + c.visual.stylify_metalabels = str2bool(rc_config.get('stylify_metalabels')) + c.visual.page_size = safe_int(rc_config.get('dashboard_items', 100)) c.visual.admin_grid_items = safe_int(rc_config.get('admin_grid_items', 100)) c.visual.repository_fields = str2bool(rc_config.get('repository_fields')) c.visual.show_version = str2bool(rc_config.get('show_version')) @@ -366,33 +426,41 @@ c.repo_name = get_repo_slug(request) # can be empty c.backends = BACKENDS.keys() - c.unread_notifications = NotificationModel()\ - .get_unread_cnt_for_user(c.authuser.user_id) + c.unread_notifications = NotificationModel() \ + .get_unread_cnt_for_user(request.authuser.user_id) self.cut_off_limit = safe_int(config.get('cut_off_limit')) - c.my_pr_count = PullRequestModel().get_pullrequest_cnt_for_user(c.authuser.user_id) + c.my_pr_count = PullRequest.query(reviewer_id=request.authuser.user_id, include_closed=False).count() - self.sa = meta.Session - self.scm_model = ScmModel(self.sa) + self.scm_model = ScmModel() @staticmethod - def _determine_auth_user(api_key, session_authuser): + def _determine_auth_user(api_key, bearer_token, session_authuser): """ - Create an `AuthUser` object given the API key (if any) and the - value of the authuser session cookie. + Create an `AuthUser` object given the API key/bearer token + (if any) and the value of the authuser session cookie. """ + # Authenticate by bearer token + if bearer_token is not None: + api_key = bearer_token + # Authenticate by API key - if api_key: - # when using API_KEY we are sure user exists. - return AuthUser(dbuser=User.get_by_api_key(api_key), - is_external_auth=True) + if api_key is not None: + au = AuthUser(dbuser=User.get_by_api_key(api_key), + authenticating_api_key=api_key, is_external_auth=True) + if au.is_anonymous: + log.warning('API key ****%s is NOT valid', api_key[-4:]) + raise webob.exc.HTTPForbidden(_('Invalid API key')) + return au # Authenticate by session cookie # In ancient login sessions, 'authuser' may not be a dict. # In that case, the user will have to log in again. - if isinstance(session_authuser, dict): + # v0.3 and earlier included an 'is_authenticated' key; if present, + # this must be True. + if isinstance(session_authuser, dict) and session_authuser.get('is_authenticated', True): try: return AuthUser.from_cookie(session_authuser) except UserCreationError as e: @@ -405,8 +473,8 @@ # Authenticate by auth_container plugin (if enabled) if any( - auth_modules.importplugin(name).is_container_auth - for name in Setting.get_auth_plugins() + plugin.is_container_auth + for plugin in auth_modules.get_auth_plugins() ): try: user_info = auth_modules.authenticate('', '', request.environ) @@ -423,29 +491,68 @@ # User is anonymous return AuthUser() - def __call__(self, environ, start_response): - """Invoke the Controller""" + @staticmethod + def _basic_security_checks(): + """Perform basic security/sanity checks before processing the request.""" + + # Only allow the following HTTP request methods. + if request.method not in ['GET', 'HEAD', 'POST']: + raise webob.exc.HTTPMethodNotAllowed() + + # Also verify the _method override - no longer allowed. + if request.params.get('_method') is None: + pass # no override, no problem + else: + raise webob.exc.HTTPMethodNotAllowed() - # WSGIController.__call__ dispatches to the Controller method - # the request is routed to. This routing information is - # available in environ['pylons.routes_dict'] + # Make sure CSRF token never appears in the URL. If so, invalidate it. + if secure_form.token_key in request.GET: + log.error('CSRF key leak detected') + session.pop(secure_form.token_key, None) + session.save() + from kallithea.lib import helpers as h + h.flash(_('CSRF token leak has been detected - all form tokens have been expired'), + category='error') + + # WebOb already ignores request payload parameters for anything other + # than POST/PUT, but double-check since other Kallithea code relies on + # this assumption. + if request.method not in ['POST', 'PUT'] and request.POST: + log.error('%r request with payload parameters; WebOb should have stopped this', request.method) + raise webob.exc.HTTPBadRequest() + + def __call__(self, environ, context): try: - self.ip_addr = _get_ip_addr(environ) + request.ip_addr = _get_ip_addr(environ) # make sure that we update permissions each time we call controller - #set globals for auth user - self.authuser = c.authuser = request.user = self._determine_auth_user( + self._basic_security_checks() + + # set globals for auth user + + bearer_token = None + try: + # Request.authorization may raise ValueError on invalid input + type, params = request.authorization + except (ValueError, TypeError): + pass + else: + if type.lower() == 'bearer': + bearer_token = params + + request.authuser = request.user = self._determine_auth_user( request.GET.get('api_key'), + bearer_token, session.get('authuser'), ) log.info('IP: %s User: %s accessed %s', - self.ip_addr, self.authuser, + request.ip_addr, request.authuser, safe_unicode(_get_access_path(environ)), ) - return WSGIController.__call__(self, environ, start_response) - finally: - meta.Session.remove() + return super(BaseController, self).__call__(environ, context) + except webob.exc.HTTPException as e: + return e class BaseRepoController(BaseController): @@ -460,8 +567,8 @@ c.repository_following: weather the current user is following the current repo """ - def __before__(self): - super(BaseRepoController, self).__before__() + def _before(self, *args, **kwargs): + super(BaseRepoController, self)._before(*args, **kwargs) if c.repo_name: # extracted from routes _dbr = Repository.get_by_repo_name(c.repo_name) if not _dbr: @@ -479,7 +586,7 @@ if route in ['repo_creating_home']: return check_url = url('repo_creating_home', repo_name=c.repo_name) - return redirect(check_url) + raise webob.exc.HTTPFound(location=check_url) dbr = c.db_repo = _dbr c.db_repo_scm_instance = c.db_repo.scm_instance @@ -496,7 +603,7 @@ c.repository_forks = self.scm_model.get_forks(dbr) c.repository_pull_requests = self.scm_model.get_pull_requests(dbr) c.repository_following = self.scm_model.is_following_repo( - c.repo_name, self.authuser.user_id) + c.repo_name, request.authuser.user_id) @staticmethod def _get_ref_rev(repo, ref_type, ref_name, returnempty=False): @@ -538,3 +645,28 @@ if hasattr(self._result, 'close'): self._result.close() self._close() + + +@decorator.decorator +def jsonify(func, *args, **kwargs): + """Action decorator that formats output for JSON + + Given a function that will return content, this decorator will turn + the result into JSON, with a content-type of 'application/json' and + output it. + """ + response.headers['Content-Type'] = 'application/json; charset=utf-8' + data = func(*args, **kwargs) + if isinstance(data, (list, tuple)): + # A JSON list response is syntactically valid JavaScript and can be + # loaded and executed as JavaScript by a malicious third-party site + # using " + is forbidden), the function ensures that the result never contains + '&', '<' and '>', thus making it safe in both those contexts (but + not in attributes). + """ + return literal( + ('(' + json.dumps(value) + ')') + # In JSON, the following can only appear in string literals. + .replace('&', r'\x26') + .replace('<', r'\x3c') + .replace('>', r'\x3e') + ) + + +def jshtml(val): + """HTML escapes a string value, then converts the resulting string + to its corresponding JavaScript representation (see `js`). + + This is used when a plain-text string (possibly containing special + HTML characters) will be used by a script in an HTML context (e.g. + element.innerHTML or jQuery's 'html' method). + + If in doubt, err on the side of using `jshtml` over `js`, since it's + better to escape too much than too little. + """ + return js(escape(val)) + + +def shorter(s, size=20, firstline=False, postfix='...'): + """Truncate s to size, including the postfix string if truncating. + If firstline, truncate at newline. + """ + if firstline: + s = s.split('\n', 1)[0].rstrip() if len(s) > size: return s[:size - len(postfix)] + postfix return s @@ -116,6 +153,7 @@ convert_boolean_attrs(attrs, ["disabled"]) return HTML.input(**attrs) + reset = _reset safeid = _make_safe_id_component @@ -132,22 +170,6 @@ return 'C-%s-%s' % (short_id(raw_id), hashlib.md5(safe_str(path)).hexdigest()[:12]) -class _GetError(object): - """Get error from form_errors, and represent it as span wrapped error - message - - :param field_name: field to fetch errors for - :param form_errors: form errors dict - """ - - def __call__(self, field_name, form_errors): - tmpl = """%s""" - if form_errors and field_name in form_errors: - return literal(tmpl % form_errors.get(field_name)) - -get_error = _GetError() - - class _FilesBreadCrumbs(object): def __call__(self, repo_name, rev, paths): @@ -172,6 +194,7 @@ return literal('/'.join(url_l)) + files_breadcrumbs = _FilesBreadCrumbs() @@ -186,7 +209,7 @@ def _wrap_code(self, source): for cnt, it in enumerate(source): i, t = it - t = '
%s
' % (cnt + 1, t) + t = '%s' % (cnt + 1, t) yield i, t def _wrap_tablelinenos(self, inner): @@ -240,20 +263,21 @@ # some configurations seem to mess up the formatting... if nocls: yield 0, ('' % self.cssclass + - '' + '' + + '' + + '' + + '' + + '' + + ''; var $last_node = $('.last_new_member').last(); // empty tr between last and add var next_id = $('.new_members').length; - $last_node.before($('').append(_html.format(next_id))); - MembersAutoComplete($("#perm_new_member_name_"+next_id), - $("#perm_container_"+next_id), users_list, groups_list); + $last_node.before($('').append(template.format(next_id, perm_type, _TM['Type name of user or member to grant permission']))); + MembersAutoComplete($("#perm_new_member_name_"+next_id), $("#perm_new_member_type_"+next_id)); } function ajaxActionRevokePermission(url, obj_id, obj_type, field_id, extra_data) { @@ -1431,9 +1361,7 @@ var failure = function (o) { alert(_TM['Failed to revoke permission'] + ": " + o.status); }; - var query_params = { - '_method': 'delete' - } + var query_params = {}; // put extra data into POST if (extra_data !== undefined && (typeof extra_data === 'object')){ for(var k in extra_data){ @@ -1484,362 +1412,6 @@ }); } -// custom paginator -var YUI_paginator = function(links_per_page, containers){ - - (function () { - - var Paginator = YAHOO.widget.Paginator, - l = YAHOO.lang, - setId = YAHOO.util.Dom.generateId; - - Paginator.ui.MyFirstPageLink = function (p) { - this.paginator = p; - - p.subscribe('recordOffsetChange',this.update,this,true); - p.subscribe('rowsPerPageChange',this.update,this,true); - p.subscribe('totalRecordsChange',this.update,this,true); - p.subscribe('destroy',this.destroy,this,true); - - // TODO: make this work - p.subscribe('firstPageLinkLabelChange',this.update,this,true); - p.subscribe('firstPageLinkClassChange',this.update,this,true); - }; - - Paginator.ui.MyFirstPageLink.init = function (p) { - p.setAttributeConfig('firstPageLinkLabel', { - value : 1, - validator : l.isString - }); - p.setAttributeConfig('firstPageLinkClass', { - value : 'yui-pg-first', - validator : l.isString - }); - p.setAttributeConfig('firstPageLinkTitle', { - value : 'First Page', - validator : l.isString - }); - }; - - // Instance members and methods - Paginator.ui.MyFirstPageLink.prototype = { - current : null, - leftmost_page: null, - rightmost_page: null, - link : null, - span : null, - dotdot : null, - getPos : function(cur_page, max_page, items){ - var edge = parseInt(items / 2) + 1; - if (cur_page <= edge){ - var radius = Math.max(parseInt(items / 2), items - cur_page); - } - else if ((max_page - cur_page) < edge) { - var radius = (items - 1) - (max_page - cur_page); - } - else{ - var radius = parseInt(items / 2); - } - - var left = Math.max(1, (cur_page - (radius))); - var right = Math.min(max_page, cur_page + (radius)); - return [left, cur_page, right] - }, - render : function (id_base) { - var p = this.paginator, - c = p.get('firstPageLinkClass'), - label = p.get('firstPageLinkLabel'), - title = p.get('firstPageLinkTitle'); - - this.link = document.createElement('a'); - this.span = document.createElement('span'); - $(this.span).hide(); - - var _pos = this.getPos(p.getCurrentPage(), p.getTotalPages(), 5); - this.leftmost_page = _pos[0]; - this.rightmost_page = _pos[2]; - - setId(this.link, id_base + '-first-link'); - this.link.href = '#'; - this.link.className = c; - this.link.innerHTML = label; - this.link.title = title; - YUE.on(this.link,'click',this.onClick,this,true); - - setId(this.span, id_base + '-first-span'); - this.span.className = c; - this.span.innerHTML = label; - - this.current = p.getCurrentPage() > 1 ? this.link : this.span; - return this.current; - }, - update : function (e) { - var p = this.paginator; - var _pos = this.getPos(p.getCurrentPage(), p.getTotalPages(), 5); - this.leftmost_page = _pos[0]; - this.rightmost_page = _pos[2]; - - if (e && e.prevValue === e.newValue) { - return; - } - - var par = this.current ? this.current.parentNode : null; - if (this.leftmost_page > 1) { - if (par && this.current === this.span) { - par.replaceChild(this.link,this.current); - this.current = this.link; - } - } else { - if (par && this.current === this.link) { - par.replaceChild(this.span,this.current); - this.current = this.span; - } - } - }, - destroy : function () { - YUE.purgeElement(this.link); - this.current.parentNode.removeChild(this.current); - this.link = this.span = null; - }, - onClick : function (e) { - YUE.stopEvent(e); - this.paginator.setPage(1); - } - }; - - })(); - - (function () { - - var Paginator = YAHOO.widget.Paginator, - l = YAHOO.lang, - setId = YAHOO.util.Dom.generateId; - - Paginator.ui.MyLastPageLink = function (p) { - this.paginator = p; - - p.subscribe('recordOffsetChange',this.update,this,true); - p.subscribe('rowsPerPageChange',this.update,this,true); - p.subscribe('totalRecordsChange',this.update,this,true); - p.subscribe('destroy',this.destroy,this,true); - - // TODO: make this work - p.subscribe('lastPageLinkLabelChange',this.update,this,true); - p.subscribe('lastPageLinkClassChange', this.update,this,true); - }; - - Paginator.ui.MyLastPageLink.init = function (p) { - p.setAttributeConfig('lastPageLinkLabel', { - value : -1, - validator : l.isString - }); - p.setAttributeConfig('lastPageLinkClass', { - value : 'yui-pg-last', - validator : l.isString - }); - p.setAttributeConfig('lastPageLinkTitle', { - value : 'Last Page', - validator : l.isString - }); - - }; - - Paginator.ui.MyLastPageLink.prototype = { - - current : null, - leftmost_page: null, - rightmost_page: null, - link : null, - span : null, - dotdot : null, - na : null, - getPos : function(cur_page, max_page, items){ - var edge = parseInt(items / 2) + 1; - if (cur_page <= edge){ - var radius = Math.max(parseInt(items / 2), items - cur_page); - } - else if ((max_page - cur_page) < edge) { - var radius = (items - 1) - (max_page - cur_page); - } - else{ - var radius = parseInt(items / 2); - } - - var left = Math.max(1, (cur_page - (radius))); - var right = Math.min(max_page, cur_page + (radius)); - return [left, cur_page, right] - }, - render : function (id_base) { - var p = this.paginator, - c = p.get('lastPageLinkClass'), - label = p.get('lastPageLinkLabel'), - last = p.getTotalPages(), - title = p.get('lastPageLinkTitle'); - - var _pos = this.getPos(p.getCurrentPage(), p.getTotalPages(), 5); - this.leftmost_page = _pos[0]; - this.rightmost_page = _pos[2]; - - this.link = document.createElement('a'); - this.span = document.createElement('span'); - $(this.span).hide(); - - this.na = this.span.cloneNode(false); - - setId(this.link, id_base + '-last-link'); - this.link.href = '#'; - this.link.className = c; - this.link.innerHTML = label; - this.link.title = title; - YUE.on(this.link,'click',this.onClick,this,true); - - setId(this.span, id_base + '-last-span'); - this.span.className = c; - this.span.innerHTML = label; - - setId(this.na, id_base + '-last-na'); - - if (this.rightmost_page < p.getTotalPages()){ - this.current = this.link; - } - else{ - this.current = this.span; - } - - this.current.innerHTML = p.getTotalPages(); - return this.current; - }, - - update : function (e) { - var p = this.paginator; - - var _pos = this.getPos(p.getCurrentPage(), p.getTotalPages(), 5); - this.leftmost_page = _pos[0]; - this.rightmost_page = _pos[2]; - - if (e && e.prevValue === e.newValue) { - return; - } - - var par = this.current ? this.current.parentNode : null, - after = this.link; - if (par) { - - // only show the last page if the rightmost one is - // lower, so we don't have doubled entries at the end - if (!(this.rightmost_page < p.getTotalPages())){ - after = this.span - } - - if (this.current !== after) { - par.replaceChild(after,this.current); - this.current = after; - } - } - this.current.innerHTML = this.paginator.getTotalPages(); - - }, - destroy : function () { - YUE.purgeElement(this.link); - this.current.parentNode.removeChild(this.current); - this.link = this.span = null; - }, - onClick : function (e) { - YUE.stopEvent(e); - this.paginator.setPage(this.paginator.getTotalPages()); - } - }; - - })(); - - var pagi = new YAHOO.widget.Paginator({ - rowsPerPage: links_per_page, - alwaysVisible: false, - template : "{PreviousPageLink} {MyFirstPageLink} {PageLinks} {MyLastPageLink} {NextPageLink}", - pageLinks: 5, - containerClass: 'pagination-wh', - currentPageClass: 'pager_curpage', - pageLinkClass: 'pager_link', - nextPageLinkLabel: '>', - previousPageLinkLabel: '<', - containers:containers - }); - - return pagi -} - -var YUI_datatable = function(data, fields, columns, countnode, sortkey, rows){ - var myDataSource = new YAHOO.util.DataSource(data); - myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON; - myDataSource.responseSchema = { - resultsList: "records", - fields: fields - }; - myDataSource.doBeforeCallback = function(req, raw, res, cb) { - // This is the filter function - var data = res.results || [], - filtered = [], - i, l; - - if (req) { - req = req.toLowerCase(); - for (i = 0; i b.text) { + return 1; + } + if (a.text < b.text) { + return -1; + } + return 0; + }); + } + return results; +}; + +var prefixFirstSort = function(results, container, query) { + if (query.term) { + return results.sort(function (a, b) { + // if parent node, no sorting + if (a.children != undefined || b.children != undefined) { + return 0; + } + // Put prefix matches before matches in the line - var aPos = a.text.indexOf(query.term), - bPos = b.text.indexOf(query.term); + var aPos = a.text.toLowerCase().indexOf(query.term.toLowerCase()), + bPos = b.text.toLowerCase().indexOf(query.term.toLowerCase()); if (aPos === 0 && bPos !== 0) { return -1; } @@ -1881,19 +1484,61 @@ return results; }; -// global hooks after DOM is loaded +/* Helper for jQuery DataTables */ + +var updateRowCountCallback = function updateRowCountCallback($elem, onlyDisplayed) { + return function drawCallback() { + var info = this.api().page.info(), + count = onlyDisplayed === true ? info.recordsDisplay : info.recordsTotal; + $elem.html(count); + } +}; + + +/** + * activate changeset parent/child navigation links + */ +var activate_parent_child_links = function(){ -$(document).ready(function(){ - $('.diff-collapse-button').click(function(e) { - var $button = $(e.currentTarget); - var $target = $('#' + $button.attr('target')); - if($target.hasClass('hidden')){ - $target.removeClass('hidden'); - $button.html("↑ {0} ↑".format(_TM['Collapse Diff'])); - } - else if(!$target.hasClass('hidden')){ - $target.addClass('hidden'); - $button.html("↓ {0} ↓".format(_TM['Expand Diff'])); + $('.parent-child-link').on('click', function(e){ + var $this = $(this); + //fetch via ajax what is going to be the next link, if we have + //>1 links show them to user to choose + if(!$this.hasClass('disabled')){ + $.ajax({ + url: $this.data('ajax-url'), + success: function(data) { + var repo_name = $this.data('reponame'); + if(data.results.length === 0){ + $this.addClass('disabled'); + $this.text(_TM['No revisions']); + } + if(data.results.length === 1){ + var commit = data.results[0]; + window.location = pyroutes.url('changeset_home', {'repo_name': repo_name, 'revision': commit.raw_id}); + } + else if(data.results.length > 1){ + $this.addClass('disabled'); + $this.addClass('double'); + var template = + ($this.data('linktype') == 'parent' ? ' ' : '') + + '__rev__' + + ($this.data('linktype') == 'child' ? ' ' : ''); + var _html = []; + for(var i = 0; i < data.results.length; i++){ + _html.push(template + .replace('__rev__', 'r{0}:{1}'.format(data.results[i].revision, data.results[i].raw_id.substr(0, 6))) + .replace('__title__', data.results[i].message) + .replace('__url__', pyroutes.url('changeset_home', { + 'repo_name': repo_name, + 'revision': data.results[i].raw_id})) + ); + } + $this.html(_html.join('
')); + } + } + }); + e.preventDefault(); } }); -}); +} diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/js/bootstrap.js --- a/kallithea/public/js/bootstrap.js Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/public/js/bootstrap.js Thu Jun 07 01:46:02 2018 +0200 @@ -1,31 +1,32 @@ -/** -* bootstrap.js v3.0.0 by @fat and @mdo -* Copyright 2013 Twitter Inc. -* http://www.apache.org/licenses/LICENSE-2.0 -*/ -if (!jQuery) { throw new Error("Bootstrap requires jQuery") } +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4') + } +}(jQuery); /* ======================================================================== - * Bootstrap: transition.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#transitions + * Bootstrap: transition.js v3.3.7 + * http://getbootstrap.com/javascript/#transitions * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ -+function ($) { "use strict"; ++function ($) { + 'use strict'; // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) // ============================================================ @@ -34,10 +35,10 @@ var el = document.createElement('bootstrap') var transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' } for (var name in transEndEventNames) { @@ -45,12 +46,15 @@ return { end: transEndEventNames[name] } } } + + return false // explicit for ie8 ( ._.) } // http://blog.alexmaccaw.com/css-transitions $.fn.emulateTransitionEnd = function (duration) { - var called = false, $el = this - $(this).one($.support.transition.end, function () { called = true }) + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) var callback = function () { if (!called) $($el).trigger($.support.transition.end) } setTimeout(callback, duration) return this @@ -58,31 +62,31 @@ $(function () { $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } }) -}(window.jQuery); +}(jQuery); /* ======================================================================== - * Bootstrap: alert.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#alerts + * Bootstrap: alert.js v3.3.7 + * http://getbootstrap.com/javascript/#alerts * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ -+function ($) { "use strict"; ++function ($) { + 'use strict'; // ALERT CLASS DEFINITION // ====================== @@ -92,6 +96,10 @@ $(el).on('click', dismiss, this.close) } + Alert.VERSION = '3.3.7' + + Alert.TRANSITION_DURATION = 150 + Alert.prototype.close = function (e) { var $this = $(this) var selector = $this.attr('data-target') @@ -101,12 +109,12 @@ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 } - var $parent = $(selector) + var $parent = $(selector === '#' ? [] : selector) if (e) e.preventDefault() if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() + $parent = $this.closest('.alert') } $parent.trigger(e = $.Event('close.bs.alert')) @@ -116,13 +124,14 @@ $parent.removeClass('in') function removeElement() { - $parent.trigger('closed.bs.alert').remove() + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() } $.support.transition && $parent.hasClass('fade') ? $parent - .one($.support.transition.end, removeElement) - .emulateTransitionEnd(150) : + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : removeElement() } @@ -130,9 +139,7 @@ // ALERT PLUGIN DEFINITION // ======================= - var old = $.fn.alert - - $.fn.alert = function (option) { + function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.alert') @@ -142,6 +149,9 @@ }) } + var old = $.fn.alert + + $.fn.alert = Plugin $.fn.alert.Constructor = Alert @@ -159,38 +169,31 @@ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) -}(window.jQuery); +}(jQuery); /* ======================================================================== - * Bootstrap: button.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#buttons + * Bootstrap: button.js v3.3.7 + * http://getbootstrap.com/javascript/#buttons * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ -+function ($) { "use strict"; ++function ($) { + 'use strict'; // BUTTON PUBLIC CLASS DEFINITION // ============================== var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false } + Button.VERSION = '3.3.7' + Button.DEFAULTS = { loadingText: 'loading...' } @@ -201,40 +204,51 @@ var val = $el.is('input') ? 'val' : 'html' var data = $el.data() - state = state + 'Text' - - if (!data.resetText) $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) + state += 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d); - }, 0) + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d).prop(d, true) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d).prop(d, false) + } + }, this), 0) } Button.prototype.toggle = function () { + var changed = true var $parent = this.$element.closest('[data-toggle="buttons"]') if ($parent.length) { var $input = this.$element.find('input') - .prop('checked', !this.$element.hasClass('active')) - .trigger('change') - if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked')) changed = false + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') + } + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') } - - this.$element.toggleClass('active') } // BUTTON PLUGIN DEFINITION // ======================== - var old = $.fn.button - - $.fn.button = function (option) { + function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.button') @@ -247,6 +261,9 @@ }) } + var old = $.fn.button + + $.fn.button = Plugin $.fn.button.Constructor = Button @@ -262,36 +279,35 @@ // BUTTON DATA-API // =============== - $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - e.preventDefault() - }) - -}(window.jQuery); + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target).closest('.btn') + Plugin.call($btn, 'toggle') + if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) { + // Prevent double click on radios, and the double selections (so cancellation) on checkboxes + e.preventDefault() + // The target component still receive the focus + if ($btn.is('input,button')) $btn.trigger('focus') + else $btn.find('input:visible,button:visible').first().trigger('focus') + } + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); /* ======================================================================== - * Bootstrap: carousel.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#carousel + * Bootstrap: carousel.js v3.3.7 + * http://getbootstrap.com/javascript/#carousel * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ -+function ($) { "use strict"; ++function ($) { + 'use strict'; // CAROUSEL CLASS DEFINITION // ========================= @@ -300,24 +316,42 @@ this.$element = $(element) this.$indicators = this.$element.find('.carousel-indicators') this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = + this.paused = null + this.sliding = null + this.interval = null + this.$active = null this.$items = null - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) } + Carousel.VERSION = '3.3.7' + + Carousel.TRANSITION_DURATION = 600 + Carousel.DEFAULTS = { - interval: 5000 - , pause: 'hover' - , wrap: true + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true } - Carousel.prototype.cycle = function (e) { + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { e || (this.paused = false) this.interval && clearInterval(this.interval) @@ -329,29 +363,37 @@ return this } - Carousel.prototype.getActiveIndex = function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - - return this.$items.index(this.$active) + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) } Carousel.prototype.to = function (pos) { var that = this - var activeIndex = this.getActiveIndex() + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) if (pos > (this.$items.length - 1) || pos < 0) return - if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" if (activeIndex == pos) return this.pause().cycle() - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) } Carousel.prototype.pause = function (e) { e || (this.paused = true) - if (this.$element.find('.next, .prev').length && $.support.transition.end) { + if (this.$element.find('.next, .prev').length && $.support.transition) { this.$element.trigger($.support.transition.end) this.cycle(true) } @@ -373,55 +415,52 @@ Carousel.prototype.slide = function (type, next) { var $active = this.$element.find('.item.active') - var $next = next || $active[type]() + var $next = next || this.getItemForDirection(type, $active) var isCycling = this.interval var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' var that = this - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return this.sliding = true isCycling && this.pause() - var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - - if ($next.hasClass('active')) return - if (this.$indicators.length) { this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') } + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return $next.addClass(type) $next[0].offsetWidth // force reflow $active.addClass(direction) $next.addClass(direction) $active - .one($.support.transition.end, function () { + .one('bsTransitionEnd', function () { $next.removeClass([type, direction].join(' ')).addClass('active') $active.removeClass(['active', direction].join(' ')) that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) }) - .emulateTransitionEnd(600) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return $active.removeClass('active') $next.addClass('active') this.sliding = false - this.$element.trigger('slid') + this.$element.trigger(slidEvent) } isCycling && this.cycle() @@ -433,9 +472,7 @@ // CAROUSEL PLUGIN DEFINITION // ========================== - var old = $.fn.carousel - - $.fn.carousel = function (option) { + function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.carousel') @@ -449,6 +486,9 @@ }) } + var old = $.fn.carousel + + $.fn.carousel = Plugin $.fn.carousel.Constructor = Carousel @@ -464,52 +504,49 @@ // CAROUSEL DATA-API // ================= - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return var options = $.extend({}, $target.data(), $this.data()) var slideIndex = $this.attr('data-slide-to') if (slideIndex) options.interval = false - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { + Plugin.call($target, options) + + if (slideIndex) { $target.data('bs.carousel').to(slideIndex) } e.preventDefault() - }) + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) $(window).on('load', function () { $('[data-ride="carousel"]').each(function () { var $carousel = $(this) - $carousel.carousel($carousel.data()) + Plugin.call($carousel, $carousel.data()) }) }) -}(window.jQuery); +}(jQuery); /* ======================================================================== - * Bootstrap: collapse.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#collapse + * Bootstrap: collapse.js v3.3.7 + * http://getbootstrap.com/javascript/#collapse * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ - -+function ($) { "use strict"; +/* jshint latedef: false */ + ++function ($) { + 'use strict'; // COLLAPSE PUBLIC CLASS DEFINITION // ================================ @@ -517,12 +554,23 @@ var Collapse = function (element, options) { this.$element = $(element) this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]') this.transitioning = null - if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + if (this.options.toggle) this.toggle() } + Collapse.VERSION = '3.3.7' + + Collapse.TRANSITION_DURATION = 350 + Collapse.DEFAULTS = { toggle: true } @@ -535,35 +583,43 @@ Collapse.prototype.show = function () { if (this.transitioning || this.$element.hasClass('in')) return + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + var startEvent = $.Event('show.bs.collapse') this.$element.trigger(startEvent) if (startEvent.isDefaultPrevented()) return - var actives = this.$parent && this.$parent.find('> .panel > .in') - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('bs.collapse', null) + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) } var dimension = this.dimension() this.$element .removeClass('collapse') - .addClass('collapsing') - [dimension](0) + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) this.transitioning = 1 var complete = function () { this.$element .removeClass('collapsing') - .addClass('in') - [dimension]('auto') + .addClass('collapse in')[dimension]('') this.transitioning = 0 - this.$element.trigger('shown.bs.collapse') + this.$element + .trigger('shown.bs.collapse') } if (!$.support.transition) return complete.call(this) @@ -571,9 +627,8 @@ var scrollSize = $.camelCase(['scroll', dimension].join('-')) this.$element - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - [dimension](this.$element[0][scrollSize]) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) } Collapse.prototype.hide = function () { @@ -585,54 +640,85 @@ var dimension = this.dimension() - this.$element - [dimension](this.$element[dimension]()) - [0].offsetHeight + this.$element[dimension](this.$element[dimension]())[0].offsetHeight this.$element .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) this.transitioning = 1 var complete = function () { this.transitioning = 0 this.$element - .trigger('hidden.bs.collapse') .removeClass('collapsing') .addClass('collapse') + .trigger('hidden.bs.collapse') } if (!$.support.transition) return complete.call(this) this.$element [dimension](0) - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) } Collapse.prototype.toggle = function () { this[this.$element.hasClass('in') ? 'hide' : 'show']() } + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + // COLLAPSE PLUGIN DEFINITION // ========================== - var old = $.fn.collapse - - $.fn.collapse = function (option) { + function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.collapse') var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) if (typeof option == 'string') data[option]() }) } + var old = $.fn.collapse + + $.fn.collapse = Plugin $.fn.collapse.Constructor = Collapse @@ -648,56 +734,75 @@ // COLLAPSE DATA-API // ================= - $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var $target = $(target) + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) var data = $target.data('bs.collapse') var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - $target.collapse(option) + + Plugin.call($target, option) }) -}(window.jQuery); +}(jQuery); /* ======================================================================== - * Bootstrap: dropdown.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#dropdowns + * Bootstrap: dropdown.js v3.3.7 + * http://getbootstrap.com/javascript/#dropdowns * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ -+function ($) { "use strict"; ++function ($) { + 'use strict'; // DROPDOWN CLASS DEFINITION // ========================= var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle=dropdown]' + var toggle = '[data-toggle="dropdown"]' var Dropdown = function (element) { - var $el = $(element).on('click.bs.dropdown', this.toggle) + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.7' + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) + }) } Dropdown.prototype.toggle = function (e) { @@ -712,26 +817,32 @@ if (!isActive) { if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we we use a backdrop because click events don't delegate - $('
' - '
' +
-                      ls + '
') + '
' + '
' + ls + '
') else: yield 0, ('' % self.cssclass + - '' + '
' +
-                      ls + '
') + '
' + '
' + ls + '
') yield 0, dummyoutfile.getvalue() yield 0, '
' _whitespace_re = re.compile(r'(\t)|( )(?=\n|)') + def _markup_whitespace(m): groups = m.groups() if groups[0]: @@ -261,9 +285,11 @@ if groups[1]: return ' ' + def markup_whitespace(s): return _whitespace_re.sub(_markup_whitespace, s) + def pygmentize(filenode, **kwargs): """ pygmentize function using pygments @@ -338,9 +364,9 @@ author = escape(changeset.author) date = changeset.date message = escape(changeset.message) - tooltip_html = ("
Author:" - " %s
Date: %s
Message:" - " %s
") % (author, date, message) + tooltip_html = ("Author: %s
" + "Date: %s
" + "Message: %s") % (author, date, message) lnk_format = show_id(changeset) uri = link_to( @@ -348,8 +374,8 @@ url('changeset_home', repo_name=repo_name, revision=changeset.raw_id), style=get_color_string(changeset.raw_id), - class_='tooltip safe-html-title', - title=tooltip_html + **{'data-toggle': 'popover', + 'data-content': tooltip_html} ) uri += '\n' @@ -359,10 +385,6 @@ return literal(markup_whitespace(annotate_highlight(filenode, url_func(repo_name), **kwargs))) -def is_following_repo(repo_name, user_id): - from kallithea.model.scm import ScmModel - return ScmModel().is_following_repo(repo_name, user_id) - class _Message(object): """A message returned by ``Flash.pop_messages()``. @@ -385,6 +407,7 @@ def __html__(self): return escape(safe_unicode(self.message)) + class Flash(_Flash): def __call__(self, message, category=None, ignore_duplicate=False, logf=None): @@ -411,11 +434,12 @@ The return value is a list of ``Message`` objects. """ - from pylons import session + from tg import session messages = session.pop(self.session_key, []) session.save() return [_Message(*m) for m in messages] + flash = Flash() #============================================================================== @@ -423,9 +447,8 @@ #============================================================================== from kallithea.lib.vcs.utils import author_name, author_email from kallithea.lib.utils2 import credentials_filter, age as _age -from kallithea.model.db import User, ChangesetStatus, PullRequest -age = lambda x, y=False: _age(x, y) +age = lambda x, y=False: _age(x, y) capitalize = lambda x: x.capitalize() email = author_email short_id = lambda x: x[:12] @@ -477,20 +500,19 @@ return _type == 'hg' +@cache_region('long_term', 'user_or_none') def user_or_none(author): + """Try to match email part of VCS committer string with a local user - or return None""" + from kallithea.model.db import User email = author_email(author) if email: - user = User.get_by_email(email, case_insensitive=True, cache=True) - if user is not None: - return user - - user = User.get_by_username(author_name(author), case_insensitive=True, cache=True) - if user is not None: - return user - + return User.get_by_email(email, cache=True) # cache will only use sql_cache_short return None + def email_or_none(author): + """Try to match email part of VCS committer string with a local user. + Return primary email of user, email part of the specified author name, or None.""" if not author: return None user = user_or_none(author) @@ -505,9 +527,11 @@ # No valid email, not a valid user in the system, none! return None + def person(author, show_attr="username"): """Find the user identified by 'author', return one of the users attributes, default to the username attribute, None if there is no user""" + from kallithea.model.db import User # attr to return from fetched user person_getter = lambda usr: getattr(usr, show_attr) @@ -524,10 +548,11 @@ def person_by_id(id_, show_attr="username"): + from kallithea.model.db import User # attr to return from fetched user person_getter = lambda usr: getattr(usr, show_attr) - #maybe it's an ID ? + # maybe it's an ID ? if str(id_).isdigit() or isinstance(id_, int): id_ = int(id_) user = User.get(id_) @@ -536,29 +561,6 @@ return id_ -def desc_stylize(value): - """ - converts tags from value into html equivalent - - :param value: - """ - if not value: - return '' - - value = re.sub(r'\[see\ \=>\ *([a-zA-Z0-9\/\=\?\&\ \:\/\.\-]*)\]', - '
see => \\1
', value) - value = re.sub(r'\[license\ \=>\ *([a-zA-Z0-9\/\=\?\&\ \:\/\.\-]*)\]', - '', value) - value = re.sub(r'\[(requires|recommends|conflicts|base)\ \=>\ *([a-zA-Z0-9\-\/]*)\]', - '
\\1 => \\2
', value) - value = re.sub(r'\[(lang|language)\ \=>\ *([a-zA-Z\-\/\#\+]*)\]', - '
\\2
', value) - value = re.sub(r'\[([a-z]+)\]', - '
\\1
', value) - - return value - - def boolicon(value): """Returns boolean value of a value, represented as small html image of true/false icons @@ -622,9 +624,9 @@ lbl = rev[:12] title_ = _('Changeset %s not found') % lbl if parse_cs: - return link_to(lbl, url_, title=title_, class_='tooltip') - return link_to(lbl, url_, raw_id=rev.raw_id, repo_name=repo_name, - class_='lazy-cs' if lazy_cs else '') + return link_to(lbl, url_, title=title_, **{'data-toggle': 'tooltip'}) + return link_to(lbl, url_, class_='lazy-cs' if lazy_cs else '', + **{'data-raw_id': rev.raw_id, 'data-repo_name': repo_name}) def _get_op(rev_txt): _op = None @@ -667,7 +669,7 @@ _rev = '%s...%s' % (_name1, _name2) compare_view = ( - '
' + '
' '%s
' % ( _('Show all combined changesets %s->%s') % ( revs_ids[0][:12], revs_ids[-1][:12] @@ -731,6 +733,7 @@ return group_name def get_pull_request(): + from kallithea.model.db import PullRequest pull_request_id = action_params nice_id = PullRequest.make_nice_id(pull_request_id) @@ -802,9 +805,9 @@ if feed: action = action_str[0].replace('[', '').replace(']', '') else: - action = action_str[0]\ - .replace('[', '')\ - .replace(']', '') + action = action_str[0] \ + .replace('[', '') \ + .replace(']', '') action_params_func = lambda: "" @@ -819,9 +822,9 @@ if len(x) > 1: action, action_params = x - tmpl = """""" ico = action_map.get(action, ['', '', ''])[2] - return literal(tmpl % (ico, action)) + html = """""" % ico + return literal(html) # returned callbacks we need to call to get return [lambda: literal(action), action_params_func, action_parser_icon] @@ -831,15 +834,34 @@ #============================================================================== # PERMS #============================================================================== -from kallithea.lib.auth import HasPermissionAny, HasPermissionAll, \ -HasRepoPermissionAny, HasRepoPermissionAll, HasRepoGroupPermissionAll, \ -HasRepoGroupPermissionAny +from kallithea.lib.auth import HasPermissionAny, \ + HasRepoPermissionLevel, HasRepoGroupPermissionLevel #============================================================================== # GRAVATAR URL #============================================================================== -def gravatar(email_address, cls='', size=30, ssl_enabled=True): +def gravatar_div(email_address, cls='', size=30, **div_attributes): + """Return an html literal with a span around a gravatar if they are enabled. + Extra keyword parameters starting with 'div_' will get the prefix removed + and '_' changed to '-' and be used as attributes on the div. The default + class is 'gravatar'. + """ + from tg import tmpl_context as c + if not c.visual.use_gravatar: + return '' + if 'div_class' not in div_attributes: + div_attributes['div_class'] = "gravatar" + attributes = [] + for k, v in sorted(div_attributes.items()): + assert k.startswith('div_'), k + attributes.append(' %s="%s"' % (k[4:].replace('_', '-'), escape(v))) + return literal("""%s""" % + (''.join(attributes), + gravatar(email_address, cls=cls, size=size))) + + +def gravatar(email_address, cls='', size=30): """return html element of the gravatar This method will return an with the resolution double the size (for @@ -847,268 +869,49 @@ empty then we fallback to using an icon. """ - src = gravatar_url(email_address, size*2, ssl_enabled) + from tg import tmpl_context as c + if not c.visual.use_gravatar: + return '' - # here it makes sense to use style="width: ..." (instead of, say, a - # stylesheet) because we using this to generate a high-res (retina) size - tmpl = '' + src = gravatar_url(email_address, size * 2) - # if src is empty then there was no gravatar, so we use a font icon - if not src: - tmpl = """""" - - tmpl = tmpl.format(cls=cls, size=size, src=src) - return literal(tmpl) + if src: + # here it makes sense to use style="width: ..." (instead of, say, a + # stylesheet) because we using this to generate a high-res (retina) size + html = ('').format(cls=cls, size=size, src=src) -def gravatar_url(email_address, size=30, ssl_enabled=True): - # doh, we need to re-import those to mock it later - from pylons import url - from pylons import tmpl_context as c + else: + # if src is empty then there was no gravatar, so we use a font icon + html = ("""""" + .format(cls=cls, size=size, src=src)) + + return literal(html) - _def = 'anonymous@kallithea-scm.org' # default gravatar - _use_gravatar = c.visual.use_gravatar - _gravatar_url = c.visual.gravatar_url or User.DEFAULT_GRAVATAR_URL - email_address = email_address or _def - - if not _use_gravatar or not email_address or email_address == _def: +def gravatar_url(email_address, size=30, default=''): + # doh, we need to re-import those to mock it later + from kallithea.config.routing import url + from kallithea.model.db import User + from tg import tmpl_context as c + if not c.visual.use_gravatar: return "" - if _use_gravatar: - _md5 = lambda s: hashlib.md5(s).hexdigest() - - tmpl = _gravatar_url - parsed_url = urlparse.urlparse(url.current(qualified=True)) - tmpl = tmpl.replace('{email}', email_address)\ - .replace('{md5email}', _md5(safe_str(email_address).lower())) \ - .replace('{netloc}', parsed_url.netloc)\ - .replace('{scheme}', parsed_url.scheme)\ - .replace('{size}', safe_str(size)) - return tmpl - -class Page(_Page): - """ - Custom pager to match rendering style with YUI paginator - """ - - def _get_pos(self, cur_page, max_page, items): - edge = (items / 2) + 1 - if (cur_page <= edge): - radius = max(items / 2, items - cur_page) - elif (max_page - cur_page) < edge: - radius = (items - 1) - (max_page - cur_page) - else: - radius = items / 2 - - left = max(1, (cur_page - (radius))) - right = min(max_page, cur_page + (radius)) - return left, cur_page, right - - def _range(self, regexp_match): - """ - Return range of linked pages (e.g. '1 2 [3] 4 5 6 7 8'). - - Arguments: - - regexp_match - A "re" (regular expressions) match object containing the - radius of linked pages around the current page in - regexp_match.group(1) as a string - - This function is supposed to be called as a callable in - re.sub. - - """ - radius = int(regexp_match.group(1)) - - # Compute the first and last page number within the radius - # e.g. '1 .. 5 6 [7] 8 9 .. 12' - # -> leftmost_page = 5 - # -> rightmost_page = 9 - leftmost_page, _cur, rightmost_page = self._get_pos(self.page, - self.last_page, - (radius * 2) + 1) - nav_items = [] + _def = 'anonymous@kallithea-scm.org' # default gravatar + email_address = email_address or _def - # Create a link to the first page (unless we are on the first page - # or there would be no need to insert '..' spacers) - if self.page != self.first_page and self.first_page < leftmost_page: - nav_items.append(self._pagerlink(self.first_page, self.first_page)) - - # Insert dots if there are pages between the first page - # and the currently displayed page range - if leftmost_page - self.first_page > 1: - # Wrap in a SPAN tag if nolink_attr is set - text_ = '..' - if self.dotdot_attr: - text_ = HTML.span(c=text_, **self.dotdot_attr) - nav_items.append(text_) - - for thispage in xrange(leftmost_page, rightmost_page + 1): - # Highlight the current page number and do not use a link - text_ = str(thispage) - if thispage == self.page: - # Wrap in a SPAN tag if nolink_attr is set - if self.curpage_attr: - text_ = HTML.span(c=text_, **self.curpage_attr) - nav_items.append(text_) - # Otherwise create just a link to that page - else: - nav_items.append(self._pagerlink(thispage, text_)) - - # Insert dots if there are pages between the displayed - # page numbers and the end of the page range - if self.last_page - rightmost_page > 1: - text_ = '..' - # Wrap in a SPAN tag if nolink_attr is set - if self.dotdot_attr: - text_ = HTML.span(c=text_, **self.dotdot_attr) - nav_items.append(text_) - - # Create a link to the very last page (unless we are on the last - # page or there would be no need to insert '..' spacers) - if self.page != self.last_page and rightmost_page < self.last_page: - nav_items.append(self._pagerlink(self.last_page, self.last_page)) - - #_page_link = url.current() - #nav_items.append(literal('' % (_page_link, str(int(self.page)+1)))) - #nav_items.append(literal('' % (_page_link, str(int(self.page)+1)))) - return self.separator.join(nav_items) - - def pager(self, format='~2~', page_param='page', partial_param='partial', - show_if_single_page=False, separator=' ', onclick=None, - symbol_first='<<', symbol_last='>>', - symbol_previous='<', symbol_next='>', - link_attr={'class': 'pager_link', 'rel': 'prerender'}, - curpage_attr={'class': 'pager_curpage'}, - dotdot_attr={'class': 'pager_dotdot'}, **kwargs): - - self.curpage_attr = curpage_attr - self.separator = separator - self.pager_kwargs = kwargs - self.page_param = page_param - self.partial_param = partial_param - self.onclick = onclick - self.link_attr = link_attr - self.dotdot_attr = dotdot_attr + if email_address == _def: + return default - # Don't show navigator if there is no more than one page - if self.page_count == 0 or (self.page_count == 1 and not show_if_single_page): - return '' - - from string import Template - # Replace ~...~ in token format by range of pages - result = re.sub(r'~(\d+)~', self._range, format) - - # Interpolate '%' variables - result = Template(result).safe_substitute({ - 'first_page': self.first_page, - 'last_page': self.last_page, - 'page': self.page, - 'page_count': self.page_count, - 'items_per_page': self.items_per_page, - 'first_item': self.first_item, - 'last_item': self.last_item, - 'item_count': self.item_count, - 'link_first': self.page > self.first_page and \ - self._pagerlink(self.first_page, symbol_first) or '', - 'link_last': self.page < self.last_page and \ - self._pagerlink(self.last_page, symbol_last) or '', - 'link_previous': self.previous_page and \ - self._pagerlink(self.previous_page, symbol_previous) \ - or HTML.span(symbol_previous, class_="yui-pg-previous"), - 'link_next': self.next_page and \ - self._pagerlink(self.next_page, symbol_next) \ - or HTML.span(symbol_next, class_="yui-pg-next") - }) - - return literal(result) - - -#============================================================================== -# REPO PAGER, PAGER FOR REPOSITORY -#============================================================================== -class RepoPage(Page): - - def __init__(self, collection, page=1, items_per_page=20, - item_count=None, url=None, **kwargs): - - """Create a "RepoPage" instance. special pager for paging - repository - """ - self._url_generator = url - - # Safe the kwargs class-wide so they can be used in the pager() method - self.kwargs = kwargs - - # Save a reference to the collection - self.original_collection = collection - - self.collection = collection - - # The self.page is the number of the current page. - # The first page has the number 1! - try: - self.page = int(page) # make it int() if we get it as a string - except (ValueError, TypeError): - self.page = 1 - - self.items_per_page = items_per_page - - # Unless the user tells us how many items the collections has - # we calculate that ourselves. - if item_count is not None: - self.item_count = item_count - else: - self.item_count = len(self.collection) - - # Compute the number of the first and last available page - if self.item_count > 0: - self.first_page = 1 - self.page_count = int(math.ceil(float(self.item_count) / - self.items_per_page)) - self.last_page = self.first_page + self.page_count - 1 - - # Make sure that the requested page number is the range of - # valid pages - if self.page > self.last_page: - self.page = self.last_page - elif self.page < self.first_page: - self.page = self.first_page - - # Note: the number of items on this page can be less than - # items_per_page if the last page is not full - self.first_item = max(0, (self.item_count) - (self.page * - items_per_page)) - self.last_item = ((self.item_count - 1) - items_per_page * - (self.page - 1)) - - self.items = list(self.collection[self.first_item:self.last_item + 1]) - - # Links to previous and next page - if self.page > self.first_page: - self.previous_page = self.page - 1 - else: - self.previous_page = None - - if self.page < self.last_page: - self.next_page = self.page + 1 - else: - self.next_page = None - - # No items available - else: - self.first_page = None - self.page_count = 0 - self.last_page = None - self.first_item = None - self.last_item = None - self.previous_page = None - self.next_page = None - self.items = [] - - # This is a subclass of the 'list' type. Initialise the list now. - list.__init__(self, reversed(self.items)) + parsed_url = urlparse.urlparse(url.current(qualified=True)) + url = (c.visual.gravatar_url or User.DEFAULT_GRAVATAR_URL ) \ + .replace('{email}', email_address) \ + .replace('{md5email}', hashlib.md5(safe_str(email_address).lower()).hexdigest()) \ + .replace('{netloc}', parsed_url.netloc) \ + .replace('{scheme}', parsed_url.scheme) \ + .replace('{size}', safe_str(size)) + return url def changed_tooltip(nodes): @@ -1129,27 +932,6 @@ return ': ' + _('No files') -def repo_link(groups_and_repos): - """ - Makes a breadcrumbs link to repo within a group - joins » on each group to create a fancy link - - ex:: - group >> subgroup >> repo - - :param groups_and_repos: - :param last_url: - """ - groups, just_name, repo_name = groups_and_repos - last_url = url('summary_home', repo_name=repo_name) - last_link = link_to(just_name, last_url) - - def make_link(group): - return link_to(group.name, - url('repos_group_home', group_name=group.group_name)) - return literal(' » '.join(map(make_link, groups) + ['%s' % last_link])) - - def fancy_file_stats(stats): """ Displays a fancy two colored bar for number of added/deleted @@ -1160,31 +942,11 @@ from kallithea.lib.diffs import NEW_FILENODE, DEL_FILENODE, \ MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE, BIN_FILENODE - def cgen(l_type, a_v, d_v): - mapping = {'tr': 'top-right-rounded-corner-mid', - 'tl': 'top-left-rounded-corner-mid', - 'br': 'bottom-right-rounded-corner-mid', - 'bl': 'bottom-left-rounded-corner-mid'} - map_getter = lambda x: mapping[x] - - if l_type == 'a' and d_v: - #case when added and deleted are present - return ' '.join(map(map_getter, ['tl', 'bl'])) - - if l_type == 'a' and not d_v: - return ' '.join(map(map_getter, ['tr', 'br', 'tl', 'bl'])) - - if l_type == 'd' and a_v: - return ' '.join(map(map_getter, ['tr', 'br'])) - - if l_type == 'd' and not a_v: - return ' '.join(map(map_getter, ['tr', 'br', 'tl', 'bl'])) - a, d = stats['added'], stats['deleted'] width = 100 if stats['binary']: - #binary mode + # binary mode lbl = '' bin_op = 1 @@ -1204,15 +966,15 @@ lbl += _('rename') bin_op = RENAMED_FILENODE - #chmod can go with other operations + # chmod can go with other operations if CHMOD_FILENODE in stats['ops']: _org_lbl = _('chmod') lbl += _org_lbl if lbl.endswith('+') else '+%s' % _org_lbl #import ipdb;ipdb.set_trace() - b_d = '
%s
' % (bin_op, cgen('a', a_v='', d_v=0), lbl) + b_d = '
%s
' % (bin_op, lbl) b_a = '
' - return literal('
%s%s
' % (width, b_a, b_d)) + return literal('
%s%s
' % (width, b_a, b_d)) t = stats['added'] + stats['deleted'] unit = float(width) / (t or 1) @@ -1223,7 +985,7 @@ p_sum = a_p + d_p if p_sum > width: - #adjust the percentage to be == 100% since we adjusted to 9 + # adjust the percentage to be == 100% since we adjusted to 9 if a_p > d_p: a_p = a_p - (p_sum - width) else: @@ -1232,166 +994,219 @@ a_v = a if a > 0 else '' d_v = d if d > 0 else '' - d_a = '
%s
' % ( - cgen('a', a_v, d_v), a_p, a_v + d_a = '
%s
' % ( + a_p, a_v + ) + d_d = '
%s
' % ( + d_p, d_v ) - d_d = '
%s
' % ( - cgen('d', a_v, d_v), d_p, d_v - ) - return literal('
%s%s
' % (width, d_a, d_d)) + return literal('
%s%s
' % (width, d_a, d_d)) + + +_URLIFY_RE = re.compile(r''' +# URL markup +(?P%s) | +# @mention markup +(?P%s) | +# Changeset hash markup +(?[0-9a-f]{12,40}) +(?!\w|[-_]) | +# Markup of *bold text* +(?: + (?:^|(?<=\s)) + (?P [*] (?!\s) [^*\n]* (?[a-zA-Z0-9\/\=\?\&\ \:\/\.\-]*)\] | +\[license\ \=>\ *(?P[a-zA-Z0-9\/\=\?\&\ \:\/\.\-]*)\] | +\[(?Prequires|recommends|conflicts|base)\ \=>\ *(?P[a-zA-Z0-9\-\/]*)\] | +\[(?:lang|language)\ \=>\ *(?P[a-zA-Z\-\/\#\+]*)\] | +\[(?P[a-z]+)\] +''' % (url_re.pattern, MENTIONS_REGEX.pattern), + re.VERBOSE | re.MULTILINE | re.IGNORECASE) -def _urlify_text(s): - """ - Extract urls from text and make html links out of them +def urlify_text(s, repo_name=None, link_=None, truncate=None, stylize=False, truncatef=truncate): """ - def url_func(match_obj): - url_full = match_obj.group(1) - return '%(url)s' % ({'url': url_full}) - return url_re.sub(url_func, s) + Parses given text message and make literal html with markup. + The text will be truncated to the specified length. + Hashes are turned into changeset links to specified repository. + URLs links to what they say. + Issues are linked to given issue-server. + If link_ is provided, all text not already linking somewhere will link there. + """ -def urlify_text(s, truncate=None, stylize=False, truncatef=truncate): - """ - Extract urls from text and make literal html links out of them - """ - if truncate is not None: - s = truncatef(s, truncate) + def _replace(match_obj): + url = match_obj.group('url') + if url is not None: + return '%(url)s' % {'url': url} + mention = match_obj.group('mention') + if mention is not None: + return '%s' % mention + hash_ = match_obj.group('hash') + if hash_ is not None and repo_name is not None: + from kallithea.config.routing import url # doh, we need to re-import url to mock it later + return '%(hash)s' % { + 'url': url('changeset_home', repo_name=repo_name, revision=hash_), + 'hash': hash_, + } + bold = match_obj.group('bold') + if bold is not None: + return '*%s*' % _urlify(bold[1:-1]) + if stylize: + seen = match_obj.group('seen') + if seen: + return '
see => %s
' % seen + license = match_obj.group('license') + if license: + return '' % (license, license) + tagtype = match_obj.group('tagtype') + if tagtype: + tagvalue = match_obj.group('tagvalue') + return '
%s => %s
' % (tagtype, tagtype, tagvalue, tagvalue) + lang = match_obj.group('lang') + if lang: + return '
%s
' % lang + tag = match_obj.group('tag') + if tag: + return '
%s
' % (tag, tag) + return match_obj.group(0) + + def _urlify(s): + """ + Extract urls from text and make html links out of them + """ + return _URLIFY_RE.sub(_replace, s) + + if truncate is None: + s = s.rstrip() + else: + s = truncatef(s, truncate, whole_word=True) s = html_escape(s) - if stylize: - s = desc_stylize(s) - s = _urlify_text(s) + s = _urlify(s) + if repo_name is not None: + s = urlify_issues(s, repo_name) + if link_ is not None: + # make href around everything that isn't a href already + s = linkify_others(s, link_) + s = s.replace('\r\n', '
').replace('\n', '
') + # Turn HTML5 into more valid HTML4 as required by some mail readers. + # (This is not done in one step in html_escape, because character codes like + # { risk to be seen as an issue reference due to the presence of '#'.) + s = s.replace("'", "'") return literal(s) -def urlify_changesets(text_, repository): - """ - Extract revision ids from changeset and make link from them - - :param text_: - :param repository: repo name to build the URL with - """ - from pylons import url # doh, we need to re-import url to mock it later - - def url_func(match_obj): - rev = match_obj.group(0) - return '%(rev)s' % { - 'url': url('changeset_home', repo_name=repository, revision=rev), - 'rev': rev, - } - - return re.sub(r'(?:^|(?<=[\s(),]))([0-9a-fA-F]{12,40})(?=$|\s|[.,:()])', url_func, text_) def linkify_others(t, l): + """Add a default link to html with links. + HTML doesn't allow nesting of links, so the outer link must be broken up + in pieces and give space for other links. + """ urls = re.compile(r'(\)',) links = [] for e in urls.split(t): - if not urls.match(e): + if e.strip() and not urls.match(e): links.append('%s' % (l, e)) else: links.append(e) return ''.join(links) -def urlify_commit(text_, repository, link_=None): - """ - Parses given text message and makes proper links. - issues are linked to given issue-server, and rest is a changeset link - if link_ is given, in other case it's a plain text - :param text_: - :param repository: - :param link_: changeset link - """ - newtext = html_escape(text_) - - # urlify changesets - extract revisions and make link out of them - newtext = urlify_changesets(newtext, repository) - - # extract http/https links and make them real urls - newtext = _urlify_text(newtext) - - newtext = urlify_issues(newtext, repository, link_) - - return literal(newtext) - -def urlify_issues(newtext, repository, link_=None): - from kallithea import CONFIG as conf - - # allow multiple issue servers to be used - valid_indices = [ - x.group(1) - for x in map(lambda x: re.match(r'issue_pat(.*)', x), conf.keys()) - if x and 'issue_server_link%s' % x.group(1) in conf - and 'issue_prefix%s' % x.group(1) in conf - ] - - if valid_indices: - log.debug('found issue server suffixes `%s` during valuation of: %s', - ','.join(valid_indices), newtext) - - for pattern_index in valid_indices: - ISSUE_PATTERN = conf.get('issue_pat%s' % pattern_index) - ISSUE_SERVER_LNK = conf.get('issue_server_link%s' % pattern_index) - ISSUE_PREFIX = conf.get('issue_prefix%s' % pattern_index) - - log.debug('pattern suffix `%s` PAT:%s SERVER_LINK:%s PREFIX:%s', - pattern_index, ISSUE_PATTERN, ISSUE_SERVER_LNK, - ISSUE_PREFIX) - - URL_PAT = re.compile(ISSUE_PATTERN) - - def url_func(match_obj): - pref = '' - if match_obj.group().startswith(' '): - pref = ' ' - - issue_id = ''.join(match_obj.groups()) - issue_url = ISSUE_SERVER_LNK.replace('{id}', issue_id) - if repository: - issue_url = issue_url.replace('{repo}', repository) - repo_name = repository.split(URL_SEP)[-1] - issue_url = issue_url.replace('{repo_name}', repo_name) - - return ( - '%(pref)s' - '%(issue-prefix)s%(id-repr)s' - '' - ) % { - 'pref': pref, - 'cls': 'issue-tracker-link', - 'url': issue_url, - 'id-repr': issue_id, - 'issue-prefix': ISSUE_PREFIX, - 'serv': ISSUE_SERVER_LNK, - } - newtext = URL_PAT.sub(url_func, newtext) - log.debug('processed prefix:`%s` => %s', pattern_index, newtext) - - # if we actually did something above - if link_: - # wrap not links into final link => link_ - newtext = linkify_others(newtext, link_) - return newtext +# Global variable that will hold the actual urlify_issues function body. +# Will be set on first use when the global configuration has been read. +_urlify_issues_f = None -def rst(source): - return literal('
%s
' % - MarkupRenderer.rst(source)) +def urlify_issues(newtext, repo_name): + """Urlify issue references according to .ini configuration""" + global _urlify_issues_f + if _urlify_issues_f is None: + from kallithea import CONFIG + from kallithea.model.db import URL_SEP + assert CONFIG['sqlalchemy.url'] # make sure config has been loaded + + # Build chain of urlify functions, starting with not doing any transformation + tmp_urlify_issues_f = lambda s: s + + issue_pat_re = re.compile(r'issue_pat(.*)') + for k in CONFIG.keys(): + # Find all issue_pat* settings that also have corresponding server_link and prefix configuration + m = issue_pat_re.match(k) + if m is None: + continue + suffix = m.group(1) + issue_pat = CONFIG.get(k) + issue_server_link = CONFIG.get('issue_server_link%s' % suffix) + issue_sub = CONFIG.get('issue_sub%s' % suffix) + if not issue_pat or not issue_server_link or issue_sub is None: # issue_sub can be empty but should be present + log.error('skipping incomplete issue pattern %r: %r -> %r %r', suffix, issue_pat, issue_server_link, issue_sub) + continue + + # Wrap tmp_urlify_issues_f with substitution of this pattern, while making sure all loop variables (and compiled regexpes) are bound + try: + issue_re = re.compile(issue_pat) + except re.error as e: + log.error('skipping invalid issue pattern %r: %r -> %r %r. Error: %s', suffix, issue_pat, issue_server_link, issue_sub, str(e)) + continue + + log.debug('issue pattern %r: %r -> %r %r', suffix, issue_pat, issue_server_link, issue_sub) + + def issues_replace(match_obj, + issue_server_link=issue_server_link, issue_sub=issue_sub): + try: + issue_url = match_obj.expand(issue_server_link) + except (IndexError, re.error) as e: + log.error('invalid issue_url setting %r -> %r %r. Error: %s', issue_pat, issue_server_link, issue_sub, str(e)) + issue_url = issue_server_link + issue_url = issue_url.replace('{repo}', repo_name) + issue_url = issue_url.replace('{repo_name}', repo_name.split(URL_SEP)[-1]) + # if issue_sub is empty use the matched issue reference verbatim + if not issue_sub: + issue_text = match_obj.group() + else: + try: + issue_text = match_obj.expand(issue_sub) + except (IndexError, re.error) as e: + log.error('invalid issue_sub setting %r -> %r %r. Error: %s', issue_pat, issue_server_link, issue_sub, str(e)) + issue_text = match_obj.group() + + return ( + '' + '%(text)s' + '' + ) % { + 'url': issue_url, + 'text': issue_text, + } + tmp_urlify_issues_f = (lambda s, + issue_re=issue_re, issues_replace=issues_replace, chain_f=tmp_urlify_issues_f: + issue_re.sub(issues_replace, chain_f(s))) + + # Set tmp function globally - atomically + _urlify_issues_f = tmp_urlify_issues_f + + return _urlify_issues_f(newtext) -def rst_w_mentions(source): +def render_w_mentions(source, repo_name=None): """ - Wrapped rst renderer with @mention highlighting + Render plain text with revision hashes and issue references urlified + and with @mention highlighting. + """ + s = safe_unicode(source) + s = urlify_text(s, repo_name=repo_name) + return literal('
%s
' % s) - :param source: - """ - return literal('
%s
' % - MarkupRenderer.rst_with_mentions(source)) def short_ref(ref_type, ref_name): if ref_type == 'rev': return short_id(ref_name) return ref_name + def link_to_ref(repo_name, ref_type, ref_name, rev=None): """ Return full markup for a href to changeset_home for a changeset. @@ -1409,15 +1224,19 @@ l = literal('%s (%s)' % (l, link_to(short_id(rev), url('changeset_home', repo_name=repo_name, revision=rev)))) return l + def changeset_status(repo, revision): + from kallithea.model.changeset_status import ChangesetStatusModel return ChangesetStatusModel().get_status(repo, revision) def changeset_status_lbl(changeset_status): - return dict(ChangesetStatus.STATUSES).get(changeset_status) + from kallithea.model.db import ChangesetStatus + return ChangesetStatus.get_status_lbl(changeset_status) def get_permission_name(key): + from kallithea.model.db import Permission return dict(Permission.PERMS).get(key) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/hooks.py --- a/kallithea/lib/hooks.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/hooks.py Thu Jun 07 01:46:02 2018 +0200 @@ -35,7 +35,7 @@ from kallithea.lib.utils import action_logger from kallithea.lib.vcs.backends.base import EmptyChangeset from kallithea.lib.exceptions import HTTPLockedRC, UserCreationError -from kallithea.lib.utils2 import safe_str, _extract_extras +from kallithea.lib.utils2 import safe_str, safe_unicode, _extract_extras from kallithea.model.db import Repository, User @@ -79,15 +79,14 @@ last_cs = repo[len(repo) - 1] - msg = ('Repository size .hg:%s repo:%s total:%s\n' + msg = ('Repository size .hg: %s Checkout: %s Total: %s\n' 'Last revision is now r%s:%s\n') % ( size_hg_f, size_root_f, size_total_f, last_cs.rev(), last_cs.hex()[:12] ) - - sys.stdout.write(msg) + ui.status(msg) -def pre_push(ui, repo, **kwargs): +def push_lock_handling(ui, repo, **kwargs): # pre push function, currently used to ban pushing when # repository is locked ex = _extract_extras() @@ -99,13 +98,13 @@ # on that proper return code is server to client _http_ret = HTTPLockedRC(ex.repository, locked_by) if str(_http_ret.code).startswith('2'): - #2xx Codes don't raise exceptions - sys.stdout.write(_http_ret.title) + # 2xx Codes don't raise exceptions + ui.status(safe_str(_http_ret.title)) else: raise _http_ret -def pre_pull(ui, repo, **kwargs): +def pull_lock_handling(ui, repo, **kwargs): # pre pull function ... ex = _extract_extras() if ex.locked_by[0]: @@ -114,8 +113,8 @@ # on that proper return code is server to client _http_ret = HTTPLockedRC(ex.repository, locked_by) if str(_http_ret.code).startswith('2'): - #2xx Codes don't raise exceptions - sys.stdout.write(_http_ret.title) + # 2xx Codes don't raise exceptions + ui.status(safe_str(_http_ret.title)) else: raise _http_ret @@ -143,14 +142,14 @@ if ex.make_lock is not None and ex.make_lock: Repository.lock(Repository.get_by_repo_name(ex.repository), user.user_id) #msg = 'Made lock on repo `%s`' % repository - #sys.stdout.write(msg) + #ui.status(msg) if ex.locked_by[0]: locked_by = User.get(ex.locked_by[0]).username _http_ret = HTTPLockedRC(ex.repository, locked_by) if str(_http_ret.code).startswith('2'): - #2xx Codes don't raise exceptions - sys.stdout.write(_http_ret.title) + # 2xx Codes don't raise exceptions + ui.status(safe_str(_http_ret.title)) return 0 @@ -198,15 +197,14 @@ if ex.make_lock is not None and not ex.make_lock: Repository.unlock(Repository.get_by_repo_name(ex.repository)) - msg = 'Released lock on repo `%s`\n' % ex.repository - sys.stdout.write(msg) + ui.status(safe_str('Released lock on repo `%s`\n' % ex.repository)) if ex.locked_by[0]: locked_by = User.get(ex.locked_by[0]).username _http_ret = HTTPLockedRC(ex.repository, locked_by) if str(_http_ret.code).startswith('2'): - #2xx Codes don't raise exceptions - sys.stdout.write(_http_ret.title) + # 2xx Codes don't raise exceptions + ui.status(safe_str(_http_ret.title)) return 0 @@ -226,7 +224,7 @@ 'created_on', 'enable_downloads', 'repo_id', - 'user_id', + 'owner_id', 'enable_statistics', 'clone_uri', 'fork_id', @@ -308,7 +306,7 @@ 'created_on', 'enable_downloads', 'repo_id', - 'user_id', + 'owner_id', 'enable_statistics', 'clone_uri', 'fork_id', @@ -366,17 +364,19 @@ return 0 -def handle_git_pre_receive(repo_path, revs, env): - return handle_git_receive(repo_path, revs, env, hook_type='pre') +def handle_git_pre_receive(repo_path, git_stdin_lines, env): + return handle_git_receive(repo_path, git_stdin_lines, env, hook_type='pre') + -def handle_git_post_receive(repo_path, revs, env): - return handle_git_receive(repo_path, revs, env, hook_type='post') +def handle_git_post_receive(repo_path, git_stdin_lines, env): + return handle_git_receive(repo_path, git_stdin_lines, env, hook_type='post') -def handle_git_receive(repo_path, revs, env, hook_type): + +def handle_git_receive(repo_path, git_stdin_lines, env, hook_type): """ A really hacky method that is run by git post-receive hook and logs - an push action together with pushed revisions. It's executed by subprocess - thus needs all info to be able to create a on the fly pylons environment, + a push action together with pushed revisions. It's executed by subprocess + thus needs all info to be able to create an on the fly app environment, connect to database and run the logging code. Hacky as sh*t but works. :param repo_path: @@ -386,17 +386,19 @@ from paste.deploy import appconfig from sqlalchemy import engine_from_config from kallithea.config.environment import load_environment - from kallithea.model import init_model + from kallithea.model.base import init_model from kallithea.model.db import Ui - from kallithea.lib.utils import make_ui + from kallithea.lib.utils import make_ui, setup_cache_regions extras = _extract_extras(env) + repo_path = safe_unicode(repo_path) path, ini_name = os.path.split(extras['config']) conf = appconfig('config:%s' % ini_name, relative_to=path) - load_environment(conf.global_conf, conf.local_conf, test_env=False, - test_index=False) + conf = load_environment(conf.global_conf, conf.local_conf) - engine = engine_from_config(conf, 'sqlalchemy.db1.') + setup_cache_regions(conf) + + engine = engine_from_config(conf, 'sqlalchemy.') init_model(engine) baseui = make_ui('db') @@ -414,24 +416,24 @@ if hook_type == 'pre': repo = repo.scm_instance else: - #post push shouldn't use the cached instance never + # post push shouldn't use the cached instance never repo = repo.scm_instance_no_cache() if hook_type == 'pre': - pre_push(baseui, repo) + push_lock_handling(baseui, repo) # if push hook is enabled via web interface - elif hook_type == 'post' and _hooks.get(Ui.HOOK_PUSH): + elif hook_type == 'post' and _hooks.get(Ui.HOOK_PUSH_LOG): rev_data = [] - for l in revs: - old_rev, new_rev, ref = l.split(' ') + for l in git_stdin_lines: + old_rev, new_rev, ref = l.strip().split(' ') _ref_data = ref.split('/') if _ref_data[1] in ['tags', 'heads']: rev_data.append({'old_rev': old_rev, 'new_rev': new_rev, 'ref': ref, 'type': _ref_data[1], - 'name': _ref_data[2].strip()}) + 'name': '/'.join(_ref_data[2:])}) git_revs = [] @@ -444,7 +446,7 @@ repo._repo.refs.set_symbolic_ref('HEAD', 'refs/heads/%s' % push_ref['name']) - cmd = ['for-each-ref', '--format=%(refname)','refs/heads/*'] + cmd = ['for-each-ref', '--format=%(refname)', 'refs/heads/*'] heads = repo.run_git_command(cmd)[0] cmd = ['log', push_ref['new_rev'], '--reverse', '--pretty=format:%H', '--not'] @@ -454,7 +456,7 @@ git_revs += repo.run_git_command(cmd)[0].splitlines() elif push_ref['new_rev'] == EmptyChangeset().raw_id: - #delete branch case + # delete branch case git_revs += ['delete_branch=>%s' % push_ref['name']] else: cmd = ['log', '%(old_rev)s..%(new_rev)s' % push_ref, diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/indexers/__init__.py --- a/kallithea/lib/indexers/__init__.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/indexers/__init__.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,12 +28,12 @@ import os import sys import logging -from os.path import dirname as dn, join as jn +from os.path import dirname # Add location of top level folder to sys.path -sys.path.append(dn(dn(dn(os.path.realpath(__file__))))) +sys.path.append(dirname(dirname(dirname(os.path.realpath(__file__))))) -from whoosh.analysis import RegexTokenizer, LowercaseFilter +from whoosh.analysis import RegexTokenizer, LowercaseFilter, IDTokenizer from whoosh.fields import TEXT, ID, STORED, NUMERIC, BOOLEAN, Schema, FieldType, DATETIME from whoosh.formats import Characters from whoosh.highlight import highlight as whoosh_highlight, HtmlFormatter, ContextFragmenter @@ -44,16 +44,51 @@ # CUSTOM ANALYZER wordsplit + lowercase filter ANALYZER = RegexTokenizer(expression=r"\w+") | LowercaseFilter() -#INDEX SCHEMA DEFINITION +# CUSTOM ANALYZER wordsplit + lowercase filter, for emailaddr-like text +# +# This is useful to: +# - avoid removing "stop words" from text +# - search case-insensitively +# +EMAILADDRANALYZER = RegexTokenizer() | LowercaseFilter() + +# CUSTOM ANALYZER raw-string + lowercase filter +# +# This is useful to: +# - avoid tokenization +# - avoid removing "stop words" from text +# - search case-insensitively +# +ICASEIDANALYZER = IDTokenizer() | LowercaseFilter() + +# CUSTOM ANALYZER raw-string +# +# This is useful to: +# - avoid tokenization +# - avoid removing "stop words" from text +# +IDANALYZER = IDTokenizer() + +# CUSTOM ANALYZER wordsplit + lowercase filter, for pathname-like text +# +# This is useful to: +# - avoid removing "stop words" from text +# - search case-insensitively +# +PATHANALYZER = RegexTokenizer() | LowercaseFilter() + +# INDEX SCHEMA DEFINITION SCHEMA = Schema( fileid=ID(unique=True), - owner=TEXT(), - repository=TEXT(stored=True), - path=TEXT(stored=True), + owner=TEXT(analyzer=EMAILADDRANALYZER), + # this field preserves case of repository name for exact matching + repository_rawname=TEXT(analyzer=IDANALYZER), + repository=TEXT(stored=True, analyzer=ICASEIDANALYZER), + path=TEXT(stored=True, analyzer=PATHANALYZER), content=FieldType(format=Characters(), analyzer=ANALYZER, scorable=True, stored=True), modtime=STORED(), - extension=TEXT(stored=True) + extension=TEXT(stored=True, analyzer=PATHANALYZER) ) IDX_NAME = 'HG_INDEX' @@ -64,22 +99,25 @@ raw_id=ID(unique=True, stored=True), date=NUMERIC(stored=True), last=BOOLEAN(), - owner=TEXT(), - repository=ID(unique=True, stored=True), - author=TEXT(stored=True), + owner=TEXT(analyzer=EMAILADDRANALYZER), + # this field preserves case of repository name for exact matching + # and unique-ness in index table + repository_rawname=ID(unique=True), + repository=ID(stored=True, analyzer=ICASEIDANALYZER), + author=TEXT(stored=True, analyzer=EMAILADDRANALYZER), message=FieldType(format=Characters(), analyzer=ANALYZER, scorable=True, stored=True), parents=TEXT(), - added=TEXT(), - removed=TEXT(), - changed=TEXT(), + added=TEXT(analyzer=PATHANALYZER), + removed=TEXT(analyzer=PATHANALYZER), + changed=TEXT(analyzer=PATHANALYZER), ) CHGSET_IDX_NAME = 'CHGSET_INDEX' # used only to generate queries in journal JOURNAL_SCHEMA = Schema( - username=TEXT(), + username=ID(), date=DATETIME(), action=TEXT(), repository=ID(), @@ -140,7 +178,7 @@ res = self.searcher.stored_fields(docid[0]) log.debug('result: %s', res) if self.search_type == 'content': - full_repo_path = jn(self.repo_location, res['repository']) + full_repo_path = os.path.join(self.repo_location, res['repository']) f_path = res['path'].split(full_repo_path)[-1] f_path = f_path.lstrip(os.sep) content_short = self.get_short_content(res, docid[1]) @@ -149,7 +187,7 @@ 'f_path': f_path }) elif self.search_type == 'path': - full_repo_path = jn(self.repo_location, res['repository']) + full_repo_path = os.path.join(self.repo_location, res['repository']) f_path = res['path'].split(full_repo_path)[-1] f_path = f_path.lstrip(os.sep) res.update({'f_path': f_path}) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/indexers/daemon.py --- a/kallithea/lib/indexers/daemon.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/indexers/daemon.py Thu Jun 07 01:46:02 2018 +0200 @@ -34,14 +34,13 @@ from shutil import rmtree from time import mktime -from os.path import dirname as dn -from os.path import join as jn +from os.path import dirname # Add location of top level folder to sys.path -project_path = dn(dn(dn(dn(os.path.realpath(__file__))))) +project_path = dirname(dirname(dirname(dirname(os.path.realpath(__file__))))) sys.path.append(project_path) -from kallithea.config.conf import INDEX_EXTENSIONS +from kallithea.config.conf import INDEX_EXTENSIONS, INDEX_FILENAMES from kallithea.model.scm import ScmModel from kallithea.model.db import Repository from kallithea.lib.utils2 import safe_unicode, safe_str @@ -64,7 +63,7 @@ """ def __init__(self, indexname=IDX_NAME, index_location=None, - repo_location=None, sa=None, repo_list=None, + repo_location=None, repo_list=None, repo_update_list=None): self.indexname = indexname @@ -76,11 +75,11 @@ if not repo_location: raise Exception('You have to provide repositories location') - self.repo_paths = ScmModel(sa).repo_scan(self.repo_location) + self.repo_paths = ScmModel().repo_scan(self.repo_location) - #filter repo list + # filter repo list if repo_list: - #Fix non-ascii repo names to unicode + # Fix non-ascii repo names to unicode repo_list = map(safe_unicode, repo_list) self.filtered_repo_paths = {} for repo_name, repo in self.repo_paths.items(): @@ -89,7 +88,7 @@ self.repo_paths = self.filtered_repo_paths - #filter update repo list + # filter update repo list self.filtered_repo_update_paths = {} if repo_update_list: self.filtered_repo_update_paths = {} @@ -136,7 +135,7 @@ cs = self._get_index_changeset(repo) for _topnode, _dirs, files in cs.walk('/'): for f in files: - index_paths_.add(jn(safe_str(repo.path), safe_str(f.path))) + index_paths_.add(os.path.join(safe_str(repo.path), safe_str(f.path))) except RepositoryError: log.debug(traceback.format_exc()) @@ -162,6 +161,13 @@ node = cs.get_node(node_path) return node + def is_indexable_node(self, node): + """ + Just index the content of chosen files, skipping binary files + """ + return (node.extension in INDEX_EXTENSIONS or node.name in INDEX_FILENAMES) and \ + not node.is_binary + def get_node_mtime(self, node): return mktime(node.last_changeset.date.timetuple()) @@ -177,8 +183,7 @@ return 0, 0 indexed = indexed_w_content = 0 - # we just index the content of chosen files, and skip binary files - if node.extension in INDEX_EXTENSIONS and not node.is_binary: + if self.is_indexable_node(node): u_content = node.content if not isinstance(u_content, unicode): log.warning(' >> %s Could not get this content as unicode ' @@ -198,6 +203,7 @@ writer.add_document( fileid=p, owner=unicode(repo.contact), + repository_rawname=safe_unicode(repo_name), repository=safe_unicode(repo_name), path=p, content=u_content, @@ -236,6 +242,7 @@ raw_id=unicode(cs.raw_id), owner=unicode(repo.contact), date=cs._timestamp, + repository_rawname=safe_unicode(repo_name), repository=safe_unicode(repo_name), author=cs.author, message=cs.message, @@ -346,7 +353,7 @@ indexed_repo_path = fields['repository'] indexed_paths.add(indexed_path) - if not indexed_repo_path in self.filtered_repo_update_paths: + if indexed_repo_path not in self.filtered_repo_update_paths: continue repo = self.repo_paths[indexed_repo_path] diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/inifile.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/lib/inifile.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,162 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +""" +kallithea.lib.inifile +~~~~~~~~~~~~~~~~~~~~~ + +Handling of .ini files, mainly creating them from Mako templates and adding +other custom values. +""" + +import logging +import re +import os + +import mako.template + + +log = logging.getLogger(__name__) + + +template_file = os.path.join( + os.path.dirname(os.path.dirname(os.path.dirname(__file__))), + 'kallithea/lib/paster_commands/template.ini.mako') + +default_variables = { + 'database_engine': 'sqlite', + 'http_server': 'waitress', + 'host': '127.0.0.1', + 'port': '5000', + 'uuid': lambda: 'VERY-SECRET', +} + + +def expand(template, mako_variable_values, settings): + """Expand mako template and tweak it. + Not entirely stable for random templates as input, but good enough for our + single template. + + >>> template = ''' + ... [first-section] + ... + ... variable=${mako_variable} + ... variable2 =\tvalue after tab + ... ## This section had some whitespace and stuff + ... + ... + ... # ${mako_function()} + ... [second-section] + ... %if conditional_options == 'option-a': + ... # option a was chosen + ... %elif conditional_options == 'option-b': + ... some_variable = "never mind - option-b will not be used anyway ..." + ... %endif + ... ''' + >>> selected_mako_conditionals = [] + >>> mako_variable_values = {'mako_variable': 'VALUE', 'mako_function': (lambda: 'FUNCTION RESULT'), + ... 'conditional_options': 'option-a'} + >>> settings = { # only partially used + ... '[first-section]': {'variable2': 'VAL2', 'first_extra': 'EXTRA'}, + ... '[third-section]': {'third_extra': ' 3'}, + ... '[fourth-section]': {'fourth_extra': '4', 'fourth': '"four"'}, + ... } + >>> print expand(template, mako_variable_values, settings) + + [first-section] + + variable=VALUE + #variable2 = value after tab + variable2 = VAL2 + + first_extra = EXTRA + + + # FUNCTION RESULT + [second-section] + # option a was chosen + + [fourth-section] + fourth = "four" + fourth_extra = 4 + + [third-section] + third_extra = 3 + + """ + mako_variables = dict(default_variables) + mako_variables.update(mako_variable_values or {}) + settings = dict((k, dict(v)) for k, v in settings.items()) # deep copy before mutating + + ini_lines = mako.template.Template(template).render(**mako_variables) + + def process_section(m): + """process a ini section, replacing values as necessary""" + sectionname, lines = m.groups() + if sectionname in settings: + section_settings = settings.pop(sectionname) + + def process_line(m): + """process a section line and update value if necessary""" + key, value = m.groups() + line = m.group(0) + if key in section_settings: + new_line = '%s = %s' % (key, section_settings.pop(key)) + if new_line != line: + # keep old entry as example - comments might refer to it + line = '#%s\n%s' % (line, new_line) + return line.rstrip() + + # process lines that not are comments or empty and look like name=value + lines = re.sub(r'^([^#\n\s]*)[ \t]*=[ \t]*(.*)$', process_line, lines, flags=re.MULTILINE) + # add unused section settings + if section_settings: + lines += '\n' + ''.join('%s = %s\n' % (key, value) for key, value in sorted(section_settings.items())) + + return sectionname + '\n' + lines + + # process sections until comments before next section or end + ini_lines = re.sub(r'''^ + (\[.*\])\n + # after the section name, a number of chunks with: + ( + (?: + # a number of comments or empty lines + (?:[#].*\n|\n)* + # one or more non-empty non-comments non-section-start lines + (?:[^\n#[].*\n)+ + # a number of comments - not empty lines + (?:[#].*\n)* + )* + ) + ''', + process_section, ini_lines, flags=re.MULTILINE|re.VERBOSE) \ + + \ + ''.join( + '\n' + sectionname + '\n' + ''.join('%s = %s\n' % (key, value) for key, value in sorted(section_settings.items())) + for sectionname, section_settings in sorted(settings.items()) + if section_settings) + + return ini_lines + + +def create(dest_file, mako_variable_values, settings): + """Create an ini file at dest_file""" + with open(template_file, 'rb') as f: + template = f.read().decode('utf-8') + + ini_lines = expand(template, mako_variable_values, settings) + + with open(dest_file, 'wb') as f: + f.write(ini_lines.encode('utf-8')) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/ipaddr.py --- a/kallithea/lib/ipaddr.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/ipaddr.py Thu Jun 07 01:46:02 2018 +0200 @@ -367,9 +367,11 @@ return _collapse_address_list_recursive(sorted( addrs + nets, key=_BaseNet._get_networks_key)) + # backwards compatibility CollapseAddrList = collapse_address_list + # We need to distinguish between the string and packed-bytes representations # of an IP address. For example, b'0::1' is the IPv4 address 48.58.58.49, # while '0::1' is an IPv6 address. @@ -767,18 +769,17 @@ s1, s2 = s2.subnet() else: # If we got here, there's a bug somewhere. - assert True == False, ('Error performing exclusion: ' - 's1: %s s2: %s other: %s' % - (str(s1), str(s2), str(other))) + assert False, ('Error performing exclusion: ' + 's1: %s s2: %s other: %s' % + (str(s1), str(s2), str(other))) if s1 == other: ret_addrs.append(s2) elif s2 == other: ret_addrs.append(s1) else: # If we got here, there's a bug somewhere. - assert True == False, ('Error performing exclusion: ' - 's1: %s s2: %s other: %s' % - (str(s1), str(s2), str(other))) + assert False, ('Error performing exclusion: s1: %s s2: %s other: %s' + % (str(s1), str(s2), str(other))) return sorted(ret_addrs, key=_BaseNet._get_networks_key) @@ -1245,7 +1246,7 @@ '192.168.1.1' '192.168.1.1/255.255.255.255' '192.168.1.1/32' - are also functionaly equivalent. That is to say, failing to + are also functionally equivalent. That is to say, failing to provide a subnetmask will create an object with a mask of /32. If the mask (portion after the / in the argument) is given in diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/markup_renderer.py --- a/kallithea/lib/markup_renderer.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/markup_renderer.py Thu Jun 07 01:46:02 2018 +0200 @@ -35,8 +35,9 @@ log = logging.getLogger(__name__) -url_re = re.compile(r'''(\bhttps?://(?:[\da-zA-Z0-9@:.-]+)''' - r'''(?:[/a-zA-Z0-9_=@#~&+%.,:;?!*()-]*[/a-zA-Z0-9_=@#~])?)''') +url_re = re.compile(r'''\bhttps?://(?:[\da-zA-Z0-9@:.-]+)''' + r'''(?:[/a-zA-Z0-9_=@#~&+%.,:;?!*()-]*[/a-zA-Z0-9_=@#~])?''') + class MarkupRenderer(object): RESTRUCTUREDTEXT_DISALLOWED_DIRECTIVES = ['include', 'meta', 'raw'] @@ -45,7 +46,7 @@ RST_PAT = re.compile(r're?st', re.IGNORECASE) PLAIN_PAT = re.compile(r'readme', re.IGNORECASE) - def _detect_renderer(self, source, filename=None): + def _detect_renderer(self, source, filename): """ runs detection of what renderer should be used for generating html from a markup language @@ -56,16 +57,13 @@ :param filename: """ - if MarkupRenderer.MARKDOWN_PAT.findall(filename): - detected_renderer = 'markdown' - elif MarkupRenderer.RST_PAT.findall(filename): - detected_renderer = 'rst' - elif MarkupRenderer.PLAIN_PAT.findall(filename): - detected_renderer = 'rst' - else: - detected_renderer = 'plain' - - return getattr(MarkupRenderer, detected_renderer) + if self.MARKDOWN_PAT.findall(filename): + return self.markdown + elif self.RST_PAT.findall(filename): + return self.rst + elif self.PLAIN_PAT.findall(filename): + return self.rst + return self.plain @classmethod def _flavored_markdown(cls, text): @@ -78,6 +76,7 @@ # Extract pre blocks. extractions = {} + def pre_extraction_callback(matchobj): digest = md5(matchobj.group(0)).hexdigest() extractions[digest] = matchobj.group(0) @@ -132,7 +131,7 @@ source = newline.join(source.splitlines()) def url_func(match_obj): - url_full = match_obj.groups()[0] + url_full = match_obj.group(0) return '%(url)s' % ({'url': url_full}) source = url_re.sub(url_func, source) return '
' + source.replace("\n", '
') @@ -144,7 +143,9 @@ import markdown as __markdown if flavored: source = cls._flavored_markdown(source) - return __markdown.markdown(source, ['codehilite', 'extra']) + return __markdown.markdown(source, + extensions=['codehilite', 'extra'], + extension_configs={'codehilite': {'css_class': 'code-highlight'}}) except ImportError: log.warning('Install markdown to use this function') return cls.plain(source) @@ -189,10 +190,9 @@ @classmethod def rst_with_mentions(cls, source): - mention_pat = re.compile(MENTIONS_REGEX) def wrapp(match_obj): uname = match_obj.groups()[0] return '\ **@%(uname)s**\ ' % {'uname': uname} - mention_hl = mention_pat.sub(wrapp, source).strip() + mention_hl = MENTIONS_REGEX.sub(wrapp, source).strip() return cls.rst(mention_hl) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/middleware/appenlight.py diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/middleware/pygrack.py --- a/kallithea/lib/middleware/pygrack.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/middleware/pygrack.py Thu Jun 07 01:46:02 2018 +0200 @@ -1,3 +1,30 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +kallithea.lib.middleware.pygrack +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Python implementation of git-http-backend's Smart HTTP protocol + +Based on original code from git_http_backend.py project. + +Copyright (c) 2010 Daniel Dotsenko +Copyright (c) 2012 Marcin Kuzminski + +This file was forked by the Kallithea project in July 2014. +""" + import os import socket import logging @@ -7,6 +34,7 @@ import kallithea from kallithea.lib.vcs import subprocessio +from kallithea.lib.utils2 import safe_unicode log = logging.getLogger(__name__) @@ -44,7 +72,7 @@ def __init__(self, repo_name, content_path, extras): files = set([f.lower() for f in os.listdir(content_path)]) - if not (self.git_folder_signature.intersection(files) + if not (self.git_folder_signature.intersection(files) == self.git_folder_signature): raise OSError('%s missing git signature' % content_path) self.content_path = content_path @@ -59,15 +87,17 @@ :param path: """ - return path.split(self.repo_name, 1)[-1].strip('/') + path = safe_unicode(path) + assert path.startswith('/' + self.repo_name + '/') + return path[len(self.repo_name) + 2:].strip('/') - def inforefs(self, request, environ): + def inforefs(self, req, environ): """ WSGI Response producer for HTTP GET Git Smart HTTP /info/refs request. """ - git_command = request.GET.get('service') + git_command = req.GET.get('service') if git_command not in self.commands: log.debug('command %s not allowed', git_command) return exc.HTTPMethodNotAllowed() @@ -101,7 +131,7 @@ resp.app_iter = out return resp - def backend(self, request, environ): + def backend(self, req, environ): """ WSGI Response producer for HTTP POST Git Smart HTTP requests. Reads commands and data from HTTP POST's body. @@ -109,14 +139,14 @@ response to stdout """ _git_path = kallithea.CONFIG.get('git_path', 'git') - git_command = self._get_fixedpath(request.path_info) + git_command = self._get_fixedpath(req.path_info) if git_command not in self.commands: log.debug('command %s not allowed', git_command) return exc.HTTPMethodNotAllowed() if 'CONTENT_LENGTH' in environ: inputstream = FileWrapper(environ['wsgi.input'], - request.content_length) + req.content_length) else: inputstream = environ['wsgi.input'] @@ -152,14 +182,14 @@ return resp def __call__(self, environ, start_response): - request = Request(environ) - _path = self._get_fixedpath(request.path_info) + req = Request(environ) + _path = self._get_fixedpath(req.path_info) if _path.startswith('info/refs'): app = self.inforefs - elif [a for a in self.valid_accepts if a in request.accept]: + elif [a for a in self.valid_accepts if a in req.accept]: app = self.backend try: - resp = app(request, environ) + resp = app(req, environ) except exc.HTTPException as e: resp = e log.error(traceback.format_exc()) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/middleware/sessionmiddleware.py --- a/kallithea/lib/middleware/sessionmiddleware.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/middleware/sessionmiddleware.py Thu Jun 07 01:46:02 2018 +0200 @@ -26,6 +26,7 @@ from beaker.session import SessionObject from beaker.middleware import SessionMiddleware + class SecureSessionMiddleware(SessionMiddleware): def __call__(self, environ, start_response): """ diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/middleware/simplegit.py --- a/kallithea/lib/middleware/simplegit.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/middleware/simplegit.py Thu Jun 07 01:46:02 2018 +0200 @@ -36,14 +36,14 @@ from paste.httpheaders import REMOTE_USER, AUTH_TYPE from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \ HTTPNotAcceptable -from kallithea.model.db import User, Ui +from kallithea.model.db import Ui -from kallithea.lib.utils2 import safe_str, safe_unicode, fix_PATH, get_server_url,\ +from kallithea.lib.utils2 import safe_str, safe_unicode, fix_PATH, get_server_url, \ _set_extras -from kallithea.lib.base import BaseVCSController, WSGIResultCloseCallback +from kallithea.lib.base import BaseVCSController, WSGIResultCloseCallback, check_locking_state from kallithea.lib.utils import make_ui, is_valid_repo from kallithea.lib.exceptions import HTTPLockedRC -from kallithea.lib.hooks import pre_pull +from kallithea.lib.hooks import pull_lock_handling from kallithea.lib import auth_modules log = logging.getLogger(__name__) @@ -66,11 +66,8 @@ def _handle_request(self, environ, start_response): if not is_git(environ): return self.application(environ, start_response) - if not self._check_ssl(environ): - return HTTPNotAcceptable('SSL REQUIRED !')(environ, start_response) ip_addr = self._get_ip_addr(environ) - username = None self._git_first_op = False # skip passing error to error controller environ['pylons.status_code_redirect'] = True @@ -96,68 +93,11 @@ action = self.__get_action(environ) #====================================================================== - # CHECK ANONYMOUS PERMISSION + # CHECK PERMISSIONS #====================================================================== - if action in ['pull', 'push']: - anonymous_user = self.__get_user('default') - username = anonymous_user.username - if anonymous_user.active: - # ONLY check permissions if the user is activated - anonymous_perm = self._check_permission(action, anonymous_user, - repo_name, ip_addr) - else: - anonymous_perm = False - - if not anonymous_user.active or not anonymous_perm: - if not anonymous_user.active: - log.debug('Anonymous access is disabled, running ' - 'authentication') - - if not anonymous_perm: - log.debug('Not enough credentials to access this ' - 'repository as anonymous user') - - username = None - #============================================================== - # DEFAULT PERM FAILED OR ANONYMOUS ACCESS IS DISABLED SO WE - # NEED TO AUTHENTICATE AND ASK FOR AUTH USER PERMISSIONS - #============================================================== - - # try to auth based on environ, container auth methods - log.debug('Running PRE-AUTH for container based authentication') - pre_auth = auth_modules.authenticate('', '', environ) - if pre_auth is not None and pre_auth.get('username'): - username = pre_auth['username'] - log.debug('PRE-AUTH got %s as username', username) - - # If not authenticated by the container, running basic auth - if not username: - self.authenticate.realm = \ - safe_str(self.config['realm']) - result = self.authenticate(environ) - if isinstance(result, str): - AUTH_TYPE.update(environ, 'basic') - REMOTE_USER.update(environ, result) - username = result - else: - return result.wsgi_application(environ, start_response) - - #============================================================== - # CHECK PERMISSIONS FOR THIS REQUEST USING GIVEN USERNAME - #============================================================== - try: - user = self.__get_user(username) - if user is None or not user.active: - return HTTPForbidden()(environ, start_response) - username = user.username - except Exception: - log.error(traceback.format_exc()) - return HTTPInternalServerError()(environ, start_response) - - #check permissions for this repository - perm = self._check_permission(action, user, repo_name, ip_addr) - if not perm: - return HTTPForbidden()(environ, start_response) + user, response_app = self._authorize(environ, start_response, action, repo_name, ip_addr) + if response_app is not None: + return response_app(environ, start_response) # extras are injected into UI object and later available # in hooks executed by kallithea @@ -165,7 +105,7 @@ server_url = get_server_url(environ) extras = { 'ip': ip_addr, - 'username': username, + 'username': user.username, 'action': action, 'repository': repo_name, 'scm': 'git', @@ -182,14 +122,9 @@ log.debug('Repository path is %s', repo_path) # CHECK LOCKING only if it's not ANONYMOUS USER - if username != User.DEFAULT_USER: + if not user.is_default_user: log.debug('Checking locking on repository') - (make_lock, - locked, - locked_by) = self._check_locking_state( - environ=environ, action=action, - repo=repo_name, user_id=user.user_id - ) + make_lock, locked, locked_by = check_locking_state(action, repo_name, user) # store the make_lock for later evaluation in hooks extras.update({'make_lock': make_lock, 'locked_by': locked_by}) @@ -202,7 +137,7 @@ try: self._handle_githooks(repo_name, action, baseui, environ) log.info('%s action on Git repo "%s" by "%s" from %s', - action, str_repo_name, safe_str(username), ip_addr) + action, str_repo_name, safe_str(user.username), ip_addr) app = self.__make_app(repo_name, repo_path, extras) result = app(environ, start_response) if action == 'push': @@ -227,7 +162,7 @@ from kallithea.lib.middleware.pygrack import make_wsgi_app app = make_wsgi_app( repo_root=safe_str(self.basepath), - repo_name=repo_name, + repo_name=safe_unicode(repo_name), extras=extras, ) return app @@ -247,9 +182,6 @@ return repo_name - def __get_user(self, username): - return User.get_by_username(username) - def __get_action(self, environ): """ Maps git request commands into a pull or push command. @@ -290,16 +222,15 @@ _hooks = dict(baseui.configitems('hooks')) or {} if action == 'pull': # stupid git, emulate pre-pull hook ! - pre_pull(ui=baseui, repo=_repo._repo) - if action == 'pull' and _hooks.get(Ui.HOOK_PULL): + pull_lock_handling(ui=baseui, repo=_repo._repo) + if action == 'pull' and _hooks.get(Ui.HOOK_PULL_LOG): log_pull_action(ui=baseui, repo=_repo._repo) - def __inject_extras(self, repo_path, baseui, extras={}): + def __inject_extras(self, repo_path, baseui, extras=None): """ Injects some extra params into baseui instance :param baseui: baseui instance :param extras: dict with extra params to put into baseui """ - - _set_extras(extras) + _set_extras(extras or {}) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/middleware/simplehg.py --- a/kallithea/lib/middleware/simplehg.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/middleware/simplehg.py Thu Jun 07 01:46:02 2018 +0200 @@ -32,18 +32,15 @@ import logging import traceback -from paste.httpheaders import REMOTE_USER, AUTH_TYPE from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \ - HTTPNotAcceptable -from kallithea.model.db import User + HTTPNotAcceptable, HTTPBadRequest -from kallithea.lib.utils2 import safe_str, safe_unicode, fix_PATH, get_server_url,\ +from kallithea.lib.utils2 import safe_str, safe_unicode, fix_PATH, get_server_url, \ _set_extras -from kallithea.lib.base import BaseVCSController, WSGIResultCloseCallback +from kallithea.lib.base import BaseVCSController, WSGIResultCloseCallback, check_locking_state from kallithea.lib.utils import make_ui, is_valid_repo, ui_sections from kallithea.lib.vcs.utils.hgcompat import RepoError, hgweb_mod from kallithea.lib.exceptions import HTTPLockedRC -from kallithea.lib import auth_modules log = logging.getLogger(__name__) @@ -71,11 +68,8 @@ def _handle_request(self, environ, start_response): if not is_mercurial(environ): return self.application(environ, start_response) - if not self._check_ssl(environ): - return HTTPNotAcceptable('SSL REQUIRED !')(environ, start_response) ip_addr = self._get_ip_addr(environ) - username = None # skip passing error to error controller environ['pylons.status_code_redirect'] = True @@ -99,71 +93,17 @@ #====================================================================== # GET ACTION PULL or PUSH #====================================================================== - action = self.__get_action(environ) + try: + action = self.__get_action(environ) + except HTTPBadRequest as e: + return e(environ, start_response) #====================================================================== - # CHECK ANONYMOUS PERMISSION + # CHECK PERMISSIONS #====================================================================== - if action in ['pull', 'push']: - anonymous_user = self.__get_user('default') - username = anonymous_user.username - if anonymous_user.active: - # ONLY check permissions if the user is activated - anonymous_perm = self._check_permission(action, anonymous_user, - repo_name, ip_addr) - else: - anonymous_perm = False - - if not anonymous_user.active or not anonymous_perm: - if not anonymous_user.active: - log.debug('Anonymous access is disabled, running ' - 'authentication') - - if not anonymous_perm: - log.debug('Not enough credentials to access this ' - 'repository as anonymous user') - - username = None - #============================================================== - # DEFAULT PERM FAILED OR ANONYMOUS ACCESS IS DISABLED SO WE - # NEED TO AUTHENTICATE AND ASK FOR AUTH USER PERMISSIONS - #============================================================== - - # try to auth based on environ, container auth methods - log.debug('Running PRE-AUTH for container based authentication') - pre_auth = auth_modules.authenticate('', '', environ) - if pre_auth is not None and pre_auth.get('username'): - username = pre_auth['username'] - log.debug('PRE-AUTH got %s as username', username) - - # If not authenticated by the container, running basic auth - if not username: - self.authenticate.realm = \ - safe_str(self.config['realm']) - result = self.authenticate(environ) - if isinstance(result, str): - AUTH_TYPE.update(environ, 'basic') - REMOTE_USER.update(environ, result) - username = result - else: - return result.wsgi_application(environ, start_response) - - #============================================================== - # CHECK PERMISSIONS FOR THIS REQUEST USING GIVEN USERNAME - #============================================================== - try: - user = self.__get_user(username) - if user is None or not user.active: - return HTTPForbidden()(environ, start_response) - username = user.username - except Exception: - log.error(traceback.format_exc()) - return HTTPInternalServerError()(environ, start_response) - - #check permissions for this repository - perm = self._check_permission(action, user, repo_name, ip_addr) - if not perm: - return HTTPForbidden()(environ, start_response) + user, response_app = self._authorize(environ, start_response, action, repo_name, ip_addr) + if response_app is not None: + return response_app(environ, start_response) # extras are injected into mercurial UI object and later available # in hg hooks executed by kallithea @@ -171,7 +111,7 @@ server_url = get_server_url(environ) extras = { 'ip': ip_addr, - 'username': username, + 'username': user.username, 'action': action, 'repository': repo_name, 'scm': 'hg', @@ -186,15 +126,15 @@ repo_path = os.path.join(safe_str(self.basepath), str_repo_name) log.debug('Repository path is %s', repo_path) + # A Mercurial HTTP server will see listkeys operations (bookmarks, + # phases and obsolescence marker) in a different request - we don't + # want to check locking on those + if environ['QUERY_STRING'] == 'cmd=listkeys': + pass # CHECK LOCKING only if it's not ANONYMOUS USER - if username != User.DEFAULT_USER: + elif not user.is_default_user: log.debug('Checking locking on repository') - (make_lock, - locked, - locked_by) = self._check_locking_state( - environ=environ, action=action, - repo=repo_name, user_id=user.user_id - ) + make_lock, locked, locked_by = check_locking_state(action, repo_name, user) # store the make_lock for later evaluation in hooks extras.update({'make_lock': make_lock, 'locked_by': locked_by}) @@ -206,7 +146,7 @@ try: log.info('%s action on Mercurial repo "%s" by "%s" from %s', - action, str_repo_name, safe_str(username), ip_addr) + action, str_repo_name, safe_str(user.username), ip_addr) app = self.__make_app(repo_path, baseui, extras) result = app(environ, start_response) if action == 'push': @@ -232,13 +172,21 @@ class HgWebWrapper(hgweb_mod.hgweb): # Work-around for Mercurial 3.6+ causing lock exceptions to be # thrown late - def _runwsgi(self, req, repo): + def _runwsgi(self, *args): try: - return super(HgWebWrapper, self)._runwsgi(req, repo) + return super(HgWebWrapper, self)._runwsgi(*args) except HTTPLockedRC as e: log.debug('Locked, response %s: %s', e.code, e.title) - req.respond(e.status, 'text/plain') - return '' + try: + req, res, repo = args + res.status = e.status + res.headers['Content-Type'] = 'text/plain' + res.setbodybytes('') + return res.sendresponse() + except ValueError: # wsgiresponse was introduced in Mercurial 4.6 (a88d68dc3ee8) + req, repo = args + req.respond(e.status, 'text/plain') + return '' return HgWebWrapper(repo_name, name=repo_name, baseui=baseui) @@ -259,34 +207,23 @@ return repo_name - def __get_user(self, username): - return User.get_by_username(username) - def __get_action(self, environ): """ - Maps mercurial request commands into a clone,pull or push command. - This should always return a valid command string + Maps mercurial request commands into a pull or push command. - :param environ: + Raises HTTPBadRequest if the request environment doesn't look like a hg client. """ - mapping = {'changegroup': 'pull', - 'changegroupsubset': 'pull', - 'stream_out': 'pull', - 'listkeys': 'pull', - 'unbundle': 'push', - 'pushkey': 'push', } + mapping = {'unbundle': 'push', + 'pushkey': 'push'} for qry in environ['QUERY_STRING'].split('&'): if qry.startswith('cmd'): cmd = qry.split('=')[-1] - if cmd in mapping: - return mapping[cmd] - - return 'pull' + return mapping.get(cmd, 'pull') - raise Exception('Unable to detect pull/push action !!' - 'Are you using non standard command or client ?') + # Note: the client doesn't get the helpful error message + raise HTTPBadRequest('Unable to detect pull/push action! Are you using non standard command or client?') - def __inject_extras(self, repo_path, baseui, extras={}): + def __inject_extras(self, repo_path, baseui, extras=None): """ Injects some extra params into baseui instance @@ -298,11 +235,11 @@ hgrc = os.path.join(repo_path, '.hg', 'hgrc') - repoui = make_ui('file', hgrc, False) + repoui = make_ui('file', hgrc) if repoui: - #overwrite our ui instance with the section from hgrc file + # overwrite our ui instance with the section from hgrc file for section in ui_sections: for k, v in repoui.configitems(section): baseui.setconfig(section, k, v) - _set_extras(extras) + _set_extras(extras or {}) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/page.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/lib/page.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,251 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +Custom paging classes +""" +import logging +import math +import re +from kallithea.config.routing import url +from webhelpers.html import literal, HTML +from webhelpers.paginate import Page as _Page + +log = logging.getLogger(__name__) + + +class Page(_Page): + """ + Custom pager to match rendering style with YUI paginator emitting Bootstrap paginators + """ + + def __init__(self, *args, **kwargs): + kwargs.setdefault('url', url.current) + _Page.__init__(self, *args, **kwargs) + + def _get_pos(self, cur_page, max_page, items): + edge = (items / 2) + 1 + if (cur_page <= edge): + radius = max(items / 2, items - cur_page) + elif (max_page - cur_page) < edge: + radius = (items - 1) - (max_page - cur_page) + else: + radius = items / 2 + + left = max(1, (cur_page - (radius))) + right = min(max_page, cur_page + (radius)) + return left, cur_page, right + + def _range(self, regexp_match): + """ + Return range of linked pages (e.g. '1 2 [3] 4 5 6 7 8'). + + Arguments: + + regexp_match + A "re" (regular expressions) match object containing the + radius of linked pages around the current page in + regexp_match.group(1) as a string + + This function is supposed to be called as a callable in + re.sub. + + """ + radius = int(regexp_match.group(1)) + + # Compute the first and last page number within the radius + # e.g. '1 .. 5 6 [7] 8 9 .. 12' + # -> leftmost_page = 5 + # -> rightmost_page = 9 + leftmost_page, _cur, rightmost_page = self._get_pos(self.page, + self.last_page, + (radius * 2) + 1) + nav_items = [] + + # Create a link to the first page (unless we are on the first page + # or there would be no need to insert '..' spacers) + if self.page != self.first_page and self.first_page < leftmost_page: + nav_items.append(HTML.li(self._pagerlink(self.first_page, self.first_page))) + + # Insert dots if there are pages between the first page + # and the currently displayed page range + if leftmost_page - self.first_page > 1: + # Wrap in a SPAN tag if nolink_attr is set + text_ = '..' + if self.dotdot_attr: + text_ = HTML.span(c=text_, **self.dotdot_attr) + nav_items.append(HTML.li(text_)) + + for thispage in xrange(leftmost_page, rightmost_page + 1): + # Highlight the current page number and do not use a link + text_ = str(thispage) + if thispage == self.page: + # Wrap in a SPAN tag if nolink_attr is set + if self.curpage_attr: + text_ = HTML.li(HTML.span(c=text_), **self.curpage_attr) + nav_items.append(text_) + # Otherwise create just a link to that page + else: + nav_items.append(HTML.li(self._pagerlink(thispage, text_))) + + # Insert dots if there are pages between the displayed + # page numbers and the end of the page range + if self.last_page - rightmost_page > 1: + text_ = '..' + # Wrap in a SPAN tag if nolink_attr is set + if self.dotdot_attr: + text_ = HTML.span(c=text_, **self.dotdot_attr) + nav_items.append(HTML.li(text_)) + + # Create a link to the very last page (unless we are on the last + # page or there would be no need to insert '..' spacers) + if self.page != self.last_page and rightmost_page < self.last_page: + nav_items.append(HTML.li(self._pagerlink(self.last_page, self.last_page))) + + #_page_link = url.current() + #nav_items.append(literal('' % (_page_link, str(int(self.page)+1)))) + #nav_items.append(literal('' % (_page_link, str(int(self.page)+1)))) + return self.separator.join(nav_items) + + def pager(self, format='
    $link_previous ~2~ $link_next
', page_param='page', partial_param='partial', + show_if_single_page=False, separator=' ', onclick=None, + symbol_first='<<', symbol_last='>>', + symbol_previous='<', symbol_next='>', + link_attr=None, + curpage_attr=None, + dotdot_attr=None, **kwargs): + self.curpage_attr = curpage_attr or {'class': 'active'} + self.separator = separator + self.pager_kwargs = kwargs + self.page_param = page_param + self.partial_param = partial_param + self.onclick = onclick + self.link_attr = link_attr or {'class': 'pager_link', 'rel': 'prerender'} + self.dotdot_attr = dotdot_attr or {'class': 'pager_dotdot'} + + # Don't show navigator if there is no more than one page + if self.page_count == 0 or (self.page_count == 1 and not show_if_single_page): + return '' + + from string import Template + # Replace ~...~ in token format by range of pages + result = re.sub(r'~(\d+)~', self._range, format) + + # Interpolate '%' variables + result = Template(result).safe_substitute({ + 'first_page': self.first_page, + 'last_page': self.last_page, + 'page': self.page, + 'page_count': self.page_count, + 'items_per_page': self.items_per_page, + 'first_item': self.first_item, + 'last_item': self.last_item, + 'item_count': self.item_count, + 'link_first': self.page > self.first_page and \ + self._pagerlink(self.first_page, symbol_first) or '', + 'link_last': self.page < self.last_page and \ + self._pagerlink(self.last_page, symbol_last) or '', + 'link_previous': HTML.li(self.previous_page and \ + self._pagerlink(self.previous_page, symbol_previous) \ + or HTML.a(symbol_previous)), + 'link_next': HTML.li(self.next_page and \ + self._pagerlink(self.next_page, symbol_next) \ + or HTML.a(symbol_next)) + }) + + return literal(result) + + +class RepoPage(Page): + + def __init__(self, collection, page=1, items_per_page=20, + item_count=None, **kwargs): + + """Create a "RepoPage" instance. special pager for paging + repository + """ + # TODO: call baseclass __init__ + self._url_generator = kwargs.pop('url', url.current) + + # Safe the kwargs class-wide so they can be used in the pager() method + self.kwargs = kwargs + + # Save a reference to the collection + self.original_collection = collection + + self.collection = collection + + # The self.page is the number of the current page. + # The first page has the number 1! + try: + self.page = int(page) # make it int() if we get it as a string + except (ValueError, TypeError): + log.error("Invalid page value: %r" % page) + self.page = 1 + + self.items_per_page = items_per_page + + # Unless the user tells us how many items the collections has + # we calculate that ourselves. + if item_count is not None: + self.item_count = item_count + else: + self.item_count = len(self.collection) + + # Compute the number of the first and last available page + if self.item_count > 0: + self.first_page = 1 + self.page_count = int(math.ceil(float(self.item_count) / + self.items_per_page)) + self.last_page = self.first_page + self.page_count - 1 + + # Make sure that the requested page number is the range of + # valid pages + if self.page > self.last_page: + self.page = self.last_page + elif self.page < self.first_page: + self.page = self.first_page + + # Note: the number of items on this page can be less than + # items_per_page if the last page is not full + self.first_item = max(0, (self.item_count) - (self.page * + items_per_page)) + self.last_item = ((self.item_count - 1) - items_per_page * + (self.page - 1)) + + self.items = list(self.collection[self.first_item:self.last_item + 1]) + + # Links to previous and next page + if self.page > self.first_page: + self.previous_page = self.page - 1 + else: + self.previous_page = None + + if self.page < self.last_page: + self.next_page = self.page + 1 + else: + self.next_page = None + + # No items available + else: + self.first_page = None + self.page_count = 0 + self.last_page = None + self.first_item = None + self.last_item = None + self.previous_page = None + self.next_page = None + self.items = [] + + # This is a subclass of the 'list' type. Initialise the list now. + list.__init__(self, reversed(self.items)) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/cache_keys.py --- a/kallithea/lib/paster_commands/cache_keys.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/paster_commands/cache_keys.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.lib.paster_commands.cache_keys ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -cleanup-keys paster command for Kallithea +cleanup-keys gearbox command for Kallithea This file was forked by the Kallithea project in July 2014. @@ -29,58 +29,44 @@ import os import sys -import logging +from kallithea.lib.paster_commands.common import BasePasterCommand from kallithea.model.meta import Session -from kallithea.lib.utils import BasePasterCommand +from kallithea.lib.utils2 import safe_str from kallithea.model.db import CacheInvalidation -# Add location of top level folder to sys.path -from os.path import dirname as dn -rc_path = dn(dn(dn(os.path.realpath(__file__)))) -sys.path.append(rc_path) - -log = logging.getLogger(__name__) - class Command(BasePasterCommand): - - max_args = 1 - min_args = 1 + "Kallithea: Utilities for managing caching of database content" - usage = "CONFIG_FILE" - group_name = "Kallithea" - takes_config_file = -1 - parser = BasePasterCommand.standard_parser(verbose=True) - summary = "Cache keys utils" - - def command(self): - #get SqlAlchemy session - self._init_session() + def take_action(self, args): _caches = CacheInvalidation.query().order_by(CacheInvalidation.cache_key).all() - if self.options.show: + if args.show: for c_obj in _caches: - print 'key:%s active:%s' % (c_obj.cache_key, c_obj.cache_active) - elif self.options.cleanup: + print 'key:%s active:%s' % (safe_str(c_obj.cache_key), c_obj.cache_active) + elif args.cleanup: for c_obj in _caches: Session().delete(c_obj) - print 'removing key:%s' % (c_obj.cache_key) - Session().commit() + print 'Removing key: %s' % (safe_str(c_obj.cache_key)) + Session().commit() else: - print 'nothing done exiting...' - sys.exit(0) + print 'Nothing done, exiting...' - def update_parser(self): - self.parser.add_option( + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument( '--show', action='store_true', dest='show', - help=("show existing cache keys with together with status") + help="show existing cache keys with together with status", ) - self.parser.add_option( + parser.add_argument( '--cleanup', action="store_true", dest="cleanup", - help="cleanup existing cache keys" + help="cleanup existing cache keys", ) + + return parser diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/celeryd.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/lib/paster_commands/celeryd.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +import argparse + +import kallithea +from kallithea.lib.paster_commands.common import BasePasterCommand +from kallithea.lib.utils2 import str2bool + +__all__ = ['Command'] + + +class Command(BasePasterCommand): + """Kallithea: Celery worker for asynchronous tasks""" + + # Starts the celery worker using configuration from a paste.deploy + # configuration file. + + def take_action(self, args): + if not kallithea.CELERY_ON: + raise Exception('Please set use_celery = true in .ini config ' + 'file before running celeryd') + + from kallithea.lib import celerypylons + cmd = celerypylons.worker.worker(celerypylons.app) + + celery_args = args.celery_args + if '--' in celery_args: + celery_args.remove('--') + + return cmd.run_from_argv('kallithea celery worker', celery_args) + + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument('celery_args', nargs=argparse.REMAINDER, + help="Pass extra options to Celery after a '--' separator", + ) + + return parser diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/cleanup.py --- a/kallithea/lib/paster_commands/cleanup.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/paster_commands/cleanup.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,14 +15,14 @@ kallithea.lib.paster_commands.cleanup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -cleanup-repos paster command for Kallithea +cleanup-repos gearbox command for Kallithea This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: :created_on: Jul 14, 2012 :author: marcink -:copyright: (c) 2013 RhodeCode GmbH. +:copyright: (c) 2013 RhodeCode GmbH, and others. :license: GPLv3, see LICENSE.md for more details. """ @@ -31,31 +31,16 @@ import sys import re import shutil -import logging import datetime -from kallithea.lib.utils import BasePasterCommand, ask_ok, REMOVED_REPO_PAT +from kallithea.lib.paster_commands.common import ask_ok, BasePasterCommand +from kallithea.lib.utils import REMOVED_REPO_PAT from kallithea.lib.utils2 import safe_str from kallithea.model.db import Ui -# Add location of top level folder to sys.path -from os.path import dirname as dn -rc_path = dn(dn(dn(os.path.realpath(__file__)))) -sys.path.append(rc_path) - -log = logging.getLogger(__name__) - class Command(BasePasterCommand): - - max_args = 1 - min_args = 1 - - usage = "CONFIG_FILE" - group_name = "Kallithea" - takes_config_file = -1 - parser = BasePasterCommand.standard_parser(verbose=True) - summary = "Cleanup deleted repos" + """Kallithea: Cleanup of backup files of deleted repositories""" def _parse_older_than(self, val): regex = re.compile(r'((?P\d+?)d)?((?P\d+?)h)?((?P\d+?)m)?((?P\d+?)s)?') @@ -76,13 +61,10 @@ :param name: """ - date_part = name[4:19] # 4:19 since we don't parse milisecods + date_part = name[4:19] # 4:19 since we don't parse milliseconds return datetime.datetime.strptime(date_part, '%Y%m%d_%H%M%S') - def command(self): - #get SqlAlchemy session - self._init_session() - + def take_action(self, args): repos_location = Ui.get_repos_location() to_remove = [] for dn_, dirs, f in os.walk(safe_str(repos_location)): @@ -99,10 +81,12 @@ self._extract_date(loc)]) else: dirs.append(loc) + if dirs: + print 'Scanning: %s' % dn_ - #filter older than (if present)! + # filter older than (if present)! now = datetime.datetime.now() - older_than = self.options.older_than + older_than = args.older_than if older_than: to_remove_filtered = [] older_than_date = self._parse_older_than(older_than) @@ -112,30 +96,30 @@ to_remove_filtered.append([name, date_]) to_remove = to_remove_filtered - print >> sys.stdout, 'removing %s deleted repos older than %s (%s)' \ + print 'Removing %s deleted repos older than %s (%s)' \ % (len(to_remove), older_than, older_than_date) else: - print >> sys.stdout, 'removing all [%s] deleted repos' \ - % len(to_remove) - if self.options.dont_ask or not to_remove: + print 'Removing all %s deleted repos' % len(to_remove) + if args.dont_ask or not to_remove: # don't ask just remove ! remove = True else: remove = ask_ok('the following repositories will be deleted completely:\n%s\n' 'are you sure you want to remove them [y/n]?' - % ', \n'.join(['%s removed on %s' - % (safe_str(x[0]), safe_str(x[1])) for x in to_remove])) + % '\n'.join(['%s removed on %s' % (safe_str(x[0]), safe_str(x[1])) + for x in to_remove])) if remove: for path, date_ in to_remove: - print >> sys.stdout, 'removing repository %s' % path + print 'Removing repository %s' % path shutil.rmtree(path) else: - print 'nothing done exiting...' - sys.exit(0) + print 'Nothing done, exiting...' - def update_parser(self): - self.parser.add_option( + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument( '--older-than', action='store', dest='older_than', @@ -148,9 +132,11 @@ "removed more than 30 days ago.") ) - self.parser.add_option( + parser.add_argument( '--dont-ask', action="store_true", dest="dont_ask", help="remove repositories without asking for confirmation." ) + + return parser diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/common.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/lib/paster_commands/common.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +kallithea.lib.paster_commands.common +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Common code for gearbox commands. + +This file was forked by the Kallithea project in July 2014. +Original author and date, and relevant copyright and licensing information is below: +:created_on: Apr 18, 2010 +:author: marcink +:copyright: (c) 2013 RhodeCode GmbH, and others. +:license: GPLv3, see LICENSE.md for more details. +""" + +import os +import sys +import logging.config + +import paste.deploy +import gearbox.command + +import kallithea.config.middleware +import kallithea.model.base +import kallithea.lib.utils2 +import kallithea.lib.utils + + +def ask_ok(prompt, retries=4, complaint='Yes or no please!'): + while True: + ok = raw_input(prompt) + if ok in ('y', 'ye', 'yes'): + return True + if ok in ('n', 'no', 'nop', 'nope'): + return False + retries = retries - 1 + if retries < 0: + raise IOError + print complaint + + +class BasePasterCommand(gearbox.command.Command): + """ + Abstract Base Class for gearbox commands. + """ + + # override to control how much get_parser and run should do: + takes_config_file = True + requires_db_session = True + config = None # set to the actual config object in run if takes_config_file is true + + def run(self, args): + """ + Overrides Command.run + + If needed by the command, read config file and initialize database before running. + """ + if self.takes_config_file: + path_to_ini_file = os.path.realpath(args.config_file) + self.config = paste.deploy.appconfig('config:' + path_to_ini_file) + # TODO: also initialize kallithea.CONFIG? + logging.config.fileConfig(path_to_ini_file) + + if self.requires_db_session: + kallithea.config.middleware.make_app_without_logging(self.config.global_conf, **self.config.local_conf) + # *now*, tg.config has been set and could be used ... but we just keep using self.config + kallithea.lib.utils.setup_cache_regions(self.config) + + return super(BasePasterCommand, self).run(args) + + def get_parser(self, prog_name): + parser = super(BasePasterCommand, self).get_parser(prog_name) + + if self.takes_config_file: + parser.add_argument("-c", "--config", + help='Kallithea .ini file with configuration of database etc', + dest='config_file', required=True) + + return parser + + def error(self, msg, exitcode=1): + """Write error message and exit""" + sys.stderr.write('%s\n' % msg) + raise SystemExit(exitcode) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/install_iis.py --- a/kallithea/lib/paster_commands/install_iis.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/paster_commands/install_iis.py Thu Jun 07 01:46:02 2018 +0200 @@ -1,43 +1,33 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +kallithea.lib.paster_commands.install_iis +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +IIS installation tools for Kallithea +""" + + import os import sys -from paste.script.appinstall import AbstractInstallCommand -from paste.script.command import BadCommand -# Add location of top level folder to sys.path -from os.path import dirname as dn -rc_path = dn(dn(dn(os.path.realpath(__file__)))) -sys.path.append(rc_path) +from kallithea.lib.paster_commands.common import BasePasterCommand -class Command(AbstractInstallCommand): - default_verbosity = 1 - max_args = 1 - min_args = 1 - summary = 'Setup IIS given a config file' - usage = 'CONFIG_FILE' - description = ''' - Script for installing into IIS using isapi-wsgi. - ''' - parser = AbstractInstallCommand.standard_parser( - simulate=True, quiet=True, interactive=True) - parser.add_option('--virtualdir', - action='store', - dest='virtualdir', - default='/', - help='The virtual folder to install into on IIS') - - def command(self): - config_spec = self.args[0] - if not config_spec.startswith('config:'): - config_spec = 'config:' + config_spec - config_file = config_spec[len('config:'):].split('#', 1)[0] - config_file = os.path.join(os.getcwd(), config_file) - try: - import isapi_wsgi - except ImportError: - raise BadCommand('missing requirement: isapi-wsgi not installed') - - file = '''import sys +dispath_py_template = '''\ +# Created by Kallithea 'gearbox install-iis' +import sys if hasattr(sys, "isapidllhandle"): import win32traceutil @@ -71,15 +61,38 @@ HandleCommandLine(params) ''' - outdata = file % { - 'inifile': config_file.replace('\\', '\\\\'), - 'virtualdir': self.options.virtualdir - } + +class Command(BasePasterCommand): + '''Kallithea: Install into IIS using isapi-wsgi''' + + requires_db_session = False + + def take_action(self, args): + config_file = os.path.abspath(args.config_file) + try: + import isapi_wsgi + except ImportError: + self.error('missing requirement: isapi-wsgi not installed') dispatchfile = os.path.join(os.getcwd(), 'dispatch.py') - self.ensure_file(dispatchfile, outdata, False) - print 'generating', dispatchfile + print 'Writing %s' % dispatchfile + with open(dispatchfile, 'w') as f: + f.write(dispath_py_template % { + 'inifile': config_file.replace('\\', '\\\\'), + 'virtualdir': args.virtualdir, + }) - print ('run \'python "%s" install\' with administrative privileges ' + print ('Run \'python "%s" install\' with administrative privileges ' 'to generate the _dispatch.dll file and install it into the ' 'default web site') % (dispatchfile,) + + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument('--virtualdir', + action='store', + dest='virtualdir', + default='/', + help='The virtual folder to install into on IIS') + + return parser diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/ishell.py --- a/kallithea/lib/paster_commands/ishell.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/paster_commands/ishell.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.lib.paster_commands.ishell ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -interactive shell paster command for Kallithea +interactive shell gearbox command for Kallithea This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: @@ -28,41 +28,20 @@ import os import sys -import logging - -from kallithea.lib.utils import BasePasterCommand -# Add location of top level folder to sys.path -from os.path import dirname as dn -rc_path = dn(dn(dn(os.path.realpath(__file__)))) -sys.path.append(rc_path) +# imports, used in IPython shell +import time +import shutil +import datetime +from kallithea.model.db import * -log = logging.getLogger(__name__) +from kallithea.lib.paster_commands.common import BasePasterCommand class Command(BasePasterCommand): - - max_args = 1 - min_args = 1 - - usage = "CONFIG_FILE" - group_name = "Kallithea" - takes_config_file = -1 - parser = BasePasterCommand.standard_parser(verbose=True) - summary = "Interactive shell" + "Kallithea: Interactive Python shell" - def command(self): - #get SqlAlchemy session - self._init_session() - - # imports, used in ipython shell - import os - import sys - import time - import shutil - import datetime - from kallithea.model.db import * - + def take_action(self, args): try: from IPython import embed from IPython.config.loader import Config @@ -70,8 +49,5 @@ cfg.InteractiveShellEmbed.confirm_exit = False embed(config=cfg, banner1="Kallithea IShell.") except ImportError: - print 'ipython installation required for ishell' + print 'Kallithea ishell requires the IPython Python package' sys.exit(-1) - - def update_parser(self): - pass diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/make_config.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/lib/paster_commands/make_config.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +kallithea.lib.paster_commands.make_config +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +make-config gearbox command for Kallithea + +:license: GPLv3, see LICENSE.md for more details. +""" + + +import os +import sys +import uuid +import argparse +from collections import defaultdict + +import mako.exceptions + +TMPL = 'template.ini.mako' +here = os.path.dirname(os.path.abspath(__file__)) + +from kallithea.lib.paster_commands.common import BasePasterCommand +from kallithea.lib import inifile + + +class Command(BasePasterCommand): + """Kallithea: Create a new config file + + make-config is part of a two-phase installation process (the + second phase is setup-app). make-config creates a bare configuration + file (possibly filling in defaults from the extra + variables you give). + + The first key=value arguments are used to customize the Mako variables that + are shown with --show-defaults. The following settings will be + patched/inserted in the [app:main] section ... until another section name + is specified and change where the following values go. + """ + + takes_config_file = False # at least not an existing one ... + + def take_action(self, args): + _run(args) + + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument('config_file', nargs='?', + help='application config file to write') + + parser.add_argument('custom', nargs=argparse.REMAINDER, + help='custom values for the config file') + + parser.add_argument('--show-defaults', action='store_true', + help="Show the default values that can be overridden") + + return parser + + +def _run(args): + if args.config_file is None: + if not args.show_defaults: + raise ValueError("Missing argument: config_file") + else: + if args.show_defaults: + raise ValueError("Can't specify both config_file and --show_defaults") + + mako_variable_values = {} + ini_settings = defaultdict(dict) + + section_name = None + for parameter in args.custom: + parts = parameter.split('=', 1) + if len(parts) == 1 and parameter.startswith('[') and parameter.endswith(']'): + section_name = parameter + elif len(parts) == 2: + key, value = parts + if section_name is None and key in inifile.default_variables: + mako_variable_values[key] = value + else: + if section_name is None: + section_name = '[app:main]' + ini_settings[section_name][key] = value + else: + raise ValueError("Invalid name=value parameter %r" % parameter) + + if args.show_defaults: + for key, value in inifile.default_variables.items(): + value = mako_variable_values.get(key, value) + print '%s=%s' % (key, value) + sys.exit(0) + + # use default that cannot be replaced + mako_variable_values.update({ + 'uuid': lambda: uuid.uuid4().hex, + }) + try: + config_file = os.path.abspath(args.config_file) + inifile.create(config_file, mako_variable_values, ini_settings) + print 'Wrote new config file in %s' % config_file + + except Exception: + print mako.exceptions.text_error_template().render() diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/make_index.py --- a/kallithea/lib/paster_commands/make_index.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/paster_commands/make_index.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.lib.paster_commands.make_index ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -make-index paster command for Kallithea +make-index gearbox command for Kallithea This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: @@ -23,50 +23,33 @@ :author: marcink :copyright: (c) 2013 RhodeCode GmbH, and others. :license: GPLv3, see LICENSE.md for more details. - """ import os import sys -import logging +from os.path import dirname from string import strip from kallithea.model.repo import RepoModel -from kallithea.lib.utils import BasePasterCommand, load_rcextensions - -# Add location of top level folder to sys.path -from os.path import dirname as dn -rc_path = dn(dn(dn(os.path.realpath(__file__)))) -sys.path.append(rc_path) +from kallithea.lib.paster_commands.common import BasePasterCommand +from kallithea.lib.utils import load_rcextensions class Command(BasePasterCommand): - - max_args = 1 - min_args = 1 + "Kallithea: Create or update full text search index" - usage = "CONFIG_FILE" - group_name = "Kallithea" - takes_config_file = -1 - parser = BasePasterCommand.standard_parser(verbose=True) - summary = "Creates or updates full text search index" + def take_action(self, args): + index_location = self.config['index_dir'] + load_rcextensions(self.config['here']) - def command(self): - logging.config.fileConfig(self.path_to_ini_file) - #get SqlAlchemy session - self._init_session() - from pylons import config - index_location = config['index_dir'] - load_rcextensions(config['here']) + repo_location = args.repo_location \ + if args.repo_location else RepoModel().repos_path + repo_list = map(strip, args.repo_list.split(',')) \ + if args.repo_list else None - repo_location = self.options.repo_location \ - if self.options.repo_location else RepoModel().repos_path - repo_list = map(strip, self.options.repo_list.split(',')) \ - if self.options.repo_list else None - - repo_update_list = map(strip, self.options.repo_update_list.split(',')) \ - if self.options.repo_update_list else None + repo_update_list = map(strip, args.repo_update_list.split(',')) \ + if args.repo_update_list else None #====================================================================== # WHOOSH DAEMON @@ -74,39 +57,42 @@ from kallithea.lib.pidlock import LockHeld, DaemonLock from kallithea.lib.indexers.daemon import WhooshIndexingDaemon try: - l = DaemonLock(file_=os.path.join(dn(dn(index_location)), - 'make_index.lock')) + l = DaemonLock(os.path.join(index_location, 'make_index.lock')) WhooshIndexingDaemon(index_location=index_location, repo_location=repo_location, repo_list=repo_list, - repo_update_list=repo_update_list)\ - .run(full_index=self.options.full_index) + repo_update_list=repo_update_list) \ + .run(full_index=args.full_index) l.release() except LockHeld: sys.exit(1) - def update_parser(self): - self.parser.add_option('--repo-location', + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument('--repo-location', action='store', dest='repo_location', help="Specifies repositories location to index OPTIONAL", ) - self.parser.add_option('--index-only', + parser.add_argument('--index-only', action='store', dest='repo_list', help="Specifies a comma separated list of repositories " "to build index on. If not given all repositories " "are scanned for indexing. OPTIONAL", ) - self.parser.add_option('--update-only', + parser.add_argument('--update-only', action='store', dest='repo_update_list', help="Specifies a comma separated list of repositories " "to re-build index on. OPTIONAL", ) - self.parser.add_option('-f', + parser.add_argument('-f', action='store_true', dest='full_index', help="Specifies that index should be made full i.e" " destroy old and build from scratch", default=False) + + return parser diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/make_rcextensions.py --- a/kallithea/lib/paster_commands/make_rcextensions.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/paster_commands/make_rcextensions.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.lib.paster_commands.make_rcextensions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -make-rcext paster command for Kallithea +make-rcext gearbox command for Kallithea This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: @@ -23,7 +23,6 @@ :author: marcink :copyright: (c) 2013 RhodeCode GmbH, and others. :license: GPLv3, see LICENSE.md for more details. - """ @@ -31,43 +30,30 @@ import sys import pkg_resources -from kallithea.lib.utils import BasePasterCommand, ask_ok - -# Add location of top level folder to sys.path -from os.path import dirname as dn -rc_path = dn(dn(dn(os.path.realpath(__file__)))) -sys.path.append(rc_path) +from kallithea.lib.paster_commands.common import ask_ok, BasePasterCommand class Command(BasePasterCommand): - - max_args = 1 - min_args = 1 + """Kallithea: Write template file for extending Kallithea in Python - group_name = "Kallithea" - takes_config_file = -1 - parser = BasePasterCommand.standard_parser(verbose=True) - summary = "Write template file for extending Kallithea in Python." - usage = "CONFIG_FILE" - description = '''\ - A rcextensions directory with a __init__.py file will be created next to - the ini file. Local customizations in that file will survive upgrades. - The file contains instructions on how it can be customized. - ''' + A rcextensions directory with a __init__.py file will be created next to + the ini file. Local customizations in that file will survive upgrades. + The file contains instructions on how it can be customized. + """ - def command(self): - from pylons import config + requires_db_session = False - here = config['here'] + def take_action(self, args): + here = self.config['here'] content = pkg_resources.resource_string( 'kallithea', os.path.join('config', 'rcextensions', '__init__.py') ) ext_file = os.path.join(here, 'rcextensions', '__init__.py') if os.path.exists(ext_file): - msg = ('Extension file already exists, do you want ' - 'to overwrite it ? [y/n]') + msg = ('Extension file %s already exists, do you want ' + 'to overwrite it ? [y/n]') % ext_file if not ask_ok(msg): - print 'Nothing done...' + print 'Nothing done, exiting...' return dirname = os.path.dirname(ext_file) @@ -76,6 +62,3 @@ with open(ext_file, 'wb') as f: f.write(content) print 'Wrote new extensions file to %s' % ext_file - - def update_parser(self): - pass diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/repo_scan.py --- a/kallithea/lib/paster_commands/repo_scan.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/paster_commands/repo_scan.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.lib.paster_commands.repo_scan ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -repo-scan paster command for Kallithea +repo-scan gearbox command for Kallithea This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: @@ -28,47 +28,39 @@ import os import sys -import logging from kallithea.model.scm import ScmModel -from kallithea.lib.utils import BasePasterCommand, repo2db_mapper - -# Add location of top level folder to sys.path -from os.path import dirname as dn -rc_path = dn(dn(dn(os.path.realpath(__file__)))) -sys.path.append(rc_path) - -log = logging.getLogger(__name__) +from kallithea.lib.paster_commands.common import BasePasterCommand +from kallithea.lib.utils import repo2db_mapper class Command(BasePasterCommand): - - max_args = 1 - min_args = 1 + """Kallithea: Scan file system for repositories - usage = "CONFIG_FILE" - group_name = "Kallithea" - takes_config_file = -1 - parser = BasePasterCommand.standard_parser(verbose=True) - summary = "Rescan default location for new repositories" + Search under the repository root configured in the database, + all new repositories, and report missing ones with an option of removing them. + """ - def command(self): - #get SqlAlchemy session - self._init_session() - rm_obsolete = self.options.delete_obsolete + def take_action(self, args): + rm_obsolete = args.delete_obsolete print 'Now scanning root location for new repos ...' added, removed = repo2db_mapper(ScmModel().repo_scan(), remove_obsolete=rm_obsolete) - added = ', '.join(added) or '-' - removed = ', '.join(removed) or '-' print 'Scan completed.' - print 'Added: %s' % added - print 'Removed: %s' % removed + if added: + print 'Added: %s' % ', '.join(added) + if removed: + print '%s: %s' % ('Removed' if rm_obsolete else 'Missing', + ', '.join(removed)) - def update_parser(self): - self.parser.add_option( + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument( '--delete-obsolete', action='store_true', help="Use this flag do delete repositories that are " "present in Kallithea database but not on the filesystem", ) + + return parser diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/setup_db.py --- a/kallithea/lib/paster_commands/setup_db.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/paster_commands/setup_db.py Thu Jun 07 01:46:02 2018 +0200 @@ -1,112 +1,117 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +kallithea.lib.paster_commands.setup_db +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Databaset setup gearbox command for Kallithea +""" + + import os import sys -from paste.script.appinstall import AbstractInstallCommand -from paste.script.command import BadCommand -from paste.deploy import appconfig +import paste.deploy -# Add location of top level folder to sys.path -from os.path import dirname as dn -rc_path = dn(dn(dn(os.path.realpath(__file__)))) -sys.path.append(rc_path) +import kallithea +from kallithea.lib.db_manage import DbManage +from kallithea.lib.paster_commands.common import BasePasterCommand +from kallithea.model.meta import Session -class Command(AbstractInstallCommand): - - default_verbosity = 1 - max_args = 1 - min_args = 1 - summary = "Setup an application, given a config file" - usage = "CONFIG_FILE" - group_name = "Kallithea" - - description = """\ +# This is almost like SetupAppCommand ... but we have to pass options and it is +# thus simpler to drop websetup and reimplement everything +class Command(BasePasterCommand): + """Kallithea: Configure the database specified in the .ini file Setup Kallithea according to its configuration file. This is the second part of a two-phase web application installation - process (the first phase is prepare-app). The setup process - consist of things like setting up databases, creating super user + process (the first phase is prepare-app). The setup process + consist of things like setting up databases and creating the admin user """ - parser = AbstractInstallCommand.standard_parser( - simulate=True, quiet=True, interactive=True) - parser.add_option('--user', - action='store', - dest='username', - default=None, - help='Admin Username') - parser.add_option('--email', - action='store', - dest='email', - default=None, - help='Admin Email') - parser.add_option('--password', - action='store', - dest='password', - default=None, - help='Admin password min 6 chars') - parser.add_option('--repos', - action='store', - dest='repos_location', - default=None, - help='Absolute path to repositories location') - parser.add_option('--name', - action='store', - dest='section_name', - default=None, - help='The name of the section to set up (default: app:main)') - parser.add_option('--force-yes', - action='store_true', - dest='force_ask', - default=None, - help='Force yes to every question') - parser.add_option('--force-no', - action='store_false', - dest='force_ask', - default=None, - help='Force no to every question') - parser.add_option('--public-access', - action='store_true', - dest='public_access', - default=None, - help='Enable public access on this installation (default)') - parser.add_option('--no-public-access', - action='store_false', - dest='public_access', - default=None, - help='Disable public access on this installation ') - def command(self): - config_spec = self.args[0] - section = self.options.section_name - if section is None: - if '#' in config_spec: - config_spec, section = config_spec.split('#', 1) - else: - section = 'main' - if not ':' in section: - plain_section = section - section = 'app:' + section + def get_description(self): + return self.__doc__.splitlines()[0] + + requires_db_session = False # only available after this command has been run + + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument('--user', + action='store', + dest='username', + default=None, + help='Admin Username') + parser.add_argument('--email', + action='store', + dest='email', + default=None, + help='Admin Email') + parser.add_argument('--password', + action='store', + dest='password', + default=None, + help='Admin password min 6 chars') + parser.add_argument('--repos', + action='store', + dest='repos_location', + default=None, + help='Absolute path to repositories location') + parser.add_argument('--force-yes', + action='store_true', + dest='force_ask', + default=None, + help='Force yes to every question') + parser.add_argument('--force-no', + action='store_false', + dest='force_ask', + default=None, + help='Force no to every question') + parser.add_argument('--public-access', + action='store_true', + dest='public_access', + default=None, + help='Enable public access on this installation (default)') + parser.add_argument('--no-public-access', + action='store_false', + dest='public_access', + default=None, + help='Disable public access on this installation ') + + return parser + + def take_action(self, opts): + dbconf = self.config['sqlalchemy.url'] + dbmanage = DbManage(dbconf=dbconf, root=self.config['here'], + tests=False, cli_args=vars(opts)) + dbmanage.create_tables(override=True) + opts = dbmanage.config_prompt(None) + dbmanage.create_settings(opts) + dbmanage.create_default_user() + dbmanage.admin_prompt() + dbmanage.create_permissions() + dbmanage.populate_default_permissions() + Session().commit() + + # initial repository scan + kallithea.config.middleware.make_app_without_logging( + self.config.global_conf, **self.config.local_conf) + added, _ = kallithea.lib.utils.repo2db_mapper(kallithea.model.scm.ScmModel().repo_scan()) + if added: + print 'Initial repository scan: added following repositories:' + print '\t','\n\t'.join(added) else: - plain_section = section.split(':', 1)[0] - if not config_spec.startswith('config:'): - config_spec = 'config:' + config_spec - if plain_section != 'main': - config_spec += '#' + plain_section - config_file = config_spec[len('config:'):].split('#', 1)[0] - config_file = os.path.join(os.getcwd(), config_file) - self.logging_file_config(config_file) - conf = appconfig(config_spec, relative_to=os.getcwd()) - ep_name = conf.context.entry_point_name - ep_group = conf.context.protocol - dist = conf.context.distribution - if dist is None: - raise BadCommand( - "The section %r is not the application (probably a filter). " - "You should add #section_name, where section_name is the " - "section that configures your application" % plain_section) - installer = self.get_installer(dist, ep_group, ep_name) - installer.setup_config( - self, config_file, section, self.sysconfig_install_vars(installer)) - self.call_sysconfig_functions( - 'post_setup_hook', installer, config_file) + print 'Initial repository scan: no repositories found.' print 'Database set up successfully.' diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/template.ini.mako --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/lib/paster_commands/template.ini.mako Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,645 @@ +## -*- coding: utf-8 -*- +<%text>################################################################################ +<%text>################################################################################ +# Kallithea - config file generated with kallithea-config # +# # +# The %(here)s variable will be replaced with the parent directory of this file# +<%text>################################################################################ +<%text>################################################################################ + +[DEFAULT] + +<%text>################################################################################ +<%text>## Email settings ## +<%text>## ## +<%text>## Refer to the documentation ("Email settings") for more details. ## +<%text>## ## +<%text>## It is recommended to use a valid sender address that passes access ## +<%text>## validation and spam filtering in mail servers. ## +<%text>################################################################################ + +<%text>## 'From' header for application emails. You can optionally add a name. +<%text>## Default: +#app_email_from = Kallithea +<%text>## Examples: +#app_email_from = Kallithea +#app_email_from = kallithea-noreply@example.com + +<%text>## Subject prefix for application emails. +<%text>## A space between this prefix and the real subject is automatically added. +<%text>## Default: +#email_prefix = +<%text>## Example: +#email_prefix = [Kallithea] + +<%text>## Recipients for error emails and fallback recipients of application mails. +<%text>## Multiple addresses can be specified, comma-separated. +<%text>## Only addresses are allowed, do not add any name part. +<%text>## Default: +#email_to = +<%text>## Examples: +#email_to = admin@example.com +#email_to = admin@example.com,another_admin@example.com +email_to = + +<%text>## 'From' header for error emails. You can optionally add a name. +<%text>## Default: (none) +<%text>## Examples: +#error_email_from = Kallithea Errors +#error_email_from = kallithea_errors@example.com +error_email_from = + +<%text>## SMTP server settings +<%text>## If specifying credentials, make sure to use secure connections. +<%text>## Default: Send unencrypted unauthenticated mails to the specified smtp_server. +<%text>## For "SSL", use smtp_use_ssl = true and smtp_port = 465. +<%text>## For "STARTTLS", use smtp_use_tls = true and smtp_port = 587. +smtp_server = +#smtp_username = +#smtp_password = +smtp_port = +#smtp_use_ssl = false +#smtp_use_tls = false + +%if http_server != 'uwsgi': +<%text>## Entry point for 'gearbox serve' +[server:main] +host = ${host} +port = ${port} + +%if http_server == 'gearbox': +<%text>## Gearbox default web server ## +use = egg:gearbox#wsgiref +<%text>## nr of worker threads to spawn +threadpool_workers = 1 +<%text>## max request before thread respawn +threadpool_max_requests = 100 +<%text>## option to use threads of process +use_threadpool = true + +%elif http_server == 'gevent': +<%text>## Gearbox gevent web server ## +use = egg:gearbox#gevent + +%elif http_server == 'waitress': +<%text>## WAITRESS ## +use = egg:waitress#main +<%text>## number of worker threads +threads = 1 +<%text>## MAX BODY SIZE 100GB +max_request_body_size = 107374182400 +<%text>## use poll instead of select, fixes fd limits, may not work on old +<%text>## windows systems. +#asyncore_use_poll = True + +%elif http_server == 'gunicorn': +<%text>## GUNICORN ## +use = egg:gunicorn#main +<%text>## number of process workers. You must set `instance_id = *` when this option +<%text>## is set to more than one worker +workers = 4 +<%text>## process name +proc_name = kallithea +<%text>## type of worker class, one of sync, eventlet, gevent, tornado +<%text>## recommended for bigger setup is using of of other than sync one +worker_class = sync +max_requests = 1000 +<%text>## amount of time a worker can handle request before it gets killed and +<%text>## restarted +timeout = 3600 + +%endif +%else: +<%text>## UWSGI ## +<%text>## run with uwsgi --ini-paste-logged +[uwsgi] +socket = /tmp/uwsgi.sock +master = true +http = ${host}:${port} + +<%text>## set as daemon and redirect all output to file +#daemonize = ./uwsgi_kallithea.log + +<%text>## master process PID +pidfile = ./uwsgi_kallithea.pid + +<%text>## stats server with workers statistics, use uwsgitop +<%text>## for monitoring, `uwsgitop 127.0.0.1:1717` +stats = 127.0.0.1:1717 +memory-report = true + +<%text>## log 5XX errors +log-5xx = true + +<%text>## Set the socket listen queue size. +listen = 128 + +<%text>## Gracefully Reload workers after the specified amount of managed requests +<%text>## (avoid memory leaks). +max-requests = 1000 + +<%text>## enable large buffers +buffer-size = 65535 + +<%text>## socket and http timeouts ## +http-timeout = 3600 +socket-timeout = 3600 + +<%text>## Log requests slower than the specified number of milliseconds. +log-slow = 10 + +<%text>## Exit if no app can be loaded. +need-app = true + +<%text>## Set lazy mode (load apps in workers instead of master). +lazy = true + +<%text>## scaling ## +<%text>## set cheaper algorithm to use, if not set default will be used +cheaper-algo = spare + +<%text>## minimum number of workers to keep at all times +cheaper = 1 + +<%text>## number of workers to spawn at startup +cheaper-initial = 1 + +<%text>## maximum number of workers that can be spawned +workers = 4 + +<%text>## how many workers should be spawned at a time +cheaper-step = 1 + +%endif +<%text>## middleware for hosting the WSGI application under a URL prefix +#[filter:proxy-prefix] +#use = egg:PasteDeploy#prefix +#prefix = / + +[app:main] +use = egg:kallithea +<%text>## enable proxy prefix middleware +#filter-with = proxy-prefix + +full_stack = true +static_files = true + +<%text>## Internationalization (see setup documentation for details) +<%text>## By default, the language requested by the browser is used if available. +#i18n.enable = false +<%text>## Fallback language, empty for English (valid values are the names of subdirectories in kallithea/i18n): +i18n.lang = + +cache_dir = %(here)s/data +index_dir = %(here)s/data/index + +<%text>## uncomment and set this path to use archive download cache +archive_cache_dir = %(here)s/tarballcache + +<%text>## change this to unique ID for security +app_instance_uuid = ${uuid()} + +<%text>## cut off limit for large diffs (size in bytes) +cut_off_limit = 256000 + +<%text>## force https in Kallithea, fixes https redirects, assumes it's always https +force_https = false + +<%text>## use Strict-Transport-Security headers +use_htsts = false + +<%text>## number of commits stats will parse on each iteration +commit_parse_limit = 25 + +<%text>## path to git executable +git_path = git + +<%text>## git rev filter option, --all is the default filter, if you need to +<%text>## hide all refs in changelog switch this to --branches --tags +#git_rev_filter = --branches --tags + +<%text>## RSS feed options +rss_cut_off_limit = 256000 +rss_items_per_page = 10 +rss_include_diff = false + +<%text>## options for showing and identifying changesets +show_sha_length = 12 +show_revision_number = false + +<%text>## Canonical URL to use when creating full URLs in UI and texts. +<%text>## Useful when the site is available under different names or protocols. +<%text>## Defaults to what is provided in the WSGI environment. +#canonical_url = https://kallithea.example.com/repos + +<%text>## gist URL alias, used to create nicer urls for gist. This should be an +<%text>## url that does rewrites to _admin/gists/. +<%text>## example: http://gist.example.com/{gistid}. Empty means use the internal +<%text>## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/ +gist_alias_url = + +<%text>## white list of API enabled controllers. This allows to add list of +<%text>## controllers to which access will be enabled by api_key. eg: to enable +<%text>## api access to raw_files put `FilesController:raw`, to enable access to patches +<%text>## add `ChangesetController:changeset_patch`. This list should be "," separated +<%text>## Syntax is :. Check debug logs for generated names +<%text>## Recommended settings below are commented out: +api_access_controllers_whitelist = +# ChangesetController:changeset_patch, +# ChangesetController:changeset_raw, +# FilesController:raw, +# FilesController:archivefile + +<%text>## default encoding used to convert from and to unicode +<%text>## can be also a comma separated list of encoding in case of mixed encodings +default_encoding = utf8 + +<%text>## issue tracker for Kallithea (leave blank to disable, absent for default) +#bugtracker = https://bitbucket.org/conservancy/kallithea/issues + +<%text>## issue tracking mapping for commit messages, comments, PR descriptions, ... +<%text>## Refer to the documentation ("Integration with issue trackers") for more details. + +<%text>## regular expression to match issue references +<%text>## This pattern may/should contain parenthesized groups, that can +<%text>## be referred to in issue_server_link or issue_sub using Python backreferences +<%text>## (e.g. \1, \2, ...). You can also create named groups with '(?P)'. +<%text>## To require mandatory whitespace before the issue pattern, use: +<%text>## (?:^|(?<=\s)) before the actual pattern, and for mandatory whitespace +<%text>## behind the issue pattern, use (?:$|(?=\s)) after the actual pattern. + +issue_pat = #(\d+) + +<%text>## server url to the issue +<%text>## This pattern may/should contain backreferences to parenthesized groups in issue_pat. +<%text>## A backreference can be \1, \2, ... or \g if you specified a named group +<%text>## called 'groupname' in issue_pat. +<%text>## The special token {repo} is replaced with the full repository name +<%text>## including repository groups, while {repo_name} is replaced with just +<%text>## the name of the repository. + +issue_server_link = https://issues.example.com/{repo}/issue/\1 + +<%text>## substitution pattern to use as the link text +<%text>## If issue_sub is empty, the text matched by issue_pat is retained verbatim +<%text>## for the link text. Otherwise, the link text is that of issue_sub, with any +<%text>## backreferences to groups in issue_pat replaced. + +issue_sub = + +<%text>## issue_pat, issue_server_link and issue_sub can have suffixes to specify +<%text>## multiple patterns, to other issues server, wiki or others +<%text>## below an example how to create a wiki pattern +# wiki-some-id -> https://wiki.example.com/some-id + +#issue_pat_wiki = wiki-(\S+) +#issue_server_link_wiki = https://wiki.example.com/\1 +#issue_sub_wiki = WIKI-\1 + +<%text>## alternative return HTTP header for failed authentication. Default HTTP +<%text>## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with +<%text>## handling that. Set this variable to 403 to return HTTPForbidden +auth_ret_code = + +<%text>## locking return code. When repository is locked return this HTTP code. 2XX +<%text>## codes don't break the transactions while 4XX codes do +lock_ret_code = 423 + +<%text>## allows to change the repository location in settings page +allow_repo_location_change = True + +<%text>## allows to setup custom hooks in settings page +allow_custom_hooks_settings = True + +<%text>## extra extensions for indexing, space separated and without the leading '.'. +# index.extensions = +# gemfile +# lock + +<%text>## extra filenames for indexing, space separated +# index.filenames = +# .dockerignore +# .editorconfig +# INSTALL +# CHANGELOG + +<%text>#################################### +<%text>### CELERY CONFIG #### +<%text>#################################### + +use_celery = false + +<%text>## Example: connect to the virtual host 'rabbitmqhost' on localhost as rabbitmq: +broker.url = amqp://rabbitmq:qewqew@localhost:5672/rabbitmqhost + +celery.imports = kallithea.lib.celerylib.tasks +celery.accept.content = pickle +celery.result.backend = amqp +celery.result.dburi = amqp:// +celery.result.serialier = json + +#celery.send.task.error.emails = true +#celery.amqp.task.result.expires = 18000 + +celeryd.concurrency = 2 +celeryd.max.tasks.per.child = 1 + +<%text>## If true, tasks will never be sent to the queue, but executed locally instead. +celery.always.eager = false + +<%text>#################################### +<%text>### BEAKER CACHE #### +<%text>#################################### + +beaker.cache.data_dir = %(here)s/data/cache/data +beaker.cache.lock_dir = %(here)s/data/cache/lock + +beaker.cache.regions = short_term,long_term,sql_cache_short + +beaker.cache.short_term.type = memory +beaker.cache.short_term.expire = 60 +beaker.cache.short_term.key_length = 256 + +beaker.cache.long_term.type = memory +beaker.cache.long_term.expire = 36000 +beaker.cache.long_term.key_length = 256 + +beaker.cache.sql_cache_short.type = memory +beaker.cache.sql_cache_short.expire = 10 +beaker.cache.sql_cache_short.key_length = 256 + +<%text>#################################### +<%text>### BEAKER SESSION #### +<%text>#################################### + +<%text>## Name of session cookie. Should be unique for a given host and path, even when running +<%text>## on different ports. Otherwise, cookie sessions will be shared and messed up. +beaker.session.key = kallithea +<%text>## Sessions should always only be accessible by the browser, not directly by JavaScript. +beaker.session.httponly = true +<%text>## Session lifetime. 2592000 seconds is 30 days. +beaker.session.timeout = 2592000 + +<%text>## Server secret used with HMAC to ensure integrity of cookies. +beaker.session.secret = ${uuid()} +<%text>## Further, encrypt the data with AES. +#beaker.session.encrypt_key = +#beaker.session.validate_key = + +<%text>## Type of storage used for the session, current types are +<%text>## dbm, file, memcached, database, and memory. + +<%text>## File system storage of session data. (default) +#beaker.session.type = file + +<%text>## Cookie only, store all session data inside the cookie. Requires secure secrets. +#beaker.session.type = cookie + +<%text>## Database storage of session data. +#beaker.session.type = ext:database +#beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea +#beaker.session.table_name = db_session + +%if error_aggregation_service == 'appenlight': +<%text>############################ +<%text>## ERROR HANDLING SYSTEMS ## +<%text>############################ + +# Propagate email settings to ErrorReporter of TurboGears2 +# You do not normally need to change these lines +get trace_errors.error_email = email_to +get trace_errors.smtp_server = smtp_server +get trace_errors.smtp_port = smtp_port +get trace_errors.from_address = error_email_from + +<%text>#################### +<%text>### [appenlight] ### +<%text>#################### + +<%text>## AppEnlight is tailored to work with Kallithea, see +<%text>## http://appenlight.com for details how to obtain an account +<%text>## you must install python package `appenlight_client` to make it work + +<%text>## appenlight enabled +appenlight = false + +appenlight.server_url = https://api.appenlight.com +appenlight.api_key = YOUR_API_KEY + +<%text>## TWEAK AMOUNT OF INFO SENT HERE + +<%text>## enables 404 error logging (default False) +appenlight.report_404 = false + +<%text>## time in seconds after request is considered being slow (default 1) +appenlight.slow_request_time = 1 + +<%text>## record slow requests in application +<%text>## (needs to be enabled for slow datastore recording and time tracking) +appenlight.slow_requests = true + +<%text>## enable hooking to application loggers +#appenlight.logging = true + +<%text>## minimum log level for log capture +#appenlight.logging.level = WARNING + +<%text>## send logs only from erroneous/slow requests +<%text>## (saves API quota for intensive logging) +appenlight.logging_on_error = false + +<%text>## list of additional keywords that should be grabbed from environ object +<%text>## can be string with comma separated list of words in lowercase +<%text>## (by default client will always send following info: +<%text>## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that +<%text>## start with HTTP* this list be extended with additional keywords here +appenlight.environ_keys_whitelist = + +<%text>## list of keywords that should be blanked from request object +<%text>## can be string with comma separated list of words in lowercase +<%text>## (by default client will always blank keys that contain following words +<%text>## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' +<%text>## this list be extended with additional keywords set here +appenlight.request_keys_blacklist = + +<%text>## list of namespaces that should be ignores when gathering log entries +<%text>## can be string with comma separated list of namespaces +<%text>## (by default the client ignores own entries: appenlight_client.client) +appenlight.log_namespace_blacklist = + +%elif error_aggregation_service == 'sentry': +<%text>################ +<%text>### [sentry] ### +<%text>################ + +<%text>## sentry is a alternative open source error aggregator +<%text>## you must install python packages `sentry` and `raven` to enable + +sentry.dsn = YOUR_DNS +sentry.servers = +sentry.name = +sentry.key = +sentry.public_key = +sentry.secret_key = +sentry.project = +sentry.site = +sentry.include_paths = +sentry.exclude_paths = + +%endif +<%text>################################################################################ +<%text>## WARNING: *DEBUG MODE MUST BE OFF IN A PRODUCTION ENVIRONMENT* ## +<%text>## Debug mode will enable the interactive debugging tool, allowing ANYONE to ## +<%text>## execute malicious code after an exception is raised. ## +<%text>################################################################################ +debug = false + +<%text>################################## +<%text>### LOGVIEW CONFIG ### +<%text>################################## + +logview.sqlalchemy = #faa +logview.pylons.templating = #bfb +logview.pylons.util = #eee + +<%text>######################################################### +<%text>### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### +<%text>######################################################### + +%if database_engine == 'sqlite': +# SQLITE [default] +sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60 + +%elif database_engine == 'postgres': +# POSTGRESQL +sqlalchemy.url = postgresql://user:pass@localhost/kallithea + +%elif database_engine == 'mysql': +# MySQL +sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8 + +%endif +# see sqlalchemy docs for others + +sqlalchemy.pool_recycle = 3600 + +<%text>################################ +<%text>### ALEMBIC CONFIGURATION #### +<%text>################################ + +[alembic] +script_location = kallithea:alembic + +<%text>################################ +<%text>### LOGGING CONFIGURATION #### +<%text>################################ + +[loggers] +keys = root, routes, kallithea, sqlalchemy, tg, gearbox, beaker, templates, whoosh_indexer, werkzeug, backlash + +[handlers] +keys = console, console_sql + +[formatters] +keys = generic, color_formatter, color_formatter_sql + +<%text>############# +<%text>## LOGGERS ## +<%text>############# + +[logger_root] +level = NOTSET +handlers = console + +[logger_routes] +level = WARN +handlers = +qualname = routes.middleware +<%text>## "level = DEBUG" logs the route matched and routing variables. +propagate = 1 + +[logger_beaker] +level = WARN +handlers = +qualname = beaker.container +propagate = 1 + +[logger_templates] +level = WARN +handlers = +qualname = pylons.templating +propagate = 1 + +[logger_kallithea] +level = WARN +handlers = +qualname = kallithea +propagate = 1 + +[logger_tg] +level = WARN +handlers = +qualname = tg +propagate = 1 + +[logger_gearbox] +level = WARN +handlers = +qualname = gearbox +propagate = 1 + +[logger_sqlalchemy] +level = WARN +handlers = console_sql +qualname = sqlalchemy.engine +propagate = 0 + +[logger_whoosh_indexer] +level = WARN +handlers = +qualname = whoosh_indexer +propagate = 1 + +[logger_werkzeug] +level = WARN +handlers = +qualname = werkzeug +propagate = 1 + +[logger_backlash] +level = WARN +handlers = +qualname = backlash +propagate = 1 + +<%text>############## +<%text>## HANDLERS ## +<%text>############## + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +formatter = generic + +[handler_console_sql] +class = StreamHandler +args = (sys.stderr,) +formatter = generic + +<%text>################ +<%text>## FORMATTERS ## +<%text>################ + +[formatter_generic] +format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %Y-%m-%d %H:%M:%S + +[formatter_color_formatter] +class = kallithea.lib.colored_formatter.ColorFormatter +format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %Y-%m-%d %H:%M:%S + +[formatter_color_formatter_sql] +class = kallithea.lib.colored_formatter.ColorFormatterSql +format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %Y-%m-%d %H:%M:%S diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/paster_commands/update_repoinfo.py --- a/kallithea/lib/paster_commands/update_repoinfo.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/paster_commands/update_repoinfo.py Thu Jun 07 01:46:02 2018 +0200 @@ -15,7 +15,7 @@ kallithea.lib.paster_commands.update_repoinfo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -update-repoinfo paster command for Kallithea +update-repoinfo gearbox command for Kallithea This file was forked by the Kallithea project in July 2014. Original author and date, and relevant copyright and licensing information is below: @@ -28,62 +28,49 @@ import os import sys -import logging import string -from kallithea.lib.utils import BasePasterCommand +from kallithea.lib.paster_commands.common import BasePasterCommand +from kallithea.lib.utils2 import safe_unicode from kallithea.model.db import Repository from kallithea.model.repo import RepoModel from kallithea.model.meta import Session -# Add location of top level folder to sys.path -from os.path import dirname as dn -rc_path = dn(dn(dn(os.path.realpath(__file__)))) -sys.path.append(rc_path) - -log = logging.getLogger(__name__) - class Command(BasePasterCommand): - - max_args = 1 - min_args = 1 - - usage = "CONFIG_FILE" - group_name = "Kallithea" - takes_config_file = -1 - parser = BasePasterCommand.standard_parser(verbose=True) - summary = "Updates repositories caches for last changeset" + "Kallithea: Update database cache of repository data" - def command(self): - #get SqlAlchemy session - self._init_session() - - repo_update_list = map(string.strip, - self.options.repo_update_list.split(',')) \ - if self.options.repo_update_list else None - - if repo_update_list is not None: - repo_list = list(Repository.query()\ - .filter(Repository.repo_name.in_(repo_update_list))) + def take_action(self, args): + if args.repo_update_list is None: + repo_list = Repository.query().all() else: - repo_list = Repository.getAll() - RepoModel.update_repoinfo(repositories=repo_list) + repo_names = [safe_unicode(n.strip()) + for n in args.repo_update_list.split(',')] + repo_list = list(Repository.query() + .filter(Repository.repo_name.in_(repo_names))) + for repo in repo_list: + repo.update_changeset_cache() Session().commit() - if self.options.invalidate_cache: + if args.invalidate_cache: for r in repo_list: r.set_invalidate() - print 'Updated cache for %s repositories' % (len(repo_list)) + print 'Updated repo info and invalidated cache for %s repositories' % (len(repo_list)) + else: + print 'Updated repo info for %s repositories' % (len(repo_list)) - def update_parser(self): - self.parser.add_option('--update-only', + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument('--update-only', action='store', dest='repo_update_list', help="Specifies a comma separated list of repositories " "to update last commit info for. OPTIONAL") - self.parser.add_option('--invalidate-cache', + parser.add_argument('--invalidate-cache', action='store_true', dest='invalidate_cache', help="Trigger cache invalidation event for repos. " "OPTIONAL") + + return parser diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/pidlock.py --- a/kallithea/lib/pidlock.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/pidlock.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,23 +28,21 @@ """daemon locking USAGE: try: - l = DaemonLock(file_='/path/tolockfile',desc='test lock') + l = DaemonLock('/path/tolockfile',desc='test lock') main() l.release() except LockHeld: sys.exit(1) """ - def __init__(self, file_=None, callbackfn=None, + def __init__(self, file_, callbackfn=None, desc='daemon lock', debug=False): - - lock_name = os.path.join(os.path.dirname(__file__), 'running.lock') - self.pidfile = file_ if file_ else lock_name + self.pidfile = file_ self.callbackfn = callbackfn self.desc = desc self.debug = debug self.held = False - #run the lock automatically ! + # run the lock automatically! self.lock() self._finalize = Finalize(self, DaemonLock._on_finalize, args=(self, debug), exitpriority=10) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/profiler.py --- a/kallithea/lib/profiler.py Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ - -import objgraph -import cProfile -import pstats -import cgi -import pprint -import threading - -from StringIO import StringIO - - -class ProfilingMiddleware(object): - def __init__(self, app): - self.lock = threading.Lock() - self.app = app - - def __call__(self, environ, start_response): - with self.lock: - profiler = cProfile.Profile() - - def run_app(*a, **kw): - self.response = self.app(environ, start_response) - - profiler.runcall(run_app, environ, start_response) - - profiler.snapshot_stats() - - stats = pstats.Stats(profiler) - stats.sort_stats('calls') #cumulative - - # Redirect output - out = StringIO() - stats.stream = out - - stats.print_stats() - - resp = ''.join(self.response) - - # Lets at least only put this on html-like responses. - if resp.strip().startswith('<'): - ## The profiling info is just appended to the response. - ## Browsers don't mind this. - resp += ('
')
-                resp += cgi.escape(out.getvalue(), True)
-
-                ct = objgraph.show_most_common_types()
-                print ct
-
-                resp += ct if ct else '---'
-
-                output = StringIO()
-                pprint.pprint(environ, output, depth=3)
-
-                resp += cgi.escape(output.getvalue(), True)
-                resp += '
' - - return resp diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/pygmentsutils.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/lib/pygmentsutils.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +kallithea.lib.pygmentsutils +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Functions for extracting internal Pygments data. + +This file was forked by the Kallithea project in July 2014. +Original author and date, and relevant copyright and licensing information is below: +:created_on: Jan 5, 2011 +:author: marcink +:copyright: (c) 2013 RhodeCode GmbH, and others. +:license: GPLv3, see LICENSE.md for more details. +""" + +from collections import defaultdict +from itertools import ifilter + +from pygments import lexers + + +def get_extension_descriptions(): + """ + Based on what's inside pygments lexers, return a mapping from lowercase + extensions to lists of very brief descriptions. + """ + ext_descs = defaultdict(list) + + for lx, t in sorted(lexers.LEXERS.items()): + desc = lx.replace('Lexer', '') + for glob in t[-2]: + s = glob.lstrip('*').lstrip('.').lower() + start = s.find('[') + if start > -1 and s.endswith(']'): + # expand trailing [] range + prefix = s[:start] + for char in s[start + 1:-1]: + ext_descs[prefix + char].append(desc) + else: + # use stripped glob as extension + ext_descs[s].append(desc) + + return dict(ext_descs) + + +def get_index_filenames(): + """ + Get list of known indexable filenames from pygment lexer internals + """ + + filenames = [] + + def likely_filename(s): + return s.find('*') == -1 and s.find('[') == -1 + + for lx, t in sorted(lexers.LEXERS.items()): + for f in ifilter(likely_filename, t[-2]): + filenames.append(f) + + return filenames + + +def get_custom_lexer(extension): + """ + returns a custom lexer if it's defined in rcextensions module, or None + if there's no custom lexer defined + """ + import kallithea + lexer_name = getattr(kallithea.EXTENSIONS, 'EXTRA_LEXERS', {}).get(extension) + if lexer_name is None: + return None + return lexers.get_lexer_by_name(lexer_name) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/rcmail/response.py --- a/kallithea/lib/rcmail/response.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/rcmail/response.py Thu Jun 07 01:46:02 2018 +0200 @@ -196,7 +196,7 @@ self.attachments.append({'filename': filename, 'content_type': content_type, 'data': data, - 'disposition': disposition,}) + 'disposition': disposition}) def attach_part(self, part): """ diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/rcmail/smtp_mailer.py --- a/kallithea/lib/rcmail/smtp_mailer.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/rcmail/smtp_mailer.py Thu Jun 07 01:46:02 2018 +0200 @@ -60,9 +60,9 @@ self.debug = debug self.auth = smtp_auth - def send(self, recipients=[], subject='', body='', html='', + def send(self, recipients=None, subject='', body='', html='', attachment_files=None, headers=None): - + recipients = recipients or [] if isinstance(recipients, basestring): recipients = [recipients] if headers is None: diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/rcmail/utils.py --- a/kallithea/lib/rcmail/utils.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/rcmail/utils.py Thu Jun 07 01:46:02 2018 +0200 @@ -16,4 +16,5 @@ self._fqdn = socket.getfqdn() return self._fqdn + DNS_NAME = CachedDnsName() diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/recaptcha.py --- a/kallithea/lib/recaptcha.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/recaptcha.py Thu Jun 07 01:46:02 2018 +0200 @@ -1,10 +1,7 @@ # -*- coding: utf-8 -*- import urllib import urllib2 - -API_SSL_SERVER = "https://www.google.com/recaptcha/api" -API_SERVER = "http://www.google.com/recaptcha/api" -VERIFY_SERVER = "www.google.com" +import json class RecaptchaResponse(object): @@ -16,53 +13,17 @@ return '' % (self.is_valid) -def displayhtml(public_key, use_ssl=False, error=None): - """Gets the HTML to display for reCAPTCHA - - public_key -- The public api key - use_ssl -- Should the request be sent over ssl? - error -- An error message to display (from RecaptchaResponse.error_code)""" - - error_param = '' - if error: - error_param = '&error=%s' % error - - if use_ssl: - server = API_SSL_SERVER - else: - server = API_SERVER - - return """ +def submit(g_recaptcha_response, private_key, remoteip): + """ + Submits a reCAPTCHA request for verification. Returns RecaptchaResponse for the request - -""" % { - 'ApiServer': server, - 'PublicKey': public_key, - 'ErrorParam': error_param, - } - - -def submit(recaptcha_challenge_field, recaptcha_response_field, private_key, - remoteip): - """ - Submits a reCAPTCHA request for verification. Returns RecaptchaResponse - for the request - - recaptcha_challenge_field -- The value of recaptcha_challenge_field from the form - recaptcha_response_field -- The value of recaptcha_response_field from the form + g_recaptcha_response -- The value of g_recaptcha_response from the form private_key -- your reCAPTCHA private key remoteip -- the user's IP address """ - if not (recaptcha_response_field and recaptcha_challenge_field and - len(recaptcha_response_field) and len( - recaptcha_challenge_field)): - return RecaptchaResponse(is_valid=False, - error_code='incorrect-captcha-sol') + if not (g_recaptcha_response and len(g_recaptcha_response)): + return RecaptchaResponse(is_valid=False, error_code='incorrect-captcha-sol') def encode_if_necessary(s): if isinstance(s, unicode): @@ -70,14 +31,13 @@ return s params = urllib.urlencode({ - 'privatekey': encode_if_necessary(private_key), + 'secret': encode_if_necessary(private_key), 'remoteip': encode_if_necessary(remoteip), - 'challenge': encode_if_necessary(recaptcha_challenge_field), - 'response': encode_if_necessary(recaptcha_response_field), + 'response': encode_if_necessary(g_recaptcha_response), }) - request = urllib2.Request( - url="http://%s/recaptcha/api/verify" % VERIFY_SERVER, + req = urllib2.Request( + url="https://www.google.com/recaptcha/api/siteverify", data=params, headers={ "Content-type": "application/x-www-form-urlencoded", @@ -85,14 +45,15 @@ } ) - httpresp = urllib2.urlopen(request) - - return_values = httpresp.read().splitlines() + httpresp = urllib2.urlopen(req) + return_values = json.loads(httpresp.read()) httpresp.close() - return_code = return_values[0] - - if return_code == "true": + if not (isinstance(return_values, dict)): + return RecaptchaResponse(is_valid=False, error_code='incorrect-captcha-sol') + elif (("success" in return_values) and ((return_values["success"] == True) or (return_values["success"] == "true"))): return RecaptchaResponse(is_valid=True) + elif (("error-codes" in return_values) and isinstance(return_values["error-codes"], list) and (len(return_values["error-codes"]) > 0)): + return RecaptchaResponse(is_valid=False, error_code=return_values["error-codes"][0]) else: - return RecaptchaResponse(is_valid=False, error_code=return_values[1]) + return RecaptchaResponse(is_valid=False, error_code='incorrect-captcha-sol') diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/utils.py --- a/kallithea/lib/utils.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/utils.py Thu Jun 07 01:46:02 2018 +0200 @@ -30,30 +30,21 @@ import logging import datetime import traceback -import paste import beaker -import tarfile -import shutil -import decorator -import warnings -from os.path import abspath -from os.path import dirname as dn, join as jn -from paste.script.command import Command, BadCommand - +from tg import request, response +from tg.i18n import ugettext as _ from webhelpers.text import collapse, remove_formatting, strip_tags from beaker.cache import _cache_decorate -from kallithea import BRAND - from kallithea.lib.vcs.utils.hgcompat import ui, config from kallithea.lib.vcs.utils.helpers import get_scm from kallithea.lib.vcs.exceptions import VCSError +from kallithea.lib.exceptions import HgsubversionImportError from kallithea.model import meta from kallithea.model.db import Repository, User, Ui, \ UserLog, RepoGroup, Setting, UserGroup -from kallithea.model.meta import Session from kallithea.model.repo_group import RepoGroupModel from kallithea.lib.utils2 import safe_str, safe_unicode, get_current_authuser from kallithea.lib.vcs.utils.fakemod import create_module @@ -149,7 +140,7 @@ return None -def action_logger(user, action, repo, ipaddr='', sa=None, commit=False): +def action_logger(user, action, repo, ipaddr='', commit=False): """ Action logger for various actions made by users @@ -160,12 +151,9 @@ :param repo: string name of repository or object containing repo_id, that action was made on :param ipaddr: optional IP address from what the action was made - :param sa: optional sqlalchemy session """ - if not sa: - sa = meta.Session() # if we don't get explicit IP address try to get one from registered user # in tmpl context var if not ipaddr: @@ -186,7 +174,7 @@ repo_obj = Repository.get_by_repo_name(repo_name) else: repo_obj = None - repo_name = '' + repo_name = u'' user_log = UserLog() user_log.user_id = user_obj.user_id @@ -198,12 +186,12 @@ user_log.action_date = datetime.datetime.now() user_log.user_ip = ipaddr - sa.add(user_log) + meta.Session().add(user_log) log.info('Logging action:%s on %s by user:%s ip:%s', action, safe_unicode(repo), user_obj, ipaddr) if commit: - sa.commit() + meta.Session().commit() def get_filesystem_repos(path): @@ -228,7 +216,7 @@ if REMOVED_REPO_PAT.match(subdir): continue - #skip . dirs TODO: rly? then we should prevent creating them ... + # skip . dirs TODO: rly? then we should prevent creating them ... if subdir.startswith('.'): continue @@ -274,7 +262,11 @@ # or does it pass basic auth MercurialRepository._check_url(url, ui) elif url.startswith('svn+http'): - from hgsubversion.svnrepo import svnremoterepo + try: + from hgsubversion.svnrepo import svnremoterepo + except ImportError: + raise HgsubversionImportError(_('Unable to activate hgsubversion support. ' + 'The "hgsubversion" library is missing')) svnremoterepo(ui, url).svn.uuid elif url.startswith('git+http'): raise NotImplementedError() @@ -347,19 +339,7 @@ return False -def ask_ok(prompt, retries=4, complaint='Yes or no please!'): - while True: - ok = raw_input(prompt) - if ok in ('y', 'ye', 'yes'): - return True - if ok in ('n', 'no', 'nop', 'nope'): - return False - retries = retries - 1 - if retries < 0: - raise IOError - print complaint - -#propagated from mercurial documentation +# propagated from mercurial documentation ui_sections = ['alias', 'auth', 'decode/encode', 'defaults', 'diff', 'email', @@ -372,13 +352,12 @@ 'ui', 'web', ] -def make_ui(read_from='file', path=None, checkpaths=True, clear_session=True): +def make_ui(read_from='file', path=None, clear_session=True): """ A function that will read python rc files or database and make an mercurial ui object from read options :param path: path to mercurial config file - :param checkpaths: check the path :param read_from: read from 'file' or 'db' """ @@ -408,21 +387,17 @@ hg_ui = ret for ui_ in hg_ui: if ui_.ui_active: - ui_val = safe_str(ui_.ui_value) - if ui_.ui_section == 'hooks' and BRAND != 'kallithea' and ui_val.startswith('python:' + BRAND + '.lib.hooks.'): - ui_val = ui_val.replace('python:' + BRAND + '.lib.hooks.', 'python:kallithea.lib.hooks.') - log.debug('settings ui from db: [%s] %s=%s', ui_.ui_section, + ui_val = '' if ui_.ui_value is None else safe_str(ui_.ui_value) + log.debug('settings ui from db: [%s] %s=%r', ui_.ui_section, ui_.ui_key, ui_val) baseui.setconfig(safe_str(ui_.ui_section), safe_str(ui_.ui_key), ui_val) - if ui_.ui_key == 'push_ssl': - # force set push_ssl requirement to False, kallithea - # handles that - baseui.setconfig(safe_str(ui_.ui_section), safe_str(ui_.ui_key), - False) if clear_session: meta.Session.remove() + # force set push_ssl requirement to False, Kallithea handles that + baseui.setconfig('web', 'push_ssl', False) + baseui.setconfig('web', 'allow_push', '*') # prevent interactive questions for ssh password / passphrase ssh = baseui.config('ui', 'ssh', default='ssh') baseui.setconfig('ui', 'ssh', '%s -oBatchMode=yes -oIdentitiesOnly=yes' % ssh) @@ -432,14 +407,16 @@ def set_app_settings(config): """ - Updates pylons config with new settings from database + Updates app config with new settings from database :param config: """ - hgsettings = Setting.get_app_settings() - - for k, v in hgsettings.items(): - config[k] = v + try: + hgsettings = Setting.get_app_settings() + for k, v in hgsettings.items(): + config[k] = v + finally: + meta.Session.remove() def set_vcs_config(config): @@ -461,6 +438,21 @@ 'utf8'), sep=',') +def set_indexer_config(config): + """ + Update Whoosh index mapping + + :param config: kallithea.CONFIG + """ + from kallithea.config import conf + + log.debug('adding extra into INDEX_EXTENSIONS') + conf.INDEX_EXTENSIONS.extend(re.split('\s+', config.get('index.extensions', ''))) + + log.debug('adding extra into INDEX_FILENAMES') + conf.INDEX_FILENAMES.extend(re.split('\s+', config.get('index.filenames', ''))) + + def map_groups(path): """ Given a full path to a repository, create all nested groups that this @@ -476,10 +468,10 @@ # last element is repo in nested groups structure groups = groups[:-1] - rgm = RepoGroupModel(sa) + rgm = RepoGroupModel() owner = User.get_first_admin() for lvl, group_name in enumerate(groups): - group_name = '/'.join(groups[:lvl] + [group_name]) + group_name = u'/'.join(groups[:lvl] + [group_name]) group = RepoGroup.get_by_group_name(group_name) desc = '%s group' % group_name @@ -492,10 +484,9 @@ lvl, group_name) group = RepoGroup(group_name, parent) group.group_description = desc - group.user = owner + group.owner = owner sa.add(group) - perm_obj = rgm._create_default_perms(group) - sa.add(perm_obj) + rgm._create_default_perms(group) sa.flush() parent = group @@ -524,7 +515,7 @@ user = User.get_first_admin() added = [] - ##creation defaults + # creation defaults defs = Setting.get_default_repo_settings(strip_prefix=True) enable_statistics = defs.get('repo_enable_statistics') enable_locking = defs.get('repo_enable_locking') @@ -571,13 +562,14 @@ removed = [] # remove from database those repositories that are not in the filesystem + unicode_initial_repo_list = set(safe_unicode(name) for name in initial_repo_list) for repo in sa.query(Repository).all(): - if repo.repo_name not in initial_repo_list.keys(): + if repo.repo_name not in unicode_initial_repo_list: if remove_obsolete: log.debug("Removing non-existing repository found in db `%s`", repo.repo_name) try: - RepoModel(sa).delete(repo, forks='detach', fs_remove=False) + RepoModel().delete(repo, forks='detach', fs_remove=False) sa.commit() except Exception: #don't hold further removals on error @@ -587,34 +579,6 @@ return added, removed -# set cache regions for beaker so celery can utilise it -def add_cache(settings): - cache_settings = {'regions': None} - for key in settings.keys(): - for prefix in ['beaker.cache.', 'cache.']: - if key.startswith(prefix): - name = key.split(prefix)[1].strip() - cache_settings[name] = settings[key].strip() - if cache_settings['regions']: - for region in cache_settings['regions'].split(','): - region = region.strip() - region_settings = {} - for key, value in cache_settings.items(): - if key.startswith(region): - region_settings[key.split('.')[1]] = value - region_settings['expire'] = int(region_settings.get('expire', - 60)) - region_settings.setdefault('lock_dir', - cache_settings.get('lock_dir')) - region_settings.setdefault('data_dir', - cache_settings.get('data_dir')) - - if 'type' not in region_settings: - region_settings['type'] = cache_settings.get('type', - 'memory') - beaker.cache.cache_regions[region] = region_settings - - def load_rcextensions(root_path): import kallithea from kallithea.config import conf @@ -628,13 +592,13 @@ # Additional mappings that are not present in the pygments lexers conf.LANGUAGES_EXTENSIONS_MAP.update(getattr(EXT, 'EXTRA_MAPPINGS', {})) - #OVERRIDE OUR EXTENSIONS FROM RC-EXTENSIONS (if present) + # OVERRIDE OUR EXTENSIONS FROM RC-EXTENSIONS (if present) if getattr(EXT, 'INDEX_EXTENSIONS', []): log.debug('settings custom INDEX_EXTENSIONS') conf.INDEX_EXTENSIONS = getattr(EXT, 'INDEX_EXTENSIONS', []) - #ADDITIONAL MAPPINGS + # ADDITIONAL MAPPINGS log.debug('adding extra into INDEX_EXTENSIONS') conf.INDEX_EXTENSIONS.extend(getattr(EXT, 'EXTRA_INDEX_EXTENSIONS', [])) @@ -646,187 +610,9 @@ # setattr(EXT, k, getattr(rcextensions, k)) -def get_custom_lexer(extension): - """ - returns a custom lexer if it's defined in rcextensions module, or None - if there's no custom lexer defined - """ - import kallithea - from pygments import lexers - #check if we didn't define this extension as other lexer - if kallithea.EXTENSIONS and extension in kallithea.EXTENSIONS.EXTRA_LEXERS: - _lexer_name = kallithea.EXTENSIONS.EXTRA_LEXERS[extension] - return lexers.get_lexer_by_name(_lexer_name) - - -#============================================================================== -# TEST FUNCTIONS AND CREATORS #============================================================================== -def create_test_index(repo_location, config, full_index): - """ - Makes default test index - - :param config: test config - :param full_index: - """ - - from kallithea.lib.indexers.daemon import WhooshIndexingDaemon - from kallithea.lib.pidlock import DaemonLock, LockHeld - - repo_location = repo_location - - index_location = os.path.join(config['app_conf']['index_dir']) - if not os.path.exists(index_location): - os.makedirs(index_location) - - try: - l = DaemonLock(file_=jn(dn(index_location), 'make_index.lock')) - WhooshIndexingDaemon(index_location=index_location, - repo_location=repo_location)\ - .run(full_index=full_index) - l.release() - except LockHeld: - pass - - -def create_test_env(repos_test_path, config): - """ - Makes a fresh database and - install test repository into tmp dir - """ - from kallithea.lib.db_manage import DbManage - from kallithea.tests import HG_REPO, GIT_REPO, TESTS_TMP_PATH - - # PART ONE create db - dbconf = config['sqlalchemy.db1.url'] - log.debug('making test db %s', dbconf) - - # create test dir if it doesn't exist - if not os.path.isdir(repos_test_path): - log.debug('Creating testdir %s', repos_test_path) - os.makedirs(repos_test_path) - - dbmanage = DbManage(log_sql=True, dbconf=dbconf, root=config['here'], - tests=True) - dbmanage.create_tables(override=True) - # for tests dynamically set new root paths based on generated content - dbmanage.create_settings(dbmanage.config_prompt(repos_test_path)) - dbmanage.create_default_user() - dbmanage.admin_prompt() - dbmanage.create_permissions() - dbmanage.populate_default_permissions() - Session().commit() - # PART TWO make test repo - log.debug('making test vcs repositories') - - idx_path = config['app_conf']['index_dir'] - data_path = config['app_conf']['cache_dir'] - - #clean index and data - if idx_path and os.path.exists(idx_path): - log.debug('remove %s', idx_path) - shutil.rmtree(idx_path) - - if data_path and os.path.exists(data_path): - log.debug('remove %s', data_path) - shutil.rmtree(data_path) - - #CREATE DEFAULT TEST REPOS - cur_dir = dn(dn(abspath(__file__))) - tar = tarfile.open(jn(cur_dir, 'tests', 'fixtures', "vcs_test_hg.tar.gz")) - tar.extractall(jn(TESTS_TMP_PATH, HG_REPO)) - tar.close() - - cur_dir = dn(dn(abspath(__file__))) - tar = tarfile.open(jn(cur_dir, 'tests', 'fixtures', "vcs_test_git.tar.gz")) - tar.extractall(jn(TESTS_TMP_PATH, GIT_REPO)) - tar.close() - - #LOAD VCS test stuff - from kallithea.tests.vcs import setup_package - setup_package() - - +# MISC #============================================================================== -# PASTER COMMANDS -#============================================================================== -class BasePasterCommand(Command): - """ - Abstract Base Class for paster commands. - - The celery commands are somewhat aggressive about loading - celery.conf, and since our module sets the `CELERY_LOADER` - environment variable to our loader, we have to bootstrap a bit and - make sure we've had a chance to load the pylons config off of the - command line, otherwise everything fails. - """ - min_args = 1 - min_args_error = "Please provide a paster config file as an argument." - takes_config_file = 1 - requires_config_file = True - - def notify_msg(self, msg, log=False): - """Make a notification to user, additionally if logger is passed - it logs this action using given logger - - :param msg: message that will be printed to user - :param log: logging instance, to use to additionally log this message - - """ - if log and isinstance(log, logging): - log(msg) - - def run(self, args): - """ - Overrides Command.run - - Checks for a config file argument and loads it. - """ - if len(args) < self.min_args: - raise BadCommand( - self.min_args_error % {'min_args': self.min_args, - 'actual_args': len(args)}) - - # Decrement because we're going to lob off the first argument. - # @@ This is hacky - self.min_args -= 1 - self.bootstrap_config(args[0]) - self.update_parser() - return super(BasePasterCommand, self).run(args[1:]) - - def update_parser(self): - """ - Abstract method. Allows for the class's parser to be updated - before the superclass's `run` method is called. Necessary to - allow options/arguments to be passed through to the underlying - celery command. - """ - raise NotImplementedError("Abstract Method.") - - def bootstrap_config(self, conf): - """ - Loads the pylons configuration. - """ - from pylons import config as pylonsconfig - - self.path_to_ini_file = os.path.realpath(conf) - conf = paste.deploy.appconfig('config:' + self.path_to_ini_file) - pylonsconfig.init_app(conf.global_conf, conf.local_conf) - - def _init_session(self): - """ - Inits SqlAlchemy Session - """ - logging.config.fileConfig(self.path_to_ini_file) - from pylons import config - from kallithea.model import init_model - from kallithea.lib.utils2 import engine_from_config - - #get to remove repos !! - add_cache(config) - engine = engine_from_config(config, 'sqlalchemy.db1.') - init_model(engine) - def check_git_version(): """ @@ -863,28 +649,38 @@ return ver -@decorator.decorator -def jsonify(func, *args, **kwargs): - """Action decorator that formats output for JSON - - Given a function that will return content, this decorator will turn - the result into JSON, with a content-type of 'application/json' and - output it. +#=============================================================================== +# CACHE RELATED METHODS +#=============================================================================== - """ - from pylons.decorators.util import get_pylons - from kallithea.lib.compat import json - pylons = get_pylons(args) - pylons.response.headers['Content-Type'] = 'application/json; charset=utf-8' - data = func(*args, **kwargs) - if isinstance(data, (list, tuple)): - msg = "JSON responses with Array envelopes are susceptible to " \ - "cross-site data leak attacks, see " \ - "http://wiki.pylonshq.com/display/pylonsfaq/Warnings" - warnings.warn(msg, Warning, 2) - log.warning(msg) - log.debug("Returning JSON wrapped action output") - return json.dumps(data, encoding='utf-8') +# set cache regions for beaker so celery can utilise it +def setup_cache_regions(settings): + # Create dict with just beaker cache configs with prefix stripped + cache_settings = {'regions': None} + prefix = 'beaker.cache.' + for key in settings: + if key.startswith(prefix): + name = key[len(prefix):] + cache_settings[name] = settings[key] + # Find all regions, apply defaults, and apply to beaker + if cache_settings['regions']: + for region in cache_settings['regions'].split(','): + region = region.strip() + prefix = region + '.' + region_settings = {} + for key in cache_settings: + if key.startswith(prefix): + name = key[len(prefix):] + region_settings[name] = cache_settings[key] + region_settings.setdefault('expire', + cache_settings.get('expire', '60')) + region_settings.setdefault('lock_dir', + cache_settings.get('lock_dir')) + region_settings.setdefault('data_dir', + cache_settings.get('data_dir')) + region_settings.setdefault('type', + cache_settings.get('type', 'memory')) + beaker.cache.cache_regions[region] = region_settings def conditional_cache(region, prefix, condition, func): @@ -895,8 +691,8 @@ #heavy computation function return data - # denpending from condition the compute is wrapped in cache or not - compute = conditional_cache('short_term', 'cache_desc', codnition=True, func=func) + # depending from condition the compute is wrapped in cache or not + compute = conditional_cache('short_term', 'cache_desc', condition=True, func=func) return compute(arg) :param region: name of cache region diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/utils2.py --- a/kallithea/lib/utils2.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/utils2.py Thu Jun 07 01:46:02 2018 +0200 @@ -38,49 +38,14 @@ import webob import urlobject -from pylons.i18n.translation import _, ungettext +from tg.i18n import ugettext as _, ungettext from kallithea.lib.vcs.utils.lazy import LazyProperty from kallithea.lib.compat import json -def __get_lem(): - """ - Get language extension map based on what's inside pygments lexers - """ - from pygments import lexers - from string import lower - from collections import defaultdict - - d = defaultdict(lambda: []) - - def __clean(s): - s = s.lstrip('*') - s = s.lstrip('.') - - if s.find('[') != -1: - exts = [] - start, stop = s.find('['), s.find(']') - - for suffix in s[start + 1:stop]: - exts.append(s[:s.find('[')] + suffix) - return map(lower, exts) - else: - return map(lower, [s]) - - for lx, t in sorted(lexers.LEXERS.items()): - m = map(__clean, t[-2]) - if m: - m = reduce(lambda x, y: x + y, m) - for ext in m: - desc = lx.replace('Lexer', '') - d[ext].append(desc) - - return dict(d) - - def str2bool(_str): """ - returs True/False value from given string, it tries to translate the + returns True/False value from given string, it tries to translate the string into boolean :param _str: string value to translate into boolean @@ -166,7 +131,14 @@ def generate_api_key(): """ Generates a random (presumably unique) API key. + + This value is used in URLs and "Bearer" HTTP Authorization headers, + which in practice means it should only contain URL-safe characters + (RFC 3986): + + unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" """ + # Hexadecimal certainly qualifies as URL-safe. return binascii.hexlify(os.urandom(20)) @@ -288,63 +260,6 @@ return s -def engine_from_config(configuration, prefix='sqlalchemy.', **kwargs): - """ - Custom engine_from_config functions that makes sure we use NullPool for - file based sqlite databases. This prevents errors on sqlite. This only - applies to sqlalchemy versions < 0.7.0 - - """ - import sqlalchemy - from sqlalchemy import engine_from_config as efc - import logging - - if int(sqlalchemy.__version__.split('.')[1]) < 7: - - # This solution should work for sqlalchemy < 0.7.0, and should use - # proxy=TimerProxy() for execution time profiling - - from sqlalchemy.pool import NullPool - url = configuration[prefix + 'url'] - - if url.startswith('sqlite'): - kwargs.update({'poolclass': NullPool}) - return efc(configuration, prefix, **kwargs) - else: - import time - from sqlalchemy import event - - log = logging.getLogger('sqlalchemy.engine') - BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = xrange(30, 38) - engine = efc(configuration, prefix, **kwargs) - - def color_sql(sql): - COLOR_SEQ = "\033[1;%dm" - COLOR_SQL = YELLOW - normal = '\x1b[0m' - return ''.join([COLOR_SEQ % COLOR_SQL, sql, normal]) - - if configuration['debug']: - #attach events only for debug configuration - - def before_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - context._query_start_time = time.time() - log.info(color_sql(">>>>> STARTING QUERY >>>>>")) - - def after_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - total = time.time() - context._query_start_time - log.info(color_sql("<<<<< TOTAL TIME: %f <<<<<" % total)) - - event.listen(engine, "before_cursor_execute", - before_cursor_execute) - event.listen(engine, "after_cursor_execute", - after_cursor_execute) - - return engine - - def age(prevdate, show_short_version=False, now=None): """ turns a datetime into an age string. @@ -352,7 +267,7 @@ example: 2days ago, instead of 2 days and 23 hours ago. :param prevdate: datetime object - :param show_short_version: if it should aproximate the date and return a shorter string + :param show_short_version: if it should approximate the date and return a shorter string :rtype: unicode :returns: unicode words describing age """ @@ -486,7 +401,7 @@ """ uri = uri_filter(uri) - #check if we have port + # check if we have port if len(uri) > 2 and uri[2]: uri[2] = ':' + uri[2] @@ -553,25 +468,32 @@ return return datetime.datetime.fromtimestamp(tm) + # Must match regexp in kallithea/public/js/base.js MentionsAutoComplete() # Check char before @ - it must not look like we are in an email addresses. -# Matching is gready so we don't have to look beyond the end. +# Matching is greedy so we don't have to look beyond the end. MENTIONS_REGEX = re.compile(r'(?:^|(?<=[^a-zA-Z0-9]))@([a-zA-Z0-9][-_.a-zA-Z0-9]*[a-zA-Z0-9])') -def extract_mentioned_users(s): - r""" - Returns unique usernames from given string s that have @mention - :param s: string to get mentions +def extract_mentioned_usernames(text): + r""" + Returns list of (possible) usernames @mentioned in given text. - >>> extract_mentioned_users('@1-2.a_X,@1234 not@not @ddd@not @n @ee @ff @gg, @gg;@hh @n\n@zz,') + >>> extract_mentioned_usernames('@1-2.a_X,@1234 not@not @ddd@not @n @ee @ff @gg, @gg;@hh @n\n@zz,') ['1-2.a_X', '1234', 'ddd', 'ee', 'ff', 'gg', 'hh', 'zz'] """ - usrs = set() - for username in MENTIONS_REGEX.findall(s): - usrs.add(username) + return MENTIONS_REGEX.findall(text) + - return sorted(list(usrs), key=lambda k: k.lower()) +def extract_mentioned_users(text): + """ Returns set of actual database Users @mentioned in given text. """ + from kallithea.model.db import User + result = set() + for name in extract_mentioned_usernames(text): + user = User.get_by_username(name, case_insensitive=True) + if user is not None and not user.is_default_user: + result.add(user) + return result class AttributeDict(dict): @@ -637,52 +559,16 @@ def _set_extras(extras): - # RC_SCM_DATA can probably be removed in the future, but for compatibilty now... + # RC_SCM_DATA can probably be removed in the future, but for compatibility now... os.environ['KALLITHEA_EXTRAS'] = os.environ['RC_SCM_DATA'] = json.dumps(extras) -def unique_id(hexlen=32): - alphabet = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz" - return suuid(truncate_to=hexlen, alphabet=alphabet) - - -def suuid(url=None, truncate_to=22, alphabet=None): - """ - Generate and return a short URL safe UUID. - - If the url parameter is provided, set the namespace to the provided - URL and generate a UUID. - - :param url to get the uuid for - :truncate_to: truncate the basic 22 UUID to shorter version - - The IDs won't be universally unique any longer, but the probability of - a collision will still be very low. - """ - # Define our alphabet. - _ALPHABET = alphabet or "23456789ABCDEFGHJKLMNPQRSTUVWXYZ" - - # If no URL is given, generate a random UUID. - if url is None: - unique_id = uuid.uuid4().int - else: - unique_id = uuid.uuid3(uuid.NAMESPACE_URL, url).int - - alphabet_length = len(_ALPHABET) - output = [] - while unique_id > 0: - digit = unique_id % alphabet_length - output.append(_ALPHABET[digit]) - unique_id = int(unique_id / alphabet_length) - return "".join(output)[:truncate_to] - - def get_current_authuser(): """ Gets kallithea user from threadlocal tmpl_context variable if it's defined, else returns None. """ - from pylons import tmpl_context + from tg import tmpl_context if hasattr(tmpl_context, 'authuser'): return tmpl_context.authuser @@ -708,7 +594,8 @@ def __call__(self): return self -#alias + +# alias OAttr = OptionalAttr @@ -756,5 +643,6 @@ return val.getval() return val + def urlreadable(s, _cleanstringsub=re.compile('[^-a-zA-Z0-9./]+').sub): return _cleanstringsub('_', safe_str(s)).rstrip('_') diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/__init__.py --- a/kallithea/lib/vcs/__init__.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/__init__.py Thu Jun 07 01:46:02 2018 +0200 @@ -29,15 +29,3 @@ Returns shorter version (digit parts only) as string. """ return '.'.join((str(each) for each in VERSION[:3])) - - -def main(argv=None): - if argv is None: - argv = sys.argv - from kallithea.lib.vcs.cli import ExecutionManager - manager = ExecutionManager(argv) - manager.execute() - return 0 - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/backends/base.py --- a/kallithea/lib/vcs/backends/base.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/backends/base.py Thu Jun 07 01:46:02 2018 +0200 @@ -97,6 +97,9 @@ @LazyProperty def name(self): + """ + Return repository name (without group name) + """ raise NotImplementedError @property @@ -137,9 +140,6 @@ def is_empty(self): return self._empty - def get_last_change(self): - self.get_changesets() - #========================================================================== # CHANGESETS #========================================================================== @@ -163,11 +163,10 @@ yield self.get_changeset(revision) def get_changesets(self, start=None, end=None, start_date=None, - end_date=None, branch_name=None, reverse=False): + end_date=None, branch_name=None, reverse=False, max_revisions=None): """ - Returns iterator of ``MercurialChangeset`` objects from start to end - not inclusive This should behave just like a list, ie. end is not - inclusive + Returns iterator of ``BaseChangeset`` objects from start to end, + both inclusive. :param start: None or str :param end: None or str @@ -385,15 +384,28 @@ def __eq__(self, other): return self.raw_id == other.raw_id - def __json__(self): - return dict( - short_id=self.short_id, - raw_id=self.raw_id, - revision=self.revision, - message=self.message, - date=self.date, - author=self.author, - ) + def __json__(self, with_file_list=False): + if with_file_list: + return dict( + short_id=self.short_id, + raw_id=self.raw_id, + revision=self.revision, + message=self.message, + date=self.date, + author=self.author, + added=[safe_unicode(el.path) for el in self.added], + changed=[safe_unicode(el.path) for el in self.changed], + removed=[safe_unicode(el.path) for el in self.removed], + ) + else: + return dict( + short_id=self.short_id, + raw_id=self.raw_id, + revision=self.revision, + message=self.message, + date=self.date, + author=self.author, + ) @LazyProperty def last(self): @@ -655,9 +667,9 @@ data = get_dict_for_attrs(self, ['id', 'raw_id', 'short_id', 'revision', 'date', 'message']) data['author'] = {'name': self.author_name, 'email': self.author_email} - data['added'] = [node.path for node in self.added] - data['changed'] = [node.path for node in self.changed] - data['removed'] = [node.path for node in self.removed] + data['added'] = [safe_unicode(node.path) for node in self.added] + data['changed'] = [safe_unicode(node.path) for node in self.changed] + data['removed'] = [safe_unicode(node.path) for node in self.removed] return data @LazyProperty @@ -668,6 +680,27 @@ def obsolete(self): return False + @LazyProperty + def bumped(self): + return False + + @LazyProperty + def divergent(self): + return False + + @LazyProperty + def extinct(self): + return False + + @LazyProperty + def unstable(self): + return False + + @LazyProperty + def phase(self): + return '' + + class BaseWorkdir(object): """ Working directory representation of single repository. @@ -1005,6 +1038,11 @@ return get_backend(self.alias).DEFAULT_BRANCH_NAME @LazyProperty + def branches(self): + from kallithea.lib.vcs.backends import get_backend + return [get_backend(self.alias).DEFAULT_BRANCH_NAME] + + @LazyProperty def short_id(self): return self.raw_id[:12] @@ -1031,12 +1069,13 @@ for rev in self.revs: yield self.repo.get_changeset(rev) - def __getslice__(self, i, j): - """ - Returns a iterator of sliced repository - """ - sliced_revs = self.revs[i:j] - return CollectionGenerator(self.repo, sliced_revs) + def __getitem__(self, what): + """Return either a single element by index, or a sliced collection.""" + if isinstance(what, slice): + return CollectionGenerator(self.repo, self.revs[what]) + else: + # single item + return self.repo.get_changeset(self.revs[what]) def __repr__(self): return '' % (len(self)) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/backends/git/changeset.py --- a/kallithea/lib/vcs/backends/git/changeset.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/backends/git/changeset.py Thu Jun 07 01:46:02 2018 +0200 @@ -1,7 +1,9 @@ import re from itertools import chain from dulwich import objects +from dulwich.config import ConfigFile from subprocess import Popen, PIPE +from io import BytesIO from kallithea.lib.vcs.conf import settings from kallithea.lib.vcs.backends.base import BaseChangeset, EmptyChangeset @@ -50,6 +52,10 @@ self._paths = {} @LazyProperty + def bookmarks(self): + return () + + @LazyProperty def message(self): return safe_unicode(self._commit.message) @@ -87,13 +93,19 @@ @LazyProperty def branch(self): - + # Note: This function will return one branch name for the changeset - + # that might not make sense in Git where branches() is a better match + # for the basic model heads = self.repository._heads(reverse=False) - ref = heads.get(self.raw_id) if ref: return safe_unicode(ref) + @LazyProperty + def branches(self): + heads = self.repository._heads(reverse=True) + return [b for b in heads if heads[b] == self.raw_id] # FIXME: Inefficient ... and returning None! + def _fix_path(self, path): """ Paths are stored without trailing slash so we need to get rid off it if @@ -106,7 +118,7 @@ def _get_id_for_path(self, path): path = safe_str(path) # FIXME: Please, spare a couple of minutes and make those codes cleaner; - if not path in self._paths: + if path not in self._paths: path = path.strip('/') # set root tree tree = self.repository._repo[self._tree_id] @@ -151,7 +163,7 @@ name = item self._paths[name] = id self._stat_modes[name] = stat - if not path in self._paths: + if path not in self._paths: raise NodeDoesNotExistError("There is no file nor directory " "at the given path '%s' at revision %s" % (path, safe_str(self.short_id))) @@ -399,7 +411,9 @@ als = self.repository.alias for name, stat, id in tree.iteritems(): if objects.S_ISGITLINK(stat): - dirnodes.append(SubModuleNode(name, url=None, changeset=id, + cf = ConfigFile.from_file(BytesIO(self.repository._repo.get_object(tree['.gitmodules'][1]).data)) + url = cf.get(('submodule', name), 'url') + dirnodes.append(SubModuleNode(name, url=url, changeset=id, alias=als)) continue @@ -419,7 +433,7 @@ "or Blob, is %r" % type(obj)) nodes = dirnodes + filenodes for node in nodes: - if not node.path in self.nodes: + if node.path not in self.nodes: self.nodes[node.path] = node nodes.sort() return nodes @@ -428,7 +442,7 @@ if isinstance(path, unicode): path = path.encode('utf-8') path = self._fix_path(path) - if not path in self.nodes: + if path not in self.nodes: try: id_ = self._get_id_for_path(path) except ChangesetError: @@ -437,7 +451,10 @@ _GL = lambda m: m and objects.S_ISGITLINK(m) if _GL(self._stat_modes.get(path)): - node = SubModuleNode(path, url=None, changeset=id_, + tree = self.repository._repo[self._tree_id] + cf = ConfigFile.from_file(BytesIO(self.repository._repo.get_object(tree['.gitmodules'][1]).data)) + url = cf.get(('submodule', path), 'url') + node = SubModuleNode(path, url=url, changeset=id_, alias=self.repository.alias) else: obj = self.repository._repo.get_object(id_) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/backends/git/inmemory.py --- a/kallithea/lib/vcs/backends/git/inmemory.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/backends/git/inmemory.py Thu Jun 07 01:46:02 2018 +0200 @@ -40,7 +40,7 @@ ENCODING = "UTF-8" # Create tree and populates it with blobs - commit_tree = self.parents[0] and repo[self.parents[0]._commit.tree] or\ + commit_tree = self.parents[0] and repo[self.parents[0]._commit.tree] or \ objects.Tree() for node in self.added + self.changed: # Compute subdirs if needed diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/backends/git/repository.py --- a/kallithea/lib/vcs/backends/git/repository.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/backends/git/repository.py Thu Jun 07 01:46:02 2018 +0200 @@ -30,7 +30,7 @@ BranchDoesNotExistError, ChangesetDoesNotExistError, EmptyRepositoryError, RepositoryError, TagAlreadyExistError, TagDoesNotExistError ) -from kallithea.lib.vcs.utils import safe_unicode, makedate, date_fromtimestamp +from kallithea.lib.vcs.utils import safe_str, safe_unicode, makedate, date_fromtimestamp from kallithea.lib.vcs.utils.lazy import LazyProperty from kallithea.lib.vcs.utils.ordered_dict import OrderedDict from kallithea.lib.vcs.utils.paths import abspath, get_user_home @@ -58,9 +58,9 @@ def __init__(self, repo_path, create=False, src_url=None, update_after_clone=False, bare=False): - self.path = abspath(repo_path) - repo = self._get_repo(create, src_url, update_after_clone, bare) - self.bare = repo.bare + self.path = safe_unicode(abspath(repo_path)) + self.repo = self._get_repo(create, src_url, update_after_clone, bare) + self.bare = self.repo.bare @property def _config_files(self): @@ -72,7 +72,7 @@ @property def _repo(self): - return Repo(self.path) + return self.repo @property def head(self): @@ -118,7 +118,7 @@ _copts = ['-c', 'core.quotepath=false', ] safe_call = False if '_safe' in opts: - #no exc on failure + # no exc on failure del opts['_safe'] safe_call = True @@ -189,7 +189,7 @@ test_uri = test_uri.rstrip('/') + '/info/refs' if authinfo: - #create a password manager + # create a password manager passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm() passmgr.add_password(*authinfo) @@ -214,7 +214,7 @@ # now detect if it's proper git repo gitdata = resp.read() - if not 'service=git-upload-pack' in gitdata: + if 'service=git-upload-pack' not in gitdata: raise urllib2.URLError( "url [%s] does not look like an git" % (cleaned_uri)) @@ -239,7 +239,7 @@ else: return Repo.init(self.path) else: - return self._repo + return Repo(self.path) except (NotGitRepository, OSError) as err: raise RepositoryError(err) @@ -262,7 +262,7 @@ return so.splitlines() def _get_all_revisions2(self): - #alternate implementation using dulwich + # alternate implementation using dulwich includes = [x[1][0] for x in self._parsed_refs.iteritems() if x[1][1] != 'T'] return [c.commit.id for c in self._repo.get_walker(include=includes)] @@ -328,8 +328,8 @@ Returns normalized url. If schema is not given, would fall to filesystem (``file:///``) schema. """ - url = str(url) - if url != 'default' and not '://' in url: + url = safe_str(url) + if url != 'default' and '://' not in url: url = ':///'.join(('file', url)) return url @@ -504,7 +504,7 @@ return changeset def get_changesets(self, start=None, end=None, start_date=None, - end_date=None, branch_name=None, reverse=False): + end_date=None, branch_name=None, reverse=False, max_revisions=None): """ Returns iterator of ``GitChangeset`` objects from start to end (both are inclusive), in ascending date order (unless ``reverse`` is set). @@ -527,7 +527,7 @@ """ if branch_name and branch_name not in self.branches: - raise BranchDoesNotExistError("Branch '%s' not found" \ + raise BranchDoesNotExistError("Branch '%s' not found" % branch_name) # actually we should check now if it's not an empty repo to not spaw # subprocess commands @@ -537,6 +537,8 @@ # %H at format means (full) commit hash, initial hashes are retrieved # in ascending date order cmd = ['log', '--date-order', '--reverse', '--pretty=format:%H'] + if max_revisions: + cmd += ['--max-count=%s' % max_revisions] if start_date: cmd += ['--since', start_date.strftime('%m/%d/%y %H:%M:%S')] if end_date: @@ -604,7 +606,7 @@ overflowed_long_int = 2**31 if context >= overflowed_long_int: - context = overflowed_long_int-1 + context = overflowed_long_int - 1 # Negative context values make no sense, and will result in # errors. Ensure this does not happen. diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/backends/hg/changeset.py --- a/kallithea/lib/vcs/backends/hg/changeset.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/backends/hg/changeset.py Thu Jun 07 01:46:02 2018 +0200 @@ -18,6 +18,7 @@ from mercurial import obsolete + class MercurialChangeset(BaseChangeset): """ Represents state of the repository at the single revision. @@ -37,15 +38,53 @@ @LazyProperty def branch(self): - return safe_unicode(self._ctx.branch()) + return safe_unicode(self._ctx.branch()) + + @LazyProperty + def branches(self): + return [safe_unicode(self._ctx.branch())] @LazyProperty def closesbranch(self): - return self._ctx.closesbranch() + return self._ctx.closesbranch() @LazyProperty def obsolete(self): - return self._ctx.obsolete() + return self._ctx.obsolete() + + @LazyProperty + def bumped(self): + try: + return self._ctx.phasedivergent() + except AttributeError: # renamed in Mercurial 4.6 (9fa874fb34e1) + return self._ctx.bumped() + + @LazyProperty + def divergent(self): + try: + return self._ctx.contentdivergent() + except AttributeError: # renamed in Mercurial 4.6 (8b2d7684407b) + return self._ctx.divergent() + + @LazyProperty + def extinct(self): + return self._ctx.extinct() + + @LazyProperty + def unstable(self): + try: + return self._ctx.orphan() + except AttributeError: # renamed in Mercurial 4.6 (03039ff3082b) + return self._ctx.unstable() + + @LazyProperty + def phase(self): + if(self._ctx.phase() == 1): + return 'Draft' + elif(self._ctx.phase() == 2): + return 'Secret' + else: + return '' @LazyProperty def successors(self): @@ -147,7 +186,7 @@ cs = self while True: try: - next_ = cs.revision + 1 + next_ = cs.repository.revisions.index(cs.raw_id) + 1 next_rev = cs.repository.revisions[next_] except IndexError: raise ChangesetDoesNotExistError @@ -164,7 +203,7 @@ cs = self while True: try: - prev_ = cs.revision - 1 + prev_ = cs.repository.revisions.index(cs.raw_id) - 1 if prev_ < 0: raise IndexError prev_rev = cs.repository.revisions[prev_] @@ -266,12 +305,17 @@ Returns a generator of four element tuples with lineno, sha, changeset lazy loader and line """ - - fctx = self._get_filectx(path) - for i, annotate_data in enumerate(fctx.annotate(linenumber=False)): - ln_no = i + 1 - sha = hex(annotate_data[0][0].node()) - yield (ln_no, sha, lambda: self.repository.get_changeset(sha), annotate_data[1],) + annotations = self._get_filectx(path).annotate() + try: + annotation_lines = [(annotateline.fctx, annotateline.text) for annotateline in annotations] + except AttributeError: # annotateline was introduced in Mercurial 4.6 (b33b91ca2ec2) + try: + annotation_lines = [(aline.fctx, l) for aline, l in annotations] + except AttributeError: # aline.fctx was introduced in Mercurial 4.4 + annotation_lines = [(aline[0], l) for aline, l in annotations] + for i, (fctx, l) in enumerate(annotation_lines): + sha = fctx.hex() + yield (i + 1, sha, lambda sha=sha, l=l: self.repository.get_changeset(sha), l) def fill_archive(self, stream=None, kind='tgz', prefix=None, subrepos=False): @@ -351,7 +395,7 @@ path = self._fix_path(path) - if not path in self.nodes: + if path not in self.nodes: if path in self._file_paths: node = FileNode(path, changeset=self) elif path in self._dir_paths or path in self._dir_paths: @@ -386,7 +430,7 @@ """ Returns list of modified ``FileNode`` objects. """ - return ChangedFileNodesGenerator([n for n in self.status[0]], self) + return ChangedFileNodesGenerator([n for n in self.status[0]], self) @property def removed(self): diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/backends/hg/inmemory.py --- a/kallithea/lib/vcs/backends/hg/inmemory.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/backends/hg/inmemory.py Thu Jun 07 01:46:02 2018 +0200 @@ -47,17 +47,12 @@ # check if this path is removed if path in (node.path for node in self.removed): - if getattr(memctx, '_returnnoneformissingfiles', False): - return None - else: - # (hg < 3.2) Raising exception is the way to mark node for - # removal - raise IOError(errno.ENOENT, '%s is deleted' % path) + return None # check if this path is added for node in self.added: if node.path == path: - return memfilectx(_repo, path=node.path, + return memfilectx(_repo, memctx, path=node.path, data=(node.content.encode('utf8') if not node.is_binary else node.content), islink=False, @@ -67,7 +62,7 @@ # or changed for node in self.changed: if node.path == path: - return memfilectx(_repo, path=node.path, + return memfilectx(_repo, memctx, path=node.path, data=(node.content.encode('utf8') if not node.is_binary else node.content), islink=False, @@ -83,7 +78,7 @@ parents[i] = parent._ctx.node() if date and isinstance(date, datetime.datetime): - date = date.ctime() + date = date.strftime('%a, %d %b %Y %H:%M:%S') commit_ctx = memctx(repo=self.repository._repo, parents=parents, diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/backends/hg/repository.py --- a/kallithea/lib/vcs/backends/hg/repository.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/backends/hg/repository.py Thu Jun 07 01:46:02 2018 +0200 @@ -31,7 +31,7 @@ from kallithea.lib.vcs.utils.hgcompat import ( ui, nullid, match, patch, diffopts, clone, get_contact, localrepository, RepoLookupError, Abort, RepoError, hex, scmutil, hg_url, - httpbasicauthhandler, httpdigestauthhandler, peer, httppeer, sshpeer + httpbasicauthhandler, httpdigestauthhandler, peer, httppeer, sshpeer, tag ) from .changeset import MercurialChangeset @@ -172,11 +172,10 @@ changeset.short_id) if date is None: - date = datetime.datetime.now().ctime() + date = datetime.datetime.now().strftime('%a, %d %b %Y %H:%M:%S') try: - self._repo.tag(name, changeset._ctx.node(), message, local, user, - date) + tag(self._repo, name, changeset._ctx.node(), message, local, user, date) except Abort as e: raise RepositoryError(e.message) @@ -202,11 +201,11 @@ if message is None: message = "Removed tag %s" % name if date is None: - date = datetime.datetime.now().ctime() + date = datetime.datetime.now().strftime('%a, %d %b %Y %H:%M:%S') local = False try: - self._repo.tag(name, nullid, message, local, user, date) + tag(self._repo, name, nullid, message, local, user, date) self.tags = self._get_tags() except Abort as e: raise RepositoryError(e.message) @@ -307,7 +306,7 @@ cleaned_uri = str(url_obj) if authinfo: - #create a password manager + # create a password manager passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm() passmgr.add_password(*authinfo) @@ -356,7 +355,7 @@ try: if src_url: - url = str(self._get_url(src_url)) + url = safe_str(self._get_url(src_url)) opts = {} if not update_after_clone: opts.update({'noupdate': True}) @@ -368,10 +367,10 @@ return localrepository(self.baseui, self.path, create=create) except (Abort, RepoError) as err: if create: - msg = "Cannot create repository at %s. Original error was %s"\ + msg = "Cannot create repository at %s. Original error was %s" \ % (self.path, err) else: - msg = "Not valid repository at %s. Original error was %s"\ + msg = "Not valid repository at %s. Original error was %s" \ % (self.path, err) raise RepositoryError(msg) @@ -402,7 +401,7 @@ try: return time.mktime(self.get_changeset().date.timetuple()) except RepositoryError: - #fallback to filesystem + # fallback to filesystem cl_path = os.path.join(self.path, '.hg', "00changelog.i") st_path = os.path.join(self.path, '.hg', "store") if os.path.exists(cl_path): @@ -412,7 +411,7 @@ def _get_revision(self, revision): """ - Gets an ID revision given as str. This will always return a fill + Gets an ID revision given as str. This will always return a full 40 char revision number :param revision: str or int or None @@ -427,13 +426,13 @@ revision = 'tip' try: - revision = hex(self._repo.lookup(revision)) + revision = self._repo[revision].hex() + except (IndexError, ValueError, RepoLookupError, TypeError): + msg = ("Revision %s does not exist for %s" % (revision, self)) + raise ChangesetDoesNotExistError(msg) except (LookupError, ): msg = ("Ambiguous identifier `%s` for %s" % (revision, self)) raise ChangesetDoesNotExistError(msg) - except (IndexError, ValueError, RepoLookupError, TypeError): - msg = ("Revision %s does not exist for %s" % (revision, self)) - raise ChangesetDoesNotExistError(msg) return revision @@ -488,8 +487,8 @@ to filesystem (``file:///``) schema. """ - url = str(url) - if url != 'default' and not '://' in url: + url = safe_str(url) + if url != 'default' and '://' not in url: url = "file:" + urllib.pathname2url(url) return url @@ -509,7 +508,7 @@ return changeset def get_changesets(self, start=None, end=None, start_date=None, - end_date=None, branch_name=None, reverse=False): + end_date=None, branch_name=None, reverse=False, max_revisions=None): """ Returns iterator of ``MercurialChangeset`` objects from start to end (both are inclusive) @@ -521,7 +520,6 @@ :param branch_name: :param reversed: return changesets in reversed order """ - start_raw_id = self._get_revision(start) start_pos = self.revisions.index(start_raw_id) if start else None end_raw_id = self._get_revision(end) @@ -536,19 +534,22 @@ raise BranchDoesNotExistError(msg) if end_pos is not None: end_pos += 1 - #filter branches + # filter branches filter_ = [] if branch_name: - filter_.append('branch("%s")' % (branch_name)) - - if start_date and not end_date: + filter_.append('branch("%s")' % safe_str(branch_name)) + if start_date: filter_.append('date(">%s")' % start_date) - if end_date and not start_date: + if end_date: filter_.append('date("<%s")' % end_date) - if start_date and end_date: - filter_.append('date(">%s") and date("<%s")' % (start_date, end_date)) - if filter_: - revisions = scmutil.revrange(self._repo, filter_) + if filter_ or max_revisions: + if filter_: + revspec = ' and '.join(filter_) + else: + revspec = 'all()' + if max_revisions: + revspec = 'limit(%s, %s)' % (revspec, max_revisions) + revisions = scmutil.revrange(self._repo, [revspec]) else: revisions = self.revisions diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/nodes.py --- a/kallithea/lib/vcs/nodes.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/nodes.py Thu Jun 07 01:46:02 2018 +0200 @@ -315,18 +315,8 @@ def get_mimetype(self): """ - Mimetype is calculated based on the file's content. If ``_mimetype`` - attribute is available, it will be returned (backends which store - mimetypes or can easily recognize them, should set this private - attribute to indicate that type should *NOT* be calculated). + Mimetype is calculated based on the file's content. """ - if hasattr(self, '_mimetype'): - if (isinstance(self._mimetype, (tuple, list,)) and - len(self._mimetype) == 2): - return self._mimetype - else: - raise NodeError('given _mimetype attribute must be an 2 ' - 'element list or tuple') mtype, encoding = mimetypes.guess_type(self.name) @@ -338,7 +328,7 @@ mtype = 'text/plain' encoding = None - #try with pygments + # try with pygments try: from pygments import lexers mt = lexers.get_lexer_for_filename(self.name).mimetypes @@ -604,27 +594,19 @@ is_binary = False size = 0 - def __init__(self, name, url=None, changeset=None, alias=None): + def __init__(self, name, url, changeset=None, alias=None): self.path = name self.kind = NodeKind.SUBMODULE self.alias = alias # we have to use emptyChangeset here since this can point to svn/git/hg # submodules we cannot get from repository self.changeset = EmptyChangeset(str(changeset), alias=alias) - self.url = url or self._extract_submodule_url() + self.url = url def __repr__(self): return '<%s %r @ %s>' % (self.__class__.__name__, self.path, getattr(self.changeset, 'short_id', '')) - def _extract_submodule_url(self): - if self.alias == 'git': - #TODO: find a way to parse gits submodule file and extract the - # linking URL - return self.path - if self.alias == 'hg': - return self.path - @LazyProperty def name(self): """ diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/subprocessio.py --- a/kallithea/lib/vcs/subprocessio.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/subprocessio.py Thu Jun 07 01:46:02 2018 +0200 @@ -1,8 +1,8 @@ """ Module provides a class allowing to wrap communication over subprocess.Popen -input, output, error streams into a meaningfull, non-blocking, concurrent +input, output, error streams into a meaningful, non-blocking, concurrent stream processor exposing the output data as an iterator fitting to be a -return value passed by a WSGI applicaiton to a WSGI server per PEP 3333. +return value passed by a WSGI application to a WSGI server per PEP 3333. Copyright (c) 2011 Daniel Dotsenko @@ -24,10 +24,11 @@ """ import os import subprocess -from kallithea.lib.vcs.utils.compat import deque, Event, Thread, _bytes, _bytearray +import collections +import threading -class StreamFeeder(Thread): +class StreamFeeder(threading.Thread): """ Normal writing into pipe-like is blocking once the buffer is filled. This thread allows a thread to seep data from a file-like into a pipe @@ -39,12 +40,12 @@ super(StreamFeeder, self).__init__() self.daemon = True filelike = False - self.bytes = _bytes() - if type(source) in (type(''), _bytes, _bytearray): # string-like - self.bytes = _bytes(source) + self.bytes = bytes() + if type(source) in (type(''), bytes, bytearray): # string-like + self.bytes = bytes(source) else: # can be either file pointer or file-like if type(source) in (int, long): # file pointer it is - ## converting file descriptor (int) stdin into file-like + # converting file descriptor (int) stdin into file-like source = os.fdopen(source, 'rb', 16384) # let's see if source is file-like by now filelike = hasattr(source, 'read') @@ -71,7 +72,7 @@ return self.readiface -class InputStreamChunker(Thread): +class InputStreamChunker(threading.Thread): def __init__(self, source, target, buffer_size, chunk_size): super(InputStreamChunker, self).__init__() @@ -83,16 +84,16 @@ self.chunk_count_max = int(buffer_size / chunk_size) + 1 self.chunk_size = chunk_size - self.data_added = Event() + self.data_added = threading.Event() self.data_added.clear() - self.keep_reading = Event() + self.keep_reading = threading.Event() self.keep_reading.set() - self.EOF = Event() + self.EOF = threading.Event() self.EOF.clear() - self.go = Event() + self.go = threading.Event() self.go.set() def stop(self): @@ -156,14 +157,14 @@ """ def __init__(self, source, buffer_size=65536, chunk_size=4096, - starting_values=[], bottomless=False): - + starting_values=None, bottomless=False): + starting_values = starting_values or [] if bottomless: maxlen = int(buffer_size / chunk_size) else: maxlen = None - self.data = deque(starting_values, maxlen) + self.data = collections.deque(starting_values, maxlen) self.worker = InputStreamChunker(source, self.data, buffer_size, chunk_size) if starting_values: @@ -183,7 +184,7 @@ self.worker.data_added.wait(0.2) if len(self.data): self.worker.keep_reading.set() - return _bytes(self.data.popleft()) + return bytes(self.data.popleft()) elif self.worker.EOF.is_set(): raise StopIteration @@ -233,7 +234,7 @@ Iterator might have done reading from underlying source, but the read chunks might still be available for serving through .next() method. - :returns: An Event class instance. + :returns: An threading.Event class instance. """ return self.worker.EOF @@ -326,7 +327,7 @@ """ def __init__(self, cmd, inputstream=None, buffer_size=65536, - chunk_size=4096, starting_values=[], **kwargs): + chunk_size=4096, starting_values=None, **kwargs): """ Initializes SubprocessIOChunker @@ -336,7 +337,7 @@ :param chunk_size: (Default: 4096) A max size of a chunk. Actual chunk may be smaller. :param starting_values: (Default: []) An array of strings to put in front of output que. """ - + starting_values = starting_values or [] if inputstream: input_streamer = StreamFeeder(inputstream) input_streamer.start() @@ -355,7 +356,7 @@ starting_values) bg_err = BufferedGenerator(_p.stderr, 16000, 1, bottomless=True) - while not bg_out.done_reading and not bg_out.reading_paused and not bg_err.length: + while not bg_out.done_reading and not bg_out.reading_paused: # doing this until we reach either end of file, or end of buffer. bg_out.data_added_event.wait(1) bg_out.data_added_event.clear() @@ -364,12 +365,9 @@ # Either way, if error (returned by ended process, or implied based on # presence of stuff in stderr output) we error out. # Else, we are happy. - _returncode = _p.poll() - if _returncode or (_returncode is None and bg_err.length): - try: - _p.terminate() - except Exception: - pass + returncode = _p.poll() + if (returncode is not None # process has terminated + and returncode != 0): # and it failed bg_out.stop() out = ''.join(bg_out) bg_err.stop() @@ -384,7 +382,7 @@ "Subprocess exited due to an error:\n" + err) else: raise EnvironmentError( - "Subprocess exited with non 0 ret code:%s" % _returncode) + "Subprocess exited with non 0 ret code: %s" % returncode) self.process = _p self.output = bg_out self.error = bg_err @@ -394,9 +392,14 @@ return self def next(self): - if self.process and self.process.poll(): - err = ''.join(self.error) - raise EnvironmentError("Subprocess exited due to an error:\n" + err) + if self.process: + returncode = self.process.poll() + if (returncode is not None # process has terminated + and returncode != 0): # and it failed + self.output.stop() + self.error.stop() + err = ''.join(self.error) + raise EnvironmentError("Subprocess exited due to an error:\n" + err) return self.output.next() def throw(self, type, value=None, traceback=None): diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/__init__.py --- a/kallithea/lib/vcs/utils/__init__.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/utils/__init__.py Thu Jun 07 01:46:02 2018 +0200 @@ -5,6 +5,7 @@ import time import datetime +import re def makedate(): @@ -150,30 +151,34 @@ return unicode_.encode(to_encoding[0], 'replace') +# Regex taken from http://www.regular-expressions.info/email.html +email_re = re.compile( + r"""[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@""" + r"""(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?""", + re.IGNORECASE) + + def author_email(author): """ - returns email address of given author. - If any of <,> sign are found, it fallbacks to regex findall() - and returns first found result or empty string + Returns email address of given author string. + If author contains <> brackets, only look inside that. + If any RFC valid email address is found, return that. + Else, return empty string. - Regex taken from http://www.regular-expressions.info/email.html """ if not author: return '' - import re - r = author.find('>') - l = author.find('<') - if l == -1 or r == -1: - # fallback to regex match of email out of a string - email_re = re.compile(r"""[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!""" - r"""#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z""" - r"""0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]""" - r"""*[a-z0-9])?""", re.IGNORECASE) - m = re.findall(email_re, author) - return m[0] if m else '' + l = author.find('<') + 1 + if l != 0: + r = author.find('>', l) + if r != -1: + author = author[l:r] - return author[l + 1:r].strip() + m = email_re.search(author) + if m is None: + return '' + return safe_str(m.group(0)) def author_name(author): @@ -184,7 +189,7 @@ """ if not author: return '' - if not '@' in author: + if '@' not in author: return author - return author.replace(author_email(author), '').replace('<', '')\ + return author.replace(author_email(author), '').replace('<', '') \ .replace('>', '').strip() diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/annotate.py --- a/kallithea/lib/vcs/utils/annotate.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/utils/annotate.py Thu Jun 07 01:46:02 2018 +0200 @@ -41,7 +41,7 @@ following function as ``annotate_from_changeset_func``:: def changeset_to_anchor(changeset): - return '%s\n' %\ + return '%s\n' % \ (changeset.id, changeset.id) :param annotate_from_changeset_func: see above @@ -122,7 +122,7 @@ for i in range(fl, fl + lncount): if i % st == 0: if aln: - lines.append('%*d' \ + lines.append('%*d' % (la, i, mw, i)) else: lines.append('%*d' % (mw, i)) @@ -134,7 +134,7 @@ # If pygments cropped last lines break we need do that too ln_cs = len(annotate_changesets) ln_ = len(ls.splitlines()) - if ln_cs > ln_: + if ln_cs > ln_: annotate_changesets = annotate_changesets[:ln_ - ln_cs] annotate = ''.join((self.annotate_from_changeset(changeset) for changeset in annotate_changesets)) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/baseui_config.py --- a/kallithea/lib/vcs/utils/baseui_config.py Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -from kallithea.lib.vcs.utils.hgcompat import ui, config - - -def make_ui(self, path='hgwebdir.config'): - """ - A function that will read python rc files and make an ui from read options - - :param path: path to mercurial config file - """ - #propagated from mercurial documentation - sections = [ - 'alias', - 'auth', - 'decode/encode', - 'defaults', - 'diff', - 'email', - 'extensions', - 'format', - 'merge-patterns', - 'merge-tools', - 'hooks', - 'http_proxy', - 'smtp', - 'patch', - 'paths', - 'profiling', - 'server', - 'trusted', - 'ui', - 'web', - ] - - repos = path - baseui = ui.ui() - cfg = config.config() - cfg.read(repos) - self.paths = cfg.items('paths') - self.base_path = self.paths[0][1].replace('*', '') - self.check_repo_dir(self.paths) - self.set_statics(cfg) - - for section in sections: - for k, v in cfg.items(section): - baseui.setconfig(section, k, v) - - return baseui diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/compat.py --- a/kallithea/lib/vcs/utils/compat.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/utils/compat.py Thu Jun 07 01:46:02 2018 +0200 @@ -4,6 +4,7 @@ Those utilities may be deleted once ``vcs`` stops support for older Python versions. """ + import sys import array @@ -11,308 +12,3 @@ unittest = __import__('unittest') else: unittest = __import__('unittest2') - - -if sys.version_info >= (2, 6): - _bytes = bytes -else: - # in py2.6 bytes is a synonym for str - _bytes = str - -if sys.version_info >= (2, 6): - _bytearray = bytearray -else: - # no idea if this is correct but all integration tests are passing - # i think we never use bytearray anyway - _bytearray = array - -if sys.version_info >= (2, 6): - from collections import deque -else: - #need to implement our own deque with maxlen - class deque(object): - - def __init__(self, iterable=(), maxlen= -1): - if not hasattr(self, 'data'): - self.left = self.right = 0 - self.data = {} - self.maxlen = maxlen or -1 - self.extend(iterable) - - def append(self, x): - self.data[self.right] = x - self.right += 1 - if self.maxlen != -1 and len(self) > self.maxlen: - self.popleft() - - def appendleft(self, x): - self.left -= 1 - self.data[self.left] = x - if self.maxlen != -1 and len(self) > self.maxlen: - self.pop() - - def pop(self): - if self.left == self.right: - raise IndexError('cannot pop from empty deque') - self.right -= 1 - elem = self.data[self.right] - del self.data[self.right] - return elem - - def popleft(self): - if self.left == self.right: - raise IndexError('cannot pop from empty deque') - elem = self.data[self.left] - del self.data[self.left] - self.left += 1 - return elem - - def clear(self): - self.data.clear() - self.left = self.right = 0 - - def extend(self, iterable): - for elem in iterable: - self.append(elem) - - def extendleft(self, iterable): - for elem in iterable: - self.appendleft(elem) - - def rotate(self, n=1): - if self: - n %= len(self) - for i in xrange(n): - self.appendleft(self.pop()) - - def __getitem__(self, i): - if i < 0: - i += len(self) - try: - return self.data[i + self.left] - except KeyError: - raise IndexError - - def __setitem__(self, i, value): - if i < 0: - i += len(self) - try: - self.data[i + self.left] = value - except KeyError: - raise IndexError - - def __delitem__(self, i): - size = len(self) - if not (-size <= i < size): - raise IndexError - data = self.data - if i < 0: - i += size - for j in xrange(self.left + i, self.right - 1): - data[j] = data[j + 1] - self.pop() - - def __len__(self): - return self.right - self.left - - def __cmp__(self, other): - if type(self) != type(other): - return cmp(type(self), type(other)) - return cmp(list(self), list(other)) - - def __repr__(self, _track=[]): - if id(self) in _track: - return '...' - _track.append(id(self)) - r = 'deque(%r, maxlen=%s)' % (list(self), self.maxlen) - _track.remove(id(self)) - return r - - def __getstate__(self): - return (tuple(self),) - - def __setstate__(self, s): - self.__init__(s[0]) - - def __hash__(self): - raise TypeError - - def __copy__(self): - return self.__class__(self) - - def __deepcopy__(self, memo={}): - from copy import deepcopy - result = self.__class__() - memo[id(self)] = result - result.__init__(deepcopy(tuple(self), memo)) - return result - - -#============================================================================== -# threading.Event -#============================================================================== - -if sys.version_info >= (2, 6): - from threading import Event, Thread -else: - from threading import _Verbose, Lock, Thread, _time, \ - _allocate_lock, RLock, _sleep - - def Condition(*args, **kwargs): - return _Condition(*args, **kwargs) - - class _Condition(_Verbose): - - def __init__(self, lock=None, verbose=None): - _Verbose.__init__(self, verbose) - if lock is None: - lock = RLock() - self.__lock = lock - # Export the lock's acquire() and release() methods - self.acquire = lock.acquire - self.release = lock.release - # If the lock defines _release_save() and/or _acquire_restore(), - # these override the default implementations (which just call - # release() and acquire() on the lock). Ditto for _is_owned(). - try: - self._release_save = lock._release_save - except AttributeError: - pass - try: - self._acquire_restore = lock._acquire_restore - except AttributeError: - pass - try: - self._is_owned = lock._is_owned - except AttributeError: - pass - self.__waiters = [] - - def __enter__(self): - return self.__lock.__enter__() - - def __exit__(self, *args): - return self.__lock.__exit__(*args) - - def __repr__(self): - return "" % (self.__lock, len(self.__waiters)) - - def _release_save(self): - self.__lock.release() # No state to save - - def _acquire_restore(self, x): - self.__lock.acquire() # Ignore saved state - - def _is_owned(self): - # Return True if lock is owned by current_thread. - # This method is called only if __lock doesn't have _is_owned(). - if self.__lock.acquire(0): - self.__lock.release() - return False - else: - return True - - def wait(self, timeout=None): - if not self._is_owned(): - raise RuntimeError("cannot wait on un-acquired lock") - waiter = _allocate_lock() - waiter.acquire() - self.__waiters.append(waiter) - saved_state = self._release_save() - try: # restore state no matter what (e.g., KeyboardInterrupt) - if timeout is None: - waiter.acquire() - if __debug__: - self._note("%s.wait(): got it", self) - else: - # Balancing act: We can't afford a pure busy loop, so we - # have to sleep; but if we sleep the whole timeout time, - # we'll be unresponsive. The scheme here sleeps very - # little at first, longer as time goes on, but never longer - # than 20 times per second (or the timeout time remaining). - endtime = _time() + timeout - delay = 0.0005 # 500 us -> initial delay of 1 ms - while True: - gotit = waiter.acquire(0) - if gotit: - break - remaining = endtime - _time() - if remaining <= 0: - break - delay = min(delay * 2, remaining, .05) - _sleep(delay) - if not gotit: - if __debug__: - self._note("%s.wait(%s): timed out", self, timeout) - try: - self.__waiters.remove(waiter) - except ValueError: - pass - else: - if __debug__: - self._note("%s.wait(%s): got it", self, timeout) - finally: - self._acquire_restore(saved_state) - - def notify(self, n=1): - if not self._is_owned(): - raise RuntimeError("cannot notify on un-acquired lock") - __waiters = self.__waiters - waiters = __waiters[:n] - if not waiters: - if __debug__: - self._note("%s.notify(): no waiters", self) - return - self._note("%s.notify(): notifying %d waiter%s", self, n, - n != 1 and "s" or "") - for waiter in waiters: - waiter.release() - try: - __waiters.remove(waiter) - except ValueError: - pass - - def notifyAll(self): - self.notify(len(self.__waiters)) - - notify_all = notifyAll - - def Event(*args, **kwargs): - return _Event(*args, **kwargs) - - class _Event(_Verbose): - - # After Tim Peters' event class (without is_posted()) - - def __init__(self, verbose=None): - _Verbose.__init__(self, verbose) - self.__cond = Condition(Lock()) - self.__flag = False - - def isSet(self): - return self.__flag - - is_set = isSet - - def set(self): - self.__cond.acquire() - try: - self.__flag = True - self.__cond.notify_all() - finally: - self.__cond.release() - - def clear(self): - self.__cond.acquire() - try: - self.__flag = False - finally: - self.__cond.release() - - def wait(self, timeout=None): - self.__cond.acquire() - try: - if not self.__flag: - self.__cond.wait(timeout) - finally: - self.__cond.release() diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/diffs.py --- a/kallithea/lib/vcs/utils/diffs.py Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,460 +0,0 @@ -# -*- coding: utf-8 -*- -# original copyright: 2007-2008 by Armin Ronacher -# licensed under the BSD license. - -import re -import difflib -import logging -import itertools - -from difflib import unified_diff - -from kallithea.lib.vcs.exceptions import VCSError -from kallithea.lib.vcs.nodes import FileNode, NodeError -from kallithea.lib.vcs.utils import safe_unicode - - -def get_udiff(filenode_old, filenode_new, show_whitespace=True): - """ - Returns unified diff between given ``filenode_old`` and ``filenode_new``. - """ - try: - filenode_old_date = filenode_old.changeset.date - except NodeError: - filenode_old_date = None - - try: - filenode_new_date = filenode_new.changeset.date - except NodeError: - filenode_new_date = None - - for filenode in (filenode_old, filenode_new): - if not isinstance(filenode, FileNode): - raise VCSError("Given object should be FileNode object, not %s" - % filenode.__class__) - - if filenode_old_date and filenode_new_date: - if not filenode_old_date < filenode_new_date: - logging.debug("Generating udiff for filenodes with not increasing " - "dates") - - vcs_udiff = unified_diff(filenode_old.content.splitlines(True), - filenode_new.content.splitlines(True), - filenode_old.name, - filenode_new.name, - filenode_old_date, - filenode_old_date) - return vcs_udiff - - -def get_gitdiff(filenode_old, filenode_new, ignore_whitespace=True): - """ - Returns git style diff between given ``filenode_old`` and ``filenode_new``. - - :param ignore_whitespace: ignore whitespaces in diff - """ - - for filenode in (filenode_old, filenode_new): - if not isinstance(filenode, FileNode): - raise VCSError("Given object should be FileNode object, not %s" - % filenode.__class__) - - old_raw_id = getattr(filenode_old.changeset, 'raw_id', '0' * 40) - new_raw_id = getattr(filenode_new.changeset, 'raw_id', '0' * 40) - - repo = filenode_new.changeset.repository - vcs_gitdiff = repo.get_diff(old_raw_id, new_raw_id, filenode_new.path, - ignore_whitespace) - - return vcs_gitdiff - - -class DiffProcessor(object): - """ - Give it a unified diff and it returns a list of the files that were - mentioned in the diff together with a dict of meta information that - can be used to render it in a HTML template. - """ - _chunk_re = re.compile(r'@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)') - - def __init__(self, diff, differ='diff', format='udiff'): - """ - :param diff: a text in diff format or generator - :param format: format of diff passed, `udiff` or `gitdiff` - """ - if isinstance(diff, basestring): - diff = [diff] - - self.__udiff = diff - self.__format = format - self.adds = 0 - self.removes = 0 - - if isinstance(self.__udiff, basestring): - self.lines = iter(self.__udiff.splitlines(1)) - - elif self.__format == 'gitdiff': - udiff_copy = self.copy_iterator() - self.lines = itertools.imap(self.escaper, - self._parse_gitdiff(udiff_copy)) - else: - udiff_copy = self.copy_iterator() - self.lines = itertools.imap(self.escaper, udiff_copy) - - # Select a differ. - if differ == 'difflib': - self.differ = self._highlight_line_difflib - else: - self.differ = self._highlight_line_udiff - - def escaper(self, string): - return string.replace('<', '<').replace('>', '>') - - def copy_iterator(self): - """ - make a fresh copy of generator, we should not iterate thru - an original as it's needed for repeating operations on - this instance of DiffProcessor - """ - self.__udiff, iterator_copy = itertools.tee(self.__udiff) - return iterator_copy - - def _extract_rev(self, line1, line2): - """ - Extract the filename and revision hint from a line. - """ - - try: - if line1.startswith('--- ') and line2.startswith('+++ '): - l1 = line1[4:].split(None, 1) - old_filename = l1[0].lstrip('a/') if len(l1) >= 1 else None - old_rev = l1[1] if len(l1) == 2 else 'old' - - l2 = line2[4:].split(None, 1) - new_filename = l2[0].lstrip('b/') if len(l1) >= 1 else None - new_rev = l2[1] if len(l2) == 2 else 'new' - - filename = old_filename if (old_filename != - 'dev/null') else new_filename - - return filename, new_rev, old_rev - except (ValueError, IndexError): - pass - - return None, None, None - - def _parse_gitdiff(self, diffiterator): - def line_decoder(l): - if l.startswith('+') and not l.startswith('+++'): - self.adds += 1 - elif l.startswith('-') and not l.startswith('---'): - self.removes += 1 - return safe_unicode(l) - - output = list(diffiterator) - size = len(output) - - if size == 2: - l = [] - l.extend([output[0]]) - l.extend(output[1].splitlines(1)) - return map(line_decoder, l) - elif size == 1: - return map(line_decoder, output[0].splitlines(1)) - elif size == 0: - return [] - - raise Exception('wrong size of diff %s' % size) - - def _highlight_line_difflib(self, line, next): - """ - Highlight inline changes in both lines. - """ - - if line['action'] == 'del': - old, new = line, next - else: - old, new = next, line - - oldwords = re.split(r'(\W)', old['line']) - newwords = re.split(r'(\W)', new['line']) - - sequence = difflib.SequenceMatcher(None, oldwords, newwords) - - oldfragments, newfragments = [], [] - for tag, i1, i2, j1, j2 in sequence.get_opcodes(): - oldfrag = ''.join(oldwords[i1:i2]) - newfrag = ''.join(newwords[j1:j2]) - if tag != 'equal': - if oldfrag: - oldfrag = '%s' % oldfrag - if newfrag: - newfrag = '%s' % newfrag - oldfragments.append(oldfrag) - newfragments.append(newfrag) - - old['line'] = "".join(oldfragments) - new['line'] = "".join(newfragments) - - def _highlight_line_udiff(self, line, next): - """ - Highlight inline changes in both lines. - """ - start = 0 - limit = min(len(line['line']), len(next['line'])) - while start < limit and line['line'][start] == next['line'][start]: - start += 1 - end = -1 - limit -= start - while -end <= limit and line['line'][end] == next['line'][end]: - end -= 1 - end += 1 - if start or end: - def do(l): - last = end + len(l['line']) - if l['action'] == 'add': - tag = 'ins' - else: - tag = 'del' - l['line'] = '%s<%s>%s%s' % ( - l['line'][:start], - tag, - l['line'][start:last], - tag, - l['line'][last:] - ) - do(line) - do(next) - - def _parse_udiff(self): - """ - Parse the diff an return data for the template. - """ - lineiter = self.lines - files = [] - try: - line = lineiter.next() - # skip first context - skipfirst = True - while 1: - # continue until we found the old file - if not line.startswith('--- '): - line = lineiter.next() - continue - - chunks = [] - filename, old_rev, new_rev = \ - self._extract_rev(line, lineiter.next()) - files.append({ - 'filename': filename, - 'old_revision': old_rev, - 'new_revision': new_rev, - 'chunks': chunks - }) - - line = lineiter.next() - while line: - match = self._chunk_re.match(line) - if not match: - break - - lines = [] - chunks.append(lines) - - old_line, old_end, new_line, new_end = \ - [int(x or 1) for x in match.groups()[:-1]] - old_line -= 1 - new_line -= 1 - context = len(match.groups()) == 5 - old_end += old_line - new_end += new_line - - if context: - if not skipfirst: - lines.append({ - 'old_lineno': '...', - 'new_lineno': '...', - 'action': 'context', - 'line': line, - }) - else: - skipfirst = False - - line = lineiter.next() - while old_line < old_end or new_line < new_end: - if line: - command, line = line[0], line[1:] - else: - command = ' ' - affects_old = affects_new = False - - # ignore those if we don't expect them - if command in '#@': - continue - elif command == '+': - affects_new = True - action = 'add' - elif command == '-': - affects_old = True - action = 'del' - else: - affects_old = affects_new = True - action = 'unmod' - - old_line += affects_old - new_line += affects_new - lines.append({ - 'old_lineno': affects_old and old_line or '', - 'new_lineno': affects_new and new_line or '', - 'action': action, - 'line': line - }) - line = lineiter.next() - - except StopIteration: - pass - - # highlight inline changes - for file in files: - for chunk in chunks: - lineiter = iter(chunk) - #first = True - try: - while 1: - line = lineiter.next() - if line['action'] != 'unmod': - nextline = lineiter.next() - if nextline['action'] == 'unmod' or \ - nextline['action'] == line['action']: - continue - self.differ(line, nextline) - except StopIteration: - pass - - return files - - def prepare(self): - """ - Prepare the passed udiff for HTML rendering. It'l return a list - of dicts - """ - return self._parse_udiff() - - def _safe_id(self, idstring): - """Make a string safe for including in an id attribute. - - The HTML spec says that id attributes 'must begin with - a letter ([A-Za-z]) and may be followed by any number - of letters, digits ([0-9]), hyphens ("-"), underscores - ("_"), colons (":"), and periods (".")'. These regexps - are slightly over-zealous, in that they remove colons - and periods unnecessarily. - - Whitespace is transformed into underscores, and then - anything which is not a hyphen or a character that - matches \w (alphanumerics and underscore) is removed. - - """ - # Transform all whitespace to underscore - idstring = re.sub(r'\s', "_", idstring) - # Remove everything that is not a hyphen or a member of \w - idstring = re.sub(r'(?!-)\W', "", idstring).lower() - return idstring - - def raw_diff(self): - """ - Returns raw string as udiff - """ - udiff_copy = self.copy_iterator() - if self.__format == 'gitdiff': - udiff_copy = self._parse_gitdiff(udiff_copy) - return u''.join(udiff_copy) - - def as_html(self, table_class='code-difftable', line_class='line', - new_lineno_class='lineno old', old_lineno_class='lineno new', - code_class='code'): - """ - Return udiff as html table with customized css classes - """ - def _link_to_if(condition, label, url): - """ - Generates a link if condition is meet or just the label if not. - """ - - if condition: - return '''%(label)s''' % {'url': url, - 'label': label} - else: - return label - diff_lines = self.prepare() - _html_empty = True - _html = [] - _html.append('''\n''' \ - % {'table_class': table_class}) - for diff in diff_lines: - for line in diff['chunks']: - _html_empty = False - for change in line: - _html.append('''\n''' \ - % {'line_class': line_class, - 'action': change['action']}) - anchor_old_id = '' - anchor_new_id = '' - anchor_old = "%(filename)s_o%(oldline_no)s" % \ - {'filename': self._safe_id(diff['filename']), - 'oldline_no': change['old_lineno']} - anchor_new = "%(filename)s_n%(oldline_no)s" % \ - {'filename': self._safe_id(diff['filename']), - 'oldline_no': change['new_lineno']} - cond_old = change['old_lineno'] != '...' and \ - change['old_lineno'] - cond_new = change['new_lineno'] != '...' and \ - change['new_lineno'] - if cond_old: - anchor_old_id = 'id="%s"' % anchor_old - if cond_new: - anchor_new_id = 'id="%s"' % anchor_new - ########################################################### - # OLD LINE NUMBER - ########################################################### - _html.append('''\t\n''') - ########################################################### - # NEW LINE NUMBER - ########################################################### - - _html.append('''\t\n''') - ########################################################### - # CODE - ########################################################### - _html.append('''\t''') - _html.append('''\n\n''') - _html.append('''
''' \ - % {'a_id': anchor_old_id, - 'old_lineno_cls': old_lineno_class}) - - _html.append('''
%(link)s
''' \ - % {'link': - _link_to_if(cond_old, change['old_lineno'], '#%s' \ - % anchor_old)}) - _html.append('''
''' \ - % {'a_id': anchor_new_id, - 'new_lineno_cls': new_lineno_class}) - - _html.append('''
%(link)s
''' \ - % {'link': - _link_to_if(cond_new, change['new_lineno'], '#%s' \ - % anchor_new)}) - _html.append('''
''' \ - % {'code_class': code_class}) - _html.append('''\n\t\t
%(code)s
\n''' \ - % {'code': change['line']}) - _html.append('''\t
''') - if _html_empty: - return None - return ''.join(_html) - - def stat(self): - """ - Returns tuple of adde,and removed lines for this instance - """ - return self.adds, self.removes diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/helpers.py --- a/kallithea/lib/vcs/utils/helpers.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/utils/helpers.py Thu Jun 07 01:46:02 2018 +0200 @@ -99,16 +99,6 @@ return result -def run_command(cmd, *args): - """ - Runs command on the system with given ``args``. - """ - command = ' '.join((cmd, args)) - p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE) - stdout, stderr = p.communicate() - return p.retcode, stdout, stderr - - def get_highlighted_code(name, code, type='terminal'): """ If pygments are available on the system @@ -149,7 +139,7 @@ """ text = text.strip() CID_RE = r'[a-zA-Z0-9]+' - if not '..' in text: + if '..' not in text: m = re.match(r'^(?P%s)$' % CID_RE, text) if m: return { diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/hgcompat.py --- a/kallithea/lib/vcs/utils/hgcompat.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/utils/hgcompat.py Thu Jun 07 01:46:02 2018 +0200 @@ -3,15 +3,16 @@ """ import mercurial -import mercurial.demandimport -## patch demandimport, due to bug in mercurial when it always triggers demandimport.enable() -mercurial.demandimport.enable = lambda *args, **kwargs: 1 +from mercurial import demandimport +# patch demandimport, due to bug in mercurial when it always triggers demandimport.enable() +demandimport.enable = lambda *args, **kwargs: 1 from mercurial import archival, merge as hg_merge, patch, ui from mercurial import discovery from mercurial import localrepo from mercurial import unionrepo from mercurial import scmutil from mercurial import config +from mercurial import tags as tagsmod from mercurial.commands import clone, nullid, pull from mercurial.context import memctx, memfilectx from mercurial.error import RepoError, RepoLookupError, Abort @@ -25,24 +26,33 @@ from mercurial.discovery import findcommonoutgoing from mercurial.hg import peer from mercurial.httppeer import httppeer -from mercurial.sshpeer import sshpeer +try: # sshpeer was renamed in Mercurial 4.6 (625038cb4b1d), but v1 is still good enough + from mercurial.sshpeer import sshv1peer as sshpeer +except ImportError: + from mercurial.sshpeer import sshpeer from mercurial.util import url as hg_url from mercurial.scmutil import revrange from mercurial.node import nullrev - -# those authhandlers are patched for python 2.6.5 bug an -# infinite looping when given invalid resources from mercurial.url import httpbasicauthhandler, httpdigestauthhandler + +# Mercurial 4.5 8a0cac20a1ad introduced an extra memctx changectx argument +# - introduce an optional wrapper factory that doesn't pass it on import inspect -# Mercurial 3.1 503bb3af70fe -if inspect.getargspec(memfilectx.__init__).args[1] != 'repo': - _org__init__=memfilectx.__init__ - def _memfilectx__init__(self, repo, *a, **b): - return _org__init__(self, *a, **b) - memfilectx.__init__ = _memfilectx__init__ +if inspect.getargspec(memfilectx.__init__).args[2] != 'changectx': + __org_memfilectx = memfilectx + memfilectx = lambda repo, changectx, *args, **kwargs: __org_memfilectx(repo, *args, **kwargs) + # workaround for 3.3 94ac64bcf6fe and not calling largefiles reposetup correctly localrepository._lfstatuswriters = [lambda *msg, **opts: None] # 3.5 7699d3212994 added the invariant that repo.lfstatus must exist before hitting overridearchive localrepository.lfstatus = False + +# Mercurial 4.2 moved tag from localrepo to the tags module +def tag(repo, *args): + try: + tag_f = tagsmod.tag + except AttributeError: + return repo.tag(*args) + tag_f(repo, *args) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/imports.py --- a/kallithea/lib/vcs/utils/imports.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/utils/imports.py Thu Jun 07 01:46:02 2018 +0200 @@ -19,7 +19,7 @@ try: class_mod = __import__(mod_path, {}, {}, [class_name]) except ImportError as err: - msg = "There was problem while trying to import backend class. "\ + msg = "There was problem while trying to import backend class. " \ "Original error was:\n%s" % err raise VCSError(msg) cls = getattr(class_mod, class_name) diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/lazy.py --- a/kallithea/lib/vcs/utils/lazy.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/utils/lazy.py Thu Jun 07 01:46:02 2018 +0200 @@ -9,6 +9,7 @@ def __reduce__(self): return '_missing' + _missing = _Missing() diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/progressbar.py --- a/kallithea/lib/vcs/utils/progressbar.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/utils/progressbar.py Thu Jun 07 01:46:02 2018 +0200 @@ -10,6 +10,7 @@ class ProgressBarError(Exception): pass + class AlreadyFinishedError(ProgressBarError): pass @@ -179,6 +180,7 @@ RESET = '0' opt_dict = {'bold': '1', 'underscore': '4', 'blink': '5', 'reverse': '7', 'conceal': '8'} + def colorize(text='', opts=(), **kwargs): """ Returns your text, enclosed in ANSI graphics codes. @@ -223,6 +225,7 @@ text = text + '\x1b[%sm' % RESET return ('\x1b[%sm' % ';'.join(code_list)) + text + def make_style(opts=(), **kwargs): """ Returns a function with default parameters for colorize() @@ -235,6 +238,7 @@ """ return lambda text: colorize(text, opts, **kwargs) + NOCOLOR_PALETTE = 'nocolor' DARK_PALETTE = 'dark' LIGHT_PALETTE = 'light' @@ -348,7 +352,6 @@ pass - def main(): import time diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/vcs/utils/termcolors.py --- a/kallithea/lib/vcs/utils/termcolors.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/vcs/utils/termcolors.py Thu Jun 07 01:46:02 2018 +0200 @@ -11,6 +11,7 @@ RESET = '0' opt_dict = {'bold': '1', 'underscore': '4', 'blink': '5', 'reverse': '7', 'conceal': '8'} + def colorize(text='', opts=(), **kwargs): """ Returns your text, enclosed in ANSI graphics codes. @@ -55,6 +56,7 @@ text = text + '\x1b[%sm' % RESET return ('\x1b[%sm' % ';'.join(code_list)) + text + def make_style(opts=(), **kwargs): """ Returns a function with default parameters for colorize() @@ -67,6 +69,7 @@ """ return lambda text: colorize(text, opts, **kwargs) + NOCOLOR_PALETTE = 'nocolor' DARK_PALETTE = 'dark' LIGHT_PALETTE = 'light' @@ -120,10 +123,11 @@ } DEFAULT_PALETTE = DARK_PALETTE + def parse_color_setting(config_string): """Parse a DJANGO_COLORS environment variable to produce the system palette - The general form of a pallete definition is: + The general form of a palette definition is: "palette;role=fg;role=fg/bg;role=fg,option,option;role=fg/bg,option,option" @@ -135,7 +139,7 @@ option is a display options. Specifying a named palette is the same as manually specifying the individual - definitions for each role. Any individual definitions following the pallete + definitions for each role. Any individual definitions following the palette definition will augment the base palette definition. Valid roles: diff -r 42788d5f5967 -r b3289fef0daa kallithea/lib/verlib.py --- a/kallithea/lib/verlib.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/lib/verlib.py Thu Jun 07 01:46:02 2018 +0200 @@ -5,10 +5,12 @@ import re + class IrrationalVersionError(Exception): """This is an irrational version.""" pass + class HugeMajorVersionNumError(IrrationalVersionError): """An irrational version because the major version number is huge (often because a year or date was used). @@ -18,6 +20,7 @@ """ pass + # A marker used in the second and third parts of the `parts` tuple, for # versions that don't have those segments, to sort properly. An example # of versions in sort order ('highest' last): @@ -47,6 +50,7 @@ (?P(\.post(?P\d+))?(\.dev(?P\d+))?)? $''', re.VERBOSE) + class NormalizedVersion(object): """A rational version. @@ -212,6 +216,7 @@ def __ge__(self, other): return self.__eq__(other) or self.__gt__(other) + def suggest_normalized_version(s): """Suggest a normalized version close to the given version string. @@ -251,7 +256,7 @@ rs = re.sub(r"dev$", r"dev0", rs) # if we have something like "b-2" or "a.2" at the end of the - # version, that is pobably beta, alpha, etc + # version, that is probably beta, alpha, etc # let's remove the dash or dot rs = re.sub(r"([abc|rc])[\-\.](\d+)$", r"\1\2", rs) @@ -267,7 +272,7 @@ rs = rs[1:] # Clean leading '0's on numbers. - #TODO: unintended side-effect on, e.g., "2003.05.09" + # TODO: unintended side-effect on, e.g., "2003.05.09" # PyPI stats: 77 (~2%) better rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) @@ -313,7 +318,6 @@ # PyPI stats: ~21 (0.62%) better rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) - # Tcl/Tk uses "px" for their post release markers rs = re.sub(r"p(\d+)$", r".post\1", rs) diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/__init__.py --- a/kallithea/model/__init__.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/__init__.py Thu Jun 07 01:46:02 2018 +0200 @@ -23,119 +23,4 @@ :author: marcink :copyright: (c) 2013 RhodeCode GmbH, and others. :license: GPLv3, see LICENSE.md for more details. - - -:example: - - .. code-block:: python - - from paste.deploy import appconfig - from pylons import config - from sqlalchemy import engine_from_config - from kallithea.config.environment import load_environment - - conf = appconfig('config:development.ini', relative_to = './../../') - load_environment(conf.global_conf, conf.local_conf) - - engine = engine_from_config(config, 'sqlalchemy.') - init_model(engine) - # RUN YOUR CODE HERE - """ - - -import logging -from kallithea.model import meta -from kallithea.lib.utils2 import safe_str, obfuscate_url_pw - -log = logging.getLogger(__name__) - - -def init_model(engine): - """ - Initializes db session, bind the engine with the metadata, - Call this before using any of the tables or classes in the model, - preferably once in application start - - :param engine: engine to bind to - """ - engine_str = obfuscate_url_pw(str(engine.url)) - log.info("initializing db for %s", engine_str) - meta.Base.metadata.bind = engine - - -class BaseModel(object): - """ - Base Model for all Kallithea models, it adds sql alchemy session - into instance of model - - :param sa: If passed it reuses this session instead of creating a new one - """ - - cls = None # override in child class - - def __init__(self, sa=None): - if sa is not None: - self.sa = sa - else: - self.sa = meta.Session() - - def _get_instance(self, cls, instance, callback=None): - """ - Gets instance of given cls using some simple lookup mechanism. - - :param cls: class to fetch - :param instance: int or Instance - :param callback: callback to call if all lookups failed - """ - - if isinstance(instance, cls): - return instance - elif isinstance(instance, (int, long)) or safe_str(instance).isdigit(): - return cls.get(instance) - else: - if instance is not None: - if callback is None: - raise Exception( - 'given object must be int, long or Instance of %s ' - 'got %s, no callback provided' % (cls, type(instance)) - ) - else: - return callback(instance) - - def _get_user(self, user): - """ - Helper method to get user by ID, or username fallback - - :param user: UserID, username, or User instance - """ - from kallithea.model.db import User - return self._get_instance(User, user, - callback=User.get_by_username) - - def _get_repo(self, repository): - """ - Helper method to get repository by ID, or repository name - - :param repository: RepoID, repository name or Repository Instance - """ - from kallithea.model.db import Repository - return self._get_instance(Repository, repository, - callback=Repository.get_by_repo_name) - - def _get_perm(self, permission): - """ - Helper method to get permission by ID, or permission name - - :param permission: PermissionID, permission_name or Permission instance - """ - from kallithea.model.db import Permission - return self._get_instance(Permission, permission, - callback=Permission.get_by_key) - - @classmethod - def get_all(cls): - """ - Returns all instances of what is defined in `cls` class variable - """ - return cls.cls.getAll() diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/api_key.py --- a/kallithea/model/api_key.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/api_key.py Thu Jun 07 01:46:02 2018 +0200 @@ -27,18 +27,15 @@ import time import logging -from sqlalchemy import or_ from kallithea.lib.utils2 import generate_api_key -from kallithea.model import BaseModel -from kallithea.model.db import UserApiKeys +from kallithea.model.db import User, UserApiKeys from kallithea.model.meta import Session log = logging.getLogger(__name__) -class ApiKeyModel(BaseModel): - cls = UserApiKeys +class ApiKeyModel(object): def create(self, user, description, lifetime=-1): """ @@ -46,7 +43,7 @@ :param description: description of ApiKey :param lifetime: expiration time in seconds """ - user = self._get_user(user) + user = User.guess_instance(user) new_api_key = UserApiKeys() new_api_key.api_key = generate_api_key() @@ -65,18 +62,16 @@ api_key = UserApiKeys.query().filter(UserApiKeys.api_key == api_key) if user is not None: - user = self._get_user(user) + user = User.guess_instance(user) api_key = api_key.filter(UserApiKeys.user_id == user.user_id) api_key = api_key.scalar() Session().delete(api_key) def get_api_keys(self, user, show_expired=True): - user = self._get_user(user) - user_api_keys = UserApiKeys.query()\ + user = User.guess_instance(user) + user_api_keys = UserApiKeys.query() \ .filter(UserApiKeys.user_id == user.user_id) if not show_expired: - user_api_keys = user_api_keys\ - .filter(or_(UserApiKeys.expires == -1, - UserApiKeys.expires >= time.time())) + user_api_keys = user_api_keys.filter_by(is_expired=False) return user_api_keys diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/base.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/model/base.py Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +""" +kallithea.model.base +~~~~~~~~~~~~~~~~~~~~ + +The application's model objects + +This file was forked by the Kallithea project in July 2014. +Original author and date, and relevant copyright and licensing information is below: +:created_on: Nov 25, 2010 +:author: marcink +:copyright: (c) 2013 RhodeCode GmbH, and others. +:license: GPLv3, see LICENSE.md for more details. +""" + + +import logging +from kallithea.model import meta +from kallithea.lib.utils2 import obfuscate_url_pw + +log = logging.getLogger(__name__) + + +def init_model(engine): + """ + Initializes db session, bind the engine with the metadata, + Call this before using any of the tables or classes in the model, + preferably once in application start + + :param engine: engine to bind to + """ + engine_str = obfuscate_url_pw(str(engine.url)) + log.info("initializing db for %s", engine_str) + meta.Base.metadata.bind = engine diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/changeset_status.py --- a/kallithea/model/changeset_status.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/changeset_status.py Thu Jun 07 01:46:02 2018 +0200 @@ -28,36 +28,28 @@ import logging from sqlalchemy.orm import joinedload -from kallithea.model import BaseModel -from kallithea.model.db import ChangesetStatus, PullRequest +from kallithea.model.db import ChangesetStatus, PullRequest, Repository, User, Session from kallithea.lib.exceptions import StatusChangeOnClosedPullRequestError log = logging.getLogger(__name__) -class ChangesetStatusModel(BaseModel): - - cls = ChangesetStatus - - def __get_changeset_status(self, changeset_status): - return self._get_instance(ChangesetStatus, changeset_status) - - def __get_pull_request(self, pull_request): - return self._get_instance(PullRequest, pull_request) +class ChangesetStatusModel(object): def _get_status_query(self, repo, revision, pull_request, with_revisions=False): - repo = self._get_repo(repo) + repo = Repository.guess_instance(repo) - q = ChangesetStatus.query()\ + q = ChangesetStatus.query() \ .filter(ChangesetStatus.repo == repo) if not with_revisions: + # only report the latest vote across all users! TODO: be smarter! q = q.filter(ChangesetStatus.version == 0) if revision: q = q.filter(ChangesetStatus.revision == revision) elif pull_request: - pull_request = self.__get_pull_request(pull_request) + pull_request = PullRequest.guess_instance(pull_request) q = q.filter(ChangesetStatus.pull_request == pull_request) else: raise Exception('Please specify revision or pull_request') @@ -98,14 +90,14 @@ pull_request_reviewers = [] pull_request_pending_reviewers = [] relevant_statuses = [] - for r in pull_request.reviewers: - st = cs_statuses.get(r.user.username) + for user in pull_request.get_reviewer_users(): + st = cs_statuses.get(user.username) relevant_statuses.append(st) - if not st or st.status in (ChangesetStatus.STATUS_NOT_REVIEWED, - ChangesetStatus.STATUS_UNDER_REVIEW): - st = None - pull_request_pending_reviewers.append(r.user) - pull_request_reviewers.append((r.user, st)) + status = ChangesetStatus.STATUS_NOT_REVIEWED if st is None else st.status + if status in (ChangesetStatus.STATUS_NOT_REVIEWED, + ChangesetStatus.STATUS_UNDER_REVIEW): + pull_request_pending_reviewers.append(user) + pull_request_reviewers.append((user, status)) result = self._calculate_status(relevant_statuses) @@ -156,7 +148,7 @@ if last status was for pull request and it's closed. We shouldn't mess around this manually """ - repo = self._get_repo(repo) + repo = Repository.guess_instance(repo) q = ChangesetStatus.query() if revision is not None: @@ -166,14 +158,14 @@ revisions = [revision] else: assert pull_request is not None - pull_request = self.__get_pull_request(pull_request) + pull_request = PullRequest.guess_instance(pull_request) repo = pull_request.org_repo q = q.filter(ChangesetStatus.repo == repo) q = q.filter(ChangesetStatus.revision.in_(pull_request.revisions)) revisions = pull_request.revisions cur_statuses = q.all() - #if statuses exists and last is associated with a closed pull request + # if statuses exists and last is associated with a closed pull request # we need to check if we can allow this status change if (dont_allow_on_closed_pull_request and cur_statuses and getattr(cur_statuses[0].pull_request, 'status', '') @@ -182,21 +174,20 @@ 'Changing status on closed pull request is not allowed' ) - #update all current statuses with older version + # update all current statuses with older version for st in cur_statuses: st.version += 1 - self.sa.add(st) new_statuses = [] for rev in revisions: new_status = ChangesetStatus() new_status.version = 0 # default - new_status.author = self._get_user(user) - new_status.repo = self._get_repo(repo) + new_status.author = User.guess_instance(user) + new_status.repo = Repository.guess_instance(repo) new_status.status = status new_status.comment = comment new_status.revision = rev new_status.pull_request = pull_request new_statuses.append(new_status) - self.sa.add(new_status) + Session().add(new_status) return new_statuses diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/comment.py --- a/kallithea/model/comment.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/comment.py Thu Jun 07 01:46:02 2018 +0200 @@ -27,39 +27,35 @@ import logging -from pylons.i18n.translation import _ +from tg.i18n import ugettext as _ from collections import defaultdict from kallithea.lib.utils2 import extract_mentioned_users, safe_unicode from kallithea.lib import helpers as h -from kallithea.model import BaseModel from kallithea.model.db import ChangesetComment, User, \ - Notification, PullRequest + Notification, PullRequest, Repository from kallithea.model.notification import NotificationModel from kallithea.model.meta import Session log = logging.getLogger(__name__) -class ChangesetCommentsModel(BaseModel): - - cls = ChangesetComment - - def __get_changeset_comment(self, changeset_comment): - return self._get_instance(ChangesetComment, changeset_comment) - - def __get_pull_request(self, pull_request): - return self._get_instance(PullRequest, pull_request) +def _list_changeset_commenters(revision): + return (Session().query(User) + .join(ChangesetComment.author) + .filter(ChangesetComment.revision == revision) + .all()) - def _extract_mentions(self, s): - user_objects = [] - for username in extract_mentioned_users(s): - user_obj = User.get_by_username(username, case_insensitive=True) - if user_obj: - user_objects.append(user_obj) - return user_objects +def _list_pull_request_commenters(pull_request): + return (Session().query(User) + .join(ChangesetComment.author) + .filter(ChangesetComment.pull_request_id == pull_request.pull_request_id) + .all()) - def _get_notification_data(self, repo, comment, user, comment_text, + +class ChangesetCommentsModel(object): + + def _get_notification_data(self, repo, comment, author, comment_text, line_no=None, revision=None, pull_request=None, status_change=None, closing_pr=False): """ @@ -71,7 +67,7 @@ if line_no: line = _('on line %s') % line_no - #changeset + # changeset if revision: notification_type = Notification.TYPE_CHANGESET_COMMENT cs = repo.scm_instance.get_changeset(revision) @@ -91,31 +87,37 @@ comment_url) ) # get the current participants of this changeset - recipients = ChangesetComment.get_users(revision=revision) + recipients = _list_changeset_commenters(revision) # add changeset author if it's known locally cs_author = User.get_from_cs_author(cs.author) if not cs_author: - #use repo owner if we cannot extract the author correctly - cs_author = repo.user - recipients += [cs_author] + # use repo owner if we cannot extract the author correctly + # FIXME: just use committer name even if not a user + cs_author = repo.owner + recipients.append(cs_author) + email_kwargs = { 'status_change': status_change, - 'cs_comment_user': user.full_name_and_username, + 'cs_comment_user': author.full_name_and_username, 'cs_target_repo': h.canonical_url('summary_home', repo_name=repo.repo_name), 'cs_comment_url': comment_url, + 'cs_url': h.canonical_url('changeset_home', repo_name=repo.repo_name, revision=revision), 'raw_id': revision, 'message': cs.message, + 'message_short': h.shorter(cs.message, 50, firstline=True), + 'cs_author': cs_author, 'repo_name': repo.repo_name, 'short_id': h.short_id(revision), 'branch': cs.branch, - 'comment_username': user.username, + 'comment_username': author.username, 'threading': threading, } - #pull request + # pull request elif pull_request: notification_type = Notification.TYPE_PULL_REQUEST_COMMENT desc = comment.pull_request.title _org_ref_type, org_ref_name, _org_rev = comment.pull_request.org_ref.split(':') + _other_ref_type, other_ref_name, _other_rev = comment.pull_request.other_ref.split(':') threading = ['%s-pr-%s@%s' % (pull_request.other_repo.repo_name, pull_request.pull_request_id, h.canonical_hostname())] @@ -126,40 +128,43 @@ comment_url = pull_request.url(canonical=True, anchor='comment-%s' % comment.comment_id) subj = safe_unicode( - h.link_to('Re pull request %(pr_nice_id)s: %(desc)s %(line)s' % \ + h.link_to('Re pull request %(pr_nice_id)s: %(desc)s %(line)s' % {'desc': desc, 'pr_nice_id': comment.pull_request.nice_id(), 'line': line}, comment_url) ) # get the current participants of this pull request - recipients = ChangesetComment.get_users(pull_request_id= - pull_request.pull_request_id) - # add pull request author - recipients += [pull_request.owner] + recipients = _list_pull_request_commenters(pull_request) + recipients.append(pull_request.owner) + recipients += pull_request.get_reviewer_users() - # add the reviewers to notification - recipients += [x.user for x in pull_request.reviewers] - - #set some variables for email notification + # set some variables for email notification email_kwargs = { 'pr_title': pull_request.title, + 'pr_title_short': h.shorter(pull_request.title, 50), 'pr_nice_id': pull_request.nice_id(), 'status_change': status_change, 'closing_pr': closing_pr, 'pr_comment_url': comment_url, - 'pr_comment_user': user.full_name_and_username, + 'pr_url': pull_request.url(canonical=True), + 'pr_comment_user': author.full_name_and_username, 'pr_target_repo': h.canonical_url('summary_home', repo_name=pull_request.other_repo.repo_name), + 'pr_target_branch': other_ref_name, + 'pr_source_repo': h.canonical_url('summary_home', + repo_name=pull_request.org_repo.repo_name), + 'pr_source_branch': org_ref_name, + 'pr_owner': pull_request.owner, + 'pr_owner_username': pull_request.owner.username, 'repo_name': pull_request.other_repo.repo_name, - 'ref': org_ref_name, - 'comment_username': user.username, + 'comment_username': author.username, 'threading': threading, } return subj, body, recipients, notification_type, email_kwargs - def create(self, text, repo, user, revision=None, pull_request=None, + def create(self, text, repo, author, revision=None, pull_request=None, f_path=None, line_no=None, status_change=None, closing_pr=False, send_email=True): """ @@ -172,11 +177,11 @@ log.warning('Missing text for comment, skipping...') return None - repo = self._get_repo(repo) - user = self._get_user(user) + repo = Repository.guess_instance(repo) + author = User.guess_instance(author) comment = ChangesetComment() comment.repo = repo - comment.author = user + comment.author = author comment.text = text comment.f_path = f_path comment.line_no = line_no @@ -184,7 +189,7 @@ if revision is not None: comment.revision = revision elif pull_request is not None: - pull_request = self.__get_pull_request(pull_request) + pull_request = PullRequest.guess_instance(pull_request) comment.pull_request = pull_request else: raise Exception('Please specify revision or pull_request_id') @@ -195,7 +200,7 @@ if send_email: (subj, body, recipients, notification_type, email_kwargs) = self._get_notification_data( - repo, comment, user, + repo, comment, author, comment_text=text, line_no=line_no, revision=revision, @@ -205,18 +210,18 @@ email_kwargs['is_mention'] = False # create notification objects, and emails NotificationModel().create( - created_by=user, subject=subj, body=body, + created_by=author, subject=subj, body=body, recipients=recipients, type_=notification_type, email_kwargs=email_kwargs, ) - mention_recipients = set(self._extract_mentions(body))\ - .difference(recipients) + mention_recipients = extract_mentioned_users(body).difference(recipients) if mention_recipients: email_kwargs['is_mention'] = True subj = _('[Mention]') + ' ' + subj + # FIXME: this subject is wrong and unused! NotificationModel().create( - created_by=user, subject=subj, body=body, + created_by=author, subject=subj, body=body, recipients=mention_recipients, type_=notification_type, email_kwargs=email_kwargs @@ -225,7 +230,7 @@ return comment def delete(self, comment): - comment = self.__get_changeset_comment(comment) + comment = ChangesetComment.guess_instance(comment) Session().delete(comment) return comment @@ -260,17 +265,17 @@ q = Session().query(ChangesetComment) if inline: - q = q.filter(ChangesetComment.line_no != None)\ + q = q.filter(ChangesetComment.line_no != None) \ .filter(ChangesetComment.f_path != None) else: - q = q.filter(ChangesetComment.line_no == None)\ + q = q.filter(ChangesetComment.line_no == None) \ .filter(ChangesetComment.f_path == None) - if revision: - q = q.filter(ChangesetComment.revision == revision)\ + if revision is not None: + q = q.filter(ChangesetComment.revision == revision) \ .filter(ChangesetComment.repo_id == repo_id) - elif pull_request: - pull_request = self.__get_pull_request(pull_request) + elif pull_request is not None: + pull_request = PullRequest.guess_instance(pull_request) q = q.filter(ChangesetComment.pull_request == pull_request) else: raise Exception('Please specify either revision or pull_request') diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/db.py --- a/kallithea/model/db.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/db.py Thu Jun 07 01:46:02 2018 +0200 @@ -41,9 +41,8 @@ from beaker.cache import cache_region, region_invalidate from webob.exc import HTTPNotFound -from pylons.i18n.translation import lazy_ugettext as _ - -from kallithea import DB_PREFIX +from tg.i18n import lazy_ugettext as _ + from kallithea.lib.exceptions import DefaultUserException from kallithea.lib.vcs import get_backend from kallithea.lib.vcs.utils.helpers import get_scm @@ -68,7 +67,7 @@ _hash_key = lambda k: hashlib.md5(safe_str(k)).hexdigest() -class BaseModel(object): +class BaseDbModel(object): """ Base Model for all classes """ @@ -101,10 +100,10 @@ """return list with keys and values tuples corresponding to this model data """ - l = [] - for k in self._get_keys(): - l.append((k, getattr(self, k),)) - return l + return [ + (k, getattr(self, k)) + for k in self._get_keys() + ] def populate_obj(self, populate_dict): """populate model with data from given populate_dict""" @@ -123,6 +122,32 @@ return cls.query().get(id_) @classmethod + def guess_instance(cls, value, callback=None): + """Haphazardly attempt to convert `value` to a `cls` instance. + + If `value` is None or already a `cls` instance, return it. If `value` + is a number (or looks like one if you squint just right), assume it's + a database primary key and let SQLAlchemy sort things out. Otherwise, + fall back to resolving it using `callback` (if specified); this could + e.g. be a function that looks up instances by name (though that won't + work if the name begins with a digit). Otherwise, raise Exception. + """ + + if value is None: + return None + if isinstance(value, cls): + return value + if isinstance(value, (int, long)) or safe_str(value).isdigit(): + return cls.get(value) + if callback is not None: + return callback(value) + + raise Exception( + 'given object must be int, long or Instance of %s ' + 'got %s, no callback provided' % (cls, type(value)) + ) + + @classmethod def get_or_404(cls, id_): try: id_ = int(id_) @@ -135,15 +160,6 @@ return res @classmethod - def getAll(cls): - # deprecated and left for backward compatibility - return cls.get_all() - - @classmethod - def get_all(cls): - return cls.query().all() - - @classmethod def delete(cls, id_): obj = cls.query().get(id_) Session().delete(obj) @@ -158,13 +174,16 @@ return '' % (self.__class__.__name__) -class Setting(Base, BaseModel): - __tablename__ = DB_PREFIX + 'settings' - +_table_args_default_dict = {'extend_existing': True, + 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8', + 'sqlite_autoincrement': True, + } + +class Setting(Base, BaseDbModel): + __tablename__ = 'settings' __table_args__ = ( - UniqueConstraint('app_settings_name'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) SETTINGS_TYPES = { @@ -176,10 +195,10 @@ } DEFAULT_UPDATE_URL = '' - app_settings_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - app_settings_name = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - _app_settings_value = Column("app_settings_value", String(4096, convert_unicode=False), nullable=True, unique=None, default=None) - _app_settings_type = Column("app_settings_type", String(255, convert_unicode=False), nullable=True, unique=None, default=None) + app_settings_id = Column(Integer(), primary_key=True) + app_settings_name = Column(String(255), nullable=False, unique=True) + _app_settings_value = Column("app_settings_value", Unicode(4096), nullable=False) + _app_settings_type = Column("app_settings_type", String(255), nullable=True) # FIXME: not nullable? def __init__(self, key='', val='', type='unicode'): self.app_settings_name = key @@ -226,7 +245,7 @@ @classmethod def get_by_name(cls, key): - return cls.query()\ + return cls.query() \ .filter(cls.app_settings_name == key).scalar() @classmethod @@ -252,6 +271,7 @@ val = Optional.extract(val) type = Optional.extract(type) res = cls(key, val, type) + Session().add(res) else: res.app_settings_name = key if not isinstance(val, Optional): @@ -280,13 +300,8 @@ return settings @classmethod - def get_auth_plugins(cls, cache=False): - auth_plugins = cls.get_by_name("auth_plugins").app_settings_value - return auth_plugins - - @classmethod def get_auth_settings(cls, cache=False): - ret = cls.query()\ + ret = cls.query() \ .filter(cls.app_settings_name.startswith('auth_')).all() fd = {} for row in ret: @@ -295,7 +310,7 @@ @classmethod def get_default_repo_settings(cls, cache=False, strip_prefix=False): - ret = cls.query()\ + ret = cls.query() \ .filter(cls.app_settings_name.startswith('default_')).all() fd = {} for row in ret: @@ -324,99 +339,104 @@ return info -class Ui(Base, BaseModel): - __tablename__ = DB_PREFIX + 'ui' +class Ui(Base, BaseDbModel): + __tablename__ = 'ui' __table_args__ = ( + # FIXME: ui_key as key is wrong and should be removed when the corresponding + # Ui.get_by_key has been replaced by the composite key UniqueConstraint('ui_key'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + UniqueConstraint('ui_section', 'ui_key'), + _table_args_default_dict, ) HOOK_UPDATE = 'changegroup.update' HOOK_REPO_SIZE = 'changegroup.repo_size' - HOOK_PUSH = 'changegroup.push_logger' - HOOK_PRE_PUSH = 'prechangegroup.pre_push' - HOOK_PULL = 'outgoing.pull_logger' - HOOK_PRE_PULL = 'preoutgoing.pre_pull' - - ui_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - ui_section = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - ui_key = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - ui_value = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - ui_active = Column(Boolean(), nullable=True, unique=None, default=True) - - # def __init__(self, section='', key='', value=''): - # self.ui_section = section - # self.ui_key = key - # self.ui_value = value + HOOK_PUSH_LOG = 'changegroup.push_logger' + HOOK_PUSH_LOCK = 'prechangegroup.push_lock_handling' + HOOK_PULL_LOG = 'outgoing.pull_logger' + HOOK_PULL_LOCK = 'preoutgoing.pull_lock_handling' + + ui_id = Column(Integer(), primary_key=True) + ui_section = Column(String(255), nullable=False) + ui_key = Column(String(255), nullable=False) + ui_value = Column(String(255), nullable=True) # FIXME: not nullable? + ui_active = Column(Boolean(), nullable=False, default=True) @classmethod - def get_by_key(cls, key): - return cls.query().filter(cls.ui_key == key).scalar() + def get_by_key(cls, section, key): + """ Return specified Ui object, or None if not found. """ + return cls.query().filter_by(ui_section=section, ui_key=key).scalar() + + @classmethod + def get_or_create(cls, section, key): + """ Return specified Ui object, creating it if necessary. """ + setting = cls.get_by_key(section, key) + if setting is None: + setting = cls(ui_section=section, ui_key=key) + Session().add(setting) + return setting @classmethod def get_builtin_hooks(cls): q = cls.query() q = q.filter(cls.ui_key.in_([cls.HOOK_UPDATE, cls.HOOK_REPO_SIZE, - cls.HOOK_PUSH, cls.HOOK_PRE_PUSH, - cls.HOOK_PULL, cls.HOOK_PRE_PULL])) + cls.HOOK_PUSH_LOG, cls.HOOK_PUSH_LOCK, + cls.HOOK_PULL_LOG, cls.HOOK_PULL_LOCK])) + q = q.filter(cls.ui_section == 'hooks') return q.all() @classmethod def get_custom_hooks(cls): q = cls.query() q = q.filter(~cls.ui_key.in_([cls.HOOK_UPDATE, cls.HOOK_REPO_SIZE, - cls.HOOK_PUSH, cls.HOOK_PRE_PUSH, - cls.HOOK_PULL, cls.HOOK_PRE_PULL])) + cls.HOOK_PUSH_LOG, cls.HOOK_PUSH_LOCK, + cls.HOOK_PULL_LOG, cls.HOOK_PULL_LOCK])) q = q.filter(cls.ui_section == 'hooks') return q.all() @classmethod def get_repos_location(cls): - return cls.get_by_key('/').ui_value + return cls.get_by_key('paths', '/').ui_value @classmethod def create_or_update_hook(cls, key, val): - new_ui = cls.get_by_key(key) or cls() - new_ui.ui_section = 'hooks' + new_ui = cls.get_or_create('hooks', key) new_ui.ui_active = True - new_ui.ui_key = key new_ui.ui_value = val - Session().add(new_ui) - def __repr__(self): return '<%s[%s]%s=>%s]>' % (self.__class__.__name__, self.ui_section, self.ui_key, self.ui_value) -class User(Base, BaseModel): +class User(Base, BaseDbModel): __tablename__ = 'users' __table_args__ = ( - UniqueConstraint('username'), UniqueConstraint('email'), Index('u_username_idx', 'username'), Index('u_email_idx', 'email'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) + DEFAULT_USER = 'default' DEFAULT_GRAVATAR_URL = 'https://secure.gravatar.com/avatar/{md5email}?d=identicon&s={size}' - - user_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - username = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - password = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - active = Column(Boolean(), nullable=True, unique=None, default=True) - admin = Column(Boolean(), nullable=True, unique=None, default=False) - name = Column("firstname", String(255, convert_unicode=False), nullable=True, unique=None, default=None) - lastname = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - _email = Column("email", String(255, convert_unicode=False), nullable=True, unique=None, default=None) - last_login = Column(DateTime(timezone=False), nullable=True, unique=None, default=None) - extern_type = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - extern_name = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - api_key = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - inherit_default_permissions = Column(Boolean(), nullable=False, unique=None, default=True) + # The name of the default auth type in extern_type, 'internal' lives in auth_internal.py + DEFAULT_AUTH_TYPE = 'internal' + + user_id = Column(Integer(), primary_key=True) + username = Column(String(255), nullable=False, unique=True) + password = Column(String(255), nullable=False) + active = Column(Boolean(), nullable=False, default=True) + admin = Column(Boolean(), nullable=False, default=False) + name = Column("firstname", Unicode(255), nullable=False) + lastname = Column(Unicode(255), nullable=False) + _email = Column("email", String(255), nullable=True, unique=True) # FIXME: not nullable? + last_login = Column(DateTime(timezone=False), nullable=True) + extern_type = Column(String(255), nullable=True) # FIXME: not nullable? + extern_name = Column(String(255), nullable=True) # FIXME: not nullable? + api_key = Column(String(255), nullable=False) + inherit_default_permissions = Column(Boolean(), nullable=False, default=True) created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) - _user_data = Column("user_data", LargeBinary(), nullable=True) # JSON data + _user_data = Column("user_data", LargeBinary(), nullable=True) # JSON data # FIXME: not nullable? user_log = relationship('UserLog') user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all') @@ -437,12 +457,11 @@ user_created_notifications = relationship('Notification', cascade='all') # comments created by this user user_comments = relationship('ChangesetComment', cascade='all') - #extra emails for this user + # extra emails for this user user_emails = relationship('UserEmailMap', cascade='all') - #extra API keys + # extra API keys user_api_keys = relationship('UserApiKeys', cascade='all') - @hybrid_property def email(self): return self._email @@ -458,12 +477,12 @@ @property def emails(self): - other = UserEmailMap.query().filter(UserEmailMap.user==self).all() + other = UserEmailMap.query().filter(UserEmailMap.user == self).all() return [self.email] + [x.email for x in other] @property def api_keys(self): - other = UserApiKeys.query().filter(UserApiKeys.user==self).all() + other = UserApiKeys.query().filter(UserApiKeys.user == self).all() return [self.api_key] + [x.api_key for x in other] @property @@ -505,6 +524,10 @@ def is_admin(self): return self.admin + @hybrid_property + def is_default_user(self): + return self.username == User.DEFAULT_USER + @property def AuthUser(self): """ @@ -535,21 +558,38 @@ self.user_id, self.username) @classmethod + def guess_instance(cls, value): + return super(User, cls).guess_instance(value, User.get_by_username) + + @classmethod def get_or_404(cls, id_, allow_default=True): ''' - Overridden version of BaseModel.get_or_404, with an extra check on + Overridden version of BaseDbModel.get_or_404, with an extra check on the default user. ''' user = super(User, cls).get_or_404(id_) - if allow_default == False: - if user.username == User.DEFAULT_USER: - raise DefaultUserException + if not allow_default and user.is_default_user: + raise DefaultUserException() return user @classmethod + def get_by_username_or_email(cls, username_or_email, case_insensitive=False, cache=False): + """ + For anything that looks like an email address, look up by the email address (matching + case insensitively). + For anything else, try to look up by the user name. + + This assumes no normal username can have '@' symbol. + """ + if '@' in username_or_email: + return User.get_by_email(username_or_email, cache=cache) + else: + return User.get_by_username(username_or_email, case_insensitive=case_insensitive, cache=cache) + + @classmethod def get_by_username(cls, username, case_insensitive=False, cache=False): if case_insensitive: - q = cls.query().filter(cls.username.ilike(username)) + q = cls.query().filter(func.lower(cls.username) == func.lower(username)) else: q = cls.query().filter(cls.username == username) @@ -574,22 +614,15 @@ res = q.scalar() if fallback and not res: - #fallback to additional keys - _res = UserApiKeys.query()\ - .filter(UserApiKeys.api_key == api_key)\ - .filter(or_(UserApiKeys.expires == -1, - UserApiKeys.expires >= time.time()))\ - .first() + # fallback to additional keys + _res = UserApiKeys.query().filter_by(api_key=api_key, is_expired=False).first() if _res: res = _res.user return res @classmethod - def get_by_email(cls, email, case_insensitive=False, cache=False): - if case_insensitive: - q = cls.query().filter(cls.email.ilike(email)) - else: - q = cls.query().filter(cls.email == email) + def get_by_email(cls, email, cache=False): + q = cls.query().filter(func.lower(cls.email) == func.lower(email)) if cache: q = q.options(FromCache("sql_cache_short", @@ -599,10 +632,7 @@ if ret is None: q = UserEmailMap.query() # try fetching in alternate email map - if case_insensitive: - q = q.filter(UserEmailMap.email.ilike(email)) - else: - q = q.filter(UserEmailMap.email == email) + q = q.filter(func.lower(UserEmailMap.email) == func.lower(email)) q = q.options(joinedload(UserEmailMap.user)) if cache: q = q.options(FromCache("sql_cache_short", @@ -622,7 +652,7 @@ # Valid email in the attribute passed, see if they're in the system _email = email(author) if _email: - user = cls.get_by_email(_email, case_insensitive=True) + user = cls.get_by_email(_email) if user is not None: return user # Maybe we can match by username? @@ -634,7 +664,6 @@ def update_lastlogin(self): """Update user lastlogin""" self.last_login = datetime.datetime.now() - Session().add(self) log.debug('updated user %s lastlogin', self.username) @classmethod @@ -688,46 +717,40 @@ return data -class UserApiKeys(Base, BaseModel): +class UserApiKeys(Base, BaseDbModel): __tablename__ = 'user_api_keys' __table_args__ = ( Index('uak_api_key_idx', 'api_key'), Index('uak_api_key_expires_idx', 'api_key', 'expires'), - UniqueConstraint('api_key'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) __mapper_args__ = {} - user_api_key_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) - api_key = Column(String(255, convert_unicode=False), nullable=False, unique=True) - description = Column(UnicodeText(1024)) + user_api_key_id = Column(Integer(), primary_key=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) + api_key = Column(String(255), nullable=False, unique=True) + description = Column(UnicodeText(), nullable=False) expires = Column(Float(53), nullable=False) created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) user = relationship('User') - @property - def expired(self): - if self.expires == -1: - return False - return time.time() > self.expires - - -class UserEmailMap(Base, BaseModel): + @hybrid_property + def is_expired(self): + return (self.expires != -1) & (time.time() > self.expires) + + +class UserEmailMap(Base, BaseDbModel): __tablename__ = 'user_email_map' __table_args__ = ( Index('uem_email_idx', 'email'), - UniqueConstraint('email'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) __mapper_args__ = {} - email_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) - _email = Column("email", String(255, convert_unicode=False), nullable=True, unique=False, default=None) + email_id = Column(Integer(), primary_key=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) + _email = Column("email", String(255), nullable=False, unique=True) user = relationship('User') @validates('_email') @@ -747,19 +770,18 @@ self._email = val.lower() if val else None -class UserIpMap(Base, BaseModel): +class UserIpMap(Base, BaseDbModel): __tablename__ = 'user_ip_map' __table_args__ = ( UniqueConstraint('user_id', 'ip_addr'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) __mapper_args__ = {} - ip_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) - ip_addr = Column(String(255, convert_unicode=False), nullable=True, unique=False, default=None) - active = Column(Boolean(), nullable=True, unique=None, default=True) + ip_id = Column(Integer(), primary_key=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) + ip_addr = Column(String(255), nullable=False) + active = Column(Boolean(), nullable=False, default=True) user = relationship('User') @classmethod @@ -778,20 +800,21 @@ return u"<%s('user_id:%s=>%s')>" % (self.__class__.__name__, self.user_id, self.ip_addr) -class UserLog(Base, BaseModel): + +class UserLog(Base, BaseDbModel): __tablename__ = 'user_logs' __table_args__ = ( - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) - user_log_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) - username = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) + + user_log_id = Column(Integer(), primary_key=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=True) + username = Column(String(255), nullable=False) repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=True) - repository_name = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - user_ip = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - action = Column(UnicodeText(1200000, convert_unicode=False), nullable=True, unique=None, default=None) - action_date = Column(DateTime(timezone=False), nullable=True, unique=None, default=None) + repository_name = Column(Unicode(255), nullable=False) + user_ip = Column(String(255), nullable=True) + action = Column(UnicodeText(), nullable=False) + action_date = Column(DateTime(timezone=False), nullable=False) def __unicode__(self): return u"<%s('id:%s:%s')>" % (self.__class__.__name__, @@ -806,21 +829,20 @@ repository = relationship('Repository', cascade='') -class UserGroup(Base, BaseModel): +class UserGroup(Base, BaseDbModel): __tablename__ = 'users_groups' __table_args__ = ( - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) - users_group_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - users_group_name = Column(String(255, convert_unicode=False), nullable=False, unique=True, default=None) - user_group_description = Column(String(10000, convert_unicode=False), nullable=True, unique=None, default=None) - users_group_active = Column(Boolean(), nullable=True, unique=None, default=None) - inherit_default_permissions = Column("users_group_inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None) + users_group_id = Column(Integer(), primary_key=True) + users_group_name = Column(Unicode(255), nullable=False, unique=True) + user_group_description = Column(Unicode(10000), nullable=True) # FIXME: not nullable? + users_group_active = Column(Boolean(), nullable=False) + inherit_default_permissions = Column("users_group_inherit_default_permissions", Boolean(), nullable=False, default=True) + owner_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False) created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) - _group_data = Column("group_data", LargeBinary(), nullable=True) # JSON data + _group_data = Column("group_data", LargeBinary(), nullable=True) # JSON data # FIXME: not nullable? members = relationship('UserGroupMember', cascade="all, delete-orphan") users_group_to_perm = relationship('UserGroupToPerm', cascade='all') @@ -829,7 +851,7 @@ user_user_group_to_perm = relationship('UserUserGroupToPerm ', cascade='all') user_group_user_group_to_perm = relationship('UserGroupUserGroupToPerm ', primaryjoin="UserGroupUserGroupToPerm.target_user_group_id==UserGroup.users_group_id", cascade='all') - user = relationship('User') + owner = relationship('User') @hybrid_property def group_data(self): @@ -854,10 +876,14 @@ self.users_group_name) @classmethod + def guess_instance(cls, value): + return super(UserGroup, cls).guess_instance(value, UserGroup.get_by_group_name) + + @classmethod def get_by_group_name(cls, group_name, cache=False, case_insensitive=False): if case_insensitive: - q = cls.query().filter(cls.users_group_name.ilike(group_name)) + q = cls.query().filter(func.lower(cls.users_group_name) == func.lower(group_name)) else: q = cls.query().filter(cls.users_group_name == group_name) if cache: @@ -884,28 +910,26 @@ group_name=user_group.users_group_name, group_description=user_group.user_group_description, active=user_group.users_group_active, - owner=user_group.user.username, + owner=user_group.owner.username, ) if with_members: - members = [] - for user in user_group.members: - user = user.user - members.append(user.get_api_data()) - data['members'] = members + data['members'] = [ + ugm.user.get_api_data() + for ugm in user_group.members + ] return data -class UserGroupMember(Base, BaseModel): +class UserGroupMember(Base, BaseDbModel): __tablename__ = 'users_groups_members' __table_args__ = ( - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) - users_group_member_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - users_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) + users_group_member_id = Column(Integer(), primary_key=True) + users_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) user = relationship('User') users_group = relationship('UserGroup') @@ -915,22 +939,22 @@ self.user_id = u_id -class RepositoryField(Base, BaseModel): +class RepositoryField(Base, BaseDbModel): __tablename__ = 'repositories_fields' __table_args__ = ( UniqueConstraint('repository_id', 'field_key'), # no-multi field - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) + PREFIX = 'ex_' # prefix used in form to not conflict with already existing fields - repo_field_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) - field_key = Column(String(250, convert_unicode=False)) - field_label = Column(String(1024, convert_unicode=False), nullable=False) - field_value = Column(String(10000, convert_unicode=False), nullable=False) - field_desc = Column(String(1024, convert_unicode=False), nullable=False) - field_type = Column(String(255), nullable=False, unique=None) + repo_field_id = Column(Integer(), primary_key=True) + repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False) + field_key = Column(String(250), nullable=False) + field_label = Column(String(1024), nullable=False) + field_value = Column(String(10000), nullable=False) + field_desc = Column(String(1024), nullable=False) + field_type = Column(String(255), nullable=False) created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) repository = relationship('Repository') @@ -947,49 +971,48 @@ @classmethod def get_by_key_name(cls, key, repo): - row = cls.query()\ - .filter(cls.repository == repo)\ + row = cls.query() \ + .filter(cls.repository == repo) \ .filter(cls.field_key == key).scalar() return row -class Repository(Base, BaseModel): +class Repository(Base, BaseDbModel): __tablename__ = 'repositories' __table_args__ = ( - UniqueConstraint('repo_name'), Index('r_repo_name_idx', 'repo_name'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) + DEFAULT_CLONE_URI = '{scheme}://{user}@{netloc}/{repo}' DEFAULT_CLONE_URI_ID = '{scheme}://{user}@{netloc}/_{repoid}' - STATE_CREATED = 'repo_state_created' - STATE_PENDING = 'repo_state_pending' - STATE_ERROR = 'repo_state_error' - - repo_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - repo_name = Column(String(255, convert_unicode=False), nullable=False, unique=True, default=None) - repo_state = Column(String(255), nullable=True) - - clone_uri = Column(String(255, convert_unicode=False), nullable=True, unique=False, default=None) - repo_type = Column(String(255, convert_unicode=False), nullable=False, unique=False, default=None) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None) - private = Column(Boolean(), nullable=True, unique=None, default=None) - enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True) - enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True) - description = Column(String(10000, convert_unicode=False), nullable=True, unique=None, default=None) - created_on = Column(DateTime(timezone=False), nullable=False, unique=None, default=datetime.datetime.now) - updated_on = Column(DateTime(timezone=False), nullable=False, unique=None, default=datetime.datetime.now) - _landing_revision = Column("landing_revision", String(255, convert_unicode=False), nullable=False, unique=False, default=None) - enable_locking = Column(Boolean(), nullable=False, unique=None, default=False) - _locked = Column("locked", String(255, convert_unicode=False), nullable=True, unique=False, default=None) - _changeset_cache = Column("changeset_cache", LargeBinary(), nullable=True) #JSON data - - fork_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None) - group_id = Column(Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None) - - user = relationship('User') + STATE_CREATED = u'repo_state_created' + STATE_PENDING = u'repo_state_pending' + STATE_ERROR = u'repo_state_error' + + repo_id = Column(Integer(), primary_key=True) + repo_name = Column(Unicode(255), nullable=False, unique=True) + repo_state = Column(String(255), nullable=False) + + clone_uri = Column(String(255), nullable=True) # FIXME: not nullable? + repo_type = Column(String(255), nullable=False) + owner_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False) + private = Column(Boolean(), nullable=False) + enable_statistics = Column("statistics", Boolean(), nullable=False, default=True) + enable_downloads = Column("downloads", Boolean(), nullable=False, default=True) + description = Column(Unicode(10000), nullable=False) + created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) + updated_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) + _landing_revision = Column("landing_revision", String(255), nullable=False) + enable_locking = Column(Boolean(), nullable=False, default=False) + _locked = Column("locked", String(255), nullable=True) # FIXME: not nullable? + _changeset_cache = Column("changeset_cache", LargeBinary(), nullable=True) # JSON data # FIXME: not nullable? + + fork_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=True) + group_id = Column(Integer(), ForeignKey('groups.group_id'), nullable=True) + + owner = relationship('User') fork = relationship('Repository', remote_side=repo_id) group = relationship('RepoGroup') repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id') @@ -997,7 +1020,7 @@ stats = relationship('Statistics', cascade='all', uselist=False) followers = relationship('UserFollowing', - primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', + primaryjoin='UserFollowing.follows_repository_id==Repository.repo_id', cascade='all') extra_fields = relationship('RepositoryField', cascade="all, delete-orphan") @@ -1066,6 +1089,19 @@ log.error(traceback.format_exc()) @classmethod + def query(cls, sorted=False): + """Add Repository-specific helpers for common query constructs. + + sorted: if True, apply the default ordering (name, case insensitive). + """ + q = super(Repository, cls).query() + + if sorted: + q = q.order_by(func.lower(Repository.repo_name)) + + return q + + @classmethod def url_sep(cls): return URL_SEP @@ -1081,16 +1117,28 @@ return cls.url_sep().join(repo_name.split(os.sep)) @classmethod - def get_by_repo_name(cls, repo_name): - q = Session().query(cls).filter(cls.repo_name == repo_name) - q = q.options(joinedload(Repository.fork))\ - .options(joinedload(Repository.user))\ + def guess_instance(cls, value): + return super(Repository, cls).guess_instance(value, Repository.get_by_repo_name) + + @classmethod + def get_by_repo_name(cls, repo_name, case_insensitive=False): + """Get the repo, defaulting to database case sensitivity. + case_insensitive will be slower and should only be specified if necessary.""" + if case_insensitive: + q = Session().query(cls).filter(func.lower(cls.repo_name) == func.lower(repo_name)) + else: + q = Session().query(cls).filter(cls.repo_name == repo_name) + q = q.options(joinedload(Repository.fork)) \ + .options(joinedload(Repository.owner)) \ .options(joinedload(Repository.group)) return q.scalar() @classmethod def get_by_full_path(cls, repo_full_path): - repo_name = repo_full_path.split(cls.base_path(), 1)[-1] + base_full_path = os.path.realpath(cls.base_path()) + repo_full_path = os.path.realpath(repo_full_path) + assert repo_full_path.startswith(base_full_path + os.path.sep) + repo_name = repo_full_path[len(base_full_path) + 1:] repo_name = cls.normalize_repo_name(repo_name) return cls.get_by_repo_name(repo_name.strip(URL_SEP)) @@ -1105,7 +1153,7 @@ :param cls: """ - q = Session().query(Ui)\ + q = Session().query(Ui) \ .filter(Ui.ui_key == cls.url_sep()) q = q.options(FromCache("sql_cache_short", "repository_repo_path")) return q.one().ui_value @@ -1131,24 +1179,14 @@ @property def groups_with_parents(self): groups = [] - if self.group is None: - return groups - - cur_gr = self.group - groups.insert(0, cur_gr) - while 1: - gr = getattr(cur_gr, 'parent_group', None) - cur_gr = cur_gr.parent_group - if gr is None: - break - groups.insert(0, gr) - + group = self.group + while group is not None: + groups.append(group) + group = group.parent_group + assert group not in groups, group # avoid recursion on bad db content + groups.reverse() return groups - @property - def groups_and_repo(self): - return self.groups_with_parents, self.just_name, self.repo_name - @LazyProperty def repo_path(self): """ @@ -1174,9 +1212,9 @@ """ Returns associated cache keys for that repo """ - return CacheInvalidation.query()\ - .filter(CacheInvalidation.cache_args == self.repo_name)\ - .order_by(CacheInvalidation.cache_key)\ + return CacheInvalidation.query() \ + .filter(CacheInvalidation.cache_args == self.repo_name) \ + .order_by(CacheInvalidation.cache_key) \ .all() def get_new_name(self, repo_name): @@ -1208,10 +1246,11 @@ return is_valid_repo(repo_name, cls.base_path()) - def get_api_data(self): + def get_api_data(self, with_revision_names=False, + with_pullrequests=False): """ - Common function for generating repo api data - + Common function for generating repo api data. + Optionally, also return tags, branches, bookmarks and PRs. """ repo = self data = dict( @@ -1223,7 +1262,7 @@ created_on=repo.created_on, description=repo.description, landing_rev=repo.landing_rev, - owner=repo.user.username, + owner=repo.owner.username, fork_of=repo.fork.repo_name if repo.fork else None, enable_statistics=repo.enable_statistics, enable_locking=repo.enable_locking, @@ -1234,6 +1273,15 @@ locked_date=time_to_datetime(self.locked[1]) \ if self.locked[1] else None ) + if with_revision_names: + scm_repo = repo.scm_instance_no_cache() + data.update(dict( + tags=scm_repo.tags, + branches=scm_repo.branches, + bookmarks=scm_repo.bookmarks, + )) + if with_pullrequests: + data['pull_requests'] = repo.pull_requests_other rc_config = Setting.get_app_settings() repository_fields = str2bool(rc_config.get('repository_fields')) if repository_fields: @@ -1247,13 +1295,11 @@ if lock_time is not None: lock_time = time.time() repo.locked = [user_id, lock_time] - Session().add(repo) Session().commit() @classmethod def unlock(cls, repo): repo.locked = None - Session().add(repo) Session().commit() @classmethod @@ -1291,7 +1337,7 @@ if not uri_tmpl: uri_tmpl = self.DEFAULT_CLONE_URI try: - from pylons import tmpl_context as c + from tg import tmpl_context as c uri_tmpl = c.clone_uri_tmpl except AttributeError: # in any case if we call this outside of request context, @@ -1305,7 +1351,7 @@ def set_state(self, state): self.repo_state = state - Session().add(self) + #========================================================================== # SCM PROPERTIES #========================================================================== @@ -1354,7 +1400,6 @@ self.repo_name, cs_cache) self.updated_on = last_change self.changeset_cache = cs_cache - Session().add(self) Session().commit() else: log.debug('changeset_cache for %s already up to date with %s', @@ -1378,11 +1423,11 @@ :param revisions: filter query by revisions only """ - cmts = ChangesetComment.query()\ + cmts = ChangesetComment.query() \ .filter(ChangesetComment.repo == self) if revisions is not None: if not revisions: - return [] # don't use sql 'in' on empty set + return {} # don't use sql 'in' on empty set cmts = cmts.filter(ChangesetComment.revision.in_(revisions)) grouped = collections.defaultdict(list) for cmt in cmts.all(): @@ -1399,9 +1444,9 @@ if not revisions: return {} - statuses = ChangesetStatus.query()\ - .filter(ChangesetStatus.repo == self)\ - .filter(ChangesetStatus.version == 0)\ + statuses = ChangesetStatus.query() \ + .filter(ChangesetStatus.repo == self) \ + .filter(ChangesetStatus.version == 0) \ .filter(ChangesetStatus.revision.in_(revisions)) grouped = {} @@ -1412,7 +1457,8 @@ pr_nice_id = PullRequest.make_nice_id(pr_id) pr_repo = stat.pull_request.other_repo.repo_name grouped[stat.revision] = [str(stat.status), stat.status_lbl, - pr_id, pr_repo, pr_nice_id] + pr_id, pr_repo, pr_nice_id, + stat.author] return grouped def _repo_size(self): @@ -1430,41 +1476,38 @@ """ CacheInvalidation.set_invalidate(self.repo_name) - def scm_instance_no_cache(self): - return self.__get_instance() + _scm_instance = None @property def scm_instance(self): - import kallithea - full_cache = str2bool(kallithea.CONFIG.get('vcs_full_cache')) - if full_cache: - return self.scm_instance_cached() - return self.__get_instance() + if self._scm_instance is None: + self._scm_instance = self.scm_instance_cached() + return self._scm_instance def scm_instance_cached(self, valid_cache_keys=None): - @cache_region('long_term') - def _c(repo_name): - return self.__get_instance() + @cache_region('long_term', 'scm_instance_cached') + def _c(repo_name): # repo_name is just for the cache key + log.debug('Creating new %s scm_instance and populating cache', repo_name) + return self.scm_instance_no_cache() rn = self.repo_name valid = CacheInvalidation.test_and_set_valid(rn, None, valid_cache_keys=valid_cache_keys) if not valid: log.debug('Cache for %s invalidated, getting new object', rn) - region_invalidate(_c, None, rn) + region_invalidate(_c, None, 'scm_instance_cached', rn) else: - log.debug('Getting scm_instance of %s from cache', rn) + log.debug('Trying to get scm_instance of %s from cache', rn) return _c(rn) - def __get_instance(self): - repo_full_path = self.repo_full_path - - alias = get_scm(safe_str(repo_full_path))[0] + def scm_instance_no_cache(self): + repo_full_path = safe_str(self.repo_full_path) + alias = get_scm(repo_full_path)[0] log.debug('Creating instance of %s repository from %s', - alias, repo_full_path) + alias, self.repo_full_path) backend = get_backend(alias) if alias == 'hg': - repo = backend(safe_str(repo_full_path), create=False, + repo = backend(repo_full_path, create=False, baseui=self._ui) else: repo = backend(repo_full_path, create=False) @@ -1472,32 +1515,48 @@ return repo def __json__(self): - return dict(landing_rev = self.landing_rev) - -class RepoGroup(Base, BaseModel): + return dict( + repo_id=self.repo_id, + repo_name=self.repo_name, + landing_rev=self.landing_rev, + ) + + +class RepoGroup(Base, BaseDbModel): __tablename__ = 'groups' __table_args__ = ( - UniqueConstraint('group_name', 'group_parent_id'), - CheckConstraint('group_id != group_parent_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + CheckConstraint('group_id != group_parent_id', name='ck_groups_no_self_parent'), + _table_args_default_dict, ) - __mapper_args__ = {'order_by': 'group_name'} + __mapper_args__ = {'order_by': 'group_name'} # TODO: Deprecated as of SQLAlchemy 1.1. SEP = ' » ' - group_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - group_name = Column(String(255, convert_unicode=False), nullable=False, unique=True, default=None) - group_parent_id = Column(Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None) - group_description = Column(String(10000, convert_unicode=False), nullable=True, unique=None, default=None) - enable_locking = Column(Boolean(), nullable=False, unique=None, default=False) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None) + group_id = Column(Integer(), primary_key=True) + group_name = Column(Unicode(255), nullable=False, unique=True) # full path + parent_group_id = Column('group_parent_id', Integer(), ForeignKey('groups.group_id'), nullable=True) + group_description = Column(Unicode(10000), nullable=False) + enable_locking = Column(Boolean(), nullable=False, default=False) + owner_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False) created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id') users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all') parent_group = relationship('RepoGroup', remote_side=group_id) - user = relationship('User') + owner = relationship('User') + + @classmethod + def query(cls, sorted=False): + """Add RepoGroup-specific helpers for common query constructs. + + sorted: if True, apply the default ordering (name, case insensitive). + """ + q = super(RepoGroup, cls).query() + + if sorted: + q = q.order_by(func.lower(RepoGroup.group_name)) + + return q def __init__(self, group_name='', parent_group=None): self.group_name = group_name @@ -1526,12 +1585,17 @@ return URL_SEP @classmethod + def guess_instance(cls, value): + return super(RepoGroup, cls).guess_instance(value, RepoGroup.get_by_group_name) + + @classmethod def get_by_group_name(cls, group_name, cache=False, case_insensitive=False): + group_name = group_name.rstrip('/') if case_insensitive: - gr = cls.query()\ - .filter(cls.group_name.ilike(group_name)) + gr = cls.query() \ + .filter(func.lower(cls.group_name) == func.lower(group_name)) else: - gr = cls.query()\ + gr = cls.query() \ .filter(cls.group_name == group_name) if cache: gr = gr.options(FromCache( @@ -1543,26 +1607,13 @@ @property def parents(self): - parents_recursion_limit = 10 groups = [] - if self.parent_group is None: - return groups - cur_gr = self.parent_group - groups.insert(0, cur_gr) - cnt = 0 - while 1: - cnt += 1 - gr = getattr(cur_gr, 'parent_group', None) - cur_gr = cur_gr.parent_group - if gr is None: - break - if cnt == parents_recursion_limit: - # this will prevent accidental infinite loops - log.error(('more than %s parents found for group %s, stopping ' - 'recursive parent fetching' % (parents_recursion_limit, self))) - break - - groups.insert(0, gr) + group = self.parent_group + while group is not None: + groups.append(group) + group = group.parent_group + assert group not in groups, group # avoid recursion on bad db content + groups.reverse() return groups @property @@ -1583,9 +1634,7 @@ @property def repositories(self): - return Repository.query()\ - .filter(Repository.group == self)\ - .order_by(Repository.repo_name) + return Repository.query(sorted=True).filter_by(group=self) @property def repositories_recursive_count(self): @@ -1650,18 +1699,18 @@ group_description=group.group_description, parent_group=group.parent_group.group_name if group.parent_group else None, repositories=[x.repo_name for x in group.repositories], - owner=group.user.username + owner=group.owner.username ) return data -class Permission(Base, BaseModel): +class Permission(Base, BaseDbModel): __tablename__ = 'permissions' __table_args__ = ( Index('p_perm_name_idx', 'permission_name'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) + PERMS = [ ('hg.admin', _('Kallithea Administrator')), @@ -1703,7 +1752,7 @@ ('hg.extern_activate.auto', _('Automatic activation of external account')), ] - #definition of system default permissions for DEFAULT user + # definition of system default permissions for DEFAULT user DEFAULT_USER_PERMISSIONS = [ 'repository.read', 'group.read', @@ -1747,9 +1796,8 @@ 'hg.create.repository': 1 } - permission_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - permission_name = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) - permission_longname = Column(String(255, convert_unicode=False), nullable=True, unique=None, default=None) + permission_id = Column(Integer(), primary_key=True) + permission_name = Column(String(255), nullable=False) def __unicode__(self): return u"<%s('%s:%s')>" % ( @@ -1757,48 +1805,52 @@ ) @classmethod + def guess_instance(cls, value): + return super(Permission, cls).guess_instance(value, Permission.get_by_key) + + @classmethod def get_by_key(cls, key): return cls.query().filter(cls.permission_name == key).scalar() @classmethod def get_default_perms(cls, default_user_id): - q = Session().query(UserRepoToPerm, Repository, cls)\ - .join((Repository, UserRepoToPerm.repository_id == Repository.repo_id))\ - .join((cls, UserRepoToPerm.permission_id == cls.permission_id))\ + q = Session().query(UserRepoToPerm, Repository, cls) \ + .join((Repository, UserRepoToPerm.repository_id == Repository.repo_id)) \ + .join((cls, UserRepoToPerm.permission_id == cls.permission_id)) \ .filter(UserRepoToPerm.user_id == default_user_id) return q.all() @classmethod def get_default_group_perms(cls, default_user_id): - q = Session().query(UserRepoGroupToPerm, RepoGroup, cls)\ - .join((RepoGroup, UserRepoGroupToPerm.group_id == RepoGroup.group_id))\ - .join((cls, UserRepoGroupToPerm.permission_id == cls.permission_id))\ + q = Session().query(UserRepoGroupToPerm, RepoGroup, cls) \ + .join((RepoGroup, UserRepoGroupToPerm.group_id == RepoGroup.group_id)) \ + .join((cls, UserRepoGroupToPerm.permission_id == cls.permission_id)) \ .filter(UserRepoGroupToPerm.user_id == default_user_id) return q.all() @classmethod def get_default_user_group_perms(cls, default_user_id): - q = Session().query(UserUserGroupToPerm, UserGroup, cls)\ - .join((UserGroup, UserUserGroupToPerm.user_group_id == UserGroup.users_group_id))\ - .join((cls, UserUserGroupToPerm.permission_id == cls.permission_id))\ + q = Session().query(UserUserGroupToPerm, UserGroup, cls) \ + .join((UserGroup, UserUserGroupToPerm.user_group_id == UserGroup.users_group_id)) \ + .join((cls, UserUserGroupToPerm.permission_id == cls.permission_id)) \ .filter(UserUserGroupToPerm.user_id == default_user_id) return q.all() -class UserRepoToPerm(Base, BaseModel): +class UserRepoToPerm(Base, BaseDbModel): __tablename__ = 'repo_to_perm' __table_args__ = ( UniqueConstraint('user_id', 'repository_id', 'permission_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) - repo_to_perm_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) - permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) - repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) + + repo_to_perm_id = Column(Integer(), primary_key=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) + permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False) + repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False) user = relationship('User') repository = relationship('Repository') @@ -1817,17 +1869,17 @@ return u'<%s => %s >' % (self.user, self.repository) -class UserUserGroupToPerm(Base, BaseModel): +class UserUserGroupToPerm(Base, BaseDbModel): __tablename__ = 'user_user_group_to_perm' __table_args__ = ( UniqueConstraint('user_id', 'user_group_id', 'permission_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) - user_user_group_to_perm_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) - permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) - user_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) + + user_user_group_to_perm_id = Column(Integer(), primary_key=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) + permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False) + user_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False) user = relationship('User') user_group = relationship('UserGroup') @@ -1846,16 +1898,16 @@ return u'<%s => %s >' % (self.user, self.user_group) -class UserToPerm(Base, BaseModel): +class UserToPerm(Base, BaseDbModel): __tablename__ = 'user_to_perm' __table_args__ = ( UniqueConstraint('user_id', 'permission_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) - user_to_perm_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) - permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + + user_to_perm_id = Column(Integer(), primary_key=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) + permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False) user = relationship('User') permission = relationship('Permission') @@ -1864,17 +1916,17 @@ return u'<%s => %s >' % (self.user, self.permission) -class UserGroupRepoToPerm(Base, BaseModel): +class UserGroupRepoToPerm(Base, BaseDbModel): __tablename__ = 'users_group_repo_to_perm' __table_args__ = ( UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) - users_group_to_perm_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - users_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) - permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) - repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) + + users_group_to_perm_id = Column(Integer(), primary_key=True) + users_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False) + permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False) + repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False) users_group = relationship('UserGroup') permission = relationship('Permission') @@ -1893,18 +1945,18 @@ return u' %s >' % (self.users_group, self.repository) -class UserGroupUserGroupToPerm(Base, BaseModel): +class UserGroupUserGroupToPerm(Base, BaseDbModel): __tablename__ = 'user_group_user_group_to_perm' __table_args__ = ( UniqueConstraint('target_user_group_id', 'user_group_id', 'permission_id'), - CheckConstraint('target_user_group_id != user_group_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + CheckConstraint('target_user_group_id != user_group_id', name='ck_user_group_user_group_to_perm_no_self_target'), + _table_args_default_dict, ) - user_group_user_group_to_perm_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - target_user_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) - permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) - user_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) + + user_group_user_group_to_perm_id = Column(Integer(), primary_key=True) + target_user_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False) + permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False) + user_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False) target_user_group = relationship('UserGroup', primaryjoin='UserGroupUserGroupToPerm.target_user_group_id==UserGroup.users_group_id') user_group = relationship('UserGroup', primaryjoin='UserGroupUserGroupToPerm.user_group_id==UserGroup.users_group_id') @@ -1923,33 +1975,32 @@ return u' %s >' % (self.target_user_group, self.user_group) -class UserGroupToPerm(Base, BaseModel): +class UserGroupToPerm(Base, BaseDbModel): __tablename__ = 'users_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'permission_id',), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) - users_group_to_perm_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - users_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) - permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + + users_group_to_perm_id = Column(Integer(), primary_key=True) + users_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False) + permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False) users_group = relationship('UserGroup') permission = relationship('Permission') -class UserRepoGroupToPerm(Base, BaseModel): +class UserRepoGroupToPerm(Base, BaseDbModel): __tablename__ = 'user_repo_group_to_perm' __table_args__ = ( UniqueConstraint('user_id', 'group_id', 'permission_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) - group_to_perm_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) - group_id = Column(Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None) - permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + group_to_perm_id = Column(Integer(), primary_key=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) + group_id = Column(Integer(), ForeignKey('groups.group_id'), nullable=False) + permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False) user = relationship('User') group = relationship('RepoGroup') @@ -1965,18 +2016,17 @@ return n -class UserGroupRepoGroupToPerm(Base, BaseModel): +class UserGroupRepoGroupToPerm(Base, BaseDbModel): __tablename__ = 'users_group_repo_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'group_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) - users_group_repo_group_to_perm_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - users_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) - group_id = Column(Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None) - permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + users_group_repo_group_to_perm_id = Column(Integer(), primary_key=True) + users_group_id = Column(Integer(), ForeignKey('users_groups.users_group_id'), nullable=False) + group_id = Column(Integer(), ForeignKey('groups.group_id'), nullable=False) + permission_id = Column(Integer(), ForeignKey('permissions.permission_id'), nullable=False) users_group = relationship('UserGroup') permission = relationship('Permission') @@ -1992,65 +2042,62 @@ return n -class Statistics(Base, BaseModel): +class Statistics(Base, BaseDbModel): __tablename__ = 'statistics' __table_args__ = ( - UniqueConstraint('repository_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) - stat_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None) + + stat_id = Column(Integer(), primary_key=True) + repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True) stat_on_revision = Column(Integer(), nullable=False) - commit_activity = Column(LargeBinary(1000000), nullable=False)#JSON data - commit_activity_combined = Column(LargeBinary(), nullable=False)#JSON data - languages = Column(LargeBinary(1000000), nullable=False)#JSON data + commit_activity = Column(LargeBinary(1000000), nullable=False) # JSON data + commit_activity_combined = Column(LargeBinary(), nullable=False) # JSON data + languages = Column(LargeBinary(1000000), nullable=False) # JSON data repository = relationship('Repository', single_parent=True) -class UserFollowing(Base, BaseModel): +class UserFollowing(Base, BaseDbModel): __tablename__ = 'user_followings' __table_args__ = ( - UniqueConstraint('user_id', 'follows_repository_id'), - UniqueConstraint('user_id', 'follows_user_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + UniqueConstraint('user_id', 'follows_repository_id', name='uq_user_followings_user_repo'), + UniqueConstraint('user_id', 'follows_user_id', name='uq_user_followings_user_user'), + _table_args_default_dict, ) - user_following_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) - follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None) - follows_user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) - follows_from = Column(DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now) + user_following_id = Column(Integer(), primary_key=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) + follows_repository_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=True) + follows_user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=True) + follows_from = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) user = relationship('User', primaryjoin='User.user_id==UserFollowing.user_id') follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id') - follows_repository = relationship('Repository', order_by='Repository.repo_name') + follows_repository = relationship('Repository', order_by=lambda: func.lower(Repository.repo_name)) @classmethod def get_repo_followers(cls, repo_id): - return cls.query().filter(cls.follows_repo_id == repo_id) - - -class CacheInvalidation(Base, BaseModel): + return cls.query().filter(cls.follows_repository_id == repo_id) + + +class CacheInvalidation(Base, BaseDbModel): __tablename__ = 'cache_invalidation' __table_args__ = ( - UniqueConstraint('cache_key'), Index('key_idx', 'cache_key'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) + # cache_id, not used - cache_id = Column(Integer(), nullable=False, unique=True, primary_key=True) + cache_id = Column(Integer(), primary_key=True) # cache_key as created by _get_cache_key - cache_key = Column(String(255, convert_unicode=False)) + cache_key = Column(Unicode(255), nullable=False, unique=True) # cache_args is a repo_name - cache_args = Column(String(255, convert_unicode=False)) + cache_args = Column(Unicode(255), nullable=False) # instance sets cache_active True when it is caching, other instances set # cache_active to False to indicate that this cache is invalid - cache_active = Column(Boolean(), nullable=True, unique=None, default=False) + cache_active = Column(Boolean(), nullable=False, default=False) def __init__(self, cache_key, repo_name=''): self.cache_key = cache_key @@ -2104,7 +2151,7 @@ return "%s%s" % (prefix, key) @classmethod - def set_invalidate(cls, repo_name, delete=False): + def set_invalidate(cls, repo_name): """ Mark all caches of a repo as invalid in the database. """ @@ -2115,11 +2162,7 @@ for inv_obj in inv_objs: log.debug('marking %s key for invalidation based on repo_name=%s', inv_obj, safe_str(repo_name)) - if delete: - Session().delete(inv_obj) - else: - inv_obj.cache_active = False - Session().add(inv_obj) + Session().delete(inv_obj) Session().commit() @classmethod @@ -2138,11 +2181,11 @@ inv_obj = cls.query().filter(cls.cache_key == cache_key).scalar() if inv_obj is None: - inv_obj = CacheInvalidation(cache_key, repo_name) + inv_obj = cls(cache_key, repo_name) + Session().add(inv_obj) elif inv_obj.cache_active: return True inv_obj.cache_active = True - Session().add(inv_obj) try: Session().commit() except sqlalchemy.exc.IntegrityError: @@ -2164,22 +2207,22 @@ return set(inv_obj.cache_key for inv_obj in cls.query().filter(cls.cache_active).all()) -class ChangesetComment(Base, BaseModel): +class ChangesetComment(Base, BaseDbModel): __tablename__ = 'changeset_comments' __table_args__ = ( Index('cc_revision_idx', 'revision'), Index('cc_pull_request_id_idx', 'pull_request_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) - comment_id = Column(Integer(), nullable=False, unique=True, primary_key=True) + + comment_id = Column(Integer(), primary_key=True) repo_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False) - revision = Column(String(40)) - pull_request_id = Column(Integer(), ForeignKey('pull_requests.pull_request_id')) - line_no = Column(Unicode(10)) - f_path = Column(Unicode(1000)) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) - text = Column(UnicodeText(25000), nullable=False) + revision = Column(String(40), nullable=True) + pull_request_id = Column(Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=True) + line_no = Column(Unicode(10), nullable=True) + f_path = Column(Unicode(1000), nullable=True) + author_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False) + text = Column(UnicodeText(), nullable=False) created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) modified_at = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) @@ -2192,23 +2235,6 @@ cascade="all, delete-orphan", lazy='joined') pull_request = relationship('PullRequest') - @classmethod - def get_users(cls, revision=None, pull_request_id=None): - """ - Returns user associated with this ChangesetComment. ie those - who actually commented - - :param cls: - :param revision: - """ - q = Session().query(User)\ - .join(ChangesetComment.author) - if revision is not None: - q = q.filter(cls.revision == revision) - elif pull_request_id is not None: - q = q.filter(cls.pull_request_id == pull_request_id) - return q.all() - def url(self): anchor = "comment-%s" % self.comment_id import kallithea.lib.helpers as h @@ -2217,7 +2243,18 @@ elif self.pull_request_id is not None: return self.pull_request.url(anchor=anchor) -class ChangesetStatus(Base, BaseModel): + def __json__(self): + return dict( + comment_id=self.comment_id, + username=self.author.username, + text=self.text, + ) + + def deletable(self): + return self.created_on > datetime.datetime.now() - datetime.timedelta(minutes=5) + + +class ChangesetStatus(Base, BaseDbModel): __tablename__ = 'changeset_statuses' __table_args__ = ( Index('cs_revision_idx', 'revision'), @@ -2225,28 +2262,30 @@ Index('cs_pull_request_id_idx', 'pull_request_id'), Index('cs_changeset_comment_id_idx', 'changeset_comment_id'), Index('cs_pull_request_id_user_id_version_idx', 'pull_request_id', 'user_id', 'version'), + Index('cs_repo_id_pull_request_id_idx', 'repo_id', 'pull_request_id'), UniqueConstraint('repo_id', 'revision', 'version'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) + STATUS_NOT_REVIEWED = DEFAULT = 'not_reviewed' STATUS_APPROVED = 'approved' - STATUS_REJECTED = 'rejected' + STATUS_REJECTED = 'rejected' # is shown as "Not approved" - TODO: change database content / scheme STATUS_UNDER_REVIEW = 'under_review' STATUSES = [ (STATUS_NOT_REVIEWED, _("Not reviewed")), # (no icon) and default + (STATUS_UNDER_REVIEW, _("Under review")), + (STATUS_REJECTED, _("Not approved")), (STATUS_APPROVED, _("Approved")), - (STATUS_REJECTED, _("Rejected")), - (STATUS_UNDER_REVIEW, _("Under review")), ] - - changeset_status_id = Column(Integer(), nullable=False, unique=True, primary_key=True) + STATUSES_DICT = dict(STATUSES) + + changeset_status_id = Column(Integer(), primary_key=True) repo_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=None) - revision = Column(String(40), nullable=False) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) + revision = Column(String(40), nullable=True) status = Column(String(128), nullable=False, default=DEFAULT) - changeset_comment_id = Column(Integer(), ForeignKey('changeset_comments.comment_id'), nullable=False) + comment_id = Column('changeset_comment_id', Integer(), ForeignKey('changeset_comments.comment_id'), nullable=False) modified_at = Column(DateTime(), nullable=False, default=datetime.datetime.now) version = Column(Integer(), nullable=False, default=0) pull_request_id = Column(Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=True) @@ -2264,34 +2303,40 @@ @classmethod def get_status_lbl(cls, value): - return dict(cls.STATUSES).get(value) + return cls.STATUSES_DICT.get(value) @property def status_lbl(self): return ChangesetStatus.get_status_lbl(self.status) - -class PullRequest(Base, BaseModel): + def __json__(self): + return dict( + status=self.status, + modified_at=self.modified_at.replace(microsecond=0), + reviewer=self.author.username, + ) + + +class PullRequest(Base, BaseDbModel): __tablename__ = 'pull_requests' __table_args__ = ( Index('pr_org_repo_id_idx', 'org_repo_id'), Index('pr_other_repo_id_idx', 'other_repo_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) # values for .status STATUS_NEW = u'new' STATUS_CLOSED = u'closed' - pull_request_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - title = Column(Unicode(255), nullable=True) - description = Column(UnicodeText(10240)) + pull_request_id = Column(Integer(), primary_key=True) + title = Column(Unicode(255), nullable=False) + description = Column(UnicodeText(), nullable=False) status = Column(Unicode(255), nullable=False, default=STATUS_NEW) # only for closedness, not approve/reject/etc created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) updated_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False, unique=None) - _revisions = Column('revisions', UnicodeText(20500)) # 500 revisions max + owner_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False) + _revisions = Column('revisions', UnicodeText(), nullable=False) org_repo_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False) org_ref = Column(Unicode(255), nullable=False) other_repo_id = Column(Integer(), ForeignKey('repositories.repo_id'), nullable=False) @@ -2314,24 +2359,55 @@ return self.other_ref.split(':') owner = relationship('User') - reviewers = relationship('PullRequestReviewers', + reviewers = relationship('PullRequestReviewer', cascade="all, delete-orphan") org_repo = relationship('Repository', primaryjoin='PullRequest.org_repo_id==Repository.repo_id') other_repo = relationship('Repository', primaryjoin='PullRequest.other_repo_id==Repository.repo_id') - statuses = relationship('ChangesetStatus') - comments = relationship('ChangesetComment', + statuses = relationship('ChangesetStatus', order_by='ChangesetStatus.changeset_status_id') + comments = relationship('ChangesetComment', order_by='ChangesetComment.comment_id', cascade="all, delete-orphan") + @classmethod + def query(cls, reviewer_id=None, include_closed=True, sorted=False): + """Add PullRequest-specific helpers for common query constructs. + + reviewer_id: only PRs with the specified user added as reviewer. + + include_closed: if False, do not include closed PRs. + + sorted: if True, apply the default ordering (newest first). + """ + q = super(PullRequest, cls).query() + + if reviewer_id is not None: + q = q.join(PullRequestReviewer).filter(PullRequestReviewer.user_id == reviewer_id) + + if not include_closed: + q = q.filter(PullRequest.status != PullRequest.STATUS_CLOSED) + + if sorted: + q = q.order_by(PullRequest.created_on.desc()) + + return q + + def get_reviewer_users(self): + """Like .reviewers, but actually returning the users""" + return User.query() \ + .join(PullRequestReviewer) \ + .filter(PullRequestReviewer.pull_request == self) \ + .order_by(PullRequestReviewer.pull_request_reviewers_id) \ + .all() + def is_closed(self): return self.status == self.STATUS_CLOSED def user_review_status(self, user_id): """Return the user's latest status votes on PR""" # note: no filtering on repo - that would be redundant - status = ChangesetStatus.query()\ - .filter(ChangesetStatus.pull_request == self)\ - .filter(ChangesetStatus.user_id == user_id)\ - .order_by(ChangesetStatus.version)\ + status = ChangesetStatus.query() \ + .filter(ChangesetStatus.pull_request == self) \ + .filter(ChangesetStatus.user_id == user_id) \ + .order_by(ChangesetStatus.version) \ .first() return str(status.status) if status else '' @@ -2344,9 +2420,24 @@ '''Return the id of this pull request, nicely formatted for displaying''' return self.make_nice_id(self.pull_request_id) + def get_api_data(self): + return self.__json__() + def __json__(self): return dict( - revisions=self.revisions + pull_request_id=self.pull_request_id, + url=self.url(), + reviewers=self.reviewers, + revisions=self.revisions, + owner=self.owner.username, + title=self.title, + description=self.description, + org_repo_url=self.org_repo.clone_url(), + org_ref_parts=self.org_ref_parts, + other_ref_parts=self.other_ref_parts, + status=self.status, + comments=self.comments, + statuses=self.statuses, ) def url(self, **kwargs): @@ -2364,46 +2455,51 @@ return h.url('pullrequest_show', repo_name=self.other_repo.repo_name, pull_request_id=self.pull_request_id, **kwargs) -class PullRequestReviewers(Base, BaseModel): + +class PullRequestReviewer(Base, BaseDbModel): __tablename__ = 'pull_request_reviewers' __table_args__ = ( - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + Index('pull_request_reviewers_user_id_idx', 'user_id'), + _table_args_default_dict, ) def __init__(self, user=None, pull_request=None): self.user = user self.pull_request = pull_request - pull_requests_reviewers_id = Column(Integer(), nullable=False, unique=True, primary_key=True) + pull_request_reviewers_id = Column('pull_requests_reviewers_id', Integer(), primary_key=True) pull_request_id = Column(Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=False) - user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=True) + user_id = Column(Integer(), ForeignKey('users.user_id'), nullable=False) user = relationship('User') pull_request = relationship('PullRequest') - -class Notification(Base, BaseModel): + def __json__(self): + return dict( + username=self.user.username if self.user else None, + ) + + +class Notification(Base, BaseDbModel): __tablename__ = 'notifications' __table_args__ = ( Index('notification_type_idx', 'type'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, + _table_args_default_dict, ) TYPE_CHANGESET_COMMENT = u'cs_comment' TYPE_MESSAGE = u'message' - TYPE_MENTION = u'mention' + TYPE_MENTION = u'mention' # not used TYPE_REGISTRATION = u'registration' TYPE_PULL_REQUEST = u'pull_request' TYPE_PULL_REQUEST_COMMENT = u'pull_request_comment' - notification_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - subject = Column(Unicode(512), nullable=True) - body = Column(UnicodeText(50000), nullable=True) - created_by = Column(Integer(), ForeignKey('users.user_id'), nullable=True) + notification_id = Column(Integer(), primary_key=True) + subject = Column(Unicode(512), nullable=False) + body = Column(UnicodeText(), nullable=False) + created_by = Column(Integer(), ForeignKey('users.user_id'), nullable=False) created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) - type_ = Column('type', Unicode(255)) + type_ = Column('type', Unicode(255), nullable=False) created_by_user = relationship('User') notifications_to_users = relationship('UserNotification', cascade="all, delete-orphan") @@ -2426,13 +2522,17 @@ notification.type_ = type_ notification.created_on = datetime.datetime.now() - for u in recipients: - assoc = UserNotification() - assoc.notification = notification - assoc.user_id = u.user_id - Session().add(assoc) + for recipient in recipients: + un = UserNotification() + un.notification = notification + un.user_id = recipient.user_id + # Mark notifications to self "pre-read" - should perhaps just be skipped + if recipient == created_by: + un.read = True + Session().add(un) + Session().add(notification) - Session().flush() # assign notificaiton.notification_id + Session().flush() # assign notification.notification_id return notification @property @@ -2441,42 +2541,41 @@ return NotificationModel().make_description(self) -class UserNotification(Base, BaseModel): +class UserNotification(Base, BaseDbModel): __tablename__ = 'user_to_notification' __table_args__ = ( UniqueConstraint('user_id', 'notification_id'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) + user_id = Column(Integer(), ForeignKey('users.user_id'), primary_key=True) notification_id = Column(Integer(), ForeignKey('notifications.notification_id'), primary_key=True) - read = Column(Boolean, default=False) - sent_on = Column(DateTime(timezone=False), nullable=True, unique=None) + read = Column(Boolean, nullable=False, default=False) + sent_on = Column(DateTime(timezone=False), nullable=True) # FIXME: not nullable? user = relationship('User') notification = relationship('Notification') def mark_as_read(self): self.read = True - Session().add(self) - - -class Gist(Base, BaseModel): + + +class Gist(Base, BaseDbModel): __tablename__ = 'gists' __table_args__ = ( Index('g_gist_access_id_idx', 'gist_access_id'), Index('g_created_on_idx', 'created_on'), - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True} + _table_args_default_dict, ) + GIST_PUBLIC = u'public' GIST_PRIVATE = u'private' DEFAULT_FILENAME = u'gistfile1.txt' - gist_id = Column(Integer(), nullable=False, unique=True, primary_key=True) - gist_access_id = Column(Unicode(250)) - gist_description = Column(UnicodeText(1024)) - gist_owner = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=True) + gist_id = Column(Integer(), primary_key=True) + gist_access_id = Column(Unicode(250), nullable=False) + gist_description = Column(UnicodeText(), nullable=False) + owner_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False) gist_expires = Column(Float(53), nullable=False) gist_type = Column(Unicode(128), nullable=False) created_on = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.now) @@ -2484,10 +2583,18 @@ owner = relationship('User') + @hybrid_property + def is_expired(self): + return (self.gist_expires != -1) & (time.time() > self.gist_expires) + def __repr__(self): return '' % (self.gist_type, self.gist_access_id) @classmethod + def guess_instance(cls, value): + return super(Gist, cls).guess_instance(value, Gist.get_by_access_id) + + @classmethod def get_or_404(cls, id_): res = cls.query().filter(cls.gist_access_id == id_).scalar() if res is None: @@ -2515,7 +2622,7 @@ :param cls: """ from kallithea.model.gist import GIST_STORE_LOC - q = Session().query(Ui)\ + q = Session().query(Ui) \ .filter(Ui.ui_key == URL_SEP) q = q.options(FromCache("sql_cache_short", "repository_repo_path")) return os.path.join(q.one().ui_value, GIST_STORE_LOC) @@ -2549,14 +2656,3 @@ base_path = self.base_path() return get_repo(os.path.join(*map(safe_str, [base_path, self.gist_access_id]))) - - -class DbMigrateVersion(Base, BaseModel): - __tablename__ = 'db_migrate_version' - __table_args__ = ( - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}, - ) - repository_id = Column(String(250), nullable=False, unique=True, primary_key=True) - repository_path = Column(Text) - version = Column(Integer) diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/forms.py --- a/kallithea/model/forms.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/forms.py Thu Jun 07 01:46:02 2018 +0200 @@ -38,7 +38,7 @@ import formencode from formencode import All -from pylons.i18n.translation import _ +from tg.i18n import ugettext as _ from kallithea import BACKENDS from kallithea.model import validators as v @@ -46,30 +46,32 @@ log = logging.getLogger(__name__) -class LoginForm(formencode.Schema): - allow_extra_fields = True - filter_extra_fields = True - username = v.UnicodeString( - strip=True, - min=1, - not_empty=True, - messages={ - 'empty': _('Please enter a login'), - 'tooShort': _('Enter a value %(min)i characters long or more')} - ) +def LoginForm(): + class _LoginForm(formencode.Schema): + allow_extra_fields = True + filter_extra_fields = True + username = v.UnicodeString( + strip=True, + min=1, + not_empty=True, + messages={ + 'empty': _('Please enter a login'), + 'tooShort': _('Enter a value %(min)i characters long or more')} + ) - password = v.UnicodeString( - strip=False, - min=3, - not_empty=True, - messages={ - 'empty': _('Please enter a password'), - 'tooShort': _('Enter %(min)i characters or more')} - ) + password = v.UnicodeString( + strip=False, + min=3, + not_empty=True, + messages={ + 'empty': _('Please enter a password'), + 'tooShort': _('Enter %(min)i characters or more')} + ) - remember = v.StringBoolean(if_missing=False) + remember = v.StringBoolean(if_missing=False) - chained_validators = [v.ValidAuth()] + chained_validators = [v.ValidAuth()] + return _LoginForm def PasswordChangeForm(username): @@ -86,7 +88,9 @@ return _PasswordChangeForm -def UserForm(edit=False, old_data={}): +def UserForm(edit=False, old_data=None): + old_data = old_data or {} + class _UserForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = True @@ -125,7 +129,10 @@ return _UserForm -def UserGroupForm(edit=False, old_data={}, available_members=[]): +def UserGroupForm(edit=False, old_data=None, available_members=None): + old_data = old_data or {} + available_members = available_members or [] + class _UserGroupForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = True @@ -148,9 +155,12 @@ return _UserGroupForm -def RepoGroupForm(edit=False, old_data={}, repo_groups=[], +def RepoGroupForm(edit=False, old_data=None, repo_groups=None, can_create_in_root=False): + old_data = old_data or {} + repo_groups = repo_groups or [] repo_group_ids = [rg[0] for rg in repo_groups] + class _RepoGroupForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = False @@ -163,11 +173,11 @@ group_copy_permissions = v.StringBoolean(if_missing=False) if edit: - #FIXME: do a special check that we cannot move a group to one of - #its children + # FIXME: do a special check that we cannot move a group to one of + # its children pass - group_parent_id = All(v.CanCreateGroup(can_create_in_root), + parent_group_id = All(v.CanCreateGroup(can_create_in_root), v.OneOf(repo_group_ids, hideList=False, testValueList=True, if_missing=None, not_empty=True), @@ -178,7 +188,7 @@ return _RepoGroupForm -def RegisterForm(edit=False, old_data={}): +def RegisterForm(edit=False, old_data=None): class _RegisterForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = True @@ -212,6 +222,7 @@ email = v.Email(not_empty=True) return _PasswordResetRequestForm + def PasswordResetConfirmationForm(): class _PasswordResetConfirmationForm(formencode.Schema): allow_extra_fields = True @@ -227,9 +238,14 @@ 'password_confirm')] return _PasswordResetConfirmationForm -def RepoForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(), - repo_groups=[], landing_revs=[]): + +def RepoForm(edit=False, old_data=None, supported_backends=BACKENDS.keys(), + repo_groups=None, landing_revs=None): + old_data = old_data or {} + repo_groups = repo_groups or [] + landing_revs = landing_revs or [] repo_group_ids = [rg[0] for rg in repo_groups] + class _RepoForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = False @@ -251,8 +267,7 @@ repo_enable_locking = v.StringBoolean(if_missing=False) if edit: - #this is repo owner - user = All(v.UnicodeString(not_empty=True), v.ValidRepoUser()) + owner = All(v.UnicodeString(not_empty=True), v.ValidRepoUser()) # Not a real field - just for reference for validation: # clone_uri_hidden = v.UnicodeString(if_missing='') @@ -302,9 +317,13 @@ return _RepoFieldForm -def RepoForkForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(), - repo_groups=[], landing_revs=[]): +def RepoForkForm(edit=False, old_data=None, supported_backends=BACKENDS.keys(), + repo_groups=None, landing_revs=None): + old_data = old_data or {} + repo_groups = repo_groups or [] + landing_revs = landing_revs or [] repo_group_ids = [rg[0] for rg in repo_groups] + class _RepoForkForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = False @@ -344,7 +363,7 @@ filter_extra_fields = False show_public_icon = v.StringBoolean(if_missing=False) show_private_icon = v.StringBoolean(if_missing=False) - stylify_metatags = v.StringBoolean(if_missing=False) + stylify_metalabels = v.StringBoolean(if_missing=False) repository_fields = v.StringBoolean(if_missing=False) lightweight_journal = v.StringBoolean(if_missing=False) @@ -362,7 +381,6 @@ class _ApplicationUiSettingsForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = False - web_push_ssl = v.StringBoolean(if_missing=False) paths_root_path = All( v.ValidPath(), v.UnicodeString(strip=True, min=1, not_empty=True) @@ -421,7 +439,7 @@ return _CustomDefaultPermissionsForm -def DefaultsForm(edit=False, old_data={}, supported_backends=BACKENDS.keys()): +def DefaultsForm(edit=False, old_data=None, supported_backends=BACKENDS.keys()): class _DefaultsForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = True @@ -455,7 +473,7 @@ validator = sv["validator"] if isinstance(validator, LazyFormencode): validator = validator() - #init all lazy validators from formencode.All + # init all lazy validators from formencode.All if isinstance(validator, All): init_validators = [] for validator in validator.validators: @@ -515,7 +533,6 @@ org_ref = v.UnicodeString(strip=True, required=True) other_repo = v.UnicodeString(strip=True, required=True) other_ref = v.UnicodeString(strip=True, required=True) - review_members = v.Set() pullrequest_title = v.UnicodeString(strip=True, required=True) pullrequest_desc = v.UnicodeString(strip=True, required=False) @@ -530,6 +547,7 @@ pullrequest_title = v.UnicodeString(strip=True, required=True) pullrequest_desc = v.UnicodeString(strip=True, required=False) + org_review_members = v.Set() review_members = v.Set() updaterev = v.UnicodeString(strip=True, required=False, if_missing=None) owner = All(v.UnicodeString(strip=True, required=True), diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/gist.py --- a/kallithea/model/gist.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/gist.py Thu Jun 07 01:46:02 2018 +0200 @@ -26,16 +26,16 @@ """ import os +import random import time import logging import traceback import shutil -from kallithea.lib.utils2 import safe_unicode, unique_id, safe_int, \ +from kallithea.lib.utils2 import safe_unicode, safe_int, \ time_to_datetime, AttributeDict from kallithea.lib.compat import json -from kallithea.model import BaseModel -from kallithea.model.db import Gist +from kallithea.model.db import Gist, Session, User from kallithea.model.repo import RepoModel from kallithea.model.scm import ScmModel @@ -45,16 +45,15 @@ GIST_METADATA_FILE = '.rc_gist_metadata' -class GistModel(BaseModel): - cls = Gist +def make_gist_id(): + """Generate a random, URL safe, almost certainly unique gist identifier.""" + rnd = random.SystemRandom() # use cryptographically secure system PRNG + alphabet = '23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz' + length = 20 + return u''.join(rnd.choice(alphabet) for _ in xrange(length)) - def _get_gist(self, gist): - """ - Helper method to get gist by ID, or gist_access_id as a fallback - :param gist: GistID, gist_access_id, or Gist instance - """ - return self._get_instance(Gist, gist, callback=Gist.get_by_access_id) +class GistModel(object): def __delete_gist(self, gist): """ @@ -86,7 +85,7 @@ f.write(json.dumps(metadata)) def get_gist(self, gist): - return self._get_gist(gist) + return Gist.guess_instance(gist) def get_gist_files(self, gist_access_id, revision=None): """ @@ -108,27 +107,26 @@ :param gist_type: type of gist private/public :param lifetime: in minutes, -1 == forever """ - owner = self._get_user(owner) - gist_id = safe_unicode(unique_id(20)) + owner = User.guess_instance(owner) + gist_id = make_gist_id() lifetime = safe_int(lifetime, -1) gist_expires = time.time() + (lifetime * 60) if lifetime != -1 else -1 log.debug('set GIST expiration date to: %s', time_to_datetime(gist_expires) if gist_expires != -1 else 'forever') - #create the Database version + # create the Database version gist = Gist() gist.gist_description = description gist.gist_access_id = gist_id - gist.gist_owner = owner.user_id + gist.owner_id = owner.user_id gist.gist_expires = gist_expires gist.gist_type = safe_unicode(gist_type) - self.sa.add(gist) - self.sa.flush() + Session().add(gist) + Session().flush() # make database assign gist.gist_id if gist_type == Gist.GIST_PUBLIC: # use DB ID for easy to use GIST ID gist_id = safe_unicode(gist.gist_id) gist.gist_access_id = gist_id - self.sa.add(gist) gist_repo_path = os.path.join(GIST_STORE_LOC, gist_id) log.debug('Creating new %s GIST repo in %s', gist_type, gist_repo_path) @@ -141,7 +139,7 @@ raise Exception('Filename cannot be inside a directory') content = gist_mapping[filename]['content'] - #TODO: expand support for setting explicit lexers + # TODO: expand support for setting explicit lexers # if lexer is None: # try: # guess_lexer = pygments.lexers.guess_lexer_for_filename @@ -155,7 +153,7 @@ message += 's: ' if len(processed_mapping) > 1 else ': ' message += ', '.join([x for x in processed_mapping]) - #fake Kallithea Repository object + # fake Kallithea Repository object fake_repo = AttributeDict(dict( repo_name=gist_repo_path, scm_instance_no_cache=lambda: repo, @@ -172,9 +170,9 @@ return gist def delete(self, gist, fs_remove=True): - gist = self._get_gist(gist) + gist = Gist.guess_instance(gist) try: - self.sa.delete(gist) + Session().delete(gist) if fs_remove: self.__delete_gist(gist) else: @@ -185,7 +183,7 @@ def update(self, gist, description, owner, gist_mapping, gist_type, lifetime): - gist = self._get_gist(gist) + gist = Gist.guess_instance(gist) gist_repo = gist.scm_instance lifetime = safe_int(lifetime, -1) @@ -194,7 +192,7 @@ else: gist_expires = time.time() + (lifetime * 60) if lifetime != -1 else -1 - #calculate operation type based on given data + # calculate operation type based on given data gist_mapping_op = {} for k, v in gist_mapping.items(): # add, mod, del @@ -212,14 +210,12 @@ gist.gist_expires = gist_expires gist.owner = owner gist.gist_type = gist_type - self.sa.add(gist) - self.sa.flush() message = 'updated file' message += 's: ' if len(gist_mapping) > 1 else ': ' message += ', '.join([x for x in gist_mapping]) - #fake Kallithea Repository object + # fake Kallithea Repository object fake_repo = AttributeDict(dict( repo_name=gist_repo.path, scm_instance_no_cache=lambda: gist_repo, diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/meta.py --- a/kallithea/model/meta.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/meta.py Thu Jun 07 01:46:02 2018 +0200 @@ -38,5 +38,20 @@ # Engine is injected when model.__init__.init_model() sets meta.Base.metadata.bind Base = declarative_base() -#to use cache use this in query -#.options(FromCache("sqlalchemy_cache_type", "cachekey")) +# to use cache use this in query: +# .options(FromCache("sqlalchemy_cache_type", "cachekey")) + + +# Define naming conventions for foreign keys, primary keys, indexes, +# check constraints, and unique constraints, respectively. +Base.metadata.naming_convention = { + 'fk': 'fk_%(table_name)s_%(column_0_name)s', + 'pk': 'pk_%(table_name)s', + 'ix': 'ix_%(column_0_label)s', + 'ck': 'ck_%(table_name)s_%(column_0_name)s', + 'uq': 'uq_%(table_name)s_%(column_0_name)s', +} +# For custom CheckConstraints (not those autogenerated e.g. for Boolean +# types), a name should be given explicitly, since "column_0" is here a +# rather vague notion. A custom name is also necesarry if the generated +# name is very long, since MySQL limits identifiers to 64 characters. diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/notification.py --- a/kallithea/model/notification.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/notification.py Thu Jun 07 01:46:02 2018 +0200 @@ -29,37 +29,24 @@ import logging import traceback -from pylons import tmpl_context as c -from pylons.i18n.translation import _ +from tg import tmpl_context as c, app_globals +from tg.i18n import ugettext as _ from sqlalchemy.orm import joinedload, subqueryload import kallithea from kallithea.lib import helpers as h from kallithea.lib.utils2 import safe_unicode -from kallithea.model import BaseModel from kallithea.model.db import Notification, User, UserNotification from kallithea.model.meta import Session log = logging.getLogger(__name__) -class NotificationModel(BaseModel): - - cls = Notification - - def __get_notification(self, notification): - if isinstance(notification, Notification): - return notification - elif isinstance(notification, (int, long)): - return Notification.get(notification) - else: - if notification is not None: - raise Exception('notification must be int, long or Instance' - ' of Notification got %s' % type(notification)) +class NotificationModel(object): def create(self, created_by, subject, body, recipients=None, type_=Notification.TYPE_MESSAGE, with_email=True, - email_kwargs={}): + email_kwargs=None, repo_name=None): """ Creates notification of given type @@ -74,17 +61,17 @@ :param with_email: send email with this notification :param email_kwargs: additional dict to pass as args to email template """ - from kallithea.lib.celerylib import tasks, run_task - + from kallithea.lib.celerylib import tasks + email_kwargs = email_kwargs or {} if recipients and not getattr(recipients, '__iter__', False): raise Exception('recipients must be a list or iterable') - created_by_obj = self._get_user(created_by) + created_by_obj = User.guess_instance(created_by) recipients_objs = [] if recipients: for u in recipients: - obj = self._get_user(u) + obj = User.guess_instance(u) if obj is not None: recipients_objs.append(obj) else: @@ -111,7 +98,7 @@ if not with_email: return notif - #don't send email to person who created this comment + # don't send email to person who created this comment rec_objs = set(recipients_objs).difference(set([created_by_obj])) headers = {} @@ -121,10 +108,10 @@ # send email with notification to all other participants for rec in rec_objs: - ## this is passed into template + # this is passed into template html_kwargs = { 'subject': subject, - 'body': h.rst_w_mentions(body), + 'body': h.render_w_mentions(body, repo_name), 'when': h.fmt_date(notif.created_on), 'user': notif.created_by_user.username, } @@ -138,14 +125,14 @@ html_kwargs.update(email_kwargs) txt_kwargs.update(email_kwargs) - email_subject = EmailNotificationModel()\ + email_subject = EmailNotificationModel() \ .get_email_description(type_, **txt_kwargs) - email_txt_body = EmailNotificationModel()\ + email_txt_body = EmailNotificationModel() \ .get_email_tmpl(type_, 'txt', **txt_kwargs) - email_html_body = EmailNotificationModel()\ + email_html_body = EmailNotificationModel() \ .get_email_tmpl(type_, 'html', **html_kwargs) - run_task(tasks.send_email, [rec.email], email_subject, email_txt_body, + tasks.send_email([rec.email], email_subject, email_txt_body, email_html_body, headers, author=created_by_obj) return notif @@ -153,13 +140,13 @@ def delete(self, user, notification): # we don't want to remove actual notification just the assignment try: - notification = self.__get_notification(notification) - user = self._get_user(user) + notification = Notification.guess_instance(notification) + user = User.guess_instance(user) if notification and user: - obj = UserNotification.query()\ - .filter(UserNotification.user == user)\ + obj = UserNotification.query() \ + .filter(UserNotification.user == user) \ .filter(UserNotification.notification - == notification)\ + == notification) \ .one() Session().delete(obj) return True @@ -167,50 +154,49 @@ log.error(traceback.format_exc()) raise - def get_for_user(self, user, filter_=None): + def query_for_user(self, user, filter_=None): """ Get notifications for given user, filter them if filter dict is given :param user: :param filter: """ - user = self._get_user(user) + user = User.guess_instance(user) - q = UserNotification.query()\ - .filter(UserNotification.user == user)\ + q = UserNotification.query() \ + .filter(UserNotification.user == user) \ .join((Notification, UserNotification.notification_id == - Notification.notification_id))\ - .options(joinedload('notification'))\ - .options(subqueryload('notification.created_by_user'))\ + Notification.notification_id)) \ + .options(joinedload('notification')) \ + .options(subqueryload('notification.created_by_user')) \ .order_by(Notification.created_on.desc()) if filter_: q = q.filter(Notification.type_.in_(filter_)) - return q.all() + return q def mark_read(self, user, notification): try: - notification = self.__get_notification(notification) - user = self._get_user(user) + notification = Notification.guess_instance(notification) + user = User.guess_instance(user) if notification and user: - obj = UserNotification.query()\ - .filter(UserNotification.user == user)\ + obj = UserNotification.query() \ + .filter(UserNotification.user == user) \ .filter(UserNotification.notification - == notification)\ + == notification) \ .one() obj.read = True - Session().add(obj) return True except Exception: log.error(traceback.format_exc()) raise def mark_all_read_for_user(self, user, filter_=None): - user = self._get_user(user) - q = UserNotification.query()\ - .filter(UserNotification.user == user)\ - .filter(UserNotification.read == False)\ + user = User.guess_instance(user) + q = UserNotification.query() \ + .filter(UserNotification.user == user) \ + .filter(UserNotification.read == False) \ .join((Notification, UserNotification.notification_id == Notification.notification_id)) if filter_: @@ -218,28 +204,27 @@ # this is a little inefficient but sqlalchemy doesn't support # update on joined tables :( - for obj in q.all(): + for obj in q: obj.read = True - Session().add(obj) def get_unread_cnt_for_user(self, user): - user = self._get_user(user) - return UserNotification.query()\ - .filter(UserNotification.read == False)\ + user = User.guess_instance(user) + return UserNotification.query() \ + .filter(UserNotification.read == False) \ .filter(UserNotification.user == user).count() def get_unread_for_user(self, user): - user = self._get_user(user) - return [x.notification for x in UserNotification.query()\ - .filter(UserNotification.read == False)\ + user = User.guess_instance(user) + return [x.notification for x in UserNotification.query() \ + .filter(UserNotification.read == False) \ .filter(UserNotification.user == user).all()] def get_user_notification(self, user, notification): - user = self._get_user(user) - notification = self.__get_notification(notification) + user = User.guess_instance(user) + notification = Notification.guess_instance(notification) - return UserNotification.query()\ - .filter(UserNotification.notification == notification)\ + return UserNotification.query() \ + .filter(UserNotification.notification == notification) \ .filter(UserNotification.user == user).scalar() def make_description(self, notification, show_age=True): @@ -247,7 +232,7 @@ Creates a human readable description based on properties of notification object """ - #alias + # alias _n = notification if show_age: @@ -276,7 +261,7 @@ ) -class EmailNotificationModel(BaseModel): +class EmailNotificationModel(object): TYPE_CHANGESET_COMMENT = Notification.TYPE_CHANGESET_COMMENT TYPE_MESSAGE = Notification.TYPE_MESSAGE # only used for testing @@ -289,8 +274,8 @@ def __init__(self): super(EmailNotificationModel, self).__init__() - self._template_root = kallithea.CONFIG['pylons.paths']['templates'][0] - self._tmpl_lookup = kallithea.CONFIG['pylons.app_globals'].mako_lookup + self._template_root = kallithea.CONFIG['paths']['templates'][0] + self._tmpl_lookup = app_globals.mako_lookup self.email_types = { self.TYPE_CHANGESET_COMMENT: 'changeset_comment', self.TYPE_PASSWORD_RESET: 'password_reset', @@ -300,13 +285,13 @@ self.TYPE_PULL_REQUEST_COMMENT: 'pull_request_comment', } self._subj_map = { - self.TYPE_CHANGESET_COMMENT: _('[Comment] %(repo_name)s changeset %(short_id)s on %(branch)s'), + self.TYPE_CHANGESET_COMMENT: _('[Comment] %(repo_name)s changeset %(short_id)s "%(message_short)s" on %(branch)s'), self.TYPE_MESSAGE: 'Test Message', # self.TYPE_PASSWORD_RESET self.TYPE_REGISTRATION: _('New user %(new_username)s registered'), # self.TYPE_DEFAULT - self.TYPE_PULL_REQUEST: _('[Added] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s'), - self.TYPE_PULL_REQUEST_COMMENT: _('[Comment] %(repo_name)s pull request %(pr_nice_id)s from %(ref)s'), + self.TYPE_PULL_REQUEST: _('[Review] %(repo_name)s PR %(pr_nice_id)s "%(pr_title_short)s" from %(pr_source_branch)s by %(pr_owner_username)s'), + self.TYPE_PULL_REQUEST_COMMENT: _('[Comment] %(repo_name)s PR %(pr_nice_id)s "%(pr_title_short)s" from %(pr_source_branch)s by %(pr_owner_username)s'), } def get_email_description(self, type_, **kwargs): @@ -339,5 +324,25 @@ 'h': h, 'c': c} _kwargs.update(kwargs) + if content_type == 'html': + _kwargs.update({ + "color_text": "#202020", + "color_emph": "#395fa0", + "color_link": "#395fa0", + "color_border": "#ddd", + "color_background_grey": "#f9f9f9", + "color_button": "#395fa0", + "monospace_style": "font-family:Lucida Console,Consolas,Monaco,Inconsolata,Liberation Mono,monospace", + "sans_style": "font-family:Helvetica,Arial,sans-serif", + }) + _kwargs.update({ + "default_style": "%(sans_style)s;font-weight:200;font-size:14px;line-height:17px;color:%(color_text)s" % _kwargs, + "comment_style": "%(monospace_style)s;white-space:pre-wrap" % _kwargs, + "data_style": "border:%(color_border)s 1px solid;background:%(color_background_grey)s" % _kwargs, + "emph_style": "font-weight:600;color:%(color_emph)s" % _kwargs, + "link_style": "color:%(color_link)s;text-decoration:none" % _kwargs, + "link_text_style": "color:%(color_text)s;text-decoration:none;border:%(color_border)s 1px solid;background:%(color_background_grey)s" % _kwargs, + }) + log.debug('rendering tmpl %s with kwargs %s', base, _kwargs) return email_template.render_unicode(**_kwargs) diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/permission.py --- a/kallithea/model/permission.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/permission.py Thu Jun 07 01:46:02 2018 +0200 @@ -31,21 +31,18 @@ from sqlalchemy.exc import DatabaseError -from kallithea.model import BaseModel -from kallithea.model.db import User, Permission, UserToPerm, UserRepoToPerm,\ - UserRepoGroupToPerm, UserUserGroupToPerm +from kallithea.model.db import Permission, Session, User, \ + UserToPerm, UserRepoToPerm, UserRepoGroupToPerm, UserUserGroupToPerm from kallithea.lib.utils2 import str2bool log = logging.getLogger(__name__) -class PermissionModel(BaseModel): +class PermissionModel(object): """ Permissions model for Kallithea """ - cls = Permission - def create_permissions(self): """ Create permissions for whole system @@ -54,8 +51,7 @@ if not Permission.get_by_key(p[0]): new_perm = Permission() new_perm.permission_name = p[0] - new_perm.permission_longname = p[0] #translation err with p[1] - self.sa.add(new_perm) + Session().add(new_perm) def create_default_permissions(self, user, force=False): """ @@ -65,7 +61,7 @@ :param user: """ - user = self._get_user(user) + user = User.guess_instance(user) def _make_perm(perm): new_perm = UserToPerm() @@ -84,8 +80,8 @@ if force: for perm in perms: - self.sa.delete(perm) - self.sa.commit() + Session().delete(perm) + Session().commit() defined_perms_groups = [] # For every default permission that needs to be created, we check if # its group is already defined. If it's not, we create default permission. @@ -95,16 +91,15 @@ log.debug('GR:%s not found, creating permission %s', gr, perm_name) new_perm = _make_perm(perm_name) - self.sa.add(new_perm) + Session().add(new_perm) def update(self, form_result): perm_user = User.get_by_username(username=form_result['perm_user_name']) try: # stage 1 set anonymous access - if perm_user.username == User.DEFAULT_USER: + if perm_user.is_default_user: perm_user.active = str2bool(form_result['anonymous']) - self.sa.add(perm_user) # stage 2 reset defaults and set them from form data def _make_new(usr, perm_name): @@ -116,61 +111,58 @@ # clear current entries, to make this function idempotent # it will fix even if we define more permissions or permissions # are somehow missing - u2p = self.sa.query(UserToPerm)\ - .filter(UserToPerm.user == perm_user)\ + u2p = UserToPerm.query() \ + .filter(UserToPerm.user == perm_user) \ .all() for p in u2p: - self.sa.delete(p) - #create fresh set of permissions + Session().delete(p) + # create fresh set of permissions for def_perm_key in ['default_repo_perm', 'default_group_perm', 'default_user_group_perm', 'default_repo_create', 'create_on_write', # special case for create repos on write access to group - #'default_repo_group_create', #not implemented yet + #'default_repo_group_create', # not implemented yet 'default_user_group_create', 'default_fork', 'default_register', 'default_extern_activate']: p = _make_new(perm_user, form_result[def_perm_key]) - self.sa.add(p) + Session().add(p) - #stage 3 update all default permissions for repos if checked + # stage 3 update all default permissions for repos if checked if form_result['overwrite_default_repo']: _def_name = form_result['default_repo_perm'].split('repository.')[-1] _def = Permission.get_by_key('repository.' + _def_name) # repos - for r2p in self.sa.query(UserRepoToPerm)\ - .filter(UserRepoToPerm.user == perm_user)\ + for r2p in UserRepoToPerm.query() \ + .filter(UserRepoToPerm.user == perm_user) \ .all(): - #don't reset PRIVATE repositories + # don't reset PRIVATE repositories if not r2p.repository.private: r2p.permission = _def - self.sa.add(r2p) if form_result['overwrite_default_group']: _def_name = form_result['default_group_perm'].split('group.')[-1] # groups _def = Permission.get_by_key('group.' + _def_name) - for g2p in self.sa.query(UserRepoGroupToPerm)\ - .filter(UserRepoGroupToPerm.user == perm_user)\ + for g2p in UserRepoGroupToPerm.query() \ + .filter(UserRepoGroupToPerm.user == perm_user) \ .all(): g2p.permission = _def - self.sa.add(g2p) if form_result['overwrite_default_user_group']: _def_name = form_result['default_user_group_perm'].split('usergroup.')[-1] # groups _def = Permission.get_by_key('usergroup.' + _def_name) - for g2p in self.sa.query(UserUserGroupToPerm)\ - .filter(UserUserGroupToPerm.user == perm_user)\ + for g2p in UserUserGroupToPerm.query() \ + .filter(UserUserGroupToPerm.user == perm_user) \ .all(): g2p.permission = _def - self.sa.add(g2p) - self.sa.commit() + Session().commit() except (DatabaseError,): log.error(traceback.format_exc()) - self.sa.rollback() + Session().rollback() raise diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/pull_request.py --- a/kallithea/model/pull_request.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/pull_request.py Thu Jun 07 01:46:02 2018 +0200 @@ -27,107 +27,46 @@ import logging import datetime +import re -from pylons.i18n.translation import _ +from tg import request +from tg.i18n import ugettext as _ + +from sqlalchemy.orm import joinedload from kallithea.model.meta import Session from kallithea.lib import helpers as h -from kallithea.lib.exceptions import UserInvalidException -from kallithea.model import BaseModel -from kallithea.model.db import PullRequest, PullRequestReviewers, Notification,\ +from kallithea.model.db import PullRequest, PullRequestReviewer, Notification, \ ChangesetStatus, User from kallithea.model.notification import NotificationModel -from kallithea.lib.utils2 import extract_mentioned_users, safe_unicode +from kallithea.lib.utils2 import extract_mentioned_users, safe_str, safe_unicode log = logging.getLogger(__name__) -class PullRequestModel(BaseModel): - - cls = PullRequest - - def __get_pull_request(self, pull_request): - return self._get_instance(PullRequest, pull_request) - - def get_pullrequest_cnt_for_user(self, user): - return PullRequest.query()\ - .join(PullRequestReviewers)\ - .filter(PullRequestReviewers.user_id == user)\ - .filter(PullRequest.status != PullRequest.STATUS_CLOSED)\ - .count() +def _assert_valid_reviewers(seq): + """Sanity check: elements are actual User objects, and not the default user.""" + assert not any(user.is_default_user for user in seq) - def get_all(self, repo_name, from_=False, closed=False): - """Get all PRs for repo. - Default is all PRs to the repo, PRs from the repo if from_. - Closed PRs are only included if closed is true.""" - repo = self._get_repo(repo_name) - q = PullRequest.query() - if from_: - q = q.filter(PullRequest.org_repo == repo) - else: - q = q.filter(PullRequest.other_repo == repo) - if not closed: - q = q.filter(PullRequest.status != PullRequest.STATUS_CLOSED) - return q.order_by(PullRequest.created_on.desc()).all() - def create(self, created_by, org_repo, org_ref, other_repo, other_ref, - revisions, reviewers, title, description=None): - from kallithea.model.changeset_status import ChangesetStatusModel - - created_by_user = self._get_user(created_by) - org_repo = self._get_repo(org_repo) - other_repo = self._get_repo(other_repo) +class PullRequestModel(object): - new = PullRequest() - new.org_repo = org_repo - new.org_ref = org_ref - new.other_repo = other_repo - new.other_ref = other_ref - new.revisions = revisions - new.title = title - new.description = description - new.owner = created_by_user - Session().add(new) - Session().flush() + def add_reviewers(self, user, pr, reviewers, mention_recipients=None): + """Add reviewer and send notification to them. + """ + reviewers = set(reviewers) + _assert_valid_reviewers(reviewers) + if mention_recipients is not None: + mention_recipients = set(mention_recipients) - reviewers + _assert_valid_reviewers(mention_recipients) - #reset state to under-review - from kallithea.model.comment import ChangesetCommentsModel - comment = ChangesetCommentsModel().create( - text=u'', - repo=org_repo, - user=new.owner, - pull_request=new, - send_email=False, - status_change=ChangesetStatus.STATUS_UNDER_REVIEW, - ) - ChangesetStatusModel().set_status( - org_repo, - ChangesetStatus.STATUS_UNDER_REVIEW, - new.owner, - comment, - pull_request=new - ) + # members + for reviewer in reviewers: + prr = PullRequestReviewer(reviewer, pr) + Session().add(prr) - mention_recipients = set(User.get_by_username(username, case_insensitive=True) - for username in extract_mentioned_users(new.description)) - self.__add_reviewers(created_by_user, new, reviewers, mention_recipients) - - return new - - def __add_reviewers(self, user, pr, reviewers, mention_recipients=None): - #members - for member in set(reviewers): - _usr = self._get_user(member) - if _usr is None: - raise UserInvalidException(member) - reviewer = PullRequestReviewers(_usr, pr) - Session().add(reviewer) - - revision_data = [(x.raw_id, x.message) - for x in map(pr.org_repo.get_changeset, pr.revisions)] - - #notification to reviewers + # notification to reviewers pr_url = pr.url(canonical=True) threading = ['%s-pr-%s@%s' % (pr.other_repo.repo_name, pr.pull_request_id, @@ -142,15 +81,27 @@ ) body = pr.description _org_ref_type, org_ref_name, _org_rev = pr.org_ref.split(':') + _other_ref_type, other_ref_name, _other_rev = pr.other_ref.split(':') + revision_data = [(x.raw_id, x.message) + for x in map(pr.org_repo.get_changeset, pr.revisions)] email_kwargs = { 'pr_title': pr.title, + 'pr_title_short': h.shorter(pr.title, 50), 'pr_user_created': user.full_name_and_username, 'pr_repo_url': h.canonical_url('summary_home', repo_name=pr.other_repo.repo_name), 'pr_url': pr_url, 'pr_revisions': revision_data, 'repo_name': pr.other_repo.repo_name, + 'org_repo_name': pr.org_repo.repo_name, 'pr_nice_id': pr.nice_id(), - 'ref': org_ref_name, + 'pr_target_repo': h.canonical_url('summary_home', + repo_name=pr.other_repo.repo_name), + 'pr_target_branch': other_ref_name, + 'pr_source_repo': h.canonical_url('summary_home', + repo_name=pr.org_repo.repo_name), + 'pr_source_branch': org_ref_name, + 'pr_owner': pr.owner, + 'pr_owner_username': pr.owner.username, 'pr_username': user.username, 'threading': threading, 'is_mention': False, @@ -162,55 +113,284 @@ email_kwargs=email_kwargs) if mention_recipients: - mention_recipients.discard(None) - mention_recipients.difference_update(reviewers) - if mention_recipients: email_kwargs['is_mention'] = True subject = _('[Mention]') + ' ' + subject + # FIXME: this subject is wrong and unused! NotificationModel().create(created_by=user, subject=subject, body=body, recipients=mention_recipients, type_=Notification.TYPE_PULL_REQUEST, email_kwargs=email_kwargs) def mention_from_description(self, user, pr, old_description=''): - mention_recipients = set(User.get_by_username(username, case_insensitive=True) - for username in extract_mentioned_users(pr.description)) - mention_recipients.difference_update(User.get_by_username(username, case_insensitive=True) - for username in extract_mentioned_users(old_description)) + mention_recipients = (extract_mentioned_users(pr.description) - + extract_mentioned_users(old_description)) log.debug("Mentioning %s", mention_recipients) - self.__add_reviewers(user, pr, [], mention_recipients) - - def update_reviewers(self, user, pull_request, reviewers_ids): - reviewers_ids = set(reviewers_ids) - pull_request = self.__get_pull_request(pull_request) - current_reviewers = PullRequestReviewers.query()\ - .filter(PullRequestReviewers.pull_request== - pull_request)\ - .all() - current_reviewers_ids = set([x.user.user_id for x in current_reviewers]) + self.add_reviewers(user, pr, set(), mention_recipients) - to_add = reviewers_ids.difference(current_reviewers_ids) - to_remove = current_reviewers_ids.difference(reviewers_ids) - - log.debug("Adding %s reviewers", to_add) - self.__add_reviewers(user, pull_request, to_add) + def remove_reviewers(self, user, pull_request, reviewers): + """Remove specified users from being reviewers of the PR.""" + if not reviewers: + return # avoid SQLAlchemy warning about empty sequence for IN-predicate - log.debug("Removing %s reviewers", to_remove) - for uid in to_remove: - reviewer = PullRequestReviewers.query()\ - .filter(PullRequestReviewers.user_id==uid, - PullRequestReviewers.pull_request==pull_request)\ - .scalar() - if reviewer: - Session().delete(reviewer) + PullRequestReviewer.query() \ + .filter_by(pull_request=pull_request) \ + .filter(PullRequestReviewer.user_id.in_(r.user_id for r in reviewers)) \ + .delete(synchronize_session='fetch') # the default of 'evaluate' is not available def delete(self, pull_request): - pull_request = self.__get_pull_request(pull_request) + pull_request = PullRequest.guess_instance(pull_request) Session().delete(pull_request) + if pull_request.org_repo.scm_instance.alias == 'git': + # remove a ref under refs/pull/ so that commits can be garbage-collected + try: + del pull_request.org_repo.scm_instance._repo["refs/pull/%d/head" % pull_request.pull_request_id] + except KeyError: + pass def close_pull_request(self, pull_request): - pull_request = self.__get_pull_request(pull_request) + pull_request = PullRequest.guess_instance(pull_request) pull_request.status = PullRequest.STATUS_CLOSED pull_request.updated_on = datetime.datetime.now() - Session().add(pull_request) + + +class CreatePullRequestAction(object): + + class ValidationError(Exception): + pass + + class Empty(ValidationError): + pass + + class AmbiguousAncestor(ValidationError): + pass + + class Unauthorized(ValidationError): + pass + + @staticmethod + def is_user_authorized(org_repo, other_repo): + """Performs authorization check with only the minimum amount of + information needed for such a check, rather than a full command + object. + """ + if (h.HasRepoPermissionLevel('read')(org_repo.repo_name) and + h.HasRepoPermissionLevel('read')(other_repo.repo_name)): + return True + + return False + + def __init__(self, org_repo, other_repo, org_ref, other_ref, title, description, owner, reviewers): + from kallithea.controllers.compare import CompareController + reviewers = set(reviewers) + _assert_valid_reviewers(reviewers) + + (org_ref_type, + org_ref_name, + org_rev) = org_ref.split(':') + org_display = h.short_ref(org_ref_type, org_ref_name) + if org_ref_type == 'rev': + cs = org_repo.scm_instance.get_changeset(org_rev) + org_ref = 'branch:%s:%s' % (cs.branch, cs.raw_id) + + (other_ref_type, + other_ref_name, + other_rev) = other_ref.split(':') + if other_ref_type == 'rev': + cs = other_repo.scm_instance.get_changeset(other_rev) + other_ref_name = cs.raw_id[:12] + other_ref = '%s:%s:%s' % (other_ref_type, other_ref_name, cs.raw_id) + other_display = h.short_ref(other_ref_type, other_ref_name) + + cs_ranges, _cs_ranges_not, ancestor_revs = \ + CompareController._get_changesets(org_repo.scm_instance.alias, + other_repo.scm_instance, other_rev, # org and other "swapped" + org_repo.scm_instance, org_rev, + ) + if not cs_ranges: + raise self.Empty(_('Cannot create empty pull request')) + + if not ancestor_revs: + ancestor_rev = org_repo.scm_instance.EMPTY_CHANGESET + elif len(ancestor_revs) == 1: + ancestor_rev = ancestor_revs[0] + else: + raise self.AmbiguousAncestor( + _('Cannot create pull request - criss cross merge detected, please merge a later %s revision to %s') + % (other_ref_name, org_ref_name)) + + self.revisions = [cs_.raw_id for cs_ in cs_ranges] + + # hack: ancestor_rev is not an other_rev but we want to show the + # requested destination and have the exact ancestor + other_ref = '%s:%s:%s' % (other_ref_type, other_ref_name, ancestor_rev) + + if not title: + if org_repo == other_repo: + title = '%s to %s' % (org_display, other_display) + else: + title = '%s#%s to %s#%s' % (org_repo.repo_name, org_display, + other_repo.repo_name, other_display) + description = description or _('No description') + + self.org_repo = org_repo + self.other_repo = other_repo + self.org_ref = org_ref + self.org_rev = org_rev + self.other_ref = other_ref + self.title = title + self.description = description + self.owner = owner + self.reviewers = reviewers + + if not CreatePullRequestAction.is_user_authorized(self.org_repo, self.other_repo): + raise self.Unauthorized(_('You are not authorized to create the pull request')) + + def execute(self): + created_by = User.get(request.authuser.user_id) + + pr = PullRequest() + pr.org_repo = self.org_repo + pr.org_ref = self.org_ref + pr.other_repo = self.other_repo + pr.other_ref = self.other_ref + pr.revisions = self.revisions + pr.title = self.title + pr.description = self.description + pr.owner = self.owner + Session().add(pr) + Session().flush() # make database assign pull_request_id + + if self.org_repo.scm_instance.alias == 'git': + # create a ref under refs/pull/ so that commits don't get garbage-collected + self.org_repo.scm_instance._repo["refs/pull/%d/head" % pr.pull_request_id] = safe_str(self.org_rev) + + # reset state to under-review + from kallithea.model.changeset_status import ChangesetStatusModel + from kallithea.model.comment import ChangesetCommentsModel + comment = ChangesetCommentsModel().create( + text=u'', + repo=self.org_repo, + author=created_by, + pull_request=pr, + send_email=False, + status_change=ChangesetStatus.STATUS_UNDER_REVIEW, + ) + ChangesetStatusModel().set_status( + self.org_repo, + ChangesetStatus.STATUS_UNDER_REVIEW, + created_by, + comment, + pull_request=pr, + ) + + mention_recipients = extract_mentioned_users(self.description) + PullRequestModel().add_reviewers(created_by, pr, self.reviewers, mention_recipients) + + return pr + + +class CreatePullRequestIterationAction(object): + @staticmethod + def is_user_authorized(old_pull_request): + """Performs authorization check with only the minimum amount of + information needed for such a check, rather than a full command + object. + """ + if h.HasPermissionAny('hg.admin')(): + return True + + # Authorized to edit the old PR? + if request.authuser.user_id != old_pull_request.owner_id: + return False + + # Authorized to create a new PR? + if not CreatePullRequestAction.is_user_authorized(old_pull_request.org_repo, old_pull_request.other_repo): + return False + + return True + + def __init__(self, old_pull_request, new_org_rev, new_other_rev, title, description, owner, reviewers): + self.old_pull_request = old_pull_request + + org_repo = old_pull_request.org_repo + org_ref_type, org_ref_name, org_rev = old_pull_request.org_ref.split(':') + + other_repo = old_pull_request.other_repo + other_ref_type, other_ref_name, other_rev = old_pull_request.other_ref.split(':') # other_rev is ancestor + #assert other_ref_type == 'branch', other_ref_type # TODO: what if not? + + new_org_ref = '%s:%s:%s' % (org_ref_type, org_ref_name, new_org_rev) + new_other_ref = '%s:%s:%s' % (other_ref_type, other_ref_name, new_other_rev) + + self.create_action = CreatePullRequestAction(org_repo, other_repo, new_org_ref, new_other_ref, None, None, owner, reviewers) + + # Generate complete title/description + + old_revisions = set(old_pull_request.revisions) + revisions = self.create_action.revisions + new_revisions = [r for r in revisions if r not in old_revisions] + lost = old_revisions.difference(revisions) + + infos = ['This is a new iteration of %s "%s".' % + (h.canonical_url('pullrequest_show', repo_name=old_pull_request.other_repo.repo_name, + pull_request_id=old_pull_request.pull_request_id), + old_pull_request.title)] + + if lost: + infos.append(_('Missing changesets since the previous iteration:')) + for r in old_pull_request.revisions: + if r in lost: + rev_desc = org_repo.get_changeset(r).message.split('\n')[0] + infos.append(' %s %s' % (h.short_id(r), rev_desc)) + + if new_revisions: + infos.append(_('New changesets on %s %s since the previous iteration:') % (org_ref_type, org_ref_name)) + for r in reversed(revisions): + if r in new_revisions: + rev_desc = org_repo.get_changeset(r).message.split('\n')[0] + infos.append(' %s %s' % (h.short_id(r), h.shorter(rev_desc, 80))) + + if self.create_action.other_ref == old_pull_request.other_ref: + infos.append(_("Ancestor didn't change - diff since previous iteration:")) + infos.append(h.canonical_url('compare_url', + repo_name=org_repo.repo_name, # other_repo is always same as repo_name + org_ref_type='rev', org_ref_name=h.short_id(org_rev), # use old org_rev as base + other_ref_type='rev', other_ref_name=h.short_id(new_org_rev), + )) # note: linear diff, merge or not doesn't matter + else: + infos.append(_('This iteration is based on another %s revision and there is no simple diff.') % other_ref_name) + else: + infos.append(_('No changes found on %s %s since previous iteration.') % (org_ref_type, org_ref_name)) + # TODO: fail? + + try: + title, old_v = re.match(r'(.*)\(v(\d+)\)\s*$', title).groups() + v = int(old_v) + 1 + except (AttributeError, ValueError): + v = 2 + self.create_action.title = '%s (v%s)' % (title.strip(), v) + + # using a mail-like separator, insert new iteration info in description with latest first + descriptions = description.replace('\r\n', '\n').split('\n-- \n', 1) + description = descriptions[0].strip() + '\n\n-- \n' + '\n'.join(infos) + if len(descriptions) > 1: + description += '\n\n' + descriptions[1].strip() + self.create_action.description = description + + if not CreatePullRequestIterationAction.is_user_authorized(self.old_pull_request): + raise CreatePullRequestAction.Unauthorized(_('You are not authorized to create the pull request')) + + def execute(self): + pull_request = self.create_action.execute() + + # Close old iteration + from kallithea.model.comment import ChangesetCommentsModel + ChangesetCommentsModel().create( + text=_('Closed, next iteration: %s .') % pull_request.url(canonical=True), + repo=self.old_pull_request.other_repo_id, + author=request.authuser.user_id, + pull_request=self.old_pull_request.pull_request_id, + closing_pr=True) + PullRequestModel().close_pull_request(self.old_pull_request.pull_request_id) + return pull_request diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/repo.py --- a/kallithea/model/repo.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/repo.py Thu Jun 07 01:46:02 2018 +0200 @@ -36,37 +36,26 @@ import kallithea.lib.utils from kallithea.lib.utils import make_ui, is_valid_repo_uri from kallithea.lib.vcs.backends import get_backend -from kallithea.lib.compat import json from kallithea.lib.utils2 import LazyProperty, safe_str, safe_unicode, \ remove_prefix, obfuscate_url_pw, get_current_authuser from kallithea.lib.caching_query import FromCache from kallithea.lib.hooks import log_delete_repository -from kallithea.model import BaseModel from kallithea.model.db import Repository, UserRepoToPerm, UserGroupRepoToPerm, \ - UserRepoGroupToPerm, UserGroupRepoGroupToPerm, User, Permission, \ + UserRepoGroupToPerm, UserGroupRepoGroupToPerm, User, Permission, Session, \ Statistics, UserGroup, Ui, RepoGroup, RepositoryField from kallithea.lib import helpers as h -from kallithea.lib.auth import HasRepoPermissionAny, HasUserGroupPermissionAny +from kallithea.lib.auth import HasRepoPermissionLevel, HasUserGroupPermissionLevel from kallithea.lib.exceptions import AttachedForksError from kallithea.model.scm import UserGroupList log = logging.getLogger(__name__) -class RepoModel(BaseModel): - - cls = Repository - URL_SEPARATOR = Repository.url_sep() +class RepoModel(object): - def _get_user_group(self, users_group): - return self._get_instance(UserGroup, users_group, - callback=UserGroup.get_by_group_name) - - def _get_repo_group(self, repo_group): - return self._get_instance(RepoGroup, repo_group, - callback=RepoGroup.get_by_group_name) + URL_SEPARATOR = Repository.url_sep() def _create_default_perms(self, repository, private): # create default permission @@ -84,6 +73,7 @@ repo_to_perm.repository = repository repo_to_perm.user_id = def_user.user_id + Session().add(repo_to_perm) return repo_to_perm @@ -93,11 +83,11 @@ Gets the repositories root path from database """ - q = self.sa.query(Ui).filter(Ui.ui_key == '/').one() + q = Ui.query().filter(Ui.ui_key == '/').one() return q.ui_value def get(self, repo_id, cache=False): - repo = self.sa.query(Repository) \ + repo = Repository.query() \ .filter(Repository.repo_id == repo_id) if cache: @@ -106,10 +96,10 @@ return repo.scalar() def get_repo(self, repository): - return self._get_repo(repository) + return Repository.guess_instance(repository) def get_by_repo_name(self, repo_name, cache=False): - repo = self.sa.query(Repository) \ + repo = Repository.query() \ .filter(Repository.repo_name == repo_name) if cache: @@ -124,8 +114,8 @@ :param user: """ from kallithea.lib.auth import AuthUser - user = self._get_user(user) - repos = AuthUser(user_id=user.user_id).permissions['repositories'] + user = User.guess_instance(user) + repos = AuthUser(dbuser=user).permissions['repositories'] access_check = lambda r: r[1] in ['repository.read', 'repository.write', 'repository.admin'] @@ -133,65 +123,47 @@ return Repository.query().filter(Repository.repo_name.in_(repos)) def get_users_js(self): - users = self.sa.query(User).filter(User.active == True).all() - return json.dumps([ + users = User.query() \ + .filter(User.active == True) \ + .order_by(User.name, User.lastname) \ + .all() + return [ { 'id': u.user_id, 'fname': h.escape(u.name), 'lname': h.escape(u.lastname), 'nname': u.username, - 'gravatar_lnk': h.gravatar_url(u.email, size=28), + 'gravatar_lnk': h.gravatar_url(u.email, size=28, default='default'), 'gravatar_size': 14, } for u in users] - ) - - def get_user_groups_js(self): - user_groups = self.sa.query(UserGroup) \ - .filter(UserGroup.users_group_active == True) \ - .options(subqueryload(UserGroup.members)) \ - .all() - user_groups = UserGroupList(user_groups, perm_set=['usergroup.read', - 'usergroup.write', - 'usergroup.admin']) - return json.dumps([ - { - 'id': gr.users_group_id, - 'grname': gr.users_group_name, - 'grmembers': len(gr.members), - } for gr in user_groups] - ) @classmethod def _render_datatable(cls, tmpl, *args, **kwargs): import kallithea - from pylons import tmpl_context as c - from pylons.i18n.translation import _ + from tg import tmpl_context as c, request, app_globals + from tg.i18n import ugettext as _ - _tmpl_lookup = kallithea.CONFIG['pylons.app_globals'].mako_lookup + _tmpl_lookup = app_globals.mako_lookup template = _tmpl_lookup.get_template('data_table/_dt_elements.html') tmpl = template.get_def(tmpl) - kwargs.update(dict(_=_, h=h, c=c)) + kwargs.update(dict(_=_, h=h, c=c, request=request)) return tmpl.render(*args, **kwargs) - @classmethod - def update_repoinfo(cls, repositories=None): - if repositories is None: - repositories = Repository.getAll() - for repo in repositories: - repo.update_changeset_cache() - - def get_repos_as_dict(self, repos_list=None, admin=False, perm_check=True, - super_user_actions=False): + def get_repos_as_dict(self, repos_list, repo_groups_list=None, + admin=False, + short_name=False): + """Return repository list for use by DataTable. + repos_list: list of repositories - but will be filtered for read permission. + repo_groups_list: added at top of list without permission check. + admin: return data for action column. + """ _render = self._render_datatable - from pylons import tmpl_context as c - - def quick_menu(repo_name): - return _render('quick_menu', repo_name) + from tg import tmpl_context as c def repo_lnk(name, rtype, rstate, private, fork_of): return _render('repo_name', name, rtype, rstate, private, fork_of, - short_name=not admin, admin=False) + short_name=short_name) def last_change(last_change): return _render("last_change", last_change) @@ -208,53 +180,54 @@ cs_cache.get('message')) def desc(desc): - return h.urlify_text(desc, truncate=60, stylize=c.visual.stylify_metatags) + return h.urlify_text(desc, truncate=80, stylize=c.visual.stylify_metalabels) def state(repo_state): return _render("repo_state", repo_state) def repo_actions(repo_name): - return _render('repo_actions', repo_name, super_user_actions) + return _render('repo_actions', repo_name) - def owner_actions(user_id, username): - return _render('user_name', user_id, username) + def owner_actions(owner_id, username): + return _render('user_name', owner_id, username) repos_data = [] + + for gr in repo_groups_list or []: + repos_data.append(dict( + raw_name='\0' + gr.name, # sort before repositories + just_name=gr.name, + name=_render('group_name_html', group_name=gr.group_name, name=gr.name), + desc=gr.group_description)) + for repo in repos_list: - if perm_check: - # check permission at this level - if not HasRepoPermissionAny( - 'repository.read', 'repository.write', - 'repository.admin' - )(repo.repo_name, 'get_repos_as_dict check'): - continue + if not HasRepoPermissionLevel('read')(repo.repo_name, 'get_repos_as_dict check'): + continue cs_cache = repo.changeset_cache row = { - "menu": quick_menu(repo.repo_name), - "raw_name": repo.repo_name.lower(), + "raw_name": repo.repo_name, + "just_name": repo.just_name, "name": repo_lnk(repo.repo_name, repo.repo_type, repo.repo_state, repo.private, repo.fork), + "last_change_iso": repo.last_db_change.isoformat(), "last_change": last_change(repo.last_db_change), "last_changeset": last_rev(repo.repo_name, cs_cache), "last_rev_raw": cs_cache.get('revision'), "desc": desc(repo.description), - "owner": h.person(repo.user), + "owner": h.person(repo.owner), "state": state(repo.repo_state), "rss": rss_lnk(repo.repo_name), "atom": atom_lnk(repo.repo_name), - } if admin: row.update({ "action": repo_actions(repo.repo_name), - "owner": owner_actions(repo.user.user_id, - h.person(repo.user)) + "owner": owner_actions(repo.owner_id, + h.person(repo.owner)) }) repos_data.append(row) return { - "totalRecords": len(repos_list), - "startIndex": 0, "sort": "name", "dir": "asc", "records": repos_data @@ -274,10 +247,8 @@ return None defaults = repo_info.get_dict() - group, repo_name, repo_name_full = repo_info.groups_and_repo - defaults['repo_name'] = repo_name - defaults['repo_group'] = getattr(group[-1] if group else None, - 'group_id', None) + defaults['repo_name'] = repo_info.just_name + defaults['repo_group'] = repo_info.group_id for strip, k in [(0, 'repo_type'), (1, 'repo_enable_downloads'), (1, 'repo_description'), (1, 'repo_enable_locking'), @@ -295,12 +266,12 @@ defaults['clone_uri_hidden'] = repo_info.clone_uri_hidden # fill owner - if repo_info.user: - defaults.update({'user': repo_info.user.username}) + if repo_info.owner: + defaults.update({'owner': repo_info.owner.username}) else: replacement_user = User.query().filter(User.admin == True).first().username - defaults.update({'user': replacement_user}) + defaults.update({'owner': replacement_user}) # fill repository users for p in repo_info.repo_to_perm: @@ -316,12 +287,13 @@ def update(self, repo, **kwargs): try: - cur_repo = self._get_repo(repo) + cur_repo = Repository.guess_instance(repo) org_repo_name = cur_repo.repo_name - if 'user' in kwargs: - cur_repo.user = User.get_by_username(kwargs['user']) + if 'owner' in kwargs: + cur_repo.owner = User.get_by_username(kwargs['owner']) if 'repo_group' in kwargs: + assert kwargs['repo_group'] != u'-1', kwargs # RepoForm should have converted to None cur_repo.group = RepoGroup.get(kwargs['repo_group']) cur_repo.repo_name = cur_repo.get_new_name(cur_repo.just_name) log.debug('Updating repo %s with params:%s', cur_repo, kwargs) @@ -348,21 +320,19 @@ raise Exception('invalid repo name %s' % repo_name) cur_repo.repo_name = cur_repo.get_new_name(repo_name) - #if private flag is set, reset default permission to NONE + # if private flag is set, reset default permission to NONE if kwargs.get('repo_private'): EMPTY_PERM = 'repository.none' RepoModel().grant_user_permission( repo=cur_repo, user='default', perm=EMPTY_PERM ) - #handle extra fields + # handle extra fields for field in filter(lambda k: k.startswith(RepositoryField.PREFIX), kwargs): k = RepositoryField.un_prefix_key(field) ex_field = RepositoryField.get_by_key_name(key=k, repo=cur_repo) if ex_field: ex_field.field_value = kwargs[field] - self.sa.add(ex_field) - self.sa.add(cur_repo) if org_repo_name != cur_repo.repo_name: # rename repository @@ -386,9 +356,9 @@ """ from kallithea.model.scm import ScmModel - owner = self._get_user(owner) - fork_of = self._get_repo(fork_of) - repo_group = self._get_repo_group(repo_group) + owner = User.guess_instance(owner) + fork_of = Repository.guess_instance(fork_of) + repo_group = RepoGroup.guess_instance(repo_group) try: repo_name = safe_unicode(repo_name) description = safe_unicode(description) @@ -405,7 +375,7 @@ new_repo.enable_statistics = False new_repo.repo_name = repo_name_full new_repo.repo_type = repo_type - new_repo.user = owner + new_repo.owner = owner new_repo.group = repo_group new_repo.description = description or repo_name new_repo.private = private @@ -426,7 +396,7 @@ parent_repo = fork_of new_repo.fork = parent_repo - self.sa.add(new_repo) + Session().add(new_repo) if fork_of and copy_fork_permissions: repo = fork_of @@ -461,15 +431,13 @@ UserGroupRepoToPerm.create(perm.users_group, new_repo, perm_obj) else: - perm_obj = self._create_default_perms(new_repo, private) - self.sa.add(perm_obj) + self._create_default_perms(new_repo, private) # now automatically start following this repository as owner - ScmModel(self.sa).toggle_following_repo(new_repo.repo_id, - owner.user_id) + ScmModel().toggle_following_repo(new_repo.repo_id, owner.user_id) # we need to flush here, in order to check if database won't # throw any exceptions, create filesystem dirs at the very end - self.sa.flush() + Session().flush() return new_repo except Exception: log.error(traceback.format_exc()) @@ -482,8 +450,8 @@ :param form_data: :param cur_user: """ - from kallithea.lib.celerylib import tasks, run_task - return run_task(tasks.create_repo, form_data, cur_user) + from kallithea.lib.celerylib import tasks + return tasks.create_repo(form_data, cur_user) def _update_permissions(self, repo, perms_new=None, perms_updates=None, check_perms=True): @@ -500,11 +468,8 @@ repo=repo, user=member, perm=perm ) else: - #check if we have permissions to alter this usergroup - req_perms = ( - 'usergroup.read', 'usergroup.write', 'usergroup.admin') - if not check_perms or HasUserGroupPermissionAny(*req_perms)( - member): + # check if we have permissions to alter this usergroup's access + if not check_perms or HasUserGroupPermissionLevel('read')(member): self.grant_user_group_permission( repo=repo, group_name=member, perm=perm ) @@ -515,11 +480,8 @@ repo=repo, user=member, perm=perm ) else: - #check if we have permissions to alter this usergroup - req_perms = ( - 'usergroup.read', 'usergroup.write', 'usergroup.admin') - if not check_perms or HasUserGroupPermissionAny(*req_perms)( - member): + # check if we have permissions to alter this usergroup's access + if not check_perms or HasUserGroupPermissionLevel('read')(member): self.grant_user_group_permission( repo=repo, group_name=member, perm=perm ) @@ -531,8 +493,8 @@ :param form_data: :param cur_user: """ - from kallithea.lib.celerylib import tasks, run_task - return run_task(tasks.create_repo_fork, form_data, cur_user) + from kallithea.lib.celerylib import tasks + return tasks.create_repo_fork(form_data, cur_user) def delete(self, repo, forks=None, fs_remove=True, cur_user=None): """ @@ -546,12 +508,11 @@ """ if not cur_user: cur_user = getattr(get_current_authuser(), 'username', None) - repo = self._get_repo(repo) + repo = Repository.guess_instance(repo) if repo is not None: if forks == 'detach': for r in repo.forks: r.fork = None - self.sa.add(r) elif forks == 'delete': for r in repo.forks: self.delete(r, forks='delete') @@ -560,7 +521,7 @@ old_repo_dict = repo.get_dict() try: - self.sa.delete(repo) + Session().delete(repo) if fs_remove: self._delete_filesystem_repo(repo) else: @@ -580,22 +541,22 @@ :param user: Instance of User, user_id or username :param perm: Instance of Permission, or permission_name """ - user = self._get_user(user) - repo = self._get_repo(repo) - permission = self._get_perm(perm) + user = User.guess_instance(user) + repo = Repository.guess_instance(repo) + permission = Permission.guess_instance(perm) # check if we have that permission already - obj = self.sa.query(UserRepoToPerm) \ + obj = UserRepoToPerm.query() \ .filter(UserRepoToPerm.user == user) \ .filter(UserRepoToPerm.repository == repo) \ .scalar() if obj is None: # create new ! obj = UserRepoToPerm() + Session().add(obj) obj.repository = repo obj.user = user obj.permission = permission - self.sa.add(obj) log.debug('Granted perm %s to %s on %s', perm, user, repo) return obj @@ -607,15 +568,15 @@ :param user: Instance of User, user_id or username """ - user = self._get_user(user) - repo = self._get_repo(repo) + user = User.guess_instance(user) + repo = Repository.guess_instance(repo) - obj = self.sa.query(UserRepoToPerm) \ + obj = UserRepoToPerm.query() \ .filter(UserRepoToPerm.repository == repo) \ .filter(UserRepoToPerm.user == user) \ .scalar() if obj is not None: - self.sa.delete(obj) + Session().delete(obj) log.debug('Revoked perm on %s on %s', repo, user) def grant_user_group_permission(self, repo, group_name, perm): @@ -628,12 +589,12 @@ or user group name :param perm: Instance of Permission, or permission_name """ - repo = self._get_repo(repo) - group_name = self._get_user_group(group_name) - permission = self._get_perm(perm) + repo = Repository.guess_instance(repo) + group_name = UserGroup.guess_instance(group_name) + permission = Permission.guess_instance(perm) # check if we have that permission already - obj = self.sa.query(UserGroupRepoToPerm) \ + obj = UserGroupRepoToPerm.query() \ .filter(UserGroupRepoToPerm.users_group == group_name) \ .filter(UserGroupRepoToPerm.repository == repo) \ .scalar() @@ -641,11 +602,11 @@ if obj is None: # create new obj = UserGroupRepoToPerm() + Session().add(obj) obj.repository = repo obj.users_group = group_name obj.permission = permission - self.sa.add(obj) log.debug('Granted perm %s to %s on %s', perm, group_name, repo) return obj @@ -657,15 +618,15 @@ :param group_name: Instance of UserGroup, users_group_id, or user group name """ - repo = self._get_repo(repo) - group_name = self._get_user_group(group_name) + repo = Repository.guess_instance(repo) + group_name = UserGroup.guess_instance(group_name) - obj = self.sa.query(UserGroupRepoToPerm) \ + obj = UserGroupRepoToPerm.query() \ .filter(UserGroupRepoToPerm.repository == repo) \ .filter(UserGroupRepoToPerm.users_group == group_name) \ .scalar() if obj is not None: - self.sa.delete(obj) + Session().delete(obj) log.debug('Revoked perm to %s on %s', repo, group_name) def delete_stats(self, repo_name): @@ -674,12 +635,12 @@ :param repo_name: """ - repo = self._get_repo(repo_name) + repo = Repository.guess_instance(repo_name) try: - obj = self.sa.query(Statistics) \ + obj = Statistics.query() \ .filter(Statistics.repository == repo).scalar() if obj is not None: - self.sa.delete(obj) + Session().delete(obj) except Exception: log.error(traceback.format_exc()) raise @@ -778,4 +739,7 @@ if repo.group: args = repo.group.full_path_splitted + [_d] _d = os.path.join(*args) - shutil.move(rm_path, safe_str(os.path.join(self.repos_path, _d))) + if os.path.exists(rm_path): + shutil.move(rm_path, safe_str(os.path.join(self.repos_path, _d))) + else: + log.error("Can't find repo to delete in %r", rm_path) diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/repo_group.py --- a/kallithea/model/repo_group.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/repo_group.py Thu Jun 07 01:46:02 2018 +0200 @@ -35,24 +35,13 @@ import kallithea.lib.utils from kallithea.lib.utils2 import LazyProperty -from kallithea.model import BaseModel -from kallithea.model.db import RepoGroup, Ui, UserRepoGroupToPerm, \ +from kallithea.model.db import RepoGroup, Session, Ui, UserRepoGroupToPerm, \ User, Permission, UserGroupRepoGroupToPerm, UserGroup, Repository log = logging.getLogger(__name__) -class RepoGroupModel(BaseModel): - - cls = RepoGroup - - def _get_user_group(self, users_group): - return self._get_instance(UserGroup, users_group, - callback=UserGroup.get_by_group_name) - - def _get_repo_group(self, repo_group): - return self._get_instance(RepoGroup, repo_group, - callback=RepoGroup.get_by_group_name) +class RepoGroupModel(object): @LazyProperty def repos_path(self): @@ -60,7 +49,7 @@ Gets the repositories root path from database """ - q = Ui.get_by_key('/') + q = Ui.get_by_key('paths', '/') return q.ui_value def _create_default_perms(self, new_group): @@ -77,6 +66,7 @@ repo_group_to_perm.group = new_group repo_group_to_perm.user_id = def_user.user_id + Session().add(repo_group_to_perm) return repo_group_to_perm def _create_group(self, group_name): @@ -136,7 +126,7 @@ if force_delete: shutil.rmtree(rm_path) else: - #archive that group` + # archive that group _now = datetime.datetime.now() _ms = str(_now.microsecond).rjust(6, '0') _d = 'rm__%s_GROUP_%s' % (_now.strftime('%Y%m%d_%H%M%S_' + _ms), @@ -149,19 +139,19 @@ if kallithea.lib.utils.repo_name_slug(group_name) != group_name: raise Exception('invalid repo group name %s' % group_name) - user = self._get_user(owner) - parent_group = self._get_repo_group(parent) + owner = User.guess_instance(owner) + parent_group = RepoGroup.guess_instance(parent) new_repo_group = RepoGroup() - new_repo_group.user = user + new_repo_group.owner = owner new_repo_group.group_description = group_description or group_name new_repo_group.parent_group = parent_group new_repo_group.group_name = new_repo_group.get_new_name(group_name) - self.sa.add(new_repo_group) + Session().add(new_repo_group) # create an ADMIN permission for owner except if we're super admin, # later owner should go into the owner field of groups - if not user.is_admin: + if not owner.is_admin: self.grant_user_permission(repo_group=new_repo_group, user=owner, perm='group.admin') @@ -177,19 +167,18 @@ # don't copy over the permission for user who is creating # this group, if he is not super admin he get's admin # permission set above - if perm.user != user or user.is_admin: + if perm.user != owner or owner.is_admin: UserRepoGroupToPerm.create(perm.user, new_repo_group, perm.permission) for perm in group_perms: UserGroupRepoGroupToPerm.create(perm.users_group, new_repo_group, perm.permission) else: - perm_obj = self._create_default_perms(new_repo_group) - self.sa.add(perm_obj) + self._create_default_perms(new_repo_group) if not just_db: # we need to flush here, in order to check if database won't # throw any exceptions, create filesystem dirs at the very end - self.sa.flush() + Session().flush() self._create_group(new_repo_group.group_name) return new_repo_group @@ -201,7 +190,7 @@ perms_updates=None, recursive=None, check_perms=True): from kallithea.model.repo import RepoModel - from kallithea.lib.auth import HasUserGroupPermissionAny + from kallithea.lib.auth import HasUserGroupPermissionLevel if not perms_new: perms_new = [] @@ -212,9 +201,11 @@ if isinstance(obj, RepoGroup): self.grant_user_permission(repo_group=obj, user=user, perm=perm) elif isinstance(obj, Repository): + user = User.guess_instance(user) + # private repos will not allow to change the default permissions # using recursive mode - if obj.private and user == User.DEFAULT_USER: + if obj.private and user.is_default_user: return # we set group permission but we have to switch to repo @@ -246,7 +237,7 @@ # iterated obj is an instance of a repos group or repository in # that group, recursive option can be: none, repos, groups, all if recursive == 'all': - obj = obj + pass elif recursive == 'repos': # skip groups, other than this one if isinstance(obj, RepoGroup) and not obj == repo_group: @@ -267,18 +258,16 @@ _set_perm_user(obj, user=member, perm=perm) ## set for user group else: - #check if we have permissions to alter this usergroup - req_perms = ('usergroup.read', 'usergroup.write', 'usergroup.admin') - if not check_perms or HasUserGroupPermissionAny(*req_perms)(member): + # check if we have permissions to alter this usergroup's access + if not check_perms or HasUserGroupPermissionLevel('read')(member): _set_perm_group(obj, users_group=member, perm=perm) # set new permissions for member, perm, member_type in perms_new: if member_type == 'user': _set_perm_user(obj, user=member, perm=perm) else: - #check if we have permissions to alter this usergroup - req_perms = ('usergroup.read', 'usergroup.write', 'usergroup.admin') - if not check_perms or HasUserGroupPermissionAny(*req_perms)(member): + # check if we have permissions to alter this usergroup's access + if not check_perms or HasUserGroupPermissionLevel('read')(member): _set_perm_group(obj, users_group=member, perm=perm) updates.append(obj) # if it's not recursive call for all,repos,groups @@ -288,24 +277,29 @@ return updates - def update(self, repo_group, form_data): - + def update(self, repo_group, kwargs): try: - repo_group = self._get_repo_group(repo_group) + repo_group = RepoGroup.guess_instance(repo_group) old_path = repo_group.full_path # change properties - repo_group.group_description = form_data['group_description'] - repo_group.group_parent_id = form_data['group_parent_id'] - repo_group.enable_locking = form_data['enable_locking'] + if 'group_description' in kwargs: + repo_group.group_description = kwargs['group_description'] + if 'parent_group_id' in kwargs: + repo_group.parent_group_id = kwargs['parent_group_id'] + if 'enable_locking' in kwargs: + repo_group.enable_locking = kwargs['enable_locking'] - repo_group.parent_group = RepoGroup.get(form_data['group_parent_id']) - group_name = form_data['group_name'] - if kallithea.lib.utils.repo_name_slug(group_name) != group_name: - raise Exception('invalid repo group name %s' % group_name) - repo_group.group_name = repo_group.get_new_name(group_name) + if 'parent_group_id' in kwargs: + assert kwargs['parent_group_id'] != u'-1', kwargs # RepoGroupForm should have converted to None + repo_group.parent_group = RepoGroup.get(kwargs['parent_group_id']) + if 'group_name' in kwargs: + group_name = kwargs['group_name'] + if kallithea.lib.utils.repo_name_slug(group_name) != group_name: + raise Exception('invalid repo group name %s' % group_name) + repo_group.group_name = repo_group.get_new_name(group_name) new_path = repo_group.full_path - self.sa.add(repo_group) + Session().add(repo_group) # iterate over all members of this groups and do fixes # set locking if given @@ -314,7 +308,7 @@ # if obj is a Repo fix it's name # this can be potentially heavy operation for obj in repo_group.recursive_groups_and_repos(): - #set the value from it's parent + # set the value from it's parent obj.enable_locking = repo_group.enable_locking if isinstance(obj, RepoGroup): new_name = obj.get_new_name(obj.name) @@ -328,7 +322,6 @@ log.debug('Fixing repo %s to new name %s' \ % (obj.repo_name, new_name)) obj.repo_name = new_name - self.sa.add(obj) self._rename_group(old_path, new_path) @@ -338,9 +331,9 @@ raise def delete(self, repo_group, force_delete=False): - repo_group = self._get_repo_group(repo_group) + repo_group = RepoGroup.guess_instance(repo_group) try: - self.sa.delete(repo_group) + Session().delete(repo_group) self._delete_group(repo_group, force_delete) except Exception: log.error('Error removing repo_group %s', repo_group) @@ -348,14 +341,14 @@ def add_permission(self, repo_group, obj, obj_type, perm, recursive): from kallithea.model.repo import RepoModel - repo_group = self._get_repo_group(repo_group) - perm = self._get_perm(perm) + repo_group = RepoGroup.guess_instance(repo_group) + perm = Permission.guess_instance(perm) for el in repo_group.recursive_groups_and_repos(): # iterated obj is an instance of a repos group or repository in # that group, recursive option can be: none, repos, groups, all if recursive == 'all': - el = el + pass elif recursive == 'repos': # skip groups, other than this one if isinstance(el, RepoGroup) and not el == repo_group: @@ -404,13 +397,13 @@ :param recursive: recurse to all children of group """ from kallithea.model.repo import RepoModel - repo_group = self._get_repo_group(repo_group) + repo_group = RepoGroup.guess_instance(repo_group) for el in repo_group.recursive_groups_and_repos(): # iterated obj is an instance of a repos group or repository in # that group, recursive option can be: none, repos, groups, all if recursive == 'all': - el = el + pass elif recursive == 'repos': # skip groups, other than this one if isinstance(el, RepoGroup) and not el == repo_group: @@ -457,22 +450,22 @@ :param perm: Instance of Permission, or permission_name """ - repo_group = self._get_repo_group(repo_group) - user = self._get_user(user) - permission = self._get_perm(perm) + repo_group = RepoGroup.guess_instance(repo_group) + user = User.guess_instance(user) + permission = Permission.guess_instance(perm) # check if we have that permission already - obj = self.sa.query(UserRepoGroupToPerm)\ - .filter(UserRepoGroupToPerm.user == user)\ - .filter(UserRepoGroupToPerm.group == repo_group)\ + obj = UserRepoGroupToPerm.query() \ + .filter(UserRepoGroupToPerm.user == user) \ + .filter(UserRepoGroupToPerm.group == repo_group) \ .scalar() if obj is None: # create new ! obj = UserRepoGroupToPerm() + Session().add(obj) obj.group = repo_group obj.user = user obj.permission = permission - self.sa.add(obj) log.debug('Granted perm %s to %s on %s', perm, user, repo_group) return obj @@ -485,15 +478,15 @@ :param user: Instance of User, user_id or username """ - repo_group = self._get_repo_group(repo_group) - user = self._get_user(user) + repo_group = RepoGroup.guess_instance(repo_group) + user = User.guess_instance(user) - obj = self.sa.query(UserRepoGroupToPerm)\ - .filter(UserRepoGroupToPerm.user == user)\ - .filter(UserRepoGroupToPerm.group == repo_group)\ + obj = UserRepoGroupToPerm.query() \ + .filter(UserRepoGroupToPerm.user == user) \ + .filter(UserRepoGroupToPerm.group == repo_group) \ .scalar() if obj is not None: - self.sa.delete(obj) + Session().delete(obj) log.debug('Revoked perm on %s on %s', repo_group, user) def grant_user_group_permission(self, repo_group, group_name, perm): @@ -507,24 +500,24 @@ or user group name :param perm: Instance of Permission, or permission_name """ - repo_group = self._get_repo_group(repo_group) - group_name = self._get_user_group(group_name) - permission = self._get_perm(perm) + repo_group = RepoGroup.guess_instance(repo_group) + group_name = UserGroup.guess_instance(group_name) + permission = Permission.guess_instance(perm) # check if we have that permission already - obj = self.sa.query(UserGroupRepoGroupToPerm)\ - .filter(UserGroupRepoGroupToPerm.group == repo_group)\ - .filter(UserGroupRepoGroupToPerm.users_group == group_name)\ + obj = UserGroupRepoGroupToPerm.query() \ + .filter(UserGroupRepoGroupToPerm.group == repo_group) \ + .filter(UserGroupRepoGroupToPerm.users_group == group_name) \ .scalar() if obj is None: # create new obj = UserGroupRepoGroupToPerm() + Session().add(obj) obj.group = repo_group obj.users_group = group_name obj.permission = permission - self.sa.add(obj) log.debug('Granted perm %s to %s on %s', perm, group_name, repo_group) return obj @@ -537,13 +530,13 @@ :param group_name: Instance of UserGroup, users_group_id, or user group name """ - repo_group = self._get_repo_group(repo_group) - group_name = self._get_user_group(group_name) + repo_group = RepoGroup.guess_instance(repo_group) + group_name = UserGroup.guess_instance(group_name) - obj = self.sa.query(UserGroupRepoGroupToPerm)\ - .filter(UserGroupRepoGroupToPerm.group == repo_group)\ - .filter(UserGroupRepoGroupToPerm.users_group == group_name)\ + obj = UserGroupRepoGroupToPerm.query() \ + .filter(UserGroupRepoGroupToPerm.group == repo_group) \ + .filter(UserGroupRepoGroupToPerm.users_group == group_name) \ .scalar() if obj is not None: - self.sa.delete(obj) + Session().delete(obj) log.debug('Revoked perm to %s on %s', repo_group, group_name) diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/repo_permission.py --- a/kallithea/model/repo_permission.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/repo_permission.py Thu Jun 07 01:46:02 2018 +0200 @@ -24,20 +24,17 @@ """ import logging -from kallithea.model import BaseModel -from kallithea.model.db import UserRepoToPerm, UserGroupRepoToPerm, \ - Permission +from kallithea.model.db import User, UserRepoToPerm, UserGroupRepoToPerm, \ + Permission, Repository, Session log = logging.getLogger(__name__) -class RepositoryPermissionModel(BaseModel): - - cls = UserRepoToPerm +class RepositoryPermissionModel(object): def get_user_permission(self, repository, user): - repository = self._get_repo(repository) - user = self._get_user(user) + repository = Repository.guess_instance(repository) + user = User.guess_instance(user) return UserRepoToPerm.query() \ .filter(UserRepoToPerm.user == user) \ @@ -48,19 +45,19 @@ permission = Permission.get_by_key(permission) current = self.get_user_permission(repository, user) if current: - if not current.permission is permission: + if current.permission is not permission: current.permission = permission else: p = UserRepoToPerm() p.user = user p.repository = repository p.permission = permission - self.sa.add(p) + Session().add(p) def delete_user_permission(self, repository, user): current = self.get_user_permission(repository, user) if current: - self.sa.delete(current) + Session().delete(current) def get_users_group_permission(self, repository, users_group): return UserGroupRepoToPerm.query() \ @@ -73,19 +70,19 @@ permission = Permission.get_by_key(permission) current = self.get_users_group_permission(repository, users_group) if current: - if not current.permission is permission: + if current.permission is not permission: current.permission = permission else: p = UserGroupRepoToPerm() p.users_group = users_group p.repository = repository p.permission = permission - self.sa.add(p) + Session().add(p) def delete_users_group_permission(self, repository, users_group): current = self.get_users_group_permission(repository, users_group) if current: - self.sa.delete(current) + Session().delete(current) def update_or_delete_user_permission(self, repository, user, permission): if permission: diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/scm.py --- a/kallithea/model/scm.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/scm.py Thu Jun 07 01:46:02 2018 +0200 @@ -26,16 +26,17 @@ """ import os +import sys +import posixpath import re import time import traceback import logging import cStringIO import pkg_resources -from os.path import join as jn from sqlalchemy import func -from pylons.i18n.translation import _ +from tg.i18n import ugettext as _ import kallithea from kallithea.lib.vcs import get_backend @@ -46,14 +47,13 @@ from kallithea import BACKENDS from kallithea.lib import helpers as h -from kallithea.lib.utils2 import safe_str, safe_unicode, get_server_url,\ +from kallithea.lib.utils2 import safe_str, safe_unicode, get_server_url, \ _set_extras -from kallithea.lib.auth import HasRepoPermissionAny, HasRepoGroupPermissionAny,\ - HasUserGroupPermissionAny, HasPermissionAny, HasPermissionAll +from kallithea.lib.auth import HasRepoPermissionLevel, HasRepoGroupPermissionLevel, \ + HasUserGroupPermissionLevel, HasPermissionAny, HasPermissionAny from kallithea.lib.utils import get_filesystem_repos, make_ui, \ action_logger -from kallithea.model import BaseModel -from kallithea.model.db import Repository, Ui, CacheInvalidation, \ +from kallithea.model.db import Repository, Session, Ui, CacheInvalidation, \ UserFollowing, UserLog, User, RepoGroup, PullRequest from kallithea.lib.hooks import log_push_action from kallithea.lib.exceptions import NonRelativePathError, IMCCommitError @@ -77,92 +77,6 @@ return "<%s('id:%s')>" % (self.__class__.__name__, self.repo_id) -class CachedRepoList(object): - """ - Cached repo list. Uses super-fast in-memory cache after initialization. - """ - - def __init__(self, db_repo_list, repos_path, order_by=None, perm_set=None): - self.db_repo_list = db_repo_list - self.repos_path = repos_path - self.order_by = order_by - self.reversed = (order_by or '').startswith('-') - if not perm_set: - perm_set = ['repository.read', 'repository.write', - 'repository.admin'] - self.perm_set = perm_set - - def __len__(self): - return len(self.db_repo_list) - - def __repr__(self): - return '<%s (%s)>' % (self.__class__.__name__, self.__len__()) - - def __iter__(self): - # pre-propagated valid_cache_keys to save executing select statements - # for each repo - valid_cache_keys = CacheInvalidation.get_valid_cache_keys() - - for dbr in self.db_repo_list: - scmr = dbr.scm_instance_cached(valid_cache_keys) - # check permission at this level - if not HasRepoPermissionAny( - *self.perm_set)(dbr.repo_name, 'get repo check'): - continue - - try: - last_change = scmr.last_change - tip = h.get_changeset_safe(scmr, 'tip') - except Exception: - log.error( - '%s this repository is present in database but it ' - 'cannot be created as an scm instance, org_exc:%s' - % (dbr.repo_name, traceback.format_exc()) - ) - continue - - tmp_d = {} - tmp_d['name'] = dbr.repo_name - tmp_d['name_sort'] = tmp_d['name'].lower() - tmp_d['raw_name'] = tmp_d['name'].lower() - tmp_d['description'] = dbr.description - tmp_d['description_sort'] = tmp_d['description'].lower() - tmp_d['last_change'] = last_change - tmp_d['last_change_sort'] = time.mktime(last_change.timetuple()) - tmp_d['tip'] = tip.raw_id - tmp_d['tip_sort'] = tip.revision - tmp_d['rev'] = tip.revision - tmp_d['contact'] = dbr.user.full_contact - tmp_d['contact_sort'] = tmp_d['contact'] - tmp_d['owner_sort'] = tmp_d['contact'] - tmp_d['repo_archives'] = list(scmr._get_archives()) - tmp_d['last_msg'] = tip.message - tmp_d['author'] = tip.author - tmp_d['dbrepo'] = dbr.get_dict() - tmp_d['dbrepo_fork'] = dbr.fork.get_dict() if dbr.fork else {} - yield tmp_d - - -class SimpleCachedRepoList(CachedRepoList): - """ - Lighter version of CachedRepoList without the scm initialisation - """ - - def __iter__(self): - for dbr in self.db_repo_list: - # check permission at this level - if not HasRepoPermissionAny( - *self.perm_set)(dbr.repo_name, 'get repo check'): - continue - - tmp_d = { - 'name': dbr.repo_name, - 'dbrepo': dbr.get_dict(), - 'dbrepo_fork': dbr.fork.get_dict() if dbr.fork else {} - } - yield tmp_d - - class _PermCheckIterator(object): def __init__(self, obj_list, obj_attr, perm_set, perm_checker, extra_kwargs=None): """ @@ -199,41 +113,32 @@ class RepoList(_PermCheckIterator): - def __init__(self, db_repo_list, perm_set=None, extra_kwargs=None): - if not perm_set: - perm_set = ['repository.read', 'repository.write', 'repository.admin'] - + def __init__(self, db_repo_list, perm_level, extra_kwargs=None): super(RepoList, self).__init__(obj_list=db_repo_list, - obj_attr='repo_name', perm_set=perm_set, - perm_checker=HasRepoPermissionAny, + obj_attr='repo_name', perm_set=[perm_level], + perm_checker=HasRepoPermissionLevel, extra_kwargs=extra_kwargs) class RepoGroupList(_PermCheckIterator): - def __init__(self, db_repo_group_list, perm_set=None, extra_kwargs=None): - if not perm_set: - perm_set = ['group.read', 'group.write', 'group.admin'] - + def __init__(self, db_repo_group_list, perm_level, extra_kwargs=None): super(RepoGroupList, self).__init__(obj_list=db_repo_group_list, - obj_attr='group_name', perm_set=perm_set, - perm_checker=HasRepoGroupPermissionAny, + obj_attr='group_name', perm_set=[perm_level], + perm_checker=HasRepoGroupPermissionLevel, extra_kwargs=extra_kwargs) class UserGroupList(_PermCheckIterator): - def __init__(self, db_user_group_list, perm_set=None, extra_kwargs=None): - if not perm_set: - perm_set = ['usergroup.read', 'usergroup.write', 'usergroup.admin'] - + def __init__(self, db_user_group_list, perm_level, extra_kwargs=None): super(UserGroupList, self).__init__(obj_list=db_user_group_list, - obj_attr='users_group_name', perm_set=perm_set, - perm_checker=HasUserGroupPermissionAny, + obj_attr='users_group_name', perm_set=[perm_level], + perm_checker=HasUserGroupPermissionLevel, extra_kwargs=extra_kwargs) -class ScmModel(BaseModel): +class ScmModel(object): """ Generic Scm Model """ @@ -256,7 +161,7 @@ Gets the repositories root path from database """ - q = self.sa.query(Ui).filter(Ui.ui_key == '/').one() + q = Ui.query().filter(Ui.ui_key == '/').one() return q.ui_value @@ -299,58 +204,39 @@ log.debug('found %s paths with repositories', len(repos)) return repos - def get_repos(self, all_repos=None, sort_key=None, simple=False): - """ - Get all repos from db and for each repo create its - backend instance and fill that backed with information from database + def get_repos(self, repos): + """Return the repos the user has access to""" + return RepoList(repos, perm_level='read') - :param all_repos: list of repository names as strings - give specific repositories list, good for filtering - - :param sort_key: initial sorting of repos - :param simple: use SimpleCachedList - one without the SCM info + def get_repo_groups(self, groups=None): + """Return the repo groups the user has access to + If no groups are specified, use top level groups. """ - if all_repos is None: - all_repos = self.sa.query(Repository)\ - .filter(Repository.group_id == None)\ - .order_by(func.lower(Repository.repo_name)).all() - if simple: - repo_iter = SimpleCachedRepoList(all_repos, - repos_path=self.repos_path, - order_by=sort_key) - else: - repo_iter = CachedRepoList(all_repos, - repos_path=self.repos_path, - order_by=sort_key) + if groups is None: + groups = RepoGroup.query() \ + .filter(RepoGroup.parent_group_id == None).all() + return RepoGroupList(groups, perm_level='read') - return repo_iter - - def get_repo_groups(self, all_groups=None): - if all_groups is None: - all_groups = RepoGroup.query()\ - .filter(RepoGroup.group_parent_id == None).all() - return [x for x in RepoGroupList(all_groups)] - - def mark_for_invalidation(self, repo_name, delete=False): + def mark_for_invalidation(self, repo_name): """ Mark caches of this repo invalid in the database. :param repo_name: the repo for which caches should be marked invalid """ - CacheInvalidation.set_invalidate(repo_name, delete=delete) + CacheInvalidation.set_invalidate(repo_name) repo = Repository.get_by_repo_name(repo_name) if repo is not None: repo.update_changeset_cache() def toggle_following_repo(self, follow_repo_id, user_id): - f = self.sa.query(UserFollowing)\ - .filter(UserFollowing.follows_repo_id == follow_repo_id)\ + f = UserFollowing.query() \ + .filter(UserFollowing.follows_repository_id == follow_repo_id) \ .filter(UserFollowing.user_id == user_id).scalar() if f is not None: try: - self.sa.delete(f) + Session().delete(f) action_logger(UserTemp(user_id), 'stopped_following_repo', RepoTemp(follow_repo_id)) @@ -362,8 +248,8 @@ try: f = UserFollowing() f.user_id = user_id - f.follows_repo_id = follow_repo_id - self.sa.add(f) + f.follows_repository_id = follow_repo_id + Session().add(f) action_logger(UserTemp(user_id), 'started_following_repo', @@ -373,13 +259,13 @@ raise def toggle_following_user(self, follow_user_id, user_id): - f = self.sa.query(UserFollowing)\ - .filter(UserFollowing.follows_user_id == follow_user_id)\ + f = UserFollowing.query() \ + .filter(UserFollowing.follows_user_id == follow_user_id) \ .filter(UserFollowing.user_id == user_id).scalar() if f is not None: try: - self.sa.delete(f) + Session().delete(f) return except Exception: log.error(traceback.format_exc()) @@ -389,17 +275,17 @@ f = UserFollowing() f.user_id = user_id f.follows_user_id = follow_user_id - self.sa.add(f) + Session().add(f) except Exception: log.error(traceback.format_exc()) raise def is_following_repo(self, repo_name, user_id, cache=False): - r = self.sa.query(Repository)\ + r = Repository.query() \ .filter(Repository.repo_name == repo_name).scalar() - f = self.sa.query(UserFollowing)\ - .filter(UserFollowing.follows_repository == r)\ + f = UserFollowing.query() \ + .filter(UserFollowing.follows_repository == r) \ .filter(UserFollowing.user_id == user_id).scalar() return f is not None @@ -407,27 +293,27 @@ def is_following_user(self, username, user_id, cache=False): u = User.get_by_username(username) - f = self.sa.query(UserFollowing)\ - .filter(UserFollowing.follows_user == u)\ + f = UserFollowing.query() \ + .filter(UserFollowing.follows_user == u) \ .filter(UserFollowing.user_id == user_id).scalar() return f is not None def get_followers(self, repo): - repo = self._get_repo(repo) + repo = Repository.guess_instance(repo) - return self.sa.query(UserFollowing)\ + return UserFollowing.query() \ .filter(UserFollowing.follows_repository == repo).count() def get_forks(self, repo): - repo = self._get_repo(repo) - return self.sa.query(Repository)\ + repo = Repository.guess_instance(repo) + return Repository.query() \ .filter(Repository.fork == repo).count() def get_pull_requests(self, repo): - repo = self._get_repo(repo) - return self.sa.query(PullRequest)\ - .filter(PullRequest.other_repo == repo)\ + repo = Repository.guess_instance(repo) + return PullRequest.query() \ + .filter(PullRequest.other_repo == repo) \ .filter(PullRequest.status != PullRequest.STATUS_CLOSED).count() def mark_as_fork(self, repo, fork, user): @@ -440,7 +326,6 @@ raise RepositoryError("Cannot set repository as fork of repository with other type") repo.fork = fork - self.sa.add(repo) return repo def _handle_rc_scm_extras(self, username, repo_name, repo_alias, @@ -448,7 +333,7 @@ from kallithea import CONFIG from kallithea.lib.base import _get_ip_addr try: - from pylons import request + from tg import request environ = request.environ except TypeError: # we might use this outside of request context, let's fake the @@ -503,12 +388,13 @@ raise Exception('Invalid scm_type, must be one of hg,git got %s' % (scm_type,)) - def pull_changes(self, repo, username): + def pull_changes(self, repo, username, clone_uri=None): """ - Pull from "clone URL". + Pull from "clone URL" or fork origin. """ dbrepo = self.__get_repo(repo) - clone_uri = dbrepo.clone_uri + if clone_uri is None: + clone_uri = dbrepo.clone_uri or dbrepo.fork and dbrepo.fork.repo_full_path if not clone_uri: raise Exception("This repository doesn't have a clone uri") @@ -542,7 +428,7 @@ :param repo: a db_repo.scm_instance """ - user = self._get_user(user) + user = User.guess_instance(user) IMC = self._get_IMC_module(repo.alias) # decoding here will force that we have proper encoded values @@ -575,7 +461,7 @@ if f_path.startswith('/') or f_path.startswith('.') or '../' in f_path: raise NonRelativePathError('%s is not an relative path' % f_path) if f_path: - f_path = os.path.normpath(f_path) + f_path = posixpath.normpath(f_path) return f_path def get_nodes(self, repo_name, revision, root_path='/', flat=True): @@ -623,13 +509,13 @@ :returns: new committed changeset """ - user = self._get_user(user) + user = User.guess_instance(user) scm_instance = repo.scm_instance_no_cache() processed_nodes = [] for f_path in nodes: + content = nodes[f_path]['content'] f_path = self._sanitize_path(f_path) - content = nodes[f_path]['content'] f_path = safe_str(f_path) # decoding here will force that we have proper encoded values # in any other case this will throw exceptions and deny commit @@ -681,7 +567,7 @@ """ Commits specified nodes to repo. Again. """ - user = self._get_user(user) + user = User.guess_instance(user) scm_instance = repo.scm_instance_no_cache() message = safe_unicode(message) @@ -715,7 +601,7 @@ imc.remove(filenode) elif op == 'mod': if filename != old_filename: - #TODO: handle renames, needs vcs lib changes + # TODO: handle renames, needs vcs lib changes imc.remove(filenode) imc.add(FileNode(filename, content=content)) else: @@ -751,7 +637,7 @@ :returns: new committed changeset after deletion """ - user = self._get_user(user) + user = User.guess_instance(user) scm_instance = repo.scm_instance_no_cache() processed_nodes = [] @@ -796,7 +682,7 @@ return tip def get_unread_journal(self): - return self.sa.query(UserLog).count() + return UserLog.query().count() def get_repo_landing_revs(self, repo=None): """ @@ -842,21 +728,23 @@ :param force_create: Create even if same name hook exists """ - loc = jn(repo.path, 'hooks') + loc = os.path.join(repo.path, 'hooks') if not repo.bare: - loc = jn(repo.path, '.git', 'hooks') + loc = os.path.join(repo.path, '.git', 'hooks') if not os.path.isdir(loc): os.makedirs(loc) - tmpl_post = pkg_resources.resource_string( - 'kallithea', jn('config', 'post_receive_tmpl.py') + tmpl_post = "#!/usr/bin/env %s\n" % sys.executable or 'python2' + tmpl_post += pkg_resources.resource_string( + 'kallithea', os.path.join('config', 'post_receive_tmpl.py') ) - tmpl_pre = pkg_resources.resource_string( - 'kallithea', jn('config', 'pre_receive_tmpl.py') + tmpl_pre = "#!/usr/bin/env %s\n" % sys.executable or 'python2' + tmpl_pre += pkg_resources.resource_string( + 'kallithea', os.path.join('config', 'pre_receive_tmpl.py') ) for h_type, tmpl in [('pre', tmpl_pre), ('post', tmpl_post)]: - _hook_file = jn(loc, '%s-receive' % h_type) + _hook_file = os.path.join(loc, '%s-receive' % h_type) has_hook = False log.debug('Installing git hook in repo %s', repo) if os.path.exists(_hook_file): @@ -889,17 +777,18 @@ else: log.debug('skipping writing hook file') -def AvailableRepoGroupChoices(top_perms, repo_group_perms, extras=()): + +def AvailableRepoGroupChoices(top_perms, repo_group_perm_level, extras=()): """Return group_id,string tuples with choices for all the repo groups where the user has the necessary permissions. Top level is -1. """ groups = RepoGroup.query().all() - if HasPermissionAll('hg.admin')('available repo groups'): + if HasPermissionAny('hg.admin')('available repo groups'): groups.append(None) else: - groups = list(RepoGroupList(groups, perm_set=repo_group_perms)) + groups = list(RepoGroupList(groups, perm_level=repo_group_perm_level)) if top_perms and HasPermissionAny(*top_perms)('available repo groups'): groups.append(None) for extra in extras: diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/user.py --- a/kallithea/model/user.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/user.py Thu Jun 07 01:46:02 2018 +0200 @@ -32,16 +32,14 @@ import time import traceback -from pylons import config -from pylons.i18n.translation import _ +from tg import config +from tg.i18n import ugettext as _ from sqlalchemy.exc import DatabaseError -from kallithea import EXTERN_TYPE_INTERNAL -from kallithea.lib.utils2 import safe_unicode, generate_api_key, get_current_authuser +from kallithea.lib.utils2 import safe_str, generate_api_key, get_current_authuser from kallithea.lib.caching_query import FromCache -from kallithea.model import BaseModel -from kallithea.model.db import User, UserToPerm, Notification, \ +from kallithea.model.db import Permission, User, UserToPerm, Notification, \ UserEmailMap, UserIpMap from kallithea.lib.exceptions import DefaultUserException, \ UserOwnsReposException @@ -51,20 +49,18 @@ log = logging.getLogger(__name__) -class UserModel(BaseModel): +class UserModel(object): password_reset_token_lifetime = 86400 # 24 hours - cls = User - def get(self, user_id, cache=False): - user = self.sa.query(User) + user = User.query() if cache: user = user.options(FromCache("sql_cache_short", "get_user_%s" % user_id)) return user.get(user_id) def get_user(self, user): - return self._get_user(user) + return User.guess_instance(user) def create(self, form_data, cur_user=None): if not cur_user: @@ -95,13 +91,14 @@ setattr(new_user, k, v) new_user.api_key = generate_api_key() - self.sa.add(new_user) + Session().add(new_user) + Session().flush() # make database assign new_user.user_id log_create_user(new_user.get_dict(), cur_user) return new_user - def create_or_update(self, username, password, email, firstname='', - lastname='', active=True, admin=False, + def create_or_update(self, username, password, email, firstname=u'', + lastname=u'', active=True, admin=False, extern_type=None, extern_name=None, cur_user=None): """ Creates a new instance if not found, or updates current one @@ -148,9 +145,9 @@ new_user.admin = admin new_user.email = email new_user.active = active - new_user.extern_name = safe_unicode(extern_name) \ + new_user.extern_name = safe_str(extern_name) \ if extern_name else None - new_user.extern_type = safe_unicode(extern_type) \ + new_user.extern_type = safe_str(extern_type) \ if extern_type else None new_user.name = firstname new_user.lastname = lastname @@ -165,12 +162,15 @@ reason = 'new password' if edit else 'new user' log.debug('Updating password reason=>%s', reason) new_user.password = get_crypt_password(password) \ - if password else None + if password else '' - self.sa.add(new_user) + if user is None: + Session().add(new_user) + Session().flush() # make database assign new_user.user_id if not edit: log_create_user(new_user.get_dict(), cur_user) + return new_user except (DatabaseError,): log.error(traceback.format_exc()) @@ -181,13 +181,10 @@ import kallithea.lib.helpers as h form_data['admin'] = False - form_data['extern_name'] = EXTERN_TYPE_INTERNAL - form_data['extern_type'] = EXTERN_TYPE_INTERNAL + form_data['extern_type'] = User.DEFAULT_AUTH_TYPE + form_data['extern_name'] = '' new_user = self.create(form_data) - self.sa.add(new_user) - self.sa.flush() - # notification to admins subject = _('New user registration') body = ( @@ -200,17 +197,19 @@ edit_url = h.canonical_url('edit_user', id=new_user.user_id) email_kwargs = { 'registered_user_url': edit_url, - 'new_username': new_user.username} + 'new_username': new_user.username, + 'new_email': new_user.email, + 'new_full_name': new_user.full_name} NotificationModel().create(created_by=new_user, subject=subject, body=body, recipients=None, type_=Notification.TYPE_REGISTRATION, email_kwargs=email_kwargs) - def update(self, user_id, form_data, skip_attrs=[]): + def update(self, user_id, form_data, skip_attrs=None): from kallithea.lib.auth import get_crypt_password - + skip_attrs = skip_attrs or [] user = self.get(user_id, cache=False) - if user.username == User.DEFAULT_USER: + if user.is_default_user: raise DefaultUserException( _("You can't edit this user since it's " "crucial for entire application")) @@ -226,13 +225,12 @@ if k == 'firstname': k = 'name' setattr(user, k, v) - self.sa.add(user) def update_user(self, user, **kwargs): from kallithea.lib.auth import get_crypt_password - user = self._get_user(user) - if user.username == User.DEFAULT_USER: + user = User.guess_instance(user) + if user.is_default_user: raise DefaultUserException( _("You can't edit this user since it's" " crucial for entire application") @@ -243,15 +241,14 @@ v = get_crypt_password(v) setattr(user, k, v) - self.sa.add(user) return user def delete(self, user, cur_user=None): if cur_user is None: cur_user = getattr(get_current_authuser(), 'username', None) - user = self._get_user(user) + user = User.guess_instance(user) - if user.username == User.DEFAULT_USER: + if user.is_default_user: raise DefaultUserException( _("You can't remove this user since it is" " crucial for the entire application")) @@ -273,11 +270,16 @@ _('User "%s" still owns %s user groups and cannot be ' 'removed. Switch owners or remove those user groups: %s') % (user.username, len(usergroups), ', '.join(usergroups))) - self.sa.delete(user) + Session().delete(user) from kallithea.lib.hooks import log_delete_user log_delete_user(user.get_dict(), cur_user) + def can_change_password(self, user): + from kallithea.lib import auth_modules + managed_fields = auth_modules.get_managed_fields(user) + return 'password' not in managed_fields + def get_reset_password_token(self, user, timestamp, session_id): """ The token is a 40-digit hexstring, calculated as a HMAC-SHA1. @@ -324,7 +326,7 @@ allowing users to copy-paste or manually enter the token from the email. """ - from kallithea.lib.celerylib import tasks, run_task + from kallithea.lib.celerylib import tasks from kallithea.model.notification import EmailNotificationModel import kallithea.lib.helpers as h @@ -332,18 +334,21 @@ user = User.get_by_email(user_email) timestamp = int(time.time()) if user is not None: - log.debug('password reset user %s found', user) - token = self.get_reset_password_token(user, - timestamp, - h.authentication_token()) - # URL must be fully qualified; but since the token is locked to - # the current browser session, we must provide a URL with the - # current scheme and hostname, rather than the canonical_url. - link = h.url('reset_password_confirmation', qualified=True, - email=user_email, - timestamp=timestamp, - token=token) - + if self.can_change_password(user): + log.debug('password reset user %s found', user) + token = self.get_reset_password_token(user, + timestamp, + h.authentication_token()) + # URL must be fully qualified; but since the token is locked to + # the current browser session, we must provide a URL with the + # current scheme and hostname, rather than the canonical_url. + link = h.url('reset_password_confirmation', qualified=True, + email=user_email, + timestamp=timestamp, + token=token) + else: + log.debug('password reset user %s found but was managed', user) + token = link = None reg_type = EmailNotificationModel.TYPE_PASSWORD_RESET body = EmailNotificationModel().get_email_tmpl( reg_type, 'txt', @@ -356,8 +361,7 @@ reset_token=token, reset_url=link) log.debug('sending email') - run_task(tasks.send_email, [user_email], - _("Password reset link"), body, html_body) + tasks.send_email([user_email], _("Password reset link"), body, html_body) log.info('send new password mail to %s', user_email) else: log.debug("password reset email %s not found", user_email) @@ -367,7 +371,7 @@ timestamp=timestamp) def verify_reset_password_token(self, email, timestamp, token): - from kallithea.lib.celerylib import tasks, run_task + from kallithea.lib.celerylib import tasks from kallithea.lib import auth import kallithea.lib.helpers as h user = User.get_by_email(email) @@ -393,18 +397,19 @@ return expected_token == token def reset_password(self, user_email, new_passwd): - from kallithea.lib.celerylib import tasks, run_task + from kallithea.lib.celerylib import tasks from kallithea.lib import auth user = User.get_by_email(user_email) if user is not None: + if not self.can_change_password(user): + raise Exception('trying to change password for external user') user.password = auth.get_crypt_password(new_passwd) - Session().add(user) Session().commit() log.info('change password for %s', user_email) if new_passwd is None: raise Exception('unable to set new password') - run_task(tasks.send_email, [user_email], + tasks.send_email([user_email], _('Password reset notification'), _('The password to your account %s has been changed using password reset form.') % (user.username,)) log.info('send password reset mail to %s', user_email) @@ -412,10 +417,10 @@ return True def has_perm(self, user, perm): - perm = self._get_perm(perm) - user = self._get_user(user) + perm = Permission.guess_instance(perm) + user = User.guess_instance(user) - return UserToPerm.query().filter(UserToPerm.user == user)\ + return UserToPerm.query().filter(UserToPerm.user == user) \ .filter(UserToPerm.permission == perm).scalar() is not None def grant_perm(self, user, perm): @@ -425,19 +430,19 @@ :param user: :param perm: """ - user = self._get_user(user) - perm = self._get_perm(perm) + user = User.guess_instance(user) + perm = Permission.guess_instance(perm) # if this permission is already granted skip it - _perm = UserToPerm.query()\ - .filter(UserToPerm.user == user)\ - .filter(UserToPerm.permission == perm)\ + _perm = UserToPerm.query() \ + .filter(UserToPerm.user == user) \ + .filter(UserToPerm.permission == perm) \ .scalar() if _perm: return new = UserToPerm() new.user = user new.permission = perm - self.sa.add(new) + Session().add(new) return new def revoke_perm(self, user, perm): @@ -447,8 +452,8 @@ :param user: :param perm: """ - user = self._get_user(user) - perm = self._get_perm(perm) + user = User.guess_instance(user) + perm = Permission.guess_instance(perm) UserToPerm.query().filter( UserToPerm.user == user, @@ -465,12 +470,12 @@ from kallithea.model import forms form = forms.UserExtraEmailForm()() data = form.to_python(dict(email=email)) - user = self._get_user(user) + user = User.guess_instance(user) obj = UserEmailMap() obj.user = user obj.email = data['email'] - self.sa.add(obj) + Session().add(obj) return obj def delete_extra_email(self, user, email_id): @@ -480,10 +485,10 @@ :param user: :param email_id: """ - user = self._get_user(user) + user = User.guess_instance(user) obj = UserEmailMap.query().get(email_id) if obj is not None: - self.sa.delete(obj) + Session().delete(obj) def add_extra_ip(self, user, ip): """ @@ -495,12 +500,12 @@ from kallithea.model import forms form = forms.UserExtraIpForm()() data = form.to_python(dict(ip=ip)) - user = self._get_user(user) + user = User.guess_instance(user) obj = UserIpMap() obj.user = user obj.ip_addr = data['ip'] - self.sa.add(obj) + Session().add(obj) return obj def delete_extra_ip(self, user, ip_id): @@ -510,7 +515,7 @@ :param user: :param ip_id: """ - user = self._get_user(user) + user = User.guess_instance(user) obj = UserIpMap.query().get(ip_id) if obj: - self.sa.delete(obj) + Session().delete(obj) diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/user_group.py --- a/kallithea/model/user_group.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/user_group.py Thu Jun 07 01:46:02 2018 +0200 @@ -27,23 +27,16 @@ import logging import traceback -from kallithea.model import BaseModel -from kallithea.model.db import UserGroupMember, UserGroup,\ - UserGroupRepoToPerm, Permission, UserGroupToPerm, User, UserUserGroupToPerm,\ +from kallithea.model.db import Session, UserGroupMember, UserGroup, \ + UserGroupRepoToPerm, Permission, UserGroupToPerm, User, UserUserGroupToPerm, \ UserGroupUserGroupToPerm -from kallithea.lib.exceptions import UserGroupsAssignedException,\ +from kallithea.lib.exceptions import UserGroupsAssignedException, \ RepoGroupAssignmentError log = logging.getLogger(__name__) -class UserGroupModel(BaseModel): - - cls = UserGroup - - def _get_user_group(self, user_group): - return self._get_instance(UserGroup, user_group, - callback=UserGroup.get_by_group_name) +class UserGroupModel(object): def _create_default_perms(self, user_group): # create default permission @@ -59,11 +52,12 @@ user_group_to_perm.user_group = user_group user_group_to_perm.user_id = def_user.user_id + Session().add(user_group_to_perm) return user_group_to_perm def _update_permissions(self, user_group, perms_new=None, perms_updates=None): - from kallithea.lib.auth import HasUserGroupPermissionAny + from kallithea.lib.auth import HasUserGroupPermissionLevel if not perms_new: perms_new = [] if not perms_updates: @@ -77,9 +71,8 @@ user_group=user_group, user=member, perm=perm ) else: - #check if we have permissions to alter this usergroup - if HasUserGroupPermissionAny('usergroup.read', 'usergroup.write', - 'usergroup.admin')(member): + # check if we have permissions to alter this usergroup's access + if HasUserGroupPermissionLevel('read')(member): self.grant_user_group_permission( target_user_group=user_group, user_group=member, perm=perm ) @@ -90,9 +83,8 @@ user_group=user_group, user=member, perm=perm ) else: - #check if we have permissions to alter this usergroup - if HasUserGroupPermissionAny('usergroup.read', 'usergroup.write', - 'usergroup.admin')(member): + # check if we have permissions to alter this usergroup's access + if HasUserGroupPermissionLevel('read')(member): self.grant_user_group_permission( target_user_group=user_group, user_group=member, perm=perm ) @@ -101,7 +93,7 @@ return UserGroup.get(user_group_id) def get_group(self, user_group): - return self._get_user_group(user_group) + return UserGroup.guess_instance(user_group) def get_by_name(self, name, cache=False, case_insensitive=False): return UserGroup.get_by_group_name(name, cache, case_insensitive) @@ -109,15 +101,14 @@ def create(self, name, description, owner, active=True, group_data=None): try: new_user_group = UserGroup() - new_user_group.user = self._get_user(owner) + new_user_group.owner = User.guess_instance(owner) new_user_group.users_group_name = name new_user_group.user_group_description = description new_user_group.users_group_active = active if group_data: new_user_group.group_data = group_data - self.sa.add(new_user_group) - perm_obj = self._create_default_perms(new_user_group) - self.sa.add(perm_obj) + Session().add(new_user_group) + self._create_default_perms(new_user_group) self.grant_user_permission(user_group=new_user_group, user=owner, perm='usergroup.admin') @@ -130,22 +121,23 @@ def update(self, user_group, form_data): try: - user_group = self._get_user_group(user_group) + user_group = UserGroup.guess_instance(user_group) for k, v in form_data.items(): if k == 'users_group_members': - user_group.members = [] - self.sa.flush() members_list = [] if v: v = [v] if isinstance(v, basestring) else v for u_id in set(v): member = UserGroupMember(user_group.users_group_id, u_id) members_list.append(member) - setattr(user_group, 'members', members_list) + Session().add(member) + user_group.members = members_list setattr(user_group, k, v) - self.sa.add(user_group) + # Flush to make db assign users_group_member_id to newly + # created UserGroupMembers. + Session().flush() except Exception: log.error(traceback.format_exc()) raise @@ -159,24 +151,24 @@ :param user_group: :param force: """ - user_group = self._get_user_group(user_group) + user_group = UserGroup.guess_instance(user_group) try: # check if this group is not assigned to repo - assigned_groups = UserGroupRepoToPerm.query()\ + assigned_groups = UserGroupRepoToPerm.query() \ .filter(UserGroupRepoToPerm.users_group == user_group).all() assigned_groups = [x.repository.repo_name for x in assigned_groups] if assigned_groups and not force: raise UserGroupsAssignedException( 'User Group assigned to %s' % ", ".join(assigned_groups)) - self.sa.delete(user_group) + Session().delete(user_group) except Exception: log.error(traceback.format_exc()) raise def add_user_to_group(self, user_group, user): - user_group = self._get_user_group(user_group) - user = self._get_user(user) + user_group = UserGroup.guess_instance(user_group) + user = User.guess_instance(user) for m in user_group.members: u = m.user @@ -192,26 +184,26 @@ user_group.members.append(user_group_member) user.group_member.append(user_group_member) - self.sa.add(user_group_member) + Session().add(user_group_member) return user_group_member except Exception: log.error(traceback.format_exc()) raise def remove_user_from_group(self, user_group, user): - user_group = self._get_user_group(user_group) - user = self._get_user(user) + user_group = UserGroup.guess_instance(user_group) + user = User.guess_instance(user) user_group_member = None for m in user_group.members: - if m.user.user_id == user.user_id: + if m.user_id == user.user_id: # Found this user's membership row user_group_member = m break if user_group_member: try: - self.sa.delete(user_group_member) + Session().delete(user_group_member) return True except Exception: log.error(traceback.format_exc()) @@ -221,21 +213,21 @@ return False def has_perm(self, user_group, perm): - user_group = self._get_user_group(user_group) - perm = self._get_perm(perm) + user_group = UserGroup.guess_instance(user_group) + perm = Permission.guess_instance(perm) - return UserGroupToPerm.query()\ - .filter(UserGroupToPerm.users_group == user_group)\ + return UserGroupToPerm.query() \ + .filter(UserGroupToPerm.users_group == user_group) \ .filter(UserGroupToPerm.permission == perm).scalar() is not None def grant_perm(self, user_group, perm): - user_group = self._get_user_group(user_group) - perm = self._get_perm(perm) + user_group = UserGroup.guess_instance(user_group) + perm = Permission.guess_instance(perm) # if this permission is already granted skip it - _perm = UserGroupToPerm.query()\ - .filter(UserGroupToPerm.users_group == user_group)\ - .filter(UserGroupToPerm.permission == perm)\ + _perm = UserGroupToPerm.query() \ + .filter(UserGroupToPerm.users_group == user_group) \ + .filter(UserGroupToPerm.permission == perm) \ .scalar() if _perm: return @@ -243,18 +235,18 @@ new = UserGroupToPerm() new.users_group = user_group new.permission = perm - self.sa.add(new) + Session().add(new) return new def revoke_perm(self, user_group, perm): - user_group = self._get_user_group(user_group) - perm = self._get_perm(perm) + user_group = UserGroup.guess_instance(user_group) + perm = Permission.guess_instance(perm) - obj = UserGroupToPerm.query()\ - .filter(UserGroupToPerm.users_group == user_group)\ + obj = UserGroupToPerm.query() \ + .filter(UserGroupToPerm.users_group == user_group) \ .filter(UserGroupToPerm.permission == perm).scalar() if obj is not None: - self.sa.delete(obj) + Session().delete(obj) def grant_user_permission(self, user_group, user, perm): """ @@ -267,22 +259,22 @@ :param perm: Instance of Permission, or permission_name """ - user_group = self._get_user_group(user_group) - user = self._get_user(user) - permission = self._get_perm(perm) + user_group = UserGroup.guess_instance(user_group) + user = User.guess_instance(user) + permission = Permission.guess_instance(perm) # check if we have that permission already - obj = self.sa.query(UserUserGroupToPerm)\ - .filter(UserUserGroupToPerm.user == user)\ - .filter(UserUserGroupToPerm.user_group == user_group)\ + obj = UserUserGroupToPerm.query() \ + .filter(UserUserGroupToPerm.user == user) \ + .filter(UserUserGroupToPerm.user_group == user_group) \ .scalar() if obj is None: # create new ! obj = UserUserGroupToPerm() + Session().add(obj) obj.user_group = user_group obj.user = user obj.permission = permission - self.sa.add(obj) log.debug('Granted perm %s to %s on %s', perm, user, user_group) return obj @@ -295,15 +287,15 @@ :param user: Instance of User, user_id or username """ - user_group = self._get_user_group(user_group) - user = self._get_user(user) + user_group = UserGroup.guess_instance(user_group) + user = User.guess_instance(user) - obj = self.sa.query(UserUserGroupToPerm)\ - .filter(UserUserGroupToPerm.user == user)\ - .filter(UserUserGroupToPerm.user_group == user_group)\ + obj = UserUserGroupToPerm.query() \ + .filter(UserUserGroupToPerm.user == user) \ + .filter(UserUserGroupToPerm.user_group == user_group) \ .scalar() if obj is not None: - self.sa.delete(obj) + Session().delete(obj) log.debug('Revoked perm on %s on %s', user_group, user) def grant_user_group_permission(self, target_user_group, user_group, perm): @@ -314,26 +306,26 @@ :param user_group: :param perm: """ - target_user_group = self._get_user_group(target_user_group) - user_group = self._get_user_group(user_group) - permission = self._get_perm(perm) + target_user_group = UserGroup.guess_instance(target_user_group) + user_group = UserGroup.guess_instance(user_group) + permission = Permission.guess_instance(perm) # forbid assigning same user group to itself if target_user_group == user_group: raise RepoGroupAssignmentError('target repo:%s cannot be ' 'assigned to itself' % target_user_group) # check if we have that permission already - obj = self.sa.query(UserGroupUserGroupToPerm)\ - .filter(UserGroupUserGroupToPerm.target_user_group == target_user_group)\ - .filter(UserGroupUserGroupToPerm.user_group == user_group)\ + obj = UserGroupUserGroupToPerm.query() \ + .filter(UserGroupUserGroupToPerm.target_user_group == target_user_group) \ + .filter(UserGroupUserGroupToPerm.user_group == user_group) \ .scalar() if obj is None: # create new ! obj = UserGroupUserGroupToPerm() + Session().add(obj) obj.user_group = user_group obj.target_user_group = target_user_group obj.permission = permission - self.sa.add(obj) log.debug('Granted perm %s to %s on %s', perm, target_user_group, user_group) return obj @@ -344,19 +336,19 @@ :param target_user_group: :param user_group: """ - target_user_group = self._get_user_group(target_user_group) - user_group = self._get_user_group(user_group) + target_user_group = UserGroup.guess_instance(target_user_group) + user_group = UserGroup.guess_instance(user_group) - obj = self.sa.query(UserGroupUserGroupToPerm)\ - .filter(UserGroupUserGroupToPerm.target_user_group == target_user_group)\ - .filter(UserGroupUserGroupToPerm.user_group == user_group)\ + obj = UserGroupUserGroupToPerm.query() \ + .filter(UserGroupUserGroupToPerm.target_user_group == target_user_group) \ + .filter(UserGroupUserGroupToPerm.user_group == user_group) \ .scalar() if obj is not None: - self.sa.delete(obj) + Session().delete(obj) log.debug('Revoked perm on %s on %s', target_user_group, user_group) def enforce_groups(self, user, groups, extern_type=None): - user = self._get_user(user) + user = User.guess_instance(user) log.debug('Enforcing groups %s on user %s', user, groups) current_groups = user.group_member # find the external created groups @@ -375,7 +367,7 @@ for gr in set(groups): existing_group = UserGroup.get_by_group_name(gr) if not existing_group: - desc = 'Automatically created from plugin:%s' % extern_type + desc = u'Automatically created from plugin:%s' % extern_type # we use first admin account to set the owner of the group existing_group = UserGroupModel().create(gr, desc, owner, group_data={'extern_type': extern_type}) diff -r 42788d5f5967 -r b3289fef0daa kallithea/model/validators.py --- a/kallithea/model/validators.py Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/model/validators.py Thu Jun 07 01:46:02 2018 +0200 @@ -20,7 +20,8 @@ import formencode import logging from collections import defaultdict -from pylons.i18n.translation import _ +from tg.i18n import ugettext as _ +from sqlalchemy import func from webhelpers.pylonslib.secure_form import authentication_token import sqlalchemy @@ -35,7 +36,7 @@ from kallithea.model.db import RepoGroup, Repository, UserGroup, User from kallithea.lib.exceptions import LdapImportError from kallithea.config.routing import ADMIN_PREFIX -from kallithea.lib.auth import HasRepoGroupPermissionAny, HasPermissionAny +from kallithea.lib.auth import HasRepoGroupPermissionLevel, HasPermissionAny # silence warnings and pylint UnicodeString, OneOf, Int, Number, Regex, Email, Bool, StringBoolean, Set, \ @@ -44,30 +45,6 @@ log = logging.getLogger(__name__) -class StateObj(object): - """ - this is needed to translate the messages using _() in validators - """ - _ = staticmethod(_) - - -def M(self, key, state=None, **kwargs): - """ - returns string from self.message based on given key, - passed kw params are used to substitute %(named)s params inside - translated strings - - :param msg: - :param state: - """ - if state is None: - state = StateObj() - else: - state._ = staticmethod(_) - #inject validator into state object - return self.message(key, state, **kwargs) - - def UniqueListFromString(): class _UniqueListFromString(formencode.FancyValidator): """ @@ -89,7 +66,9 @@ return _UniqueListFromString -def ValidUsername(edit=False, old_data={}): +def ValidUsername(edit=False, old_data=None): + old_data = old_data or {} + class _validator(formencode.validators.FancyValidator): messages = { 'username_exists': _('Username "%(username)s" already exists'), @@ -103,20 +82,20 @@ def validate_python(self, value, state): if value in ['default', 'new_user']: - msg = M(self, 'system_invalid_username', state, username=value) + msg = self.message('system_invalid_username', state, username=value) raise formencode.Invalid(msg, value, state) - #check if user is unique + # check if user is unique old_un = None if edit: old_un = User.get(old_data.get('user_id')).username if old_un != value or not edit: if User.get_by_username(value, case_insensitive=True): - msg = M(self, 'username_exists', state, username=value) + msg = self.message('username_exists', state, username=value) raise formencode.Invalid(msg, value, state) if re.match(r'^[a-zA-Z0-9\_]{1}[a-zA-Z0-9\-\_\.]*$', value) is None: - msg = M(self, 'invalid_username', state) + msg = self.message('invalid_username', state) raise formencode.Invalid(msg, value, state) return _validator @@ -135,10 +114,10 @@ def validate_python(self, value, state): try: - User.query().filter(User.active == True)\ + User.query().filter(User.active == True) \ .filter(User.username == value).one() except sqlalchemy.exc.InvalidRequestError: # NoResultFound/MultipleResultsFound - msg = M(self, 'invalid_username', state, username=value) + msg = self.message('invalid_username', state, username=value) raise formencode.Invalid(msg, value, state, error_dict=dict(username=msg) ) @@ -146,7 +125,9 @@ return _validator -def ValidUserGroup(edit=False, old_data={}): +def ValidUserGroup(edit=False, old_data=None): + old_data = old_data or {} + class _validator(formencode.validators.FancyValidator): messages = { 'invalid_group': _('Invalid user group name'), @@ -159,11 +140,11 @@ def validate_python(self, value, state): if value in ['default']: - msg = M(self, 'invalid_group', state) + msg = self.message('invalid_group', state) raise formencode.Invalid(msg, value, state, error_dict=dict(users_group_name=msg) ) - #check if group is unique + # check if group is unique old_ugname = None if edit: old_id = old_data.get('users_group_id') @@ -173,13 +154,13 @@ is_existing_group = UserGroup.get_by_group_name(value, case_insensitive=True) if is_existing_group: - msg = M(self, 'group_exist', state, usergroup=value) + msg = self.message('group_exist', state, usergroup=value) raise formencode.Invalid(msg, value, state, error_dict=dict(users_group_name=msg) ) if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+$', value) is None: - msg = M(self, 'invalid_usergroup_name', state) + msg = self.message('invalid_usergroup_name', state) raise formencode.Invalid(msg, value, state, error_dict=dict(users_group_name=msg) ) @@ -187,10 +168,12 @@ return _validator -def ValidRepoGroup(edit=False, old_data={}): +def ValidRepoGroup(edit=False, old_data=None): + old_data = old_data or {} + class _validator(formencode.validators.FancyValidator): messages = { - 'group_parent_id': _('Cannot assign this group as parent'), + 'parent_group_id': _('Cannot assign this group as parent'), 'group_exists': _('Group "%(group_name)s" already exists'), 'repo_exists': _('Repository with name "%(group_name)s" already exists') @@ -199,20 +182,20 @@ def validate_python(self, value, state): # TODO WRITE VALIDATIONS group_name = value.get('group_name') - group_parent_id = value.get('group_parent_id') + parent_group_id = value.get('parent_group_id') # slugify repo group just in case :) slug = repo_name_slug(group_name) # check for parent of self parent_of_self = lambda: ( - old_data['group_id'] == group_parent_id - if group_parent_id else False + old_data['group_id'] == parent_group_id + if parent_group_id else False ) if edit and parent_of_self(): - msg = M(self, 'group_parent_id', state) + msg = self.message('parent_group_id', state) raise formencode.Invalid(msg, value, state, - error_dict=dict(group_parent_id=msg) + error_dict=dict(parent_group_id=msg) ) old_gname = None @@ -222,24 +205,22 @@ if old_gname != group_name or not edit: # check group - gr = RepoGroup.query()\ - .filter(RepoGroup.group_name == slug)\ - .filter(RepoGroup.group_parent_id == group_parent_id)\ + gr = RepoGroup.query() \ + .filter(func.lower(RepoGroup.group_name) == func.lower(slug)) \ + .filter(RepoGroup.parent_group_id == parent_group_id) \ .scalar() - if gr is not None: - msg = M(self, 'group_exists', state, group_name=slug) + msg = self.message('group_exists', state, group_name=slug) raise formencode.Invalid(msg, value, state, error_dict=dict(group_name=msg) ) # check for same repo - repo = Repository.query()\ - .filter(Repository.repo_name == slug)\ + repo = Repository.query() \ + .filter(func.lower(Repository.repo_name) == func.lower(slug)) \ .scalar() - if repo is not None: - msg = M(self, 'repo_exists', state, group_name=slug) + msg = self.message('repo_exists', state, group_name=slug) raise formencode.Invalid(msg, value, state, error_dict=dict(group_name=msg) ) @@ -258,7 +239,7 @@ try: (value or '').decode('ascii') except UnicodeError: - msg = M(self, 'invalid_password', state) + msg = self.message('invalid_password', state) raise formencode.Invalid(msg, value, state,) return _validator @@ -272,7 +253,7 @@ def validate_python(self, value, state): from kallithea.lib import auth_modules if auth_modules.authenticate(username, value, '') is None: - msg = M(self, 'invalid_password', state) + msg = self.message('invalid_password', state) raise formencode.Invalid(msg, value, state, error_dict=dict(current_password=msg) ) @@ -287,7 +268,7 @@ def validate_python(self, value, state): if value.get(password_field) != value[password_confirmation_field]: - msg = M(self, 'password_mismatch', state) + msg = self.message('password_mismatch', state) raise formencode.Invalid(msg, value, state, error_dict={password_field:msg, password_confirmation_field: msg} ) @@ -309,16 +290,16 @@ # authenticate returns unused dict but has called # plugin._authenticate which has create_or_update'ed the username user in db if auth_modules.authenticate(username, password) is None: - user = User.get_by_username(username) + user = User.get_by_username_or_email(username) if user and not user.active: log.warning('user %s is disabled', username) - msg = M(self, 'invalid_auth', state) + msg = self.message('invalid_auth', state) raise formencode.Invalid(msg, value, state, error_dict=dict(username=' ', password=msg) ) else: log.warning('user %s failed to authenticate', username) - msg = M(self, 'invalid_auth', state) + msg = self.message('invalid_auth', state) raise formencode.Invalid(msg, value, state, error_dict=dict(username=' ', password=msg) ) @@ -333,12 +314,14 @@ def validate_python(self, value, state): if value != authentication_token(): - msg = M(self, 'invalid_token', state) + msg = self.message('invalid_token', state) raise formencode.Invalid(msg, value, state) return _validator -def ValidRepoName(edit=False, old_data={}): +def ValidRepoName(edit=False, old_data=None): + old_data = old_data or {} + class _validator(formencode.validators.FancyValidator): messages = { 'invalid_repo_name': @@ -373,14 +356,13 @@ return value def validate_python(self, value, state): - repo_name = value.get('repo_name') repo_name_full = value.get('repo_name_full') group_path = value.get('group_path') group_name = value.get('group_name') if repo_name in [ADMIN_PREFIX, '']: - msg = M(self, 'invalid_repo_name', state, repo=repo_name) + msg = self.message('invalid_repo_name', state, repo=repo_name) raise formencode.Invalid(msg, value, state, error_dict=dict(repo_name=msg) ) @@ -388,24 +370,24 @@ rename = old_data.get('repo_name') != repo_name_full create = not edit if rename or create: - + repo = Repository.get_by_repo_name(repo_name_full, case_insensitive=True) + repo_group = RepoGroup.get_by_group_name(repo_name_full, case_insensitive=True) if group_path != '': - if Repository.get_by_repo_name(repo_name_full): - msg = M(self, 'repository_in_group_exists', state, - repo=repo_name, group=group_name) + if repo is not None: + msg = self.message('repository_in_group_exists', state, + repo=repo.repo_name, group=group_name) raise formencode.Invalid(msg, value, state, error_dict=dict(repo_name=msg) ) - elif RepoGroup.get_by_group_name(repo_name_full): - msg = M(self, 'same_group_exists', state, + elif repo_group is not None: + msg = self.message('same_group_exists', state, repo=repo_name) raise formencode.Invalid(msg, value, state, error_dict=dict(repo_name=msg) ) - - elif Repository.get_by_repo_name(repo_name_full): - msg = M(self, 'repository_exists', state, - repo=repo_name) + elif repo is not None: + msg = self.message('repository_exists', state, + repo=repo.repo_name) raise formencode.Invalid(msg, value, state, error_dict=dict(repo_name=msg) ) @@ -448,14 +430,16 @@ is_valid_repo_uri(repo_type, url, make_ui('db', clear_session=False)) except Exception: log.exception('URL validation failed') - msg = M(self, 'clone_uri') + msg = self.message('clone_uri', state) raise formencode.Invalid(msg, value, state, error_dict=dict(clone_uri=msg) ) return _validator -def ValidForkType(old_data={}): +def ValidForkType(old_data=None): + old_data = old_data or {} + class _validator(formencode.validators.FancyValidator): messages = { 'invalid_fork_type': _('Fork has to be the same type as parent') @@ -463,7 +447,7 @@ def validate_python(self, value, state): if old_data['repo_type'] != value: - msg = M(self, 'invalid_fork_type', state) + msg = self.message('invalid_fork_type', state) raise formencode.Invalid(msg, value, state, error_dict=dict(repo_type=msg) ) @@ -480,7 +464,7 @@ } def _to_python(self, value, state): - #root location + # root location if value == -1: return None return value @@ -491,9 +475,9 @@ # create repositories with write permission on group is set to true create_on_write = HasPermissionAny('hg.create.write_on_repogroup.true')() - group_admin = HasRepoGroupPermissionAny('group.admin')(gr_name, + group_admin = HasRepoGroupPermissionLevel('admin')(gr_name, 'can write into group validator') - group_write = HasRepoGroupPermissionAny('group.write')(gr_name, + group_write = HasRepoGroupPermissionLevel('write')(gr_name, 'can write into group validator') forbidden = not (group_admin or (group_write and create_on_write)) can_create_repos = HasPermissionAny('hg.admin', 'hg.create.repository') @@ -506,15 +490,15 @@ # don't need to check permission if he didn't change the value of # groups in form box if value_changed or new: - #parent group need to be existing + # parent group need to be existing if gr and forbidden: - msg = M(self, 'permission_denied', state) + msg = self.message('permission_denied', state) raise formencode.Invalid(msg, value, state, error_dict=dict(repo_type=msg) ) ## check if we can write to root location ! elif gr is None and not can_create_repos(): - msg = M(self, 'permission_denied_root', state) + msg = self.message('permission_denied_root', state) raise formencode.Invalid(msg, value, state, error_dict=dict(repo_type=msg) ) @@ -530,7 +514,7 @@ } def to_python(self, value, state): - #root location + # root location if value == -1: return None return value @@ -540,16 +524,15 @@ gr_name = gr.group_name if gr is not None else None # None means ROOT location if can_create_in_root and gr is None: - #we can create in root, we're fine no validations required + # we can create in root, we're fine no validations required return forbidden_in_root = gr is None and not can_create_in_root - val = HasRepoGroupPermissionAny('group.admin') - forbidden = not val(gr_name, 'can create group validator') + forbidden = not HasRepoGroupPermissionLevel('admin')(gr_name, 'can create group validator') if forbidden_in_root or forbidden: - msg = M(self, 'permission_denied', state) + msg = self.message('permission_denied', state) raise formencode.Invalid(msg, value, state, - error_dict=dict(group_parent_id=msg) + error_dict=dict(parent_group_id=msg) ) return _validator @@ -574,7 +557,7 @@ perms_new = OrderedSet() # build a list of permission to update and new permission to create - #CLEAN OUT ORG VALUE FROM NEW MEMBERS, and group them using + # CLEAN OUT ORG VALUE FROM NEW MEMBERS, and group them using new_perms_group = defaultdict(dict) for k, v in value.copy().iteritems(): if k.startswith('perm_new_member'): @@ -616,17 +599,17 @@ for k, v, t in perms_new: try: if t is 'user': - self.user_db = User.query()\ - .filter(User.active == True)\ + self.user_db = User.query() \ + .filter(User.active == True) \ .filter(User.username == k).one() if t is 'users_group': - self.user_db = UserGroup.query()\ - .filter(UserGroup.users_group_active == True)\ + self.user_db = UserGroup.query() \ + .filter(UserGroup.users_group_active == True) \ .filter(UserGroup.users_group_name == k).one() except Exception: log.exception('Updated permission failed') - msg = M(self, 'perm_new_member_type', state) + msg = self.message('perm_new_member_type', state) raise formencode.Invalid(msg, value, state, error_dict=dict(perm_new_member_name=msg) ) @@ -664,14 +647,16 @@ def validate_python(self, value, state): if not os.path.isdir(value): - msg = M(self, 'invalid_path', state) + msg = self.message('invalid_path', state) raise formencode.Invalid(msg, value, state, error_dict=dict(paths_root_path=msg) ) return _validator -def UniqSystemEmail(old_data={}): +def UniqSystemEmail(old_data=None): + old_data = old_data or {} + class _validator(formencode.validators.FancyValidator): messages = { 'email_taken': _('This email address is already in use') @@ -682,9 +667,9 @@ def validate_python(self, value, state): if (old_data.get('email') or '').lower() != value: - user = User.get_by_email(value, case_insensitive=True) + user = User.get_by_email(value) if user is not None: - msg = M(self, 'email_taken', state) + msg = self.message('email_taken', state) raise formencode.Invalid(msg, value, state, error_dict=dict(email=msg) ) @@ -701,9 +686,9 @@ return value.lower() def validate_python(self, value, state): - user = User.get_by_email(value, case_insensitive=True) + user = User.get_by_email(value) if user is None: - msg = M(self, 'non_existing_email', state, email=value) + msg = self.message('non_existing_email', state, email=value) raise formencode.Invalid(msg, value, state, error_dict=dict(email=msg) ) @@ -753,11 +738,11 @@ v = v.strip() net = ipaddr.IPNetwork(address=v) if isinstance(net, ipaddr.IPv4Network): - #if IPv4 doesn't end with a mask, add /32 + # if IPv4 doesn't end with a mask, add /32 if '/' not in value: v += '/32' if isinstance(net, ipaddr.IPv6Network): - #if IPv6 doesn't end with a mask, add /128 + # if IPv6 doesn't end with a mask, add /128 if '/' not in value: v += '/128' return v @@ -765,7 +750,7 @@ def validate_python(self, value, state): try: addr = value.strip() - #this raises an ValueError if address is not IPv4 or IPv6 + # this raises an ValueError if address is not IPv4 or IPv6 ipaddr.IPNetwork(address=addr) except ValueError: raise formencode.Invalid(self.message('badFormat', state), @@ -823,7 +808,7 @@ plugin = auth_modules.loadplugin(module) plugin_name = plugin.name if plugin_name in unique_names: - msg = M(self, 'import_duplicate', state, + msg = self.message('import_duplicate', state, loaded=unique_names[plugin_name], next_to_load=plugin_name) raise formencode.Invalid(msg, value, state) diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/css/bootstrap.css --- a/kallithea/public/css/bootstrap.css Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/public/css/bootstrap.css Thu Jun 07 01:46:02 2018 +0200 @@ -1,15 +1,17 @@ /*! - * Bootstrap v3.0.0 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ - -/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ - +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} article, aside, details, @@ -19,95 +21,55 @@ header, hgroup, main, +menu, nav, section, summary { display: block; } - audio, canvas, +progress, video { display: inline-block; -} - + vertical-align: baseline; +} audio:not([controls]) { display: none; height: 0; } - -[hidden] { +[hidden], +template { display: none; } - -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - margin: 0; -} - -a:focus { - outline: thin dotted; -} - +a { + background-color: transparent; +} a:active, a:hover { outline: 0; } - -h1 { - margin: 0.67em 0; - font-size: 2em; -} - abbr[title] { border-bottom: 1px dotted; } - b, strong { font-weight: bold; } - dfn { font-style: italic; } - -hr { - height: 0; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - +h1 { + margin: .67em 0; + font-size: 2em; +} mark { color: #000; background: #ff0; } - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -pre { - white-space: pre-wrap; -} - -q { - quotes: "\201C" "\201D" "\2018" "\2019"; -} - small { font-size: 80%; } - sub, sup { position: relative; @@ -115,110 +77,126 @@ line-height: 0; vertical-align: baseline; } - sup { - top: -0.5em; -} - + top: -.5em; +} sub { - bottom: -0.25em; -} - + bottom: -.25em; +} img { border: 0; } - svg:not(:root) { overflow: hidden; } - figure { - margin: 0; -} - -fieldset { - padding: 0.35em 0.625em 0.75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} - -legend { - padding: 0; - border: 0; -} - + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} button, input, +optgroup, select, textarea { margin: 0; - font-family: inherit; - font-size: 100%; -} - -button, -input { - line-height: normal; -} - + font: inherit; + color: inherit; +} +button { + overflow: visible; +} button, select { text-transform: none; } - button, html input[type="button"], input[type="reset"], input[type="submit"] { + -webkit-appearance: button; cursor: pointer; - -webkit-appearance: button; -} - +} button[disabled], html input[disabled] { cursor: default; } - +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} input[type="checkbox"], input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; padding: 0; - box-sizing: border-box; -} - +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} input[type="search"] { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; -webkit-appearance: textfield; } - input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } - -button::-moz-focus-inner, -input::-moz-focus-inner { +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { padding: 0; border: 0; } - textarea { overflow: auto; - vertical-align: top; -} - +} +optgroup { + font-weight: bold; +} table { + border-spacing: 0; border-collapse: collapse; - border-spacing: 0; -} - +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ @media print { - * { + *, + *:before, + *:after { color: #000 !important; text-shadow: none !important; background: transparent !important; - box-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; } a, a:visited { @@ -230,14 +208,14 @@ abbr[title]:after { content: " (" attr(title) ")"; } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { + a[href^="#"]:after, + a[href^="javascript:"]:after { content: ""; } pre, blockquote { border: 1px solid #999; + page-break-inside: avoid; } thead { @@ -250,9 +228,6 @@ img { max-width: 100% !important; } - @page { - margin: 2cm .5cm; - } p, h2, h3 { @@ -266,10 +241,6 @@ .navbar { display: none; } - .table td, - .table th { - background-color: #fff !important; - } .btn > .caret, .dropup > .btn > .caret { border-top-color: #000 !important; @@ -280,33 +251,843 @@ .table { border-collapse: collapse !important; } + .table td, + .table th { + background-color: #fff !important; + } .table-bordered th, .table-bordered td { border: 1px solid #ddd !important; } } +@font-face { + font-family: 'Glyphicons Halflings'; -*, + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } +html { + font-size: 10px; -html { - font-size: 62.5%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } - body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; - line-height: 1.428571429; - color: #333333; - background-color: #ffffff; -} - + line-height: 1.42857143; + color: #333; + background-color: #fff; +} input, button, select, @@ -315,69 +1096,59 @@ font-size: inherit; line-height: inherit; } - -button, -input, -select[multiple], -textarea { - background-image: none; -} - a { - color: #428bca; + color: #337ab7; text-decoration: none; } - a:hover, a:focus { - color: #2a6496; + color: #23527c; text-decoration: underline; } - a:focus { - outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } - +figure { + margin: 0; +} img { vertical-align: middle; } - -.img-responsive { +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { display: block; + max-width: 100%; height: auto; - max-width: 100%; -} - +} .img-rounded { border-radius: 6px; } - .img-thumbnail { display: inline-block; + max-width: 100%; height: auto; - max-width: 100%; padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} .img-circle { border-radius: 50%; } - hr { margin-top: 20px; margin-bottom: 20px; border: 0; - border-top: 1px solid #eeeeee; -} - + border-top: 1px solid #eee; +} .sr-only { position: absolute; width: 1px; @@ -385,71 +1156,21 @@ padding: 0; margin: -1px; overflow: hidden; - clip: rect(0 0 0 0); + clip: rect(0, 0, 0, 0); border: 0; } - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 16.099999999999998px; - font-weight: 200; - line-height: 1.4; -} - -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} - -small { - font-size: 85%; -} - -cite { - font-style: normal; -} - -.text-muted { - color: #999999; -} - -.text-primary { - color: #428bca; -} - -.text-warning { - color: #c09853; -} - -.text-danger { - color: #b94a48; -} - -.text-success { - color: #468847; -} - -.text-info { - color: #3a87ad; -} - -.text-left { - text-align: left; -} - -.text-right { - text-align: right; -} - -.text-center { - text-align: center; -} - +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} h1, h2, h3, @@ -462,11 +1183,11 @@ .h4, .h5, .h6 { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-family: inherit; font-weight: 500; line-height: 1.1; -} - + color: inherit; +} h1 small, h2 small, h3 small, @@ -478,125 +1199,258 @@ .h3 small, .h4 small, .h5 small, -.h6 small { +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { font-weight: normal; line-height: 1; - color: #999999; -} - + color: #777; +} h1, +.h1, h2, -h3 { +.h2, +h3, +.h3 { margin-top: 20px; margin-bottom: 10px; } - +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} h4, +.h4, h5, -h6 { +.h5, +h6, +.h6 { margin-top: 10px; margin-bottom: 10px; } - +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} h1, .h1 { font-size: 36px; } - h2, .h2 { font-size: 30px; } - h3, .h3 { font-size: 24px; } - h4, .h4 { font-size: 18px; } - h5, .h5 { font-size: 14px; } - h6, .h6 { font-size: 12px; } - -h1 small, -.h1 small { - font-size: 24px; -} - -h2 small, -.h2 small { - font-size: 18px; -} - -h3 small, -.h3 small, -h4 small, -.h4 small { - font-size: 14px; -} - +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} .page-header { padding-bottom: 9px; margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; -} - + border-bottom: 1px solid #eee; +} ul, ol { margin-top: 0; margin-bottom: 10px; } - ul ul, ol ul, ul ol, ol ol { margin-bottom: 0; } - .list-unstyled { padding-left: 0; list-style: none; } - .list-inline { padding-left: 0; + margin-left: -5px; list-style: none; } - .list-inline > li { display: inline-block; padding-right: 5px; padding-left: 5px; } - dl { + margin-top: 0; margin-bottom: 20px; } - dt, dd { - line-height: 1.428571429; -} - + line-height: 1.42857143; +} dt { font-weight: bold; } - dd { margin-left: 0; } - @media (min-width: 768px) { .dl-horizontal dt { float: left; @@ -610,885 +1464,876 @@ .dl-horizontal dd { margin-left: 180px; } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } -} - +} abbr[title], abbr[data-original-title] { cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { + border-bottom: 1px dotted #777; +} +.initialism { font-size: 90%; text-transform: uppercase; } - blockquote { padding: 10px 20px; margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} - -blockquote p:last-child { + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { margin-bottom: 0; } - -blockquote small { +blockquote footer, +blockquote small, +blockquote .small { display: block; - line-height: 1.428571429; - color: #999999; -} - -blockquote small:before { + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { content: '\2014 \00A0'; } - +.blockquote-reverse, blockquote.pull-right { padding-right: 15px; padding-left: 0; - border-right: 5px solid #eeeeee; + text-align: right; + border-right: 5px solid #eee; border-left: 0; } - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { content: ''; } - -blockquote.pull-right small:after { +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { content: '\00A0 \2014'; } - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - address { - display: block; margin-bottom: 20px; font-style: normal; - line-height: 1.428571429; -} - + line-height: 1.42857143; +} code, -pre { - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} - +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} code { padding: 2px 4px; font-size: 90%; color: #c7254e; - white-space: nowrap; background-color: #f9f2f4; border-radius: 4px; } - +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} pre { display: block; padding: 9.5px; margin: 0 0 10px; font-size: 13px; - line-height: 1.428571429; - color: #333333; + line-height: 1.42857143; + color: #333; word-break: break-all; word-wrap: break-word; background-color: #f5f5f5; - border: 1px solid #cccccc; + border: 1px solid #ccc; border-radius: 4px; } - -pre.prettyprint { - margin-bottom: 20px; -} - pre code { padding: 0; font-size: inherit; color: inherit; white-space: pre-wrap; background-color: transparent; - border: 0; -} - + border-radius: 0; +} .pre-scrollable { max-height: 340px; overflow-y: scroll; } - .container { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } - -.container:before, -.container:after { - display: table; - content: " "; -} - -.container:after { - clear: both; -} - -.container:before, -.container:after { - display: table; - content: " "; -} - -.container:after { - clear: both; -} - +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} .row { margin-right: -15px; margin-left: -15px; } - -.row:before, -.row:after { - display: table; - content: " "; -} - -.row:after { - clear: both; -} - -.row:before, -.row:after { - display: table; - content: " "; -} - -.row:after { - clear: both; -} - -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11, -.col-xs-12, -.col-sm-1, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-md-1, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-md-10, -.col-md-11, -.col-md-12, -.col-lg-1, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-lg-10, -.col-lg-11, -.col-lg-12 { +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; padding-right: 15px; padding-left: 15px; } - -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11 { +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { float: left; } - -.col-xs-1 { - width: 8.333333333333332%; -} - -.col-xs-2 { - width: 16.666666666666664%; -} - -.col-xs-3 { - width: 25%; -} - -.col-xs-4 { - width: 33.33333333333333%; -} - -.col-xs-5 { - width: 41.66666666666667%; -} - +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} .col-xs-6 { width: 50%; } - -.col-xs-7 { - width: 58.333333333333336%; -} - -.col-xs-8 { - width: 66.66666666666666%; -} - -.col-xs-9 { - width: 75%; -} - -.col-xs-10 { - width: 83.33333333333334%; -} - -.col-xs-11 { - width: 91.66666666666666%; -} - -.col-xs-12 { - width: 100%; -} - +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} @media (min-width: 768px) { - .container { - max-width: 750px; - } - .col-sm-1, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9, - .col-sm-10, + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } .col-sm-11 { - float: left; - } - .col-sm-1 { - width: 8.333333333333332%; - } - .col-sm-2 { - width: 16.666666666666664%; + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; } .col-sm-3 { width: 25%; } - .col-sm-4 { - width: 33.33333333333333%; - } - .col-sm-5 { - width: 41.66666666666667%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-7 { - width: 58.333333333333336%; - } - .col-sm-8 { - width: 66.66666666666666%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-10 { - width: 83.33333333333334%; - } - .col-sm-11 { - width: 91.66666666666666%; - } - .col-sm-12 { - width: 100%; - } - .col-sm-push-1 { - left: 8.333333333333332%; - } - .col-sm-push-2 { - left: 16.666666666666664%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-4 { - left: 33.33333333333333%; - } - .col-sm-push-5 { - left: 41.66666666666667%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-7 { - left: 58.333333333333336%; - } - .col-sm-push-8 { - left: 66.66666666666666%; + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; } .col-sm-push-9 { left: 75%; } - .col-sm-push-10 { - left: 83.33333333333334%; - } - .col-sm-push-11 { - left: 91.66666666666666%; - } - .col-sm-pull-1 { - right: 8.333333333333332%; - } - .col-sm-pull-2 { - right: 16.666666666666664%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-4 { - right: 33.33333333333333%; - } - .col-sm-pull-5 { - right: 41.66666666666667%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-7 { - right: 58.333333333333336%; - } - .col-sm-pull-8 { - right: 66.66666666666666%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-10 { - right: 83.33333333333334%; - } - .col-sm-pull-11 { - right: 91.66666666666666%; - } - .col-sm-offset-1 { - margin-left: 8.333333333333332%; - } - .col-sm-offset-2 { - margin-left: 16.666666666666664%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-4 { - margin-left: 33.33333333333333%; - } - .col-sm-offset-5 { - margin-left: 41.66666666666667%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-7 { - margin-left: 58.333333333333336%; - } - .col-sm-offset-8 { - margin-left: 66.66666666666666%; + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; } .col-sm-offset-9 { margin-left: 75%; } - .col-sm-offset-10 { - margin-left: 83.33333333333334%; - } - .col-sm-offset-11 { - margin-left: 91.66666666666666%; - } -} - + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} @media (min-width: 992px) { - .container { - max-width: 970px; - } - .col-md-1, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9, - .col-md-10, - .col-md-11 { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left; } - .col-md-1 { - width: 8.333333333333332%; - } - .col-md-2 { - width: 16.666666666666664%; - } - .col-md-3 { - width: 25%; - } - .col-md-4 { - width: 33.33333333333333%; - } - .col-md-5 { - width: 41.66666666666667%; + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; } .col-md-6 { width: 50%; } - .col-md-7 { - width: 58.333333333333336%; - } - .col-md-8 { - width: 66.66666666666666%; - } - .col-md-9 { - width: 75%; - } - .col-md-10 { - width: 83.33333333333334%; - } - .col-md-11 { - width: 91.66666666666666%; - } - .col-md-12 { - width: 100%; - } - .col-md-push-0 { - left: auto; - } - .col-md-push-1 { - left: 8.333333333333332%; - } - .col-md-push-2 { - left: 16.666666666666664%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-4 { - left: 33.33333333333333%; - } - .col-md-push-5 { - left: 41.66666666666667%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-7 { - left: 58.333333333333336%; - } - .col-md-push-8 { - left: 66.66666666666666%; + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; } .col-md-push-9 { left: 75%; } - .col-md-push-10 { - left: 83.33333333333334%; - } - .col-md-push-11 { - left: 91.66666666666666%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-pull-1 { - right: 8.333333333333332%; - } - .col-md-pull-2 { - right: 16.666666666666664%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-4 { - right: 33.33333333333333%; - } - .col-md-pull-5 { - right: 41.66666666666667%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-7 { - right: 58.333333333333336%; - } - .col-md-pull-8 { - right: 66.66666666666666%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-10 { - right: 83.33333333333334%; - } - .col-md-pull-11 { - right: 91.66666666666666%; - } - .col-md-offset-0 { - margin-left: 0; - } - .col-md-offset-1 { - margin-left: 8.333333333333332%; - } - .col-md-offset-2 { - margin-left: 16.666666666666664%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-4 { - margin-left: 33.33333333333333%; - } - .col-md-offset-5 { - margin-left: 41.66666666666667%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-7 { - margin-left: 58.333333333333336%; - } - .col-md-offset-8 { - margin-left: 66.66666666666666%; + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; } .col-md-offset-9 { margin-left: 75%; } - .col-md-offset-10 { - margin-left: 83.33333333333334%; - } - .col-md-offset-11 { - margin-left: 91.66666666666666%; - } -} - + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} @media (min-width: 1200px) { - .container { - max-width: 1170px; - } - .col-lg-1, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9, - .col-lg-10, + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } .col-lg-11 { - float: left; - } - .col-lg-1 { - width: 8.333333333333332%; - } - .col-lg-2 { - width: 16.666666666666664%; + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; } .col-lg-3 { width: 25%; } - .col-lg-4 { - width: 33.33333333333333%; - } - .col-lg-5 { - width: 41.66666666666667%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-7 { - width: 58.333333333333336%; - } - .col-lg-8 { - width: 66.66666666666666%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-10 { - width: 83.33333333333334%; - } - .col-lg-11 { - width: 91.66666666666666%; - } - .col-lg-12 { - width: 100%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-push-1 { - left: 8.333333333333332%; - } - .col-lg-push-2 { - left: 16.666666666666664%; + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; } .col-lg-push-3 { left: 25%; } - .col-lg-push-4 { - left: 33.33333333333333%; - } - .col-lg-push-5 { - left: 41.66666666666667%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-7 { - left: 58.333333333333336%; - } - .col-lg-push-8 { - left: 66.66666666666666%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-10 { - left: 83.33333333333334%; - } - .col-lg-push-11 { - left: 91.66666666666666%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-pull-1 { - right: 8.333333333333332%; - } - .col-lg-pull-2 { - right: 16.666666666666664%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-4 { - right: 33.33333333333333%; - } - .col-lg-pull-5 { - right: 41.66666666666667%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-7 { - right: 58.333333333333336%; - } - .col-lg-pull-8 { - right: 66.66666666666666%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-10 { - right: 83.33333333333334%; - } - .col-lg-pull-11 { - right: 91.66666666666666%; - } - .col-lg-offset-0 { - margin-left: 0; - } - .col-lg-offset-1 { - margin-left: 8.333333333333332%; - } - .col-lg-offset-2 { - margin-left: 16.666666666666664%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-4 { - margin-left: 33.33333333333333%; - } - .col-lg-offset-5 { - margin-left: 41.66666666666667%; + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; } .col-lg-offset-6 { margin-left: 50%; } - .col-lg-offset-7 { - margin-left: 58.333333333333336%; - } - .col-lg-offset-8 { - margin-left: 66.66666666666666%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-10 { - margin-left: 83.33333333333334%; - } - .col-lg-offset-11 { - margin-left: 91.66666666666666%; - } -} - + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} table { - max-width: 100%; background-color: transparent; } - +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} th { text-align: left; } - .table { width: 100%; + max-width: 100%; margin-bottom: 20px; } - -.table thead > tr > th, -.table tbody > tr > th, -.table tfoot > tr > th, -.table thead > tr > td, -.table tbody > tr > td, -.table tfoot > tr > td { +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { padding: 8px; - line-height: 1.428571429; + line-height: 1.42857143; vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table thead > tr > th { + border-top: 1px solid #ddd; +} +.table > thead > tr > th { vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} - -.table caption + thead tr:first-child th, -.table colgroup + thead tr:first-child th, -.table thead:first-child tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child td { + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { border-top: 0; } - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - +.table > tbody + tbody { + border-top: 2px solid #ddd; +} .table .table { - background-color: #ffffff; -} - -.table-condensed thead > tr > th, -.table-condensed tbody > tr > th, -.table-condensed tfoot > tr > th, -.table-condensed thead > tr > td, -.table-condensed tbody > tr > td, -.table-condensed tfoot > tr > td { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { padding: 5px; } - .table-bordered { - border: 1px solid #dddddd; -} - + border: 1px solid #ddd; +} .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} - + border: 1px solid #ddd; +} .table-bordered > thead > tr > th, .table-bordered > thead > tr > td { border-bottom-width: 2px; } - -.table-striped > tbody > tr:nth-child(odd) > td, -.table-striped > tbody > tr:nth-child(odd) > th { +.table-striped > tbody > tr:nth-of-type(odd) { background-color: #f9f9f9; } - -.table-hover > tbody > tr:hover > td, -.table-hover > tbody > tr:hover > th { +.table-hover > tbody > tr:hover { background-color: #f5f5f5; } - table col[class*="col-"] { + position: static; display: table-column; float: none; } - table td[class*="col-"], table th[class*="col-"] { + position: static; display: table-cell; float: none; } - .table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, @@ -1503,7 +2348,13 @@ .table > tfoot > tr.active > th { background-color: #f5f5f5; } - +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} .table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, @@ -1517,16 +2368,56 @@ .table > tbody > tr.success > th, .table > tfoot > tr.success > th { background-color: #dff0d8; - border-color: #d6e9c6; -} - +} .table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td { +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { background-color: #d0e9c6; - border-color: #c9e2b3; -} - +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} .table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, @@ -1540,50 +2431,28 @@ .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { background-color: #f2dede; - border-color: #eed3d7; -} - +} .table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td { +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { background-color: #ebcccc; - border-color: #e6c1c7; -} - -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td { - background-color: #faf2cc; - border-color: #f8e5be; -} - -@media (max-width: 768px) { +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { .table-responsive { width: 100%; margin-bottom: 15px; - overflow-x: scroll; overflow-y: hidden; - border: 1px solid #dddddd; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; } .table-responsive > .table { margin-bottom: 0; - background-color: #fff; } .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, @@ -1612,22 +2481,19 @@ .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } - .table-responsive > .table-bordered > thead > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > thead > tr:last-child > td, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td { border-bottom: 0; } } - fieldset { + min-width: 0; padding: 0; margin: 0; border: 0; } - legend { display: block; width: 100%; @@ -1635,149 +2501,166 @@ margin-bottom: 20px; font-size: 21px; line-height: inherit; - color: #333333; + color: #333; border: 0; border-bottom: 1px solid #e5e5e5; } - label { display: inline-block; + max-width: 100%; margin-bottom: 5px; font-weight: bold; } - input[type="search"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } - input[type="radio"], input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; - /* IE8-9 */ - line-height: normal; } - input[type="file"] { display: block; } - +input[type="range"] { + display: block; + width: 100%; +} select[multiple], select[size] { height: auto; } - -select optgroup { - font-family: inherit; - font-size: inherit; - font-style: inherit; -} - input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { - outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } - -input[type="number"]::-webkit-outer-spin-button, -input[type="number"]::-webkit-inner-spin-button { - height: auto; -} - -.form-control:-moz-placeholder { - color: #999999; -} - -.form-control::-moz-placeholder { - color: #999999; -} - -.form-control:-ms-input-placeholder { - color: #999999; -} - -.form-control::-webkit-input-placeholder { - color: #999999; -} - +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} .form-control { display: block; width: 100%; height: 34px; padding: 6px 12px; font-size: 14px; - line-height: 1.428571429; - color: #555555; - vertical-align: middle; - background-color: #ffffff; - border: 1px solid #cccccc; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -} - + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} .form-control:focus { border-color: #66afe9; outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); -} - + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { cursor: not-allowed; - background-color: #eeeeee; -} - +} textarea.form-control { height: auto; } - +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} .form-group { margin-bottom: 15px; } - .radio, .checkbox { + position: relative; display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { min-height: 20px; padding-left: 20px; - margin-top: 10px; - margin-bottom: 10px; - vertical-align: middle; -} - -.radio label, -.checkbox label { - display: inline; margin-bottom: 0; font-weight: normal; cursor: pointer; } - .radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { - float: left; + position: absolute; + margin-top: 4px \9; margin-left: -20px; } - .radio + .radio, .checkbox + .checkbox { margin-top: -5px; } - .radio-inline, .checkbox-inline { + position: relative; display: inline-block; padding-left: 20px; margin-bottom: 0; @@ -1785,28 +2668,42 @@ vertical-align: middle; cursor: pointer; } - .radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { margin-top: 0; margin-left: 10px; } - input[type="radio"][disabled], input[type="checkbox"][disabled], -.radio[disabled], -.radio-inline[disabled], -.checkbox[disabled], -.checkbox-inline[disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"], -fieldset[disabled] .radio, +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox, fieldset[disabled] .checkbox-inline { cursor: not-allowed; } - +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} .input-sm { height: 30px; padding: 5px 10px; @@ -1814,114 +2711,207 @@ line-height: 1.5; border-radius: 3px; } - select.input-sm { height: 30px; line-height: 30px; } - -textarea.input-sm { +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { height: auto; } - +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} .input-lg { - height: 45px; + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; padding: 10px 16px; font-size: 18px; - line-height: 1.33; + line-height: 1.3333333; border-radius: 6px; } - -select.input-lg { - height: 45px; - line-height: 45px; -} - -textarea.input-lg { +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { height: auto; } - +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} .has-warning .help-block, -.has-warning .control-label { - color: #c09853; -} - +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} .has-warning .form-control { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} .has-warning .form-control:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} .has-warning .input-group-addon { - color: #c09853; + color: #8a6d3b; background-color: #fcf8e3; - border-color: #c09853; -} - + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} .has-error .help-block, -.has-error .control-label { - color: #b94a48; -} - +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} .has-error .form-control { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} .has-error .form-control:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} .has-error .input-group-addon { - color: #b94a48; + color: #a94442; background-color: #f2dede; - border-color: #b94a48; -} - -.has-success .help-block, -.has-success .control-label { - color: #468847; -} - -.has-success .form-control { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-success .form-control:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.has-success .input-group-addon { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.form-control-static { - padding-top: 7px; - margin-bottom: 0; -} - + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} .help-block { display: block; margin-top: 5px; margin-bottom: 10px; color: #737373; } - @media (min-width: 768px) { .form-inline .form-group { display: inline-block; @@ -1930,22 +2920,48 @@ } .form-inline .form-control { display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; } .form-inline .radio, .form-inline .checkbox { display: inline-block; - padding-left: 0; margin-top: 0; margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; } .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { - float: none; + position: relative; margin-left: 0; } -} - -.form-horizontal .control-label, + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, @@ -1954,1273 +2970,553 @@ margin-top: 0; margin-bottom: 0; } - +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} .form-horizontal .form-group { margin-right: -15px; margin-left: -15px; } - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; -} - -.form-horizontal .form-group:after { - clear: both; -} - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; -} - -.form-horizontal .form-group:after { - clear: both; -} - @media (min-width: 768px) { .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; text-align: right; } } - +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} .btn { display: inline-block; padding: 6px 12px; margin-bottom: 0; font-size: 14px; font-weight: normal; - line-height: 1.428571429; + line-height: 1.42857143; text-align: center; white-space: nowrap; vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; cursor: pointer; - border: 1px solid transparent; - border-radius: 4px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; - -o-user-select: none; user-select: none; -} - -.btn:focus { - outline: thin dotted #333; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } - .btn:hover, -.btn:focus { - color: #333333; +.btn:focus, +.btn.focus { + color: #333; text-decoration: none; } - .btn:active, .btn.active { background-image: none; outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} .btn.disabled, .btn[disabled], fieldset[disabled] .btn { - pointer-events: none; cursor: not-allowed; - opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; box-shadow: none; -} - + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} .btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} - -.btn-default:hover, + color: #333; + background-color: #fff; + border-color: #ccc; +} .btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} .btn-default:active, .btn-default.active, -.open .dropdown-toggle.btn-default { - color: #333333; - background-color: #ebebeb; +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; border-color: #adadad; } - +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} .btn-default:active, .btn-default.active, -.open .dropdown-toggle.btn-default { +.open > .dropdown-toggle.btn-default { background-image: none; } - -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #ffffff; - border-color: #cccccc; -} - +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} .btn-primary { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; -} - -.btn-primary:hover, + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} .btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} .btn-primary:active, .btn-primary.active, -.open .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #3276b1; - border-color: #285e8e; -} - +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} .btn-primary:active, .btn-primary.active, -.open .dropdown-toggle.btn-primary { +.open > .dropdown-toggle.btn-primary { background-image: none; } - -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #428bca; - border-color: #357ebd; -} - -.btn-warning { - color: #ffffff; - background-color: #f0ad4e; - border-color: #eea236; -} - -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #ed9c28; - border-color: #d58512; -} - -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - background-image: none; -} - -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} - -.btn-danger { - color: #ffffff; - background-color: #d9534f; - border-color: #d43f3a; -} - -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #d2322d; - border-color: #ac2925; -} - -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - background-image: none; -} - -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} - +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} .btn-success { - color: #ffffff; + color: #fff; background-color: #5cb85c; border-color: #4cae4c; } - -.btn-success:hover, .btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} .btn-success:active, .btn-success.active, -.open .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #47a447; +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; border-color: #398439; } - +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} .btn-success:active, .btn-success.active, -.open .dropdown-toggle.btn-success { +.open > .dropdown-toggle.btn-success { background-image: none; } - -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { background-color: #5cb85c; border-color: #4cae4c; } - +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} .btn-info { - color: #ffffff; + color: #fff; background-color: #5bc0de; border-color: #46b8da; } - -.btn-info:hover, .btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} .btn-info:active, .btn-info.active, -.open .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #39b3d7; +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; border-color: #269abc; } - +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} .btn-info:active, .btn-info.active, -.open .dropdown-toggle.btn-info { +.open > .dropdown-toggle.btn-info { background-image: none; } - -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { background-color: #5bc0de; border-color: #46b8da; } - +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} .btn-link { font-weight: normal; - color: #428bca; - cursor: pointer; + color: #337ab7; border-radius: 0; } - .btn-link, .btn-link:active, +.btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } - .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } - .btn-link:hover, .btn-link:focus { - color: #2a6496; + color: #23527c; text-decoration: underline; background-color: transparent; } - .btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { - color: #999999; + color: #777; text-decoration: none; } - -.btn-lg { +.btn-lg, +.btn-group-lg > .btn { padding: 10px 16px; font-size: 18px; - line-height: 1.33; + line-height: 1.3333333; border-radius: 6px; } - .btn-sm, -.btn-xs { +.btn-group-sm > .btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } - -.btn-xs { +.btn-xs, +.btn-group-xs > .btn { padding: 1px 5px; -} - + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} .btn-block { display: block; width: 100%; - padding-right: 0; - padding-left: 0; -} - +} .btn-block + .btn-block { margin-top: 5px; } - input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } - .fade { opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} .fade.in { opacity: 1; } - .collapse { display: none; } - .collapse.in { display: block; } - +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} .collapsing { position: relative; height: 0; overflow: hidden; - -webkit-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); -} - -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - -webkit-font-smoothing: antialiased; - font-style: normal; - font-weight: normal; - line-height: 1; -} - -.glyphicon-asterisk:before { - content: "\2a"; -} - -.glyphicon-plus:before { - content: "\2b"; -} - -.glyphicon-euro:before { - content: "\20ac"; -} - -.glyphicon-minus:before { - content: "\2212"; -} - -.glyphicon-cloud:before { - content: "\2601"; -} - -.glyphicon-envelope:before { - content: "\2709"; -} - -.glyphicon-pencil:before { - content: "\270f"; -} - -.glyphicon-glass:before { - content: "\e001"; -} - -.glyphicon-music:before { - content: "\e002"; -} - -.glyphicon-search:before { - content: "\e003"; -} - -.glyphicon-heart:before { - content: "\e005"; -} - -.glyphicon-star:before { - content: "\e006"; -} - -.glyphicon-star-empty:before { - content: "\e007"; -} - -.glyphicon-user:before { - content: "\e008"; -} - -.glyphicon-film:before { - content: "\e009"; -} - -.glyphicon-th-large:before { - content: "\e010"; -} - -.glyphicon-th:before { - content: "\e011"; -} - -.glyphicon-th-list:before { - content: "\e012"; -} - -.glyphicon-ok:before { - content: "\e013"; -} - -.glyphicon-remove:before { - content: "\e014"; -} - -.glyphicon-zoom-in:before { - content: "\e015"; -} - -.glyphicon-zoom-out:before { - content: "\e016"; -} - -.glyphicon-off:before { - content: "\e017"; -} - -.glyphicon-signal:before { - content: "\e018"; -} - -.glyphicon-cog:before { - content: "\e019"; -} - -.glyphicon-trash:before { - content: "\e020"; -} - -.glyphicon-home:before { - content: "\e021"; -} - -.glyphicon-file:before { - content: "\e022"; -} - -.glyphicon-time:before { - content: "\e023"; -} - -.glyphicon-road:before { - content: "\e024"; -} - -.glyphicon-download-alt:before { - content: "\e025"; -} - -.glyphicon-download:before { - content: "\e026"; -} - -.glyphicon-upload:before { - content: "\e027"; -} - -.glyphicon-inbox:before { - content: "\e028"; -} - -.glyphicon-play-circle:before { - content: "\e029"; -} - -.glyphicon-repeat:before { - content: "\e030"; -} - -.glyphicon-arrows-cw:before { - content: "\e031"; -} - -.glyphicon-list-alt:before { - content: "\e032"; -} - -.glyphicon-flag:before { - content: "\e034"; -} - -.glyphicon-headphones:before { - content: "\e035"; -} - -.glyphicon-volume-off:before { - content: "\e036"; -} - -.glyphicon-volume-down:before { - content: "\e037"; -} - -.glyphicon-volume-up:before { - content: "\e038"; -} - -.glyphicon-qrcode:before { - content: "\e039"; -} - -.glyphicon-barcode:before { - content: "\e040"; -} - -.glyphicon-tag:before { - content: "\e041"; -} - -.glyphicon-tags:before { - content: "\e042"; -} - -.glyphicon-book:before { - content: "\e043"; -} - -.glyphicon-print:before { - content: "\e045"; -} - -.glyphicon-font:before { - content: "\e047"; -} - -.glyphicon-bold:before { - content: "\e048"; -} - -.glyphicon-italic:before { - content: "\e049"; -} - -.glyphicon-text-height:before { - content: "\e050"; -} - -.glyphicon-text-width:before { - content: "\e051"; -} - -.glyphicon-align-left:before { - content: "\e052"; -} - -.glyphicon-align-center:before { - content: "\e053"; -} - -.glyphicon-align-right:before { - content: "\e054"; -} - -.glyphicon-align-justify:before { - content: "\e055"; -} - -.glyphicon-list:before { - content: "\e056"; -} - -.glyphicon-indent-left:before { - content: "\e057"; -} - -.glyphicon-indent-right:before { - content: "\e058"; -} - -.glyphicon-facetime-video:before { - content: "\e059"; -} - -.glyphicon-picture:before { - content: "\e060"; -} - -.glyphicon-map-marker:before { - content: "\e062"; -} - -.glyphicon-adjust:before { - content: "\e063"; -} - -.glyphicon-tint:before { - content: "\e064"; -} - -.glyphicon-edit:before { - content: "\e065"; -} - -.glyphicon-share:before { - content: "\e066"; -} - -.glyphicon-check:before { - content: "\e067"; -} - -.glyphicon-move:before { - content: "\e068"; -} - -.glyphicon-step-backward:before { - content: "\e069"; -} - -.glyphicon-fast-backward:before { - content: "\e070"; -} - -.glyphicon-backward:before { - content: "\e071"; -} - -.glyphicon-play:before { - content: "\e072"; -} - -.glyphicon-pause:before { - content: "\e073"; -} - -.glyphicon-stop:before { - content: "\e074"; -} - -.glyphicon-forward:before { - content: "\e075"; -} - -.glyphicon-fast-forward:before { - content: "\e076"; -} - -.glyphicon-step-forward:before { - content: "\e077"; -} - -.glyphicon-eject:before { - content: "\e078"; -} - -.glyphicon-chevron-left:before { - content: "\e079"; -} - -.glyphicon-chevron-right:before { - content: "\e080"; -} - -.glyphicon-plus-sign:before { - content: "\e081"; -} - -.glyphicon-minus-sign:before { - content: "\e082"; -} - -.glyphicon-remove-sign:before { - content: "\e083"; -} - -.glyphicon-ok-sign:before { - content: "\e084"; -} - -.glyphicon-question-sign:before { - content: "\e085"; -} - -.glyphicon-info-sign:before { - content: "\e086"; -} - -.glyphicon-screenshot:before { - content: "\e087"; -} - -.glyphicon-remove-circle:before { - content: "\e088"; -} - -.glyphicon-ok-circle:before { - content: "\e089"; -} - -.glyphicon-ban-circle:before { - content: "\e090"; -} - -.glyphicon-arrow-left:before { - content: "\e091"; -} - -.glyphicon-arrow-right:before { - content: "\e092"; -} - -.glyphicon-arrow-up:before { - content: "\e093"; -} - -.glyphicon-arrow-down:before { - content: "\e094"; -} - -.glyphicon-share-alt:before { - content: "\e095"; -} - -.glyphicon-resize-full:before { - content: "\e096"; -} - -.glyphicon-resize-small:before { - content: "\e097"; -} - -.glyphicon-exclamation-sign:before { - content: "\e101"; -} - -.glyphicon-gift:before { - content: "\e102"; -} - -.glyphicon-leaf:before { - content: "\e103"; -} - -.glyphicon-eye-open:before { - content: "\e105"; -} - -.glyphicon-eye-close:before { - content: "\e106"; -} - -.glyphicon-warning-sign:before { - content: "\e107"; -} - -.glyphicon-plane:before { - content: "\e108"; -} - -.glyphicon-random:before { - content: "\e110"; -} - -.glyphicon-comment:before { - content: "\e111"; -} - -.glyphicon-magnet:before { - content: "\e112"; -} - -.glyphicon-chevron-up:before { - content: "\e113"; -} - -.glyphicon-chevron-down:before { - content: "\e114"; -} - -.glyphicon-retweet:before { - content: "\e115"; -} - -.glyphicon-shopping-cart:before { - content: "\e116"; -} - -.glyphicon-folder-close:before { - content: "\e117"; -} - -.glyphicon-folder-open:before { - content: "\e118"; -} - -.glyphicon-resize-vertical:before { - content: "\e119"; -} - -.glyphicon-resize-horizontal:before { - content: "\e120"; -} - -.glyphicon-hdd:before { - content: "\e121"; -} - -.glyphicon-bullhorn:before { - content: "\e122"; -} - -.glyphicon-certificate:before { - content: "\e124"; -} - -.glyphicon-thumbs-up:before { - content: "\e125"; -} - -.glyphicon-thumbs-down:before { - content: "\e126"; -} - -.glyphicon-hand-right:before { - content: "\e127"; -} - -.glyphicon-hand-left:before { - content: "\e128"; -} - -.glyphicon-hand-up:before { - content: "\e129"; -} - -.glyphicon-hand-down:before { - content: "\e130"; -} - -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} - -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} - -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} - -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} - -.glyphicon-globe:before { - content: "\e135"; -} - -.glyphicon-tasks:before { - content: "\e137"; -} - -.glyphicon-filter:before { - content: "\e138"; -} - -.glyphicon-fullscreen:before { - content: "\e140"; -} - -.glyphicon-dashboard:before { - content: "\e141"; -} - -.glyphicon-heart-empty:before { - content: "\e143"; -} - -.glyphicon-link:before { - content: "\e144"; -} - -.glyphicon-phone:before { - content: "\e145"; -} - -.glyphicon-usd:before { - content: "\e148"; -} - -.glyphicon-gbp:before { - content: "\e149"; -} - -.glyphicon-sort:before { - content: "\e150"; -} - -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} - -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} - -.glyphicon-sort-by-order:before { - content: "\e153"; -} - -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} - -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} - -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} - -.glyphicon-unchecked:before { - content: "\e157"; -} - -.glyphicon-expand:before { - content: "\e158"; -} - -.glyphicon-collapse-down:before { - content: "\e159"; -} - -.glyphicon-collapse-up:before { - content: "\e160"; -} - -.glyphicon-log-in:before { - content: "\e161"; -} - -.glyphicon-flash:before { - content: "\e162"; -} - -.glyphicon-log-out:before { - content: "\e163"; -} - -.glyphicon-new-window:before { - content: "\e164"; -} - -.glyphicon-record:before { - content: "\e165"; -} - -.glyphicon-save:before { - content: "\e166"; -} - -.glyphicon-open:before { - content: "\e167"; -} - -.glyphicon-saved:before { - content: "\e168"; -} - -.glyphicon-import:before { - content: "\e169"; -} - -.glyphicon-export:before { - content: "\e170"; -} - -.glyphicon-send:before { - content: "\e171"; -} - -.glyphicon-floppy-disk:before { - content: "\e172"; -} - -.glyphicon-floppy-saved:before { - content: "\e173"; -} - -.glyphicon-floppy-remove:before { - content: "\e174"; -} - -.glyphicon-floppy-save:before { - content: "\e175"; -} - -.glyphicon-floppy-open:before { - content: "\e176"; -} - -.glyphicon-credit-card:before { - content: "\e177"; -} - -.glyphicon-transfer:before { - content: "\e178"; -} - -.glyphicon-cutlery:before { - content: "\e179"; -} - -.glyphicon-header:before { - content: "\e180"; -} - -.glyphicon-compressed:before { - content: "\e181"; -} - -.glyphicon-earphone:before { - content: "\e182"; -} - -.glyphicon-phone-alt:before { - content: "\e183"; -} - -.glyphicon-tower:before { - content: "\e184"; -} - -.glyphicon-stats:before { - content: "\e185"; -} - -.glyphicon-sd-video:before { - content: "\e186"; -} - -.glyphicon-hd-video:before { - content: "\e187"; -} - -.glyphicon-subtitles:before { - content: "\e188"; -} - -.glyphicon-sound-stereo:before { - content: "\e189"; -} - -.glyphicon-sound-dolby:before { - content: "\e190"; -} - -.glyphicon-sound-5-1:before { - content: "\e191"; -} - -.glyphicon-sound-6-1:before { - content: "\e192"; -} - -.glyphicon-sound-7-1:before { - content: "\e193"; -} - -.glyphicon-copyright-mark:before { - content: "\e194"; -} - -.glyphicon-registration-mark:before { - content: "\e195"; -} - -.glyphicon-cloud-download:before { - content: "\e197"; -} - -.glyphicon-cloud-upload:before { - content: "\e198"; -} - -.glyphicon-tree-conifer:before { - content: "\e199"; -} - -.glyphicon-tree-deciduous:before { - content: "\e200"; -} - -.glyphicon-briefcase:before { - content: "\1f4bc"; -} - -.glyphicon-calendar:before { - content: "\1f4c5"; -} - -.glyphicon-pushpin:before { - content: "\1f4cc"; -} - -.glyphicon-paperclip:before { - content: "\1f4ce"; -} - -.glyphicon-camera:before { - content: "\1f4f7"; -} - -.glyphicon-lock:before { - content: "\1f512"; -} - -.glyphicon-bell:before { - content: "\1f514"; -} - -.glyphicon-bookmark:before { - content: "\1f516"; -} - -.glyphicon-fire:before { - content: "\1f525"; -} - -.glyphicon-wrench:before { - content: "\1f527"; -} - + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} .caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; - border-top: 4px solid #000000; + border-top: 4px dashed; + border-top: 4px solid \9; border-right: 4px solid transparent; - border-bottom: 0 dotted; border-left: 4px solid transparent; - content: ""; -} - +} +.dropup, .dropdown { position: relative; } - .dropdown-toggle:focus { outline: 0; } - .dropdown-menu { position: absolute; top: 100%; @@ -3232,85 +3528,85 @@ padding: 5px 0; margin: 2px 0 0; font-size: 14px; + text-align: left; list-style: none; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} - + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} .dropdown-menu.pull-right { right: 0; left: auto; } - .dropdown-menu .divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; } - .dropdown-menu > li > a { display: block; padding: 3px 20px; clear: both; font-weight: normal; - line-height: 1.428571429; - color: #333333; + line-height: 1.42857143; + color: #333; white-space: nowrap; } - .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - color: #ffffff; + color: #262626; text-decoration: none; - background-color: #428bca; -} - + background-color: #f5f5f5; +} .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { - color: #ffffff; + color: #fff; text-decoration: none; - background-color: #428bca; + background-color: #337ab7; outline: 0; } - .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - color: #999999; -} - + color: #777; +} .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { text-decoration: none; cursor: not-allowed; background-color: transparent; background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} .open > .dropdown-menu { display: block; } - .open > a { outline: 0; } - +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} .dropdown-header { display: block; padding: 3px 20px; font-size: 12px; - line-height: 1.428571429; - color: #999999; -} - + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} .dropdown-backdrop { position: fixed; top: 0; @@ -3319,70 +3615,44 @@ left: 0; z-index: 990; } - .pull-right > .dropdown-menu { right: 0; left: auto; } - .dropup .caret, .navbar-fixed-bottom .dropdown .caret { - border-top: 0 dotted; - border-bottom: 4px solid #000000; content: ""; -} - + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; - margin-bottom: 1px; -} - + margin-bottom: 2px; +} @media (min-width: 768px) { .navbar-right .dropdown-menu { right: 0; left: auto; } -} - -.btn-default .caret { - border-top-color: #333333; -} - -.btn-primary .caret, -.btn-success .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret { - border-top-color: #fff; -} - -.dropup .btn-default .caret { - border-bottom-color: #333333; -} - -.dropup .btn-primary .caret, -.dropup .btn-success .caret, -.dropup .btn-warning .caret, -.dropup .btn-danger .caret, -.dropup .btn-info .caret { - border-bottom-color: #fff; -} - + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} .btn-group, .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle; } - .btn-group > .btn, .btn-group-vertical > .btn { position: relative; float: left; } - .btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, @@ -3393,175 +3663,96 @@ .btn-group-vertical > .btn.active { z-index: 2; } - -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus { - outline: none; -} - .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { margin-left: -1px; } - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; -} - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; -} - -.btn-toolbar .btn-group { +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { float: left; } - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group, -.btn-toolbar > .btn-group + .btn-group { +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { margin-left: 5px; } - .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } - .btn-group > .btn:first-child { margin-left: 0; } - .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { border-top-right-radius: 0; border-bottom-right-radius: 0; } - .btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - +} .btn-group > .btn-group { float: left; } - .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } - -.btn-group > .btn-group:first-child > .btn:last-child, -.btn-group > .btn-group:first-child > .dropdown-toggle { +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-top-right-radius: 0; border-bottom-right-radius: 0; } - -.btn-group > .btn-group:last-child > .btn:first-child { +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - +} .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } - -.btn-group-xs > .btn { - padding: 5px 10px; - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - .btn-group > .btn + .dropdown-toggle { padding-right: 8px; padding-left: 8px; } - .btn-group > .btn-lg + .dropdown-toggle { padding-right: 12px; padding-left: 12px; } - .btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} .btn .caret { margin-left: 0; } - .btn-lg .caret { border-width: 5px 5px 0; border-bottom-width: 0; } - .dropup .btn-lg .caret { border-width: 0 5px 5px; } - .btn-group-vertical > .btn, -.btn-group-vertical > .btn-group { +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { display: block; float: none; width: 100%; max-width: 100%; } - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - .btn-group-vertical > .btn-group > .btn { float: none; } - .btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, @@ -3569,96 +3760,102 @@ margin-top: -1px; margin-left: 0; } - .btn-group-vertical > .btn:not(:first-child):not(:last-child) { border-radius: 0; } - .btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } - .btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; border-top-right-radius: 0; + border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; - border-top-left-radius: 0; -} - +} .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } - -.btn-group-vertical > .btn-group:first-child > .btn:last-child, -.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } - -.btn-group-vertical > .btn-group:last-child > .btn:first-child { +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; border-top-right-radius: 0; - border-top-left-radius: 0; -} - +} .btn-group-justified { display: table; width: 100%; + table-layout: fixed; border-collapse: separate; - table-layout: fixed; -} - -.btn-group-justified .btn { +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { display: table-cell; float: none; width: 1%; } - -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - display: none; -} - +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} .input-group { position: relative; display: table; border-collapse: separate; } - -.input-group.col { +.input-group[class*="col-"] { float: none; padding-right: 0; padding-left: 0; } - .input-group .form-control { + position: relative; + z-index: 2; + float: left; width: 100%; margin-bottom: 0; } - +.input-group .form-control:focus { + z-index: 3; +} .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { - height: 45px; + height: 46px; padding: 10px 16px; font-size: 18px; - line-height: 1.33; + line-height: 1.3333333; border-radius: 6px; } - select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { - height: 45px; - line-height: 45px; -} - + height: 46px; + line-height: 46px; +} textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn { +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { height: auto; } - .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { @@ -3668,448 +3865,338 @@ line-height: 1.5; border-radius: 3px; } - select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { height: 30px; line-height: 30px; } - textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn { +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { height: auto; } - .input-group-addon, .input-group-btn, .input-group .form-control { display: table-cell; } - .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0; } - .input-group-addon, .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle; } - .input-group-addon { padding: 6px 12px; font-size: 14px; font-weight: normal; line-height: 1; + color: #555; text-align: center; - background-color: #eeeeee; - border: 1px solid #cccccc; + background-color: #eee; + border: 1px solid #ccc; border-radius: 4px; } - .input-group-addon.input-sm { padding: 5px 10px; font-size: 12px; border-radius: 3px; } - .input-group-addon.input-lg { padding: 10px 16px; font-size: 18px; border-radius: 6px; } - .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { margin-top: 0; } - .input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } - .input-group-addon:first-child { border-right: 0; } - .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child) { +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - +} .input-group-addon:last-child { border-left: 0; } - .input-group-btn { position: relative; + font-size: 0; white-space: nowrap; } - .input-group-btn > .btn { position: relative; } - .input-group-btn > .btn + .btn { - margin-left: -4px; -} - + margin-left: -1px; +} .input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, .input-group-btn > .btn:active { z-index: 2; } - +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} .nav { padding-left: 0; margin-bottom: 0; list-style: none; } - -.nav:before, -.nav:after { - display: table; - content: " "; -} - -.nav:after { - clear: both; -} - -.nav:before, -.nav:after { - display: table; - content: " "; -} - -.nav:after { - clear: both; -} - .nav > li { position: relative; display: block; } - .nav > li > a { position: relative; display: block; padding: 10px 15px; } - .nav > li > a:hover, .nav > li > a:focus { text-decoration: none; - background-color: #eeeeee; -} - + background-color: #eee; +} .nav > li.disabled > a { - color: #999999; -} - + color: #777; +} .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { - color: #999999; + color: #777; text-decoration: none; cursor: not-allowed; background-color: transparent; } - .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { - background-color: #eeeeee; - border-color: #428bca; -} - + background-color: #eee; + border-color: #337ab7; +} .nav .nav-divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; } - .nav > li > a > img { max-width: none; } - .nav-tabs { - border-bottom: 1px solid #dddddd; -} - + border-bottom: 1px solid #ddd; +} .nav-tabs > li { float: left; margin-bottom: -1px; } - .nav-tabs > li > a { margin-right: 2px; - line-height: 1.428571429; + line-height: 1.42857143; border: 1px solid transparent; border-radius: 4px 4px 0 0; } - .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} - + border-color: #eee #eee #ddd; +} .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - color: #555555; + color: #555; cursor: default; - background-color: #ffffff; - border: 1px solid #dddddd; + background-color: #fff; + border: 1px solid #ddd; border-bottom-color: transparent; } - .nav-tabs.nav-justified { width: 100%; border-bottom: 0; } - .nav-tabs.nav-justified > li { float: none; } - .nav-tabs.nav-justified > li > a { + margin-bottom: 5px; text-align: center; } - +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} @media (min-width: 768px) { .nav-tabs.nav-justified > li { display: table-cell; width: 1%; } -} - + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} .nav-tabs.nav-justified > li > a { margin-right: 0; - border-bottom: 1px solid #dddddd; -} - -.nav-tabs.nav-justified > .active > a { - border-bottom-color: #ffffff; -} - + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} .nav-pills > li { float: left; } - .nav-pills > li > a { - border-radius: 5px; -} - + border-radius: 4px; +} .nav-pills > li + li { margin-left: 2px; } - .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #428bca; -} - + color: #fff; + background-color: #337ab7; +} .nav-stacked > li { float: none; } - .nav-stacked > li + li { margin-top: 2px; margin-left: 0; } - .nav-justified { width: 100%; } - .nav-justified > li { float: none; } - .nav-justified > li > a { + margin-bottom: 5px; text-align: center; } - +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} @media (min-width: 768px) { .nav-justified > li { display: table-cell; width: 1%; } -} - + .nav-justified > li > a { + margin-bottom: 0; + } +} .nav-tabs-justified { border-bottom: 0; } - .nav-tabs-justified > li > a { margin-right: 0; - border-bottom: 1px solid #dddddd; -} - -.nav-tabs-justified > .active > a { - border-bottom-color: #ffffff; -} - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; -} - -.tabbable:after { - clear: both; -} - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; -} - -.tabbable:after { - clear: both; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { display: none; } - -.tab-content > .active, -.pill-content > .active { +.tab-content > .active { display: block; } - -.nav .caret { - border-top-color: #428bca; - border-bottom-color: #428bca; -} - -.nav a:hover .caret { - border-top-color: #2a6496; - border-bottom-color: #2a6496; -} - .nav-tabs .dropdown-menu { margin-top: -1px; + border-top-left-radius: 0; border-top-right-radius: 0; - border-top-left-radius: 0; -} - +} .navbar { position: relative; - z-index: 1000; min-height: 50px; margin-bottom: 20px; border: 1px solid transparent; } - -.navbar:before, -.navbar:after { - display: table; - content: " "; -} - -.navbar:after { - clear: both; -} - -.navbar:before, -.navbar:after { - display: table; - content: " "; -} - -.navbar:after { - clear: both; -} - @media (min-width: 768px) { .navbar { border-radius: 4px; } } - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; -} - -.navbar-header:after { - clear: both; -} - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; -} - -.navbar-header:after { - clear: both; -} - @media (min-width: 768px) { .navbar-header { float: left; } } - .navbar-collapse { - max-height: 340px; padding-right: 15px; padding-left: 15px; overflow-x: visible; + -webkit-overflow-scrolling: touch; border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; -} - -.navbar-collapse:after { - clear: both; -} - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; -} - -.navbar-collapse:after { - clear: both; -} - + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} .navbar-collapse.in { overflow-y: auto; } - @media (min-width: 768px) { .navbar-collapse { width: auto; border-top: 0; - box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } .navbar-collapse.collapse { display: block !important; @@ -4120,84 +4207,90 @@ .navbar-collapse.in { overflow-y: visible; } - .navbar-collapse .navbar-nav.navbar-left:first-child { - margin-left: -15px; - } - .navbar-collapse .navbar-nav.navbar-right:last-child { - margin-right: -15px; - } - .navbar-collapse .navbar-text:last-child { - margin-right: 0; - } -} - + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} .container > .navbar-header, -.container > .navbar-collapse { +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { margin-right: -15px; margin-left: -15px; } - @media (min-width: 768px) { .container > .navbar-header, - .container > .navbar-collapse { + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { margin-right: 0; margin-left: 0; } } - .navbar-static-top { + z-index: 1000; border-width: 0 0 1px; } - @media (min-width: 768px) { .navbar-static-top { border-radius: 0; } } - .navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; - border-width: 0 0 1px; -} - + z-index: 1030; +} @media (min-width: 768px) { .navbar-fixed-top, .navbar-fixed-bottom { border-radius: 0; } } - .navbar-fixed-top { top: 0; - z-index: 1030; -} - + border-width: 0 0 1px; +} .navbar-fixed-bottom { bottom: 0; margin-bottom: 0; -} - + border-width: 1px 0 0; +} .navbar-brand { float: left; + height: 50px; padding: 15px 15px; font-size: 18px; line-height: 20px; } - .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } - +.navbar-brand > img { + display: block; +} @media (min-width: 768px) { - .navbar > .container .navbar-brand { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { margin-left: -15px; } } - .navbar-toggle { position: relative; float: right; @@ -4206,37 +4299,35 @@ margin-right: 15px; margin-bottom: 8px; background-color: transparent; + background-image: none; border: 1px solid transparent; border-radius: 4px; } - +.navbar-toggle:focus { + outline: 0; +} .navbar-toggle .icon-bar { display: block; width: 22px; height: 2px; border-radius: 1px; } - .navbar-toggle .icon-bar + .icon-bar { margin-top: 4px; } - @media (min-width: 768px) { .navbar-toggle { display: none; } } - .navbar-nav { margin: 7.5px -15px; } - .navbar-nav > li > a { padding-top: 10px; padding-bottom: 10px; line-height: 20px; } - @media (max-width: 767px) { .navbar-nav .open .dropdown-menu { position: static; @@ -4245,7 +4336,8 @@ margin-top: 0; background-color: transparent; border: 0; - box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { @@ -4259,7 +4351,6 @@ background-image: none; } } - @media (min-width: 768px) { .navbar-nav { float: left; @@ -4273,16 +4364,6 @@ padding-bottom: 15px; } } - -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } -} - .navbar-form { padding: 10px 15px; margin-top: 8px; @@ -4291,10 +4372,9 @@ margin-left: -15px; border-top: 1px solid transparent; border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); -} - + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} @media (min-width: 768px) { .navbar-form .form-group { display: inline-block; @@ -4303,27 +4383,56 @@ } .navbar-form .form-control { display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; } .navbar-form .radio, .navbar-form .checkbox { display: inline-block; - padding-left: 0; margin-top: 0; margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; } .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { - float: none; + position: relative; margin-left: 0; } -} - + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} @media (max-width: 767px) { .navbar-form .form-group { margin-bottom: 5px; } -} - + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} @media (min-width: 768px) { .navbar-form { width: auto; @@ -4336,278 +4445,251 @@ box-shadow: none; } } - .navbar-nav > li > .dropdown-menu { margin-top: 0; + border-top-left-radius: 0; border-top-right-radius: 0; - border-top-left-radius: 0; -} - +} .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } - -.navbar-nav.pull-right > li > .dropdown-menu, -.navbar-nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - .navbar-btn { margin-top: 8px; margin-bottom: 8px; } - +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} .navbar-text { - float: left; margin-top: 15px; margin-bottom: 15px; } - @media (min-width: 768px) { .navbar-text { + float: left; margin-right: 15px; margin-left: 15px; } } - +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} .navbar-default { background-color: #f8f8f8; border-color: #e7e7e7; } - .navbar-default .navbar-brand { - color: #777777; -} - + color: #777; +} .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { color: #5e5e5e; background-color: transparent; } - .navbar-default .navbar-text { - color: #777777; -} - + color: #777; +} .navbar-default .navbar-nav > li > a { - color: #777777; -} - + color: #777; +} .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { - color: #333333; + color: #333; background-color: transparent; } - .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { - color: #555555; + color: #555; background-color: #e7e7e7; } - .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; + color: #ccc; background-color: transparent; } - .navbar-default .navbar-toggle { - border-color: #dddddd; -} - + border-color: #ddd; +} .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} - + background-color: #ddd; +} .navbar-default .navbar-toggle .icon-bar { - background-color: #cccccc; -} - + background-color: #888; +} .navbar-default .navbar-collapse, .navbar-default .navbar-form { - border-color: #e6e6e6; -} - -.navbar-default .navbar-nav > .dropdown > a:hover .caret, -.navbar-default .navbar-nav > .dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} - + border-color: #e7e7e7; +} .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { - color: #555555; + color: #555; background-color: #e7e7e7; } - -.navbar-default .navbar-nav > .open > a .caret, -.navbar-default .navbar-nav > .open > a:hover .caret, -.navbar-default .navbar-nav > .open > a:focus .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar-default .navbar-nav > .dropdown > a .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - @media (max-width: 767px) { .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; + color: #777; } .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; + color: #333; background-color: transparent; } .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; + color: #555; background-color: #e7e7e7; } .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; + color: #ccc; background-color: transparent; } } - .navbar-default .navbar-link { - color: #777777; -} - + color: #777; +} .navbar-default .navbar-link:hover { - color: #333333; -} - + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} .navbar-inverse { - background-color: #222222; + background-color: #222; border-color: #080808; } - .navbar-inverse .navbar-brand { - color: #999999; -} - + color: #9d9d9d; +} .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { - color: #ffffff; + color: #fff; background-color: transparent; } - .navbar-inverse .navbar-text { - color: #999999; -} - + color: #9d9d9d; +} .navbar-inverse .navbar-nav > li > a { - color: #999999; -} - + color: #9d9d9d; +} .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; + color: #fff; background-color: transparent; } - .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; + color: #fff; background-color: #080808; } - .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; + color: #444; background-color: transparent; } - .navbar-inverse .navbar-toggle { - border-color: #333333; -} - + border-color: #333; +} .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} - + background-color: #333; +} .navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} - + background-color: #fff; +} .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-color: #101010; } - .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { - color: #ffffff; + color: #fff; background-color: #080808; } - -.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-nav > .dropdown > a .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .navbar-nav > .open > a .caret, -.navbar-inverse .navbar-nav > .open > a:hover .caret, -.navbar-inverse .navbar-nav > .open > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - @media (max-width: 767px) { .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { border-color: #080808; } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #999999; + color: #9d9d9d; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; + color: #fff; background-color: transparent; } .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; + color: #fff; background-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; + color: #444; background-color: transparent; } } - .navbar-inverse .navbar-link { - color: #999999; -} - + color: #9d9d9d; +} .navbar-inverse .navbar-link:hover { - color: #ffffff; -} - + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} .breadcrumb { padding: 8px 15px; margin-bottom: 20px; @@ -4615,266 +4697,218 @@ background-color: #f5f5f5; border-radius: 4px; } - .breadcrumb > li { display: inline-block; } - .breadcrumb > li + li:before { padding: 0 5px; - color: #cccccc; + color: #ccc; content: "/\00a0"; } - .breadcrumb > .active { - color: #999999; -} - + color: #777; +} .pagination { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 4px; } - .pagination > li { display: inline; } - .pagination > li > a, .pagination > li > span { position: relative; float: left; padding: 6px 12px; margin-left: -1px; - line-height: 1.428571429; + line-height: 1.42857143; + color: #337ab7; text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; -} - + background-color: #fff; + border: 1px solid #ddd; +} .pagination > li:first-child > a, .pagination > li:first-child > span { margin-left: 0; + border-top-left-radius: 4px; border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} - +} .pagination > li:last-child > a, .pagination > li:last-child > span { border-top-right-radius: 4px; border-bottom-right-radius: 4px; } - .pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { - background-color: #eeeeee; -} - + z-index: 2; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} .pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { - z-index: 2; - color: #ffffff; + z-index: 3; + color: #fff; cursor: default; - background-color: #428bca; - border-color: #428bca; -} - + background-color: #337ab7; + border-color: #337ab7; +} .pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { - color: #999999; + color: #777; cursor: not-allowed; - background-color: #ffffff; - border-color: #dddddd; -} - + background-color: #fff; + border-color: #ddd; +} .pagination-lg > li > a, .pagination-lg > li > span { padding: 10px 16px; font-size: 18px; -} - + line-height: 1.3333333; +} .pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { + border-top-left-radius: 6px; border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} - +} .pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { border-top-right-radius: 6px; border-bottom-right-radius: 6px; } - .pagination-sm > li > a, .pagination-sm > li > span { padding: 5px 10px; font-size: 12px; -} - + line-height: 1.5; +} .pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { + border-top-left-radius: 3px; border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} - +} .pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { border-top-right-radius: 3px; border-bottom-right-radius: 3px; } - .pager { padding-left: 0; margin: 20px 0; text-align: center; list-style: none; } - -.pager:before, -.pager:after { - display: table; - content: " "; -} - -.pager:after { - clear: both; -} - -.pager:before, -.pager:after { - display: table; - content: " "; -} - -.pager:after { - clear: both; -} - .pager li { display: inline; } - .pager li > a, .pager li > span { display: inline-block; padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; + background-color: #fff; + border: 1px solid #ddd; border-radius: 15px; } - .pager li > a:hover, .pager li > a:focus { text-decoration: none; - background-color: #eeeeee; -} - + background-color: #eee; +} .pager .next > a, .pager .next > span { float: right; } - .pager .previous > a, .pager .previous > span { float: left; } - .pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { - color: #999999; + color: #777; cursor: not-allowed; - background-color: #ffffff; -} - + background-color: #fff; +} .label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: bold; line-height: 1; - color: #ffffff; + color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em; } - -.label[href]:hover, -.label[href]:focus { - color: #ffffff; +a.label:hover, +a.label:focus { + color: #fff; text-decoration: none; cursor: pointer; } - .label:empty { display: none; } - +.btn .label { + position: relative; + top: -1px; +} .label-default { - background-color: #999999; -} - + background-color: #777; +} .label-default[href]:hover, .label-default[href]:focus { - background-color: #808080; -} - + background-color: #5e5e5e; +} .label-primary { - background-color: #428bca; -} - + background-color: #337ab7; +} .label-primary[href]:hover, .label-primary[href]:focus { - background-color: #3071a9; -} - + background-color: #286090; +} .label-success { background-color: #5cb85c; } - .label-success[href]:hover, .label-success[href]:focus { background-color: #449d44; } - .label-info { background-color: #5bc0de; } - .label-info[href]:hover, .label-info[href]:focus { background-color: #31b0d5; } - .label-warning { background-color: #f0ad4e; } - .label-warning[href]:hover, .label-warning[href]:focus { background-color: #ec971f; } - .label-danger { background-color: #d9534f; } - .label-danger[href]:hover, .label-danger[href]:focus { background-color: #c9302c; } - .badge { display: inline-block; min-width: 10px; @@ -4882,204 +4916,189 @@ font-size: 12px; font-weight: bold; line-height: 1; - color: #ffffff; + color: #fff; text-align: center; white-space: nowrap; - vertical-align: baseline; - background-color: #999999; + vertical-align: middle; + background-color: #777; border-radius: 10px; } - .badge:empty { display: none; } - -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - .btn .badge { position: relative; top: -1px; } - -a.list-group-item.active > .badge, +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, .nav-pills > .active > a > .badge { - color: #428bca; - background-color: #ffffff; -} - + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} .nav-pills > li > a > .badge { margin-left: 3px; } - .jumbotron { - padding: 30px; + padding-top: 30px; + padding-bottom: 30px; margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; font-size: 21px; font-weight: 200; - line-height: 2.1428571435; - color: inherit; - background-color: #eeeeee; -} - -.jumbotron h1 { - line-height: 1; - color: inherit; -} - -.jumbotron p { - line-height: 1.4; -} - -.container .jumbotron { +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; border-radius: 6px; } - +.jumbotron .container { + max-width: 100%; +} @media screen and (min-width: 768px) { .jumbotron { padding-top: 48px; padding-bottom: 48px; } - .container .jumbotron { + .container .jumbotron, + .container-fluid .jumbotron { padding-right: 60px; padding-left: 60px; } - .jumbotron h1 { + .jumbotron h1, + .jumbotron .h1 { font-size: 63px; } } - .thumbnail { - display: inline-block; display: block; - height: auto; - max-width: 100%; padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -.thumbnail > img { - display: block; - height: auto; - max-width: 100%; -} - -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #428bca; -} - -.thumbnail > img { + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { margin-right: auto; margin-left: auto; } - +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} .thumbnail .caption { padding: 9px; - color: #333333; -} - + color: #333; +} .alert { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; } - .alert h4 { margin-top: 0; color: inherit; } - .alert .alert-link { font-weight: bold; } - .alert > p, .alert > ul { margin-bottom: 0; } - .alert > p + p { margin-top: 5px; } - -.alert-dismissable { +.alert-dismissable, +.alert-dismissible { padding-right: 35px; } - -.alert-dismissable .close { +.alert-dismissable .close, +.alert-dismissible .close { position: relative; top: -2px; right: -21px; color: inherit; } - .alert-success { - color: #468847; + color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6; } - .alert-success hr { border-top-color: #c9e2b3; } - .alert-success .alert-link { - color: #356635; -} - + color: #2b542c; +} .alert-info { - color: #3a87ad; + color: #31708f; background-color: #d9edf7; border-color: #bce8f1; } - .alert-info hr { border-top-color: #a6e1ec; } - .alert-info .alert-link { - color: #2d6987; -} - + color: #245269; +} .alert-warning { - color: #c09853; + color: #8a6d3b; background-color: #fcf8e3; - border-color: #fbeed5; -} - + border-color: #faebcc; +} .alert-warning hr { - border-top-color: #f8e5be; -} - + border-top-color: #f7e1b5; +} .alert-warning .alert-link { - color: #a47e3c; -} - + color: #66512c; +} .alert-danger { - color: #b94a48; + color: #a94442; background-color: #f2dede; - border-color: #eed3d7; -} - + border-color: #ebccd1; +} .alert-danger hr { - border-top-color: #e6c1c7; -} - + border-top-color: #e4b9c0; +} .alert-danger .alert-link { - color: #953b39; -} - + color: #843534; +} @-webkit-keyframes progress-bar-stripes { from { background-position: 40px 0; @@ -5088,8 +5107,7 @@ background-position: 0 0; } } - -@-moz-keyframes progress-bar-stripes { +@-o-keyframes progress-bar-stripes { from { background-position: 40px 0; } @@ -5097,16 +5115,6 @@ background-position: 0 0; } } - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - @keyframes progress-bar-stripes { from { background-position: 40px 0; @@ -5115,426 +5123,699 @@ background-position: 0 0; } } - .progress { height: 20px; margin-bottom: 20px; overflow: hidden; background-color: #f5f5f5; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} .progress-bar { float: left; width: 0; height: 100%; font-size: 12px; - color: #ffffff; + line-height: 20px; + color: #fff; text-align: center; - background-color: #428bca; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress-striped .progress-bar { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} - -.progress.active .progress-bar { + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; -o-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } - .progress-bar-success { background-color: #5cb85c; } - .progress-striped .progress-bar-success { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} .progress-bar-info { background-color: #5bc0de; } - .progress-striped .progress-bar-info { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} .progress-bar-warning { background-color: #f0ad4e; } - .progress-striped .progress-bar-warning { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} .progress-bar-danger { background-color: #d9534f; } - .progress-striped .progress-bar-danger { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} .media, .media-body { overflow: hidden; zoom: 1; } - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - +.media-body { + width: 10000px; +} .media-object { display: block; } - -.media-heading { - margin: 0 0 5px; -} - +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, .media > .pull-left { - margin-right: 10px; -} - -.media > .pull-right { - margin-left: 10px; -} - + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} .media-list { padding-left: 0; list-style: none; } - .list-group { padding-left: 0; margin-bottom: 20px; } - .list-group-item { position: relative; display: block; padding: 10px 15px; margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} - + background-color: #fff; + border: 1px solid #ddd; +} .list-group-item:first-child { + border-top-left-radius: 4px; border-top-right-radius: 4px; - border-top-left-radius: 4px; -} - +} .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } - -.list-group-item > .badge { - float: right; -} - -.list-group-item > .badge + .badge { - margin-right: 5px; -} - -a.list-group-item { - color: #555555; -} - -a.list-group-item .list-group-item-heading { - color: #333333; -} - +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} a.list-group-item:hover, -a.list-group-item:focus { +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; text-decoration: none; background-color: #f5f5f5; } - +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { z-index: 2; - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} - + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} .list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading { +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { color: inherit; } - .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { - color: #e1edf7; -} - + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} .list-group-item-heading { margin-top: 0; margin-bottom: 5px; } - .list-group-item-text { margin-bottom: 0; line-height: 1.3; } - .panel { margin-bottom: 20px; - background-color: #ffffff; + background-color: #fff; border: 1px solid transparent; border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} - + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} .panel-body { padding: 15px; } - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; -} - -.panel-body:after { - clear: both; -} - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; -} - -.panel-body:after { - clear: both; -} - -.panel > .list-group { - margin-bottom: 0; -} - -.panel > .list-group .list-group-item { - border-width: 1px 0; -} - -.panel > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.panel > .list-group .list-group-item:last-child { - border-bottom: 0; -} - -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} - -.panel > .table { - margin-bottom: 0; -} - -.panel > .panel-body + .table { - border-top: 1px solid #dddddd; -} - .panel-heading { padding: 10px 15px; border-bottom: 1px solid transparent; + border-top-left-radius: 3px; border-top-right-radius: 3px; - border-top-left-radius: 3px; -} - +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} .panel-title { margin-top: 0; margin-bottom: 0; font-size: 16px; -} - -.panel-title > a { color: inherit; } - +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} .panel-footer { padding: 10px 15px; background-color: #f5f5f5; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } - +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} .panel-group .panel { margin-bottom: 0; - overflow: hidden; border-radius: 4px; } - .panel-group .panel + .panel { margin-top: 5px; } - .panel-group .panel-heading { border-bottom: 0; } - -.panel-group .panel-heading + .panel-collapse .panel-body { - border-top: 1px solid #dddddd; -} - +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} .panel-group .panel-footer { border-top: 0; } - .panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} - + border-bottom: 1px solid #ddd; +} .panel-default { - border-color: #dddddd; -} - + border-color: #ddd; +} .panel-default > .panel-heading { - color: #333333; + color: #333; background-color: #f5f5f5; - border-color: #dddddd; -} - -.panel-default > .panel-heading + .panel-collapse .panel-body { - border-top-color: #dddddd; -} - -.panel-default > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #dddddd; -} - + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} .panel-primary { - border-color: #428bca; -} - + border-color: #337ab7; +} .panel-primary > .panel-heading { - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} - -.panel-primary > .panel-heading + .panel-collapse .panel-body { - border-top-color: #428bca; -} - -.panel-primary > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #428bca; -} - + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} .panel-success { border-color: #d6e9c6; } - .panel-success > .panel-heading { - color: #468847; + color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6; } - -.panel-success > .panel-heading + .panel-collapse .panel-body { +.panel-success > .panel-heading + .panel-collapse > .panel-body { border-top-color: #d6e9c6; } - -.panel-success > .panel-footer + .panel-collapse .panel-body { +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #d6e9c6; } - -.panel-warning { - border-color: #fbeed5; -} - -.panel-warning > .panel-heading { - color: #c09853; - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.panel-warning > .panel-heading + .panel-collapse .panel-body { - border-top-color: #fbeed5; -} - -.panel-warning > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #fbeed5; -} - -.panel-danger { - border-color: #eed3d7; -} - -.panel-danger > .panel-heading { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.panel-danger > .panel-heading + .panel-collapse .panel-body { - border-top-color: #eed3d7; -} - -.panel-danger > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #eed3d7; -} - .panel-info { border-color: #bce8f1; } - .panel-info > .panel-heading { - color: #3a87ad; + color: #31708f; background-color: #d9edf7; border-color: #bce8f1; } - -.panel-info > .panel-heading + .panel-collapse .panel-body { +.panel-info > .panel-heading + .panel-collapse > .panel-body { border-top-color: #bce8f1; } - -.panel-info > .panel-footer + .panel-collapse .panel-body { +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #bce8f1; } - +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} .well { min-height: 20px; padding: 19px; @@ -5542,251 +5823,221 @@ background-color: #f5f5f5; border: 1px solid #e3e3e3; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} .well blockquote { border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} - + border-color: rgba(0, 0, 0, .15); +} .well-lg { padding: 24px; border-radius: 6px; } - .well-sm { padding: 9px; border-radius: 3px; } - .close { float: right; font-size: 21px; font-weight: bold; line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; + color: #000; + text-shadow: 0 1px 0 #fff; filter: alpha(opacity=20); -} - + opacity: .2; +} .close:hover, .close:focus { - color: #000000; + color: #000; text-decoration: none; cursor: pointer; - opacity: 0.5; filter: alpha(opacity=50); -} - + opacity: .5; +} button.close { + -webkit-appearance: none; padding: 0; cursor: pointer; background: transparent; border: 0; - -webkit-appearance: none; -} - +} .modal-open { overflow: hidden; } - -body.modal-open, -.modal-open .navbar-fixed-top, -.modal-open .navbar-fixed-bottom { - margin-right: 15px; -} - .modal { position: fixed; top: 0; right: 0; bottom: 0; left: 0; - z-index: 1040; + z-index: 1050; display: none; - overflow: auto; - overflow-y: scroll; -} - + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} .modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; -webkit-transform: translate(0, -25%); -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} - +} .modal.in .modal-dialog { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); transform: translate(0, 0); } - +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} .modal-dialog { - z-index: 1050; + position: relative; width: auto; - padding: 10px; - margin-right: auto; - margin-left: auto; -} - + margin: 10px; +} .modal-content { position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; -} - + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; - z-index: 1030; - background-color: #000000; -} - + z-index: 1040; + background-color: #000; +} .modal-backdrop.fade { - opacity: 0; filter: alpha(opacity=0); -} - + opacity: 0; +} .modal-backdrop.in { - opacity: 0.5; filter: alpha(opacity=50); -} - + opacity: .5; +} .modal-header { - min-height: 16.428571429px; padding: 15px; border-bottom: 1px solid #e5e5e5; } - .modal-header .close { margin-top: -2px; } - .modal-title { margin: 0; - line-height: 1.428571429; -} - + line-height: 1.42857143; +} .modal-body { position: relative; - padding: 20px; -} - + padding: 15px; +} .modal-footer { - padding: 19px 20px 20px; - margin-top: 15px; + padding: 15px; text-align: right; border-top: 1px solid #e5e5e5; } - -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} - -.modal-footer:after { - clear: both; -} - .modal-footer .btn + .btn { margin-bottom: 0; margin-left: 5px; } - .modal-footer .btn-group .btn + .btn { margin-left: -1px; } - .modal-footer .btn-block + .btn-block { margin-left: 0; } - -@media screen and (min-width: 768px) { +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { .modal-dialog { - right: auto; - left: 50%; width: 600px; - padding-top: 30px; - padding-bottom: 30px; + margin: 30px auto; } .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } -} - + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} .tooltip { position: absolute; - z-index: 1030; + z-index: 1070; display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 12px; - line-height: 1.4; - opacity: 0; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; filter: alpha(opacity=0); - visibility: visible; -} + opacity: 0; + line-break: auto; +} .tooltip.in { - opacity: 0.9; filter: alpha(opacity=90); -} - + opacity: .9; +} .tooltip.top { padding: 5px 0; margin-top: -3px; } - .tooltip.right { padding: 0 5px; margin-left: 3px; } - .tooltip.bottom { padding: 5px 0; margin-top: 3px; } - .tooltip.left { padding: 0 5px; margin-left: -3px; } - .tooltip-inner { max-width: 200px; padding: 3px 8px; - color: #ffffff; + color: #fff; text-align: center; - text-decoration: none; - background-color: #000000; + background-color: #000; border-radius: 4px; } - .tooltip-arrow { position: absolute; width: 0; @@ -5794,119 +6045,121 @@ border-color: transparent; border-style: solid; } - .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; - border-top-color: #000000; border-width: 5px 5px 0; -} - + border-top-color: #000; +} .tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { bottom: 0; left: 5px; - border-top-color: #000000; + margin-bottom: -5px; border-width: 5px 5px 0; -} - -.tooltip.top-right .tooltip-arrow { - right: 5px; - bottom: 0; - border-top-color: #000000; - border-width: 5px 5px 0; -} - + border-top-color: #000; +} .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; - border-right-color: #000000; border-width: 5px 5px 5px 0; -} - + border-right-color: #000; +} .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; - border-left-color: #000000; border-width: 5px 0 5px 5px; -} - + border-left-color: #000; +} .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; - border-bottom-color: #000000; border-width: 0 5px 5px; -} - + border-bottom-color: #000; +} .tooltip.bottom-left .tooltip-arrow { top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; left: 5px; - border-bottom-color: #000000; + margin-top: -5px; border-width: 0 5px 5px; -} - -.tooltip.bottom-right .tooltip-arrow { - top: 0; - right: 5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - + border-bottom-color: #000; +} .popover { position: absolute; top: 0; left: 0; - z-index: 1010; + z-index: 1060; display: none; max-width: 276px; padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; white-space: normal; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - background-clip: padding-box; -} + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + line-break: auto; +} .popover.top { margin-top: -10px; } - .popover.right { margin-left: 10px; } - .popover.bottom { margin-top: 10px; } - .popover.left { margin-left: -10px; } - .popover-title { padding: 8px 14px; margin: 0; font-size: 14px; - font-weight: normal; - line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0; } - .popover-content { padding: 9px 14px; } - -.popover .arrow, -.popover .arrow:after { +.popover > .arrow, +.popover > .arrow:after { position: absolute; display: block; width: 0; @@ -5914,147 +6167,153 @@ border-color: transparent; border-style: solid; } - -.popover .arrow { +.popover > .arrow { border-width: 11px; } - -.popover .arrow:after { - border-width: 10px; +.popover > .arrow:after { content: ""; -} - -.popover.top .arrow { + border-width: 10px; +} +.popover.top > .arrow { bottom: -11px; left: 50%; margin-left: -11px; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); border-bottom-width: 0; } - -.popover.top .arrow:after { +.popover.top > .arrow:after { bottom: 1px; margin-left: -10px; - border-top-color: #ffffff; + content: " "; + border-top-color: #fff; border-bottom-width: 0; - content: " "; -} - -.popover.right .arrow { +} +.popover.right > .arrow { top: 50%; left: -11px; margin-top: -11px; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); border-left-width: 0; } - -.popover.right .arrow:after { +.popover.right > .arrow:after { bottom: -10px; left: 1px; - border-right-color: #ffffff; + content: " "; + border-right-color: #fff; border-left-width: 0; - content: " "; -} - -.popover.bottom .arrow { +} +.popover.bottom > .arrow { top: -11px; left: 50%; margin-left: -11px; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); border-top-width: 0; -} - -.popover.bottom .arrow:after { + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { top: 1px; margin-left: -10px; - border-bottom-color: #ffffff; + content: " "; border-top-width: 0; - content: " "; -} - -.popover.left .arrow { + border-bottom-color: #fff; +} +.popover.left > .arrow { top: 50%; right: -11px; margin-top: -11px; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); border-right-width: 0; -} - -.popover.left .arrow:after { + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { right: 1px; bottom: -10px; - border-left-color: #ffffff; + content: " "; border-right-width: 0; - content: " "; -} - + border-left-color: #fff; +} .carousel { position: relative; } - .carousel-inner { position: relative; width: 100%; overflow: hidden; } - .carousel-inner > .item { position: relative; display: none; - -webkit-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} - + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} .carousel-inner > .item > img, .carousel-inner > .item > a > img { - display: block; - height: auto; - max-width: 100%; line-height: 1; } +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} .carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { display: block; } - .carousel-inner > .active { left: 0; } - .carousel-inner > .next, .carousel-inner > .prev { position: absolute; top: 0; width: 100%; } - .carousel-inner > .next { left: 100%; } - .carousel-inner > .prev { left: -100%; } - .carousel-inner > .next.left, .carousel-inner > .prev.right { left: 0; } - .carousel-inner > .active.left { left: -100%; } - .carousel-inner > .active.right { left: 100%; } - .carousel-control { position: absolute; top: 0; @@ -6062,69 +6321,72 @@ left: 0; width: 15%; font-size: 20px; - color: #ffffff; + color: #fff; text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - opacity: 0.5; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); filter: alpha(opacity=50); -} - + opacity: .5; +} .carousel-control.left { - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} - +} .carousel-control.right { right: 0; left: auto; - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} - +} .carousel-control:hover, .carousel-control:focus { - color: #ffffff; + color: #fff; text-decoration: none; - opacity: 0.9; filter: alpha(opacity=90); -} - + outline: 0; + opacity: .9; +} .carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { position: absolute; top: 50%; - left: 50%; z-index: 5; display: inline-block; -} - + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} .carousel-control .icon-prev, .carousel-control .icon-next { width: 20px; height: 20px; - margin-top: -10px; - margin-left: -10px; font-family: serif; -} - + line-height: 1; +} .carousel-control .icon-prev:before { content: '\2039'; } - .carousel-control .icon-next:before { content: '\203a'; } - .carousel-indicators { position: absolute; bottom: 10px; @@ -6136,7 +6398,6 @@ text-align: center; list-style: none; } - .carousel-indicators li { display: inline-block; width: 10px; @@ -6144,17 +6405,17 @@ margin: 1px; text-indent: -999px; cursor: pointer; - border: 1px solid #ffffff; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; border-radius: 10px; } - .carousel-indicators .active { width: 12px; height: 12px; margin: 0; - background-color: #ffffff; -} - + background-color: #fff; +} .carousel-caption { position: absolute; right: 15%; @@ -6163,24 +6424,31 @@ z-index: 10; padding-top: 20px; padding-bottom: 20px; - color: #ffffff; + color: #fff; text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} - + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} .carousel-caption .btn { text-shadow: none; } - @media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { width: 30px; height: 30px; - margin-top: -15px; - margin-left: -15px; + margin-top: -10px; font-size: 30px; } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } .carousel-caption { right: 20%; left: 20%; @@ -6190,37 +6458,79 @@ bottom: 20px; } } - .clearfix:before, -.clearfix:after { +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { display: table; content: " "; } - -.clearfix:after { +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { clear: both; } - +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} .pull-right { float: right !important; } - .pull-left { float: left !important; } - .hide { display: none !important; } - .show { display: block !important; } - .invisible { visibility: hidden; } - .text-hide { font: 0/0 a; color: transparent; @@ -6228,43 +6538,42 @@ background-color: transparent; border: 0; } - -.affix { - position: fixed; -} - -@-ms-viewport { - width: device-width; -} - -@media screen and (max-width: 400px) { - @-ms-viewport { - width: 320px; - } -} - .hidden { display: none !important; - visibility: hidden !important; -} - -.visible-xs { +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { display: none !important; } - -tr.visible-xs { +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { display: none !important; } - -th.visible-xs, -td.visible-xs { - display: none !important; -} - @media (max-width: 767px) { .visible-xs { display: block !important; } + table.visible-xs { + display: table !important; + } tr.visible-xs { display: table-row !important; } @@ -6273,76 +6582,28 @@ display: table-cell !important; } } - -@media (min-width: 768px) and (max-width: 991px) { - .visible-xs.visible-sm { - display: block !important; - } - tr.visible-xs.visible-sm { - display: table-row !important; - } - th.visible-xs.visible-sm, - td.visible-xs.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-xs.visible-md { - display: block !important; - } - tr.visible-xs.visible-md { - display: table-row !important; - } - th.visible-xs.visible-md, - td.visible-xs.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-xs.visible-lg { +@media (max-width: 767px) { + .visible-xs-block { display: block !important; } - tr.visible-xs.visible-lg { - display: table-row !important; - } - th.visible-xs.visible-lg, - td.visible-xs.visible-lg { - display: table-cell !important; - } -} - -.visible-sm { - display: none !important; -} - -tr.visible-sm { - display: none !important; -} - -th.visible-sm, -td.visible-sm { - display: none !important; -} - +} @media (max-width: 767px) { - .visible-sm.visible-xs { - display: block !important; - } - tr.visible-sm.visible-xs { - display: table-row !important; - } - th.visible-sm.visible-xs, - td.visible-sm.visible-xs { - display: table-cell !important; - } -} - + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} @media (min-width: 768px) and (max-width: 991px) { .visible-sm { display: block !important; } + table.visible-sm { + display: table !important; + } tr.visible-sm { display: table-row !important; } @@ -6351,76 +6612,28 @@ display: table-cell !important; } } - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-sm.visible-md { - display: block !important; - } - tr.visible-sm.visible-md { - display: table-row !important; - } - th.visible-sm.visible-md, - td.visible-sm.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-sm.visible-lg { +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { display: block !important; } - tr.visible-sm.visible-lg { - display: table-row !important; - } - th.visible-sm.visible-lg, - td.visible-sm.visible-lg { - display: table-cell !important; - } -} - -.visible-md { - display: none !important; -} - -tr.visible-md { - display: none !important; -} - -th.visible-md, -td.visible-md { - display: none !important; -} - -@media (max-width: 767px) { - .visible-md.visible-xs { - display: block !important; - } - tr.visible-md.visible-xs { - display: table-row !important; - } - th.visible-md.visible-xs, - td.visible-md.visible-xs { - display: table-cell !important; - } -} - +} @media (min-width: 768px) and (max-width: 991px) { - .visible-md.visible-sm { - display: block !important; - } - tr.visible-md.visible-sm { - display: table-row !important; - } - th.visible-md.visible-sm, - td.visible-md.visible-sm { - display: table-cell !important; - } -} - + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} @media (min-width: 992px) and (max-width: 1199px) { .visible-md { display: block !important; } + table.visible-md { + display: table !important; + } tr.visible-md { display: table-row !important; } @@ -6429,76 +6642,28 @@ display: table-cell !important; } } - -@media (min-width: 1200px) { - .visible-md.visible-lg { - display: block !important; - } - tr.visible-md.visible-lg { - display: table-row !important; - } - th.visible-md.visible-lg, - td.visible-md.visible-lg { - display: table-cell !important; - } -} - -.visible-lg { - display: none !important; -} - -tr.visible-lg { - display: none !important; -} - -th.visible-lg, -td.visible-lg { - display: none !important; -} - -@media (max-width: 767px) { - .visible-lg.visible-xs { +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { display: block !important; } - tr.visible-lg.visible-xs { - display: table-row !important; - } - th.visible-lg.visible-xs, - td.visible-lg.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-lg.visible-sm { - display: block !important; - } - tr.visible-lg.visible-sm { - display: table-row !important; - } - th.visible-lg.visible-sm, - td.visible-lg.visible-sm { - display: table-cell !important; - } -} - +} @media (min-width: 992px) and (max-width: 1199px) { - .visible-lg.visible-md { - display: block !important; - } - tr.visible-lg.visible-md { - display: table-row !important; - } - th.visible-lg.visible-md, - td.visible-lg.visible-md { - display: table-cell !important; - } -} - + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} @media (min-width: 1200px) { .visible-lg { display: block !important; } + table.visible-lg { + display: table !important; + } tr.visible-lg { display: table-row !important; } @@ -6507,284 +6672,51 @@ display: table-cell !important; } } - -.hidden-xs { - display: block !important; -} - -tr.hidden-xs { - display: table-row !important; -} - -th.hidden-xs, -td.hidden-xs { - display: table-cell !important; -} - +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} @media (max-width: 767px) { .hidden-xs { display: none !important; } - tr.hidden-xs { - display: none !important; - } - th.hidden-xs, - td.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-xs.hidden-sm { - display: none !important; - } - tr.hidden-xs.hidden-sm { - display: none !important; - } - th.hidden-xs.hidden-sm, - td.hidden-xs.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-xs.hidden-md { - display: none !important; - } - tr.hidden-xs.hidden-md { - display: none !important; - } - th.hidden-xs.hidden-md, - td.hidden-xs.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-xs.hidden-lg { - display: none !important; - } - tr.hidden-xs.hidden-lg { - display: none !important; - } - th.hidden-xs.hidden-lg, - td.hidden-xs.hidden-lg { - display: none !important; - } -} - -.hidden-sm { - display: block !important; -} - -tr.hidden-sm { - display: table-row !important; -} - -th.hidden-sm, -td.hidden-sm { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-sm.hidden-xs { - display: none !important; - } - tr.hidden-sm.hidden-xs { - display: none !important; - } - th.hidden-sm.hidden-xs, - td.hidden-sm.hidden-xs { - display: none !important; - } -} - +} @media (min-width: 768px) and (max-width: 991px) { .hidden-sm { display: none !important; } - tr.hidden-sm { - display: none !important; - } - th.hidden-sm, - td.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-sm.hidden-md { - display: none !important; - } - tr.hidden-sm.hidden-md { - display: none !important; - } - th.hidden-sm.hidden-md, - td.hidden-sm.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-sm.hidden-lg { - display: none !important; - } - tr.hidden-sm.hidden-lg { - display: none !important; - } - th.hidden-sm.hidden-lg, - td.hidden-sm.hidden-lg { - display: none !important; - } -} - -.hidden-md { - display: block !important; -} - -tr.hidden-md { - display: table-row !important; -} - -th.hidden-md, -td.hidden-md { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-md.hidden-xs { - display: none !important; - } - tr.hidden-md.hidden-xs { - display: none !important; - } - th.hidden-md.hidden-xs, - td.hidden-md.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-md.hidden-sm { - display: none !important; - } - tr.hidden-md.hidden-sm { - display: none !important; - } - th.hidden-md.hidden-sm, - td.hidden-md.hidden-sm { - display: none !important; - } -} - +} @media (min-width: 992px) and (max-width: 1199px) { .hidden-md { display: none !important; } - tr.hidden-md { - display: none !important; - } - th.hidden-md, - td.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-md.hidden-lg { - display: none !important; - } - tr.hidden-md.hidden-lg { - display: none !important; - } - th.hidden-md.hidden-lg, - td.hidden-md.hidden-lg { - display: none !important; - } -} - -.hidden-lg { - display: block !important; -} - -tr.hidden-lg { - display: table-row !important; -} - -th.hidden-lg, -td.hidden-lg { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-lg.hidden-xs { - display: none !important; - } - tr.hidden-lg.hidden-xs { - display: none !important; - } - th.hidden-lg.hidden-xs, - td.hidden-lg.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-lg.hidden-sm { - display: none !important; - } - tr.hidden-lg.hidden-sm { - display: none !important; - } - th.hidden-lg.hidden-sm, - td.hidden-lg.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-lg.hidden-md { - display: none !important; - } - tr.hidden-lg.hidden-md { - display: none !important; - } - th.hidden-lg.hidden-md, - td.hidden-lg.hidden-md { - display: none !important; - } -} - +} @media (min-width: 1200px) { .hidden-lg { display: none !important; } - tr.hidden-lg { - display: none !important; - } - th.hidden-lg, - td.hidden-lg { - display: none !important; - } -} - +} .visible-print { display: none !important; } - -tr.visible-print { - display: none !important; -} - -th.visible-print, -td.visible-print { - display: none !important; -} - @media print { .visible-print { display: block !important; } + table.visible-print { + display: table !important; + } tr.visible-print { display: table-row !important; } @@ -6792,14 +6724,34 @@ td.visible-print { display: table-cell !important; } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { .hidden-print { display: none !important; } - tr.hidden-print { - display: none !important; - } - th.hidden-print, - td.hidden-print { - display: none !important; - } -} +} +/*# sourceMappingURL=bootstrap.css.map */ diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/css/contextbar.css --- a/kallithea/public/css/contextbar.css Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,325 +0,0 @@ -/** - * Stylesheets for the context bar - */ - -i[class^='icon-'] { - background-repeat: no-repeat; - background-position: center; - display: inline-block; - min-width: 16px; - min-height: 16px; - margin: -2px 0 -4px 0; - /* background-color: red; /* for debugging */ -} - -/* css classes for diff file status ... it'd be nice if css had a way to - inherit from another class but alas, we must make sure this content is the - same from the icon font file */ - -.icon-diff-M:before { - font-family: 'kallithea'; - content: '\22a1'; - color: #d0b44c; -} - -.icon-diff-D:before { - font-family: 'kallithea'; - content: '\229f'; - color: #bd2c00; -} - -.icon-diff-A:before { - font-family: 'kallithea'; - content: '\229e'; - color: #6cc644; -} - -.icon-diff-R:before { - font-family: 'kallithea'; - content: '\e81f'; - color: #677a85; -} - -#content #context-bar { - position: relative; - overflow: visible; - background-color: #577632; - padding: 0 5px; - min-height: 36px; -} - -#content #context-bar h2 { - display: inline-block; - color: #FFF; -} - -#header #header-inner #quick a, -#content #context-bar, -#content #context-bar a { - color: #FFFFFF; -} - -#header #header-inner #quick a:hover, -#content #context-bar a:hover { - text-decoration: none; -} - -#content #context-bar .icon { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: text-bottom; -} - -ul.horizontal-list { - display: block; -} - -ul.horizontal-list > li { - float: left; - position: relative; -} - -#header #header-inner #quick ul, -ul.horizontal-list > li ul { - position: absolute; - display: none; - right: 0; - z-index: 999; -} - -#header #header-inner #quick li:hover > ul, -ul.horizontal-list li:hover > ul { - display: block; -} - -#header #header-inner #quick li ul li, -ul.horizontal-list ul li { - position: relative; - border-bottom: 1px solid rgba(0,0,0,0.1); - border-top: 1px solid rgba(255,255,255,0.1); -} - -ul.horizontal-list > li ul ul { - position: absolute; - right: 100%; - top: -1px; - min-width: 200px; - max-height: 400px; - overflow-x: hidden; - overflow-y: auto; -} - -#header #header-inner #quick ul a, -ul.horizontal-list li a { - white-space: nowrap; -} - -#breadcrumbs { - float: left; - padding: 6px 0 5px 0; - padding-left: 5px; - font-weight: bold; - font-size: 14px; -} - -#breadcrumbs span { - font-weight: bold; - font-size: 1.4em; -} - -#header #header-inner #quick ul, -#revision-changer, -#context-pages, -#context-pages ul { - background: #3b6998; /* Old browsers */ - background: linear-gradient(to bottom, #577632 0%, #577632 100%); /* W3C */ -} - -#header #header-inner #quick a, -#context-actions a, -#context-pages a { - background-repeat: no-repeat; - background-position: 10px 50%; - padding-left: 30px; -} - -#quick a, -#context-pages ul ul a { - padding-left: 10px; -} - -ul#context-actions { - display: inline-block; - float: right; - border-radius: 4px; - background-image: linear-gradient(to bottom, #577632 0%, #577632 100%); -} - -#content ul#context-actions li { - padding: 0px; - border-right: 1px solid rgba(0,0,0,0.1); - border-left: 1px solid rgba(255,255,255,0.1); -} - -#context-actions a { - display: block; - cursor: pointer; - background: none; - border: none; - margin: 0px; - height: auto; - padding: 10px 10px 10px 30px; - background-repeat: no-repeat; - background-position: 10px 50%; - font-size: 1em; -} - -#context-actions a { - padding: 11px 10px 12px 30px; -} - -#header #header-inner #quick li:hover, -#revision-changer:hover, -#context-pages li:hover, -#context-actions li:hover, -#content #context-actions li:hover, -#header #header-inner #quick li.current, -#context-pages li.current { - background: #6388ad; /* Old browsers */ - background: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* W3C */ -} - - -#content #context-actions li:first-child { - border-left: none; - border-radius: 4px 0 0px 4px; -} - -#content #context-actions li:last-child { - border-right: none; - border-radius: 0 4px 4px 0; -} - -#content #context-actions .icon { - margin: auto; - margin-bottom: 5px; - display: block; - clear: both; - float: none; -} - -#content #context-pages .follow .show-following, -#content #context-pages .following .show-follow { - display: none; -} - -#context-pages { - float: right; - border-left: 1px solid rgba(0,0,0,0.1); -} - -#content #context-pages .icon { - margin-right: 5px; -} - -#header #header-inner #quick li, -#content #context-pages li { - border-right: 1px solid rgba(0,0,0,0.1); - border-left: 1px solid rgba(255,255,255,0.1); - padding: 0; -} - -#header #header-inner #quick li:last-child, -#content #context-pages li:last-child { - border-right: none; -} - -#header #header-inner #quick > li:first-child { - border-left: none; -} - -#header #header-inner #quick > li:first-child > a { - border-radius: 4px 0 0 4px; -} - -#header #header-inner #quick a, -#context-pages a, -#context-pages .admin_menu a { - display: block; - padding: 0px 10px 1px 10px; - line-height: 35px; -} - -#header #header-inner #quick a.thin, -#context-pages a.thin, -#context-pages .admin_menu a.thin { - line-height: 28px !important; -} - -#header #header-inner #quick a#quick_login_link { - padding-left: 0px; -} - -#header #header-inner #quick a { - overflow: hidden; -} -#quick a.childs:after, -#revision-changer:before, -#context-pages a.childs:after, -#context-pages a.dropdown:after { - font-family: 'kallithea'; - content: ' \23f7'; -} -#context-pages a.childs { - padding-right: 30px; -} -#context-pages a.childs:after { - position: absolute; - float: right; - padding-left: 5px; - padding-right: 5px; -} - -#revision-changer:before { - position: absolute; - top: 0px; - right: 0px; - border-right: 1px solid rgba(0,0,0,0.1); - height: 25px; - padding-top: 10px; - padding-right: 10px; -} - -#context-pages li:last-child a { - padding-right: 10px; -} - -#context-bar #revision-changer { - position: relative; - cursor: pointer; - border: none; - padding: 0; - margin: 0; - color: #FFFFFF; - font-size: 0.85em; - padding: 2px 15px; - padding-bottom: 3px; - padding-right: 30px; - border-right: 1px solid rgba(255,255,255,0.1); -} - -#revision-changer .branch-name, -#revision-changer .revision { - display: block; - text-align: center; - line-height: 1.5em; -} - -#revision-changer .branch-name { - font-weight: bold; -} - -#revision-changer .revision { - text-transform: uppercase; -} diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/css/jquery.dataTables.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/public/css/jquery.dataTables.css Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,452 @@ +/* + * Table styles + */ +table.dataTable { + width: 100%; + margin: 0 auto; + clear: both; + border-collapse: separate; + border-spacing: 0; + /* + * Header and footer styles + */ + /* + * Body styles + */ +} +table.dataTable thead th, +table.dataTable tfoot th { + font-weight: bold; +} +table.dataTable thead th, +table.dataTable thead td { + padding: 10px 18px; + border-bottom: 1px solid #111; +} +table.dataTable thead th:active, +table.dataTable thead td:active { + outline: none; +} +table.dataTable tfoot th, +table.dataTable tfoot td { + padding: 10px 18px 6px 18px; + border-top: 1px solid #111; +} +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc { + cursor: pointer; + *cursor: hand; +} +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc, +table.dataTable thead .sorting_asc_disabled, +table.dataTable thead .sorting_desc_disabled { + background-repeat: no-repeat; + background-position: center right; +} +table.dataTable thead .sorting { + background-image: url("../images/sort_both.png"); +} +table.dataTable thead .sorting_asc { + background-image: url("../images/sort_asc.png"); +} +table.dataTable thead .sorting_desc { + background-image: url("../images/sort_desc.png"); +} +table.dataTable thead .sorting_asc_disabled { + background-image: url("../images/sort_asc_disabled.png"); +} +table.dataTable thead .sorting_desc_disabled { + background-image: url("../images/sort_desc_disabled.png"); +} +table.dataTable tbody tr { + background-color: #ffffff; +} +table.dataTable tbody tr.selected { + background-color: #B0BED9; +} +table.dataTable tbody th, +table.dataTable tbody td { + padding: 8px 10px; +} +table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { + border-top: 1px solid #ddd; +} +table.dataTable.row-border tbody tr:first-child th, +table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, +table.dataTable.display tbody tr:first-child td { + border-top: none; +} +table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { + border-top: 1px solid #ddd; + border-right: 1px solid #ddd; +} +table.dataTable.cell-border tbody tr th:first-child, +table.dataTable.cell-border tbody tr td:first-child { + border-left: 1px solid #ddd; +} +table.dataTable.cell-border tbody tr:first-child th, +table.dataTable.cell-border tbody tr:first-child td { + border-top: none; +} +table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { + background-color: #f9f9f9; +} +table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { + background-color: #acbad4; +} +table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { + background-color: #f6f6f6; +} +table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected { + background-color: #aab7d1; +} +table.dataTable.order-column tbody tr > .sorting_1, +table.dataTable.order-column tbody tr > .sorting_2, +table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, +table.dataTable.display tbody tr > .sorting_2, +table.dataTable.display tbody tr > .sorting_3 { + background-color: #fafafa; +} +table.dataTable.order-column tbody tr.selected > .sorting_1, +table.dataTable.order-column tbody tr.selected > .sorting_2, +table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, +table.dataTable.display tbody tr.selected > .sorting_2, +table.dataTable.display tbody tr.selected > .sorting_3 { + background-color: #acbad5; +} +table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { + background-color: #f1f1f1; +} +table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { + background-color: #f3f3f3; +} +table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { + background-color: whitesmoke; +} +table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { + background-color: #a6b4cd; +} +table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { + background-color: #a8b5cf; +} +table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { + background-color: #a9b7d1; +} +table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { + background-color: #fafafa; +} +table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { + background-color: #fcfcfc; +} +table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { + background-color: #fefefe; +} +table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { + background-color: #acbad5; +} +table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { + background-color: #aebcd6; +} +table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { + background-color: #afbdd8; +} +table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { + background-color: #eaeaea; +} +table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { + background-color: #ececec; +} +table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { + background-color: #efefef; +} +table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { + background-color: #a2aec7; +} +table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { + background-color: #a3b0c9; +} +table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { + background-color: #a5b2cb; +} +table.dataTable.no-footer { + border-bottom: 1px solid #111; +} +table.dataTable.nowrap th, table.dataTable.nowrap td { + white-space: nowrap; +} +table.dataTable.compact thead th, +table.dataTable.compact thead td { + padding: 4px 17px 4px 4px; +} +table.dataTable.compact tfoot th, +table.dataTable.compact tfoot td { + padding: 4px; +} +table.dataTable.compact tbody th, +table.dataTable.compact tbody td { + padding: 4px; +} +table.dataTable th.dt-left, +table.dataTable td.dt-left { + text-align: left; +} +table.dataTable th.dt-center, +table.dataTable td.dt-center, +table.dataTable td.dataTables_empty { + text-align: center; +} +table.dataTable th.dt-right, +table.dataTable td.dt-right { + text-align: right; +} +table.dataTable th.dt-justify, +table.dataTable td.dt-justify { + text-align: justify; +} +table.dataTable th.dt-nowrap, +table.dataTable td.dt-nowrap { + white-space: nowrap; +} +table.dataTable thead th.dt-head-left, +table.dataTable thead td.dt-head-left, +table.dataTable tfoot th.dt-head-left, +table.dataTable tfoot td.dt-head-left { + text-align: left; +} +table.dataTable thead th.dt-head-center, +table.dataTable thead td.dt-head-center, +table.dataTable tfoot th.dt-head-center, +table.dataTable tfoot td.dt-head-center { + text-align: center; +} +table.dataTable thead th.dt-head-right, +table.dataTable thead td.dt-head-right, +table.dataTable tfoot th.dt-head-right, +table.dataTable tfoot td.dt-head-right { + text-align: right; +} +table.dataTable thead th.dt-head-justify, +table.dataTable thead td.dt-head-justify, +table.dataTable tfoot th.dt-head-justify, +table.dataTable tfoot td.dt-head-justify { + text-align: justify; +} +table.dataTable thead th.dt-head-nowrap, +table.dataTable thead td.dt-head-nowrap, +table.dataTable tfoot th.dt-head-nowrap, +table.dataTable tfoot td.dt-head-nowrap { + white-space: nowrap; +} +table.dataTable tbody th.dt-body-left, +table.dataTable tbody td.dt-body-left { + text-align: left; +} +table.dataTable tbody th.dt-body-center, +table.dataTable tbody td.dt-body-center { + text-align: center; +} +table.dataTable tbody th.dt-body-right, +table.dataTable tbody td.dt-body-right { + text-align: right; +} +table.dataTable tbody th.dt-body-justify, +table.dataTable tbody td.dt-body-justify { + text-align: justify; +} +table.dataTable tbody th.dt-body-nowrap, +table.dataTable tbody td.dt-body-nowrap { + white-space: nowrap; +} + +table.dataTable, +table.dataTable th, +table.dataTable td { + -webkit-box-sizing: content-box; + box-sizing: content-box; +} + +/* + * Control feature layout + */ +.dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; + zoom: 1; +} +.dataTables_wrapper .dataTables_length { + float: left; +} +.dataTables_wrapper .dataTables_filter { + float: right; + text-align: right; +} +.dataTables_wrapper .dataTables_filter input { + margin-left: 0.5em; +} +.dataTables_wrapper .dataTables_info { + clear: both; + float: left; + padding-top: 0.755em; +} +.dataTables_wrapper .dataTables_paginate { + float: right; + text-align: right; + padding-top: 0.25em; +} +.dataTables_wrapper .dataTables_paginate .paginate_button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em 1em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + *cursor: hand; + color: #333 !important; + border: 1px solid transparent; + border-radius: 2px; +} +.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { + color: #333 !important; + border: 1px solid #979797; + background-color: white; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%); + /* IE10+ */ + background: -o-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, white 0%, #dcdcdc 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { + cursor: default; + color: #666 !important; + border: 1px solid transparent; + background: transparent; + box-shadow: none; +} +.dataTables_wrapper .dataTables_paginate .paginate_button:hover { + color: white !important; + border: 1px solid #111; + background-color: #585858; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #585858 0%, #111 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #585858 0%, #111 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #585858 0%, #111 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #585858 0%, #111 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #585858 0%, #111 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button:active { + outline: none; + background-color: #2b2b2b; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); + /* W3C */ + box-shadow: inset 0 0 3px #111; +} +.dataTables_wrapper .dataTables_paginate .ellipsis { + padding: 0 1em; +} +.dataTables_wrapper .dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 40px; + margin-left: -50%; + margin-top: -25px; + padding-top: 20px; + text-align: center; + font-size: 1.2em; + background-color: white; + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); +} +.dataTables_wrapper .dataTables_length, +.dataTables_wrapper .dataTables_filter, +.dataTables_wrapper .dataTables_info, +.dataTables_wrapper .dataTables_processing, +.dataTables_wrapper .dataTables_paginate { + color: #333; +} +.dataTables_wrapper .dataTables_scroll { + clear: both; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { + *margin-top: -1px; + -webkit-overflow-scrolling: touch; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td { + vertical-align: middle; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing, +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing { + height: 0; + overflow: hidden; + margin: 0 !important; + padding: 0 !important; +} +.dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: 1px solid #111; +} +.dataTables_wrapper.no-footer div.dataTables_scrollHead table, +.dataTables_wrapper.no-footer div.dataTables_scrollBody table { + border-bottom: none; +} +.dataTables_wrapper:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +@media screen and (max-width: 767px) { + .dataTables_wrapper .dataTables_info, + .dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_paginate { + margin-top: 0.5em; + } +} +@media screen and (max-width: 640px) { + .dataTables_wrapper .dataTables_length, + .dataTables_wrapper .dataTables_filter { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_filter { + margin-top: 0.5em; + } +} diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/css/pygments.css --- a/kallithea/public/css/pygments.css Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/public/css/pygments.css Thu Jun 07 01:46:02 2018 +0200 @@ -1,177 +1,69 @@ -div.codeblock { - overflow: auto; - padding: 0px; - border: 1px solid #ccc; - background: #f8f8f8; - font-size: 100%; - line-height: 100%; - /* new */ - line-height: 125%; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -div.codeblock .code-header { - border-bottom: 1px solid #CCCCCC; - background: #EEEEEE; - padding: 10px 0 5px 0; -} - -div.codeblock .code-header .stats { - clear: both; - padding: 2px 8px 2px 14px; - border-bottom: 1px solid rgb(204, 204, 204); - height: 23px; - margin-bottom: 6px; -} - -div.codeblock .code-header .stats .left { - float: left; -} -div.codeblock .code-header .stats .left.img { - margin-top: -2px; -} -div.codeblock .code-header .stats .left.item { - float: left; - padding: 0 9px 0 9px; - border-right: 1px solid #ccc; -} -div.codeblock .code-header .stats .left.item pre { -} -div.codeblock .code-header .stats .left.item.last { - border-right: none; -} -div.codeblock .code-header .stats .buttons { - float: right; - padding-right: 4px; -} - -div.codeblock .code-header .author { - margin-left: 15px; - font-weight: bold; - height: 25px; -} -div.codeblock .code-header .author .user { - padding-top: 3px; -} -div.codeblock .code-header .commit { - margin-left: 15px; - font-weight: normal; - white-space: pre; -} - -.code-highlighttable, -div.codeblock .code-body table { - width: 0 !important; - border: 0px !important; -} - -.code-highlighttable, -div.codeblock .code-body table td { - border: 0px !important; -} - -div.code-body { - background-color: #FFFFFF; -} - -div.codeblock .code-header .search-path { - padding: 0px 0px 0px 10px; -} - -div.search-code-body { - background-color: #FFFFFF; - padding: 5px 0px 5px 10px; -} - -div.search-code-body pre .match { - background-color: #FAFFA6; -} -div.search-code-body pre .break { - background-color: #DDE7EF; - width: 100%; - color: #747474; - display: block; -} -div.annotatediv { - margin-left: 2px; - margin-right: 4px; -} -.code-highlight { - padding: 0px; - margin-top: 5px; - margin-bottom: 5px; - border-left: 1px solid #ccc; -} -.code-highlight pre, .linenodiv pre { - padding: 5px 2px 0px 5px; - margin: 0; -} -.code-highlight pre div:target { - background-color: #FFFFBE !important; -} -.linenos { padding: 0px !important; border:0px !important;} -.linenos a { text-decoration: none; } - -.code { display: block; border:0px !important; } -.code-highlight .hll, .codehilite .hll { background-color: #ffffcc } -.code-highlight .c, .codehilite .c { color: #408080; font-style: italic } /* Comment */ -.code-highlight .err, .codehilite .err { border: 1px solid #FF0000 } /* Error */ -.code-highlight .k, .codehilite .k { color: #008000; font-weight: bold } /* Keyword */ -.code-highlight .o, .codehilite .o { color: #666666 } /* Operator */ -.code-highlight .cm, .codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */ -.code-highlight .cp, .codehilite .cp { color: #BC7A00 } /* Comment.Preproc */ -.code-highlight .c1, .codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */ -.code-highlight .cs, .codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */ -.code-highlight .gd, .codehilite .gd { color: #A00000 } /* Generic.Deleted */ -.code-highlight .ge, .codehilite .ge { font-style: italic } /* Generic.Emph */ -.code-highlight .gr, .codehilite .gr { color: #FF0000 } /* Generic.Error */ -.code-highlight .gh, .codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.code-highlight .gi, .codehilite .gi { color: #00A000 } /* Generic.Inserted */ -.code-highlight .go, .codehilite .go { color: #808080 } /* Generic.Output */ -.code-highlight .gp, .codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -.code-highlight .gs, .codehilite .gs { font-weight: bold } /* Generic.Strong */ -.code-highlight .gu, .codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.code-highlight .gt, .codehilite .gt { color: #0040D0 } /* Generic.Traceback */ -.code-highlight .kc, .codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ -.code-highlight .kd, .codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ -.code-highlight .kn, .codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ -.code-highlight .kp, .codehilite .kp { color: #008000 } /* Keyword.Pseudo */ -.code-highlight .kr, .codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ -.code-highlight .kt, .codehilite .kt { color: #B00040 } /* Keyword.Type */ -.code-highlight .m, .codehilite .m { color: #666666 } /* Literal.Number */ -.code-highlight .s, .codehilite .s { color: #BA2121 } /* Literal.String */ -.code-highlight .na, .codehilite .na { color: #7D9029 } /* Name.Attribute */ -.code-highlight .nb, .codehilite .nb { color: #008000 } /* Name.Builtin */ -.code-highlight .nc, .codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */ -.code-highlight .no, .codehilite .no { color: #880000 } /* Name.Constant */ -.code-highlight .nd, .codehilite .nd { color: #AA22FF } /* Name.Decorator */ -.code-highlight .ni, .codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.code-highlight .ne, .codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ -.code-highlight .nf, .codehilite .nf { color: #0000FF } /* Name.Function */ -.code-highlight .nl, .codehilite .nl { color: #A0A000 } /* Name.Label */ -.code-highlight .nn, .codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -.code-highlight .nt, .codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */ -.code-highlight .nv, .codehilite .nv { color: #19177C } /* Name.Variable */ -.code-highlight .ow, .codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.code-highlight .w, .codehilite .w { color: #bbbbbb } /* Text.Whitespace */ -.code-highlight .mf, .codehilite .mf { color: #666666 } /* Literal.Number.Float */ -.code-highlight .mh, .codehilite .mh { color: #666666 } /* Literal.Number.Hex */ -.code-highlight .mi, .codehilite .mi { color: #666666 } /* Literal.Number.Integer */ -.code-highlight .mo, .codehilite .mo { color: #666666 } /* Literal.Number.Oct */ -.code-highlight .sb, .codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */ -.code-highlight .sc, .codehilite .sc { color: #BA2121 } /* Literal.String.Char */ -.code-highlight .sd, .codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ -.code-highlight .s2, .codehilite .s2 { color: #BA2121 } /* Literal.String.Double */ -.code-highlight .se, .codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ -.code-highlight .sh, .codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */ -.code-highlight .si, .codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ -.code-highlight .sx, .codehilite .sx { color: #008000 } /* Literal.String.Other */ -.code-highlight .sr, .codehilite .sr { color: #BB6688 } /* Literal.String.Regex */ -.code-highlight .s1, .codehilite .s1 { color: #BA2121 } /* Literal.String.Single */ -.code-highlight .ss, .codehilite .ss { color: #19177C } /* Literal.String.Symbol */ -.code-highlight .bp, .codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */ -.code-highlight .vc, .codehilite .vc { color: #19177C } /* Name.Variable.Class */ -.code-highlight .vg, .codehilite .vg { color: #19177C } /* Name.Variable.Global */ -.code-highlight .vi, .codehilite .vi { color: #19177C } /* Name.Variable.Instance */ -.code-highlight .il, .codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */ +.code-highlight .hll { background-color: #ffffcc } +.code-highlight { background: #f8f8f8; } +.code-highlight .c { color: #408080; font-style: italic } /* Comment */ +.code-highlight .err { border: 1px solid #FF0000 } /* Error */ +.code-highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.code-highlight .o { color: #666666 } /* Operator */ +.code-highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ +.code-highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ +.code-highlight .cp { color: #BC7A00 } /* Comment.Preproc */ +.code-highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ +.code-highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ +.code-highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ +.code-highlight .gd { color: #A00000 } /* Generic.Deleted */ +.code-highlight .ge { font-style: italic } /* Generic.Emph */ +.code-highlight .gr { color: #FF0000 } /* Generic.Error */ +.code-highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.code-highlight .gi { color: #00A000 } /* Generic.Inserted */ +.code-highlight .go { color: #888888 } /* Generic.Output */ +.code-highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.code-highlight .gs { font-weight: bold } /* Generic.Strong */ +.code-highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.code-highlight .gt { color: #0044DD } /* Generic.Traceback */ +.code-highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.code-highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.code-highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.code-highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.code-highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.code-highlight .kt { color: #B00040 } /* Keyword.Type */ +.code-highlight .m { color: #666666 } /* Literal.Number */ +.code-highlight .s { color: #BA2121 } /* Literal.String */ +.code-highlight .na { color: #7D9029 } /* Name.Attribute */ +.code-highlight .nb { color: #008000 } /* Name.Builtin */ +.code-highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.code-highlight .no { color: #880000 } /* Name.Constant */ +.code-highlight .nd { color: #AA22FF } /* Name.Decorator */ +.code-highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.code-highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +.code-highlight .nf { color: #0000FF } /* Name.Function */ +.code-highlight .nl { color: #A0A000 } /* Name.Label */ +.code-highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.code-highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.code-highlight .nv { color: #19177C } /* Name.Variable */ +.code-highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.code-highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.code-highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.code-highlight .mf { color: #666666 } /* Literal.Number.Float */ +.code-highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.code-highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.code-highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.code-highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.code-highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.code-highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.code-highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.code-highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.code-highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.code-highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +.code-highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.code-highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +.code-highlight .sx { color: #008000 } /* Literal.String.Other */ +.code-highlight .sr { color: #BB6688 } /* Literal.String.Regex */ +.code-highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.code-highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.code-highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.code-highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.code-highlight .vc { color: #19177C } /* Name.Variable.Class */ +.code-highlight .vg { color: #19177C } /* Name.Variable.Global */ +.code-highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.code-highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.code-highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/css/style.css --- a/kallithea/public/css/style.css Wed Jun 06 21:37:21 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4875 +0,0 @@ -html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td { - border: 0; - outline: 0; - font-size: 100%; - vertical-align: baseline; - background: transparent; - margin: 0; - padding: 0; -} - -body { - line-height: 1; - height: 100%; - background: url("../images/background.png") repeat scroll 0 0 #B0B0B0; - font-family: Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif; - color: #000; - margin: 0; - padding: 0; - font-size: 12px; -} - -ol, ul { - list-style: none; -} - -blockquote, q { - quotes: none; -} - -blockquote:before, blockquote:after, q:before, q:after { - content: none; -} - -:focus { - outline: 0; -} - -del { - text-decoration: line-through; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -html { - height: 100%; -} - -a { - color: #577632; - text-decoration: none; - cursor: pointer; -} - -a:hover { - color: #576622; - text-decoration: underline; -} - -h1, h2, h3, h4, h5, h6, -div.h1, div.h2, div.h3, div.h4, div.h5, div.h6 { - color: #292929; - font-weight: 700; -} - -h1, div.h1 { - font-size: 22px; -} - -h2, div.h2 { - font-size: 20px; -} - -h3, div.h3 { - font-size: 18px; -} - -h4, div.h4 { - font-size: 16px; -} - -h5, div.h5 { - font-size: 14px; -} - -h6, div.h6 { - font-size: 11px; -} - -ul.circle { - list-style-type: circle; -} - -ul.disc { - list-style-type: disc; -} - -ul.square { - list-style-type: square; -} - -ol.lower-roman { - list-style-type: lower-roman; -} - -ol.upper-roman { - list-style-type: upper-roman; -} - -ol.lower-alpha { - list-style-type: lower-alpha; -} - -ol.upper-alpha { - list-style-type: upper-alpha; -} - -ol.decimal { - list-style-type: decimal; -} - -div.color { - clear: both; - overflow: hidden; - position: absolute; - background: #FFF; - margin: 7px 0 0 60px; - padding: 1px 1px 1px 0; -} - -div.color a { - width: 15px; - height: 15px; - display: block; - float: left; - margin: 0 0 0 1px; - padding: 0; -} - -div.options { - clear: both; - overflow: hidden; - position: absolute; - background: #FFF; - margin: 7px 0 0 162px; - padding: 0; -} - -div.options a { - height: 1%; - display: block; - text-decoration: none; - margin: 0; - padding: 3px 8px; -} - -code, -.code pre, -div.readme .readme_box pre, -div.rst-block pre, -.CodeMirror .CodeMirror-code pre { - font-size: 12px; - font-family: Lucida Console, Consolas, Monaco, Inconsolata, Liberation Mono, monospace; -} - -.top-left-rounded-corner { - border-top-left-radius: 8px; -} - -.top-right-rounded-corner { - border-top-right-radius: 8px; -} - -.bottom-left-rounded-corner { - border-bottom-left-radius: 8px; -} - -.bottom-right-rounded-corner { - border-bottom-right-radius: 8px; -} - -.top-left-rounded-corner-mid { - border-top-left-radius: 4px; -} - -.top-right-rounded-corner-mid { - border-top-right-radius: 4px; -} - -.bottom-left-rounded-corner-mid { - border-bottom-left-radius: 4px; -} - -.bottom-right-rounded-corner-mid { - border-bottom-right-radius: 4px; -} - -.help-block { - color: #999999; - display: block; - margin-bottom: 0; - margin-top: 5px; -} - -.empty_data { - color: #B9B9B9; -} - -.truncate { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - -o-text-overflow: ellipsis; - -ms-text-overflow: ellipsis; -} - -.truncate.autoexpand:hover { - overflow: visible; -} - -a.permalink { - visibility: hidden; - position: absolute; - margin: 3px 4px; -} - -a.permalink:hover { - text-decoration: none; -} - -h1:hover > a.permalink, -h2:hover > a.permalink, -h3:hover > a.permalink, -h4:hover > a.permalink, -h5:hover > a.permalink, -h6:hover > a.permalink, -div:hover > a.permalink, -div:hover > span > a.permalink { - visibility: visible; -} - -#header #logo { - padding-left: 10px; -} - -div.header img { - padding-top: 5px; -} - -#header #logo div.header, -#header #logo div.branding { - font-size: 20px; - color: white; - float: left; - height: 44px; - line-height: 44px; - margin-right: 5px; -} - -#header ul#logged-user { - margin-bottom: 5px !important; - border-radius: 0px 0px 8px 8px; - height: 37px; - background-color: #577632; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #577632, #577632); - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); -} - -#header ul#logged-user li { - list-style: none; - float: left; - margin: 8px 0 0; - padding: 4px 12px; - border-left: 1px solid #576622; -} - -#header ul#logged-user li.first { - border-left: none; - margin: 4px; -} - -#header ul#logged-user li.first div.gravatar { - margin-top: -2px; -} - -#header ul#logged-user li.first div.account { - padding-top: 4px; - float: left; -} - -#header ul#logged-user li.last { - border-right: none; -} - -#header ul#logged-user li a { - color: #fff; - font-weight: 700; - text-decoration: none; -} - -#header ul#logged-user li a:hover { - text-decoration: underline; -} - -#header ul#logged-user li.highlight a { - color: #fff; -} - -#header ul#logged-user li.highlight a:hover { - color: #FFF; -} -#header-dd { - clear: both; - position: fixed !important; - background-color: #577632; - opacity: 0.01; - cursor: pointer; - min-height: 10px; - width: 100% !important; - border-radius: 0px 0px 4px 4px; -} - -#header-dd:hover { - opacity: 0.2; - transition: opacity 0.5s ease-in-out; -} - -#header #header-inner { - min-height: 44px; - clear: both; - position: relative; - background-color: #577632; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #577632, #577632); - margin: 0; - padding: 0; - display: block; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); - border-radius: 0px 0px 4px 4px; -} -#header #header-inner.hover { - width: 100% !important; - border-radius: 0px 0px 0px 0px; - position: fixed !important; - z-index: 10000; -} - -.header-pos-fix, .anchor { - margin-top: -46px; - padding-top: 46px; -} - -#header #header-inner #home a { - height: 40px; - width: 46px; - display: block; - background-position: 0 0; - margin: 0; - padding: 0; -} - -#header #header-inner #home a:hover { - background-position: 0 -40px; -} - -#header #header-inner #logo { - float: left; - position: absolute; -} - -#header #header-inner #logo h1 { - color: #FFF; - font-size: 20px; - margin: 12px 0 0 13px; - padding: 0; -} - -#header #header-inner #logo a { - color: #fff; - text-decoration: none; -} - -#header #header-inner #logo a:hover { - color: #bfe3ff; -} - -#header #header-inner #quick { - position: relative; - float: right; - list-style-type: none; - list-style-position: outside; - margin: 4px 8px 0 0; - padding: 0; - border-radius: 4px; -} - -#header #header-inner #quick li span.short { - padding: 9px 6px 8px 6px; -} - -#header #header-inner #quick li span { - display: inline; - margin: 0; -} - -#header #header-inner #quick li span.normal { - border: none; - padding: 10px 12px 8px; -} - -#header #header-inner #quick li span.icon { - border-left: none; - padding-left: 10px; -} - -#header #header-inner #quick li span.icon_short { - top: 0; - left: 0; - border-left: none; - border-right: 1px solid #2e5c89; - padding: 8px 6px 4px; -} - -#header #header-inner #quick li span.icon img, -#header #header-inner #quick li span.icon_short img { - vertical-align: middle; - margin-bottom: 2px; -} - -#header #header-inner #quick ul.repo_switcher { - max-height: 275px; - overflow-x: hidden; - overflow-y: auto; -} - -#header #header-inner #quick ul.repo_switcher li.qfilter_rs { - padding: 2px 3px; - padding-right: 17px; -} - -#header #header-inner #quick ul.repo_switcher li.qfilter_rs input { - width: 100%; - border-radius: 10px; - padding: 2px 7px; -} - -#header #header-inner #quick .repo_switcher_type { - position: absolute; - left: 0; - top: 9px; - margin: 0px 2px 0px 2px; -} - -.groups_breadcrumbs a { - color: #fff; -} - -.groups_breadcrumbs a:hover { - color: #bfe3ff; - text-decoration: none; -} - -td.quick_repo_menu:before { - font-family: "kallithea"; - content: "\23f5"; /* triangle-right */ - margin-left: 3px; - padding-right: 3px; -} - -td.quick_repo_menu { - cursor: pointer; - width: 8px; - border: 1px solid transparent; -} - -td.quick_repo_menu.active:before { - font-family: "kallithea"; - content: "\23f7"; /* triangle-down */ - margin-left: 1px; - padding-right: 1px; -} - -td.quick_repo_menu.active { - border: 1px solid #577632; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - cursor: pointer; -} - -td.quick_repo_menu .menu_items { - margin-top: 5px; - margin-left: -6px; - width: 150px; - position: absolute; - background-color: #FFF; - background: none repeat scroll 0 0 #FFFFFF; - border-color: #577632 #666666 #666666; - border-right: 1px solid #666666; - border-style: solid; - border-width: 1px; - box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2); - border-top-style: none; -} - -td.quick_repo_menu .menu_items li { - padding: 0 !important; -} - -td.quick_repo_menu .menu_items a { - display: block; - padding: 4px 12px 4px 8px; -} - -td.quick_repo_menu .menu_items a:hover { - background-color: #EEE; - text-decoration: none; -} - -td.quick_repo_menu .menu_items .icon img { - margin-bottom: -2px; -} - -td.quick_repo_menu .menu_items.hidden { - display: none; -} - -.dt_repo { - white-space: nowrap; - color: #577632; -} - -.dt_repo_pending { - opacity: 0.5; -} - -.dt_repo i.icon-keyhole-circled, -.dt_repo i.icon-globe -{ - font-size: 16px; - vertical-align: -2px; - margin: 0px 1px 0px 3px; -} - -.dt_repo a { - text-decoration: none; -} - -.dt_repo .dt_repo_name:hover { - text-decoration: underline; -} - -.yui-dt-first th { - text-align: left; -} - -/* - Copyright (c) 2011, Yahoo! Inc. All rights reserved. - Code licensed under the BSD License: - http://developer.yahoo.com/yui/license.html - version: 2.9.0 -*/ -.yui-skin-sam .yui-dt-mask { - position: absolute; - z-index: 9500; -} -.yui-dt-tmp { - position: absolute; - left: -9000px; -} -.yui-dt-scrollable .yui-dt-bd { overflow: auto } -.yui-dt-scrollable .yui-dt-hd { - overflow: hidden; - position: relative; -} -.yui-dt-scrollable .yui-dt-bd thead tr, -.yui-dt-scrollable .yui-dt-bd thead th { - position: absolute; - left: -1500px; -} -.yui-skin-sam thead .yui-dt-sortable { cursor: pointer } -.yui-skin-sam thead .yui-dt-draggable { cursor: move } -.yui-dt-coltarget { - position: absolute; - z-index: 999; -} -.yui-dt-hd { zoom: 1 } -th.yui-dt-resizeable .yui-dt-resizerliner { position: relative } -.yui-dt-resizer { - position: absolute; - right: 0; - bottom: 0; - height: 100%; - cursor: e-resize; - cursor: col-resize; - background-color: #CCC; - opacity: 0; -} -.yui-dt-resizerproxy { - visibility: hidden; - position: absolute; - z-index: 9000; - background-color: #CCC; - opacity: 0; -} -th.yui-dt-hidden .yui-dt-liner, -td.yui-dt-hidden .yui-dt-liner, -th.yui-dt-hidden .yui-dt-resizer { display: none } -.yui-dt-editor, -.yui-dt-editor-shim { - position: absolute; - z-index: 9000; -} -.yui-skin-sam .yui-dt table { - margin: 0; - padding: 0; - font-family: arial; - font-size: inherit; - border-collapse: separate; - border-spacing: 0; - border: 1px solid #7f7f7f; -} -.yui-skin-sam .yui-dt thead { border-spacing: 0 } -.yui-skin-sam .yui-dt caption { - color: #000; - font-size: 85%; - font-weight: normal; - font-style: italic; - line-height: 1; - padding: 1em 0; - text-align: center; -} -.yui-skin-sam .yui-dt th, -.yui-skin-sam .yui-dt th a { - font-weight: normal; - text-decoration: none; - color: #000; - vertical-align: bottom; -} -.yui-skin-sam .yui-dt th { - margin: 0; - padding: 0; - border: 0; - border-right: 1px solid #cbcbcb; -} -.yui-skin-sam .yui-dt tr.yui-dt-first td { border-top: 1px solid #7f7f7f } -.yui-skin-sam .yui-dt th .yui-dt-liner { white-space: nowrap } -.yui-skin-sam .yui-dt-liner { - margin: 0; - padding: 0; -} -.yui-skin-sam .yui-dt-coltarget { - width: 5px; - background-color: red; -} -.yui-skin-sam .yui-dt td { - margin: 0; - padding: 0; - border: 0; - border-right: 1px solid #cbcbcb; - text-align: left; -} -.yui-skin-sam .yui-dt-list td { border-right: 0 } -.yui-skin-sam .yui-dt-resizer { width: 6px } -.yui-skin-sam .yui-dt-mask { - background-color: #000; - opacity: .25; -} -.yui-skin-sam .yui-dt-message { background-color: #FFF } -.yui-skin-sam .yui-dt-scrollable table { border: 0 } -.yui-skin-sam .yui-dt-scrollable .yui-dt-hd { - border-left: 1px solid #7f7f7f; - border-top: 1px solid #7f7f7f; - border-right: 1px solid #7f7f7f; -} -.yui-skin-sam .yui-dt-scrollable .yui-dt-bd { - border-left: 1px solid #7f7f7f; - border-bottom: 1px solid #7f7f7f; - border-right: 1px solid #7f7f7f; - background-color: #FFF; -} -.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td { border-bottom: 1px solid #7f7f7f } -.yui-skin-sam th.yui-dt-asc, -.yui-skin-sam th.yui-dt-sortable .yui-dt-label { margin-right: 10px } - -.yui-skin-sam th.yui-dt-asc .yui-dt-liner:after { - font-family: "kallithea"; - content: "\23f6"; /* triangle-up */ -} - -.yui-skin-sam th.yui-dt-desc .yui-dt-liner:after { - font-family: "kallithea"; - content: "\23f7"; /* triangle-down */ -} - -tbody .yui-dt-editable { cursor: pointer } -.yui-dt-editor { - text-align: left; - background-color: #f2f2f2; - border: 1px solid #808080; - padding: 6px; -} -.yui-dt-editor label { - padding-left: 4px; - padding-right: 6px; -} -.yui-dt-editor .yui-dt-button { - padding-top: 6px; - text-align: right; -} -.yui-skin-sam th.yui-dt-highlighted, -.yui-skin-sam th.yui-dt-highlighted a { background-color: #b2d2ff } -.yui-skin-sam tr.yui-dt-highlighted, -.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc, -.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc { - cursor: pointer; - background-color: #b2d2ff; -} -.yui-skin-sam .yui-dt-list th.yui-dt-highlighted, -.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a { background-color: #b2d2ff } -.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted, -.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc, -.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc { - cursor: pointer; - background-color: #b2d2ff; -} -.yui-skin-sam th.yui-dt-selected, -.yui-skin-sam th.yui-dt-selected a { background-color: #446cd7 } -.yui-skin-sam tr.yui-dt-selected td, -.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc, -.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc { - background-color: #426fd9; - color: #FFF; -} -.yui-skin-sam .yui-dt-list th.yui-dt-selected, -.yui-skin-sam .yui-dt-list th.yui-dt-selected a { background-color: #446cd7 } -.yui-skin-sam .yui-dt-list tr.yui-dt-selected td, -.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc, -.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc { - background-color: #426fd9; - color: #FFF; -} -.yui-skin-sam .yui-dt-paginator { - display: block; - margin: 6px 0; - white-space: nowrap; -} -.yui-skin-sam .yui-dt-paginator .yui-dt-first, -.yui-skin-sam .yui-dt-paginator .yui-dt-last, -.yui-skin-sam .yui-dt-paginator .yui-dt-selected { padding: 2px 6px } -.yui-skin-sam .yui-dt-paginator a.yui-dt-first, -.yui-skin-sam .yui-dt-paginator a.yui-dt-last { text-decoration: none } -.yui-skin-sam .yui-dt-paginator .yui-dt-previous, -.yui-skin-sam .yui-dt-paginator .yui-dt-next { display: none } -.yui-skin-sam a.yui-dt-page { - border: 1px solid #cbcbcb; - padding: 2px 6px; - text-decoration: none; - background-color: #fff; -} -.yui-skin-sam .yui-dt-selected { - border: 1px solid #fff; - background-color: #fff; -} - -#content #left { - left: 0; - width: 280px; - position: absolute; -} - -#content #right { - margin: 0 60px 10px 290px; -} - -#content div.box { - clear: both; - background: #fff; - margin: 0 0 10px; - padding: 0 0 10px; - border-radius: 4px 4px 4px 4px; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); -} - -#content div.box-left { - width: 49%; - clear: none; - float: left; - margin: 0 0 10px; -} - -#content div.box-right { - width: 49%; - clear: none; - float: right; - margin: 0 0 10px; -} - -#content div.box div.title { - clear: both; - overflow: hidden; - background-color: #577632; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #577632, #577632); - margin: 0 0 20px; - padding: 0; - border-radius: 4px 4px 0 0; -} - -#content div.box div.title h5 { - float: left; - border: none; - color: #fff; - margin: 0; - padding: 11px 0 11px 10px; -} - -#content div.box div.title .link-white { - color: #FFFFFF; -} - -#content div.box div.title .link-white.current { - color: #BFE3FF; -} - -#content div.box div.title ul.links li { - list-style: none; - float: left; - margin: 0; - padding: 0; -} - -#content div.box div.title ul.links li a { - font-size: 13px; - font-weight: 700; - height: 1%; - margin: 4px; - text-decoration: none; -} - -#content div.box div.title ul.links.nav-tabs li a { - float: left; - color: #fff; - margin: 0; - padding: 11px 10px 11px 10px; -} - -#content div.box div.title ul.links.icon-only-links li a { - float: left; - color: #fff; - margin: 0; - padding: 11px 10px 11px 10px; -} - -#content div.box h1, -#content div.box h2, -#content div.box h3, -#content div.box h4, -#content div.box h5, -#content div.box h6, -#content div.box div.h1, -#content div.box div.h2, -#content div.box div.h3, -#content div.box div.h4, -#content div.box div.h5, -#content div.box div.h6 { - clear: both; - overflow: hidden; - margin: 8px 20px 3px; - padding-bottom: 2px; -} - -#content div.box div.normal-indent { - margin: 0 20px 10px 20px; -} - -#content div.box p { - color: #5f5f5f; - font-size: 12px; - line-height: 150%; - margin: 0 24px 10px; - padding: 0; -} - -#content div.box blockquote { - border-left: 4px solid #DDD; - color: #5f5f5f; - font-size: 11px; - line-height: 150%; - margin: 0 34px; - padding: 0 0 0 14px; -} - -#content div.box blockquote p { - margin: 10px 0; - padding: 0; -} - -#content div.box dl { - margin: 10px 0px; -} - -#content div.box dt { - font-size: 12px; - margin: 0; -} - -#content div.box dd { - font-size: 12px; - margin: 0; - padding: 8px 0 8px 15px; -} - -#content div.box li { - font-size: 12px; - padding: 4px 0; -} - -#content div.box ul.disc, -#content div.box ul.circle { - margin: 10px 24px 10px 38px; -} - -#content div.box ul.square { - margin: 10px 24px 10px 40px; -} - -#content div.box img.left { - border: none; - float: left; - margin: 10px 10px 10px 0; -} - -#content div.box img.right { - border: none; - float: right; - margin: 10px 0 10px 10px; -} - -#content div.box div.messages { - clear: both; - overflow: hidden; - margin: 0 20px; - padding: 0; -} - -#content div.box div.message { - clear: both; - overflow: hidden; - margin: 0; - padding: 5px 0; - white-space: pre-wrap; -} -#content div.box div.expand { - width: 110%; - height: 14px; - font-size: 10px; - text-align: center; - cursor: pointer; - color: #666; - background: linear-gradient(to bottom,rgba(255,255,255,0),rgba(64,96,128,0.1)); - display: none; - overflow: hidden; -} -#content div.box div.expand .expandtext { - background-color: #ffffff; - padding: 2px; - border-radius: 2px; -} - -#content div.box div.message a { - font-weight: 400 !important; -} - -#content div.box div.message div.image { - float: left; - margin: 9px 0 0 5px; - padding: 6px; -} - -#content div.box div.message div.image img { - vertical-align: middle; - margin: 0; -} - -#content div.box div.message div.text { - float: left; - margin: 0; - padding: 9px 6px; -} - -#content div.box div.message div.text h1, -#content div.box div.message div.text h2, -#content div.box div.message div.text h3, -#content div.box div.message div.text h4, -#content div.box div.message div.text h5, -#content div.box div.message div.text h6 { - border: none; - margin: 0; - padding: 0; -} - -#content div.box div.message div.text span { - height: 1%; - display: block; - margin: 0; - padding: 5px 0 0; -} - -#content div.box div.message-error { - height: 1%; - clear: both; - overflow: hidden; - background: #FBE3E4; - border: 1px solid #FBC2C4; - color: #860006; -} - -#content div.box div.message-error h6 { - color: #860006; -} - -#content div.box div.message-warning { - height: 1%; - clear: both; - overflow: hidden; - background: #FFF6BF; - border: 1px solid #FFD324; - color: #5f5200; -} - -#content div.box div.message-warning h6 { - color: #5f5200; -} - -#content div.box div.message-notice { - height: 1%; - clear: both; - overflow: hidden; - background: #8FBDE0; - border: 1px solid #6BACDE; - color: #003863; -} - -#content div.box div.message-notice h6 { - color: #003863; -} - -#content div.box div.message-success { - height: 1%; - clear: both; - overflow: hidden; - background: #E6EFC2; - border: 1px solid #C6D880; - color: #4e6100; -} - -#content div.box div.message-success h6 { - color: #4e6100; -} - -#content div.box div.form div.fields div.field { - height: 1%; - min-height: 12px; - border-bottom: 1px solid #DDD; - clear: both; - margin: 0; - padding: 10px 0; -} - -#content div.box div.form div.fields div.field-first { - padding: 0 0 10px; -} - -#content div.box div.form div.fields div.field-noborder { - border-bottom: 0 !important; -} - -#content div.box div.form div.fields div.field span.error-message { - height: 1%; - display: inline-block; - color: red; - margin: 8px 0 0 4px; - padding: 0; -} - -#content div.box div.form div.fields div.field span.success { - height: 1%; - display: block; - color: #316309; - margin: 8px 0 0; - padding: 0; -} - -#content div.box div.form div.fields div.field div.label { - left: 70px; - width: 155px; - position: absolute; - margin: 0; - padding: 5px 0 0 0px; -} - -#content div.box div.form div.fields div.field div.label-summary { - left: 30px; - width: 155px; - position: absolute; - margin: 0; - padding: 0px 0 0 0px; -} - -#content div.box-left div.form div.fields div.field div.label, -#content div.box-right div.form div.fields div.field div.label, -#content div.box-left div.form div.fields div.field div.label, -#content div.box-left div.form div.fields div.field div.label-summary, -#content div.box-right div.form div.fields div.field div.label-summary, -#content div.box-left div.form div.fields div.field div.label-summary { - clear: both; - overflow: hidden; - left: 0; - width: auto; - position: relative; - margin: 0; - padding: 0 0 8px; -} - -#content div.box div.form div.fields div.field div.label-select { - padding: 5px 0 0 5px; -} - -#content div.box-left div.form div.fields div.field div.label-select, -#content div.box-right div.form div.fields div.field div.label-select { - padding: 0 0 8px; -} - -#content div.box-left div.form div.fields div.field div.label-textarea, -#content div.box-right div.form div.fields div.field div.label-textarea { - padding: 0 0 8px !important; -} - -#content div.box div.form div.fields div.field div.label label, -div.label label { - color: #393939; - font-weight: 700; -} -#content div.box div.form div.fields div.field div.label label, -div.label-summary label { - color: #393939; - font-weight: 700; -} -#content div.box div.form div.fields div.field div.input { - margin: 0 0 0 200px; -} - -#content div.box div.form div.fields div.field div.input.summary { - margin: 0 0 0 110px; -} -#content div.box div.form div.fields div.field div.input.summary-short { - margin: 0 0 0 110px; -} -#content div.box div.form div.fields div.field div.file { - margin: 0 0 0 200px; -} -#content div.box div.form div.fields div.field div.editor { - margin: 0 0 0 200px; -} - -#content div.box-left div.form div.fields div.field div.input, -#content div.box-right div.form div.fields div.field div.input { - margin: 0 0 0 0px; -} - -#content div.box div.form div.fields div.field div.input input, -.reviewer_ac input { - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 12px; - margin: 0; - padding: 7px 7px 6px; -} - -#content div.box div.form div.fields div.field div.input input#clone_url, -#content div.box div.form div.fields div.field div.input input#clone_url_id -{ - font-size: 14px; - padding: 0 2px; -} - -#content div.box div.form div.fields div.field div.file input { - background: none repeat scroll 0 0 #FFFFFF; - border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3; - border-style: solid; - border-width: 1px; - color: #000000; - font-size: 12px; - margin: 0; - padding: 7px 7px 6px; -} - -input[readonly], -input.disabled { - background-color: #F5F5F5 !important; -} - -#content div.box div.form div.fields div.field div.input input.small { - width: 30%; -} - -#content div.box div.form div.fields div.field div.input input.medium { - width: 55%; -} - -#content div.box div.form div.fields div.field div.input input.large { - width: 85%; -} - -#content div.box div.form div.fields div.field div.input input.date { - width: 177px; -} - -#content div.box div.form div.fields div.field div.input input.button { - background: #D4D0C8; - border-top: 1px solid #FFF; - border-left: 1px solid #FFF; - border-right: 1px solid #404040; - border-bottom: 1px solid #404040; - color: #000; - margin: 0; - padding: 4px 8px; -} - -#content div.box div.form div.fields div.field div.textarea { - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - margin: 0 0 0 200px; - padding: 7px 7px 6px; -} - -#content div.box div.form div.fields div.field div.textarea-editor { - border: 1px solid #ddd; - padding: 0; -} - -#content div.box div.form div.fields div.field div.textarea textarea { - width: 100%; - height: 220px; - overflow-y: auto; - background: #FFF; - color: #000; - font-size: 12px; - outline: none; - border-width: 0; - margin: 0; - padding: 0; -} - -#content div.box-left div.form div.fields div.field div.textarea textarea, -#content div.box-right div.form div.fields div.field div.textarea textarea { - width: 100%; - height: 100px; -} - -#content div.box div.form div.fields div.field div.textarea table { - width: 100%; - border: none; - margin: 0; - padding: 0; -} - -#content div.box div.form div.fields div.field div.textarea table td { - background: #DDD; - border: none; - padding: 0; -} - -#content div.box div.form div.fields div.field div.textarea table td table { - width: auto; - border: none; - margin: 0; - padding: 0; -} - -#content div.box div.form div.fields div.field div.textarea table td table td { - font-size: 11px; - padding: 5px 5px 5px 0; -} - -#content div.box div.form div.fields div.field input[type=text]:focus, -#content div.box div.form div.fields div.field input[type=password]:focus, -#content div.box div.form div.fields div.field input[type=file]:focus, -#content div.box div.form div.fields div.field textarea:focus, -#content div.box div.form div.fields div.field select:focus, -.reviewer_ac input:focus { - background: #f6f6f6; - border-color: #666; -} - -.reviewer_ac { - padding: 10px -} - -div.form div.fields div.field div.button { - margin: 0; - padding: 0 0 0 8px; -} -#content div.box table.noborder { - border: 1px solid transparent; -} - -#content div.box table { - width: 100%; - border-collapse: separate; - margin: 0; - padding: 0; - border: 1px solid #eee; - border-radius: 4px; -} - -#content div.box table th { - background: #eee; - border-bottom: 1px solid #ddd; - padding: 5px 0px 5px 5px; - text-align: left; -} - -#content div.box table th.left { - text-align: left; -} - -#content div.box table th.right { - text-align: right; -} - -#content div.box table th.center { - text-align: center; -} - -#content div.box table th.selected { - vertical-align: middle; - padding: 0; -} - -#content div.box table td { - background: #fff; - border-bottom: 1px solid #cdcdcd; - vertical-align: middle; - padding: 5px; -} - -#content div.box table td.compact { - padding: 0; -} - -#content div.box table tr.selected td { - background: #FFC; -} - -#content div.box table td.selected { - width: 3%; - text-align: center; - vertical-align: middle; - padding: 0; -} - -#content div.box table td.action { - width: 45%; - text-align: left; -} - -#content div.box table td.date { - width: 33%; - text-align: center; -} - -#content div.box div.action { - float: right; - background: #FFF; - text-align: right; - margin: 10px 0 0; - padding: 0; -} - -#content div.box div.action select { - font-size: 11px; - margin: 0; -} - -#content div.box div.action .ui-selectmenu { - margin: 0; - padding: 0; -} - -#content div.box div.pagination { - height: 1%; - clear: both; - overflow: hidden; - margin: 10px 0 0; - padding: 0; -} - -#content div.box div.pagination ul.pager { - float: right; - text-align: right; - margin: 0; - padding: 0; -} - -#content div.box div.pagination ul.pager li { - height: 1%; - float: left; - list-style: none; - background: #ebebeb url("../images/pager.png") repeat-x; - border-top: 1px solid #dedede; - border-left: 1px solid #cfcfcf; - border-right: 1px solid #c4c4c4; - border-bottom: 1px solid #c4c4c4; - color: #4A4A4A; - font-weight: 700; - margin: 0 0 0 4px; - padding: 0; -} - -#content div.box div.pagination ul.pager li.separator { - padding: 6px; -} - -#content div.box div.pagination ul.pager li.current { - background: #b4b4b4 url("../images/pager_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-right: 1px solid #b1b1b1; - border-bottom: 1px solid #afafaf; - color: #515151; - padding: 6px; -} - -#content div.box div.pagination ul.pager li a { - height: 1%; - display: block; - float: left; - color: #515151; - text-decoration: none; - margin: 0; - padding: 6px; -} - -#content div.box div.pagination ul.pager li a:hover, -#content div.box div.pagination ul.pager li a:active { - background: #b4b4b4 url("../images/pager_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-right: 1px solid #b1b1b1; - border-bottom: 1px solid #afafaf; - margin: -1px; -} - -#content div.box div.pagination-right { - float: right; -} - -#content div.box div.pagination-wh { - height: 1%; - overflow: hidden; - text-align: right; - margin: 10px 0 0; - padding: 0; -} - -#content div.box div.pagination-wh > :first-child { - border-radius: 4px 0px 0px 4px; -} - -#content div.box div.pagination-wh > :last-child { - border-radius: 0px 4px 4px 0px; - border-right: 1px solid #cfcfcf; -} - -#content div.box div.pagination-wh a, -#content div.box div.pagination-wh span.pager_dotdot, -#content div.box div.pagination-wh span.yui-pg-previous, -#content div.box div.pagination-wh span.yui-pg-last, -#content div.box div.pagination-wh span.yui-pg-next, -#content div.box div.pagination-wh span.yui-pg-first { - height: 1%; - float: left; - background: #ebebeb url("../images/pager.png") repeat-x; - border-top: 1px solid #dedede; - border-left: 1px solid #cfcfcf; - border-bottom: 1px solid #c4c4c4; - color: #4A4A4A; - font-weight: 700; - padding: 6px; -} - -#content div.box div.pagination-wh span.pager_curpage { - height: 1%; - float: left; - background: #b4b4b4 url("../images/pager_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-bottom: 1px solid #afafaf; - color: #515151; - font-weight: 700; - padding: 6px; -} - -#content div.box div.pagination-wh a:hover, -#content div.box div.pagination-wh a:active { - background: #b4b4b4 url("../images/pager_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-bottom: 1px solid #afafaf; - text-decoration: none; -} - -#content div.box div.traffic div.legend { - clear: both; - overflow: hidden; - border-bottom: 1px solid #ddd; - margin: 0 0 10px; - padding: 0 0 10px; -} - -#content div.box div.traffic div.legend h6 { - float: left; - border: none; - margin: 0; - padding: 0; -} - -#content div.box div.traffic div.legend li { - list-style: none; - float: left; - font-size: 11px; - margin: 0; - padding: 0 8px 0 4px; -} - -#content div.box div.traffic div.legend li.visits { - border-left: 12px solid #edc240; -} - -#content div.box div.traffic div.legend li.pageviews { - border-left: 12px solid #afd8f8; -} - -#content div.box div.traffic table { - width: auto; -} - -#content div.box div.traffic table td { - background: transparent; - border: none; - padding: 2px 3px 3px; -} - -#content div.box div.traffic table td.legendLabel { - padding: 0 3px 2px; -} - -#content div.box #summary { - margin-right: 200px; - min-height: 240px; -} - -#summary-menu-stats { - float: left; - width: 180px; - position: absolute; - top: 0; - right: 0; -} - -#summary-menu-stats ul { - margin: 0 10px; - display: block; - background-color: #f9f9f9; - border: 1px solid #d1d1d1; - border-radius: 4px; -} - -#content #summary-menu-stats li { - border-top: 1px solid #d1d1d1; - padding: 0; -} - -#content #summary-menu-stats li:hover { - background: #f0f0f0; -} - -#content #summary-menu-stats li:first-child { - border-top: none; -} - -#summary-menu-stats a { - display: block; - padding: 12px 10px; - background-repeat: no-repeat; - background-position: 10px 50%; - padding-right: 10px; -} - -#repo_size_2.loaded { - margin-left: 30px; - display: block; - padding-right: 10px; - padding-bottom: 7px; -} - -#summary-menu-stats a:hover { - text-decoration: none; -} - -#summary-menu-stats a span { - background-color: #DEDEDE; - color: #888 !important; - border-radius: 4px; - padding: 2px 4px; - font-size: 10px; -} - -#summary .metatag { - display: inline-block; - padding: 3px 5px; - margin-bottom: 3px; - margin-right: 1px; - border-radius: 5px; -} - -#content div.box #summary p { - margin-bottom: -5px; - width: 600px; - white-space: pre-wrap; -} - -#content div.box #summary p:last-child { - margin-bottom: 9px; -} - -#content div.box #summary p:first-of-type { - margin-top: 9px; -} - -.metatag { - display: inline-block; - margin-right: 1px; - border-radius: 4px 4px 4px 4px; - - border: solid 1px #9CF; - padding: 2px 3px 2px 3px !important; - background-color: #DEF; -} - -.metatag[tag="dead"] { - background-color: #E44; -} - -.metatag[tag="stale"] { - background-color: #EA4; -} - -.metatag[tag="featured"] { - background-color: #AEA; -} - -.metatag[tag="requires"] { - background-color: #9CF; -} - -.metatag[tag="recommends"] { - background-color: #BDF; -} - -.metatag[tag="lang"] { - background-color: #FAF474; -} - -.metatag[tag="license"] { - border: solid 1px #9CF; - background-color: #DEF; -} -.metatag[tag="see"] { - border: solid 1px #CBD; - background-color: #EDF; -} - -a.metatag[tag="license"]:hover { - background-color: #577632; - color: #FFF; - text-decoration: none; -} - -#summary .desc { - white-space: pre; - width: 100%; -} - -#summary .repo_name { - font-size: 1.6em; - font-weight: bold; - vertical-align: baseline; - clear: right -} - -#footer { - clear: both; - overflow: hidden; - text-align: right; - margin: 0; - padding: 0 10px 4px; - margin: -10px 0 0; -} - -#footer div#footer-inner { - background-color: #577632; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #577632, #577632); - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); - border-radius: 4px 4px 4px 4px; -} - -#footer div#footer-inner p { - padding: 15px 25px 15px 0; - color: #FFF; - font-weight: 700; -} - -#footer div#footer-inner .footer-link { - float: left; - padding-left: 10px; -} - -#footer div#footer-inner .footer-link a, -#footer div#footer-inner .footer-link-right a { - color: #FFF; -} - -#login div.title { - clear: both; - overflow: hidden; - position: relative; - background-color: #577632; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #577632, #577632); - margin: 0 auto; - padding: 0; -} - -#login div.inner .icon-lock { - font-size: 80pt; - color: #DDD; -} - -#login div.inner { - background: #FFF; - border-top: none; - border-bottom: none; - margin: 0 auto; - padding: 20px; -} - -#login div.form div.form-horizontal div.form-group > label { - width: 173px; - float: left; - text-align: right; - margin: 2px 10px 0 0; - padding: 5px 0 0 5px; -} - -#login div.form div.form-horizontal div.form-group div input { - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 11px; - margin: 0; - padding: 7px 7px 6px; -} - -#login div.form .buttons { - float: right; -} - -#login div.form div.links { - clear: both; - overflow: hidden; - margin: 10px 0 0; - border-top: 1px solid #DDD; - padding: 10px 0 0; -} - -.user-menu { - margin: 0px !important; - float: left; -} - -.user-menu .container { - padding: 0px 4px 0px 4px; - margin: 0px 0px 0px 0px; -} - -.user-menu .gravatar { - margin: 0px 0px 0px 0px; - cursor: pointer; -} -.user-menu .gravatar.enabled { - background-color: #FDF784 !important; -} -.user-menu .gravatar:hover { - background-color: #FDF784 !important; -} -#quick_login { - min-height: 110px; - padding: 4px; - position: absolute; - right: 0; - background-color: #577632; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #577632, #577632); - - z-index: 999; - border-radius: 0px 0px 4px 4px; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); - - overflow: hidden; -} -#quick_login h4 { - color: #fff; - padding: 5px 0px 5px 14px; -} - -#quick_login .password_forgoten { - padding-right: 0px; - padding-top: 0px; - text-align: left; -} - -#quick_login .password_forgoten a { - font-size: 10px; - color: #fff; - padding: 0px !important; - line-height: 20px !important; -} - -#quick_login .register { - padding-right: 10px; - padding-top: 5px; - text-align: left; -} - -#quick_login .register a { - font-size: 10px; - color: #fff; - padding: 0px !important; - line-height: 20px !important; -} - -#quick_login .submit { - margin: -20px 0 0 0px; - position: absolute; - right: 15px; -} - -#quick_login .links_left { - float: left; - margin-right: 130px; - width: 170px; -} -#quick_login .links_right { - - position: absolute; - right: 0; -} -#quick_login .full_name { - color: #FFFFFF; - font-weight: bold; - padding: 3px 3px 3px 6px; -} -#quick_login .big_gravatar { - padding: 4px 0px 0px 6px; -} -#quick_login .notifications { - padding: 2px 0px 0px 6px; - color: #FFFFFF; - font-weight: bold; - line-height: 10px !important; -} -#quick_login .notifications a, -#quick_login .unread a { - color: #FFFFFF; - display: block; - padding: 0px !important; -} -#quick_login .notifications a:hover, -#quick_login .unread a:hover { - background-color: inherit !important; -} -#quick_login .email, -#quick_login .unread { - color: #FFFFFF; - padding: 3px 3px 3px 6px; -} -#quick_login .links .logout { -} - -#quick_login div.form div.fields { - padding-top: 2px; - padding-left: 10px; -} - -#quick_login div.form div.fields div.field { - padding: 5px; -} - -#quick_login div.form div.fields div.field div.label label { - color: #fff; - padding-bottom: 3px; -} - -#quick_login div.form div.fields div.field div.input input { - width: 236px; - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 11px; - margin: 0; - padding: 5px 7px 4px; -} - -#quick_login div.form div.fields div.buttons { - clear: both; - overflow: hidden; - text-align: right; - margin: 0; - padding: 5px 14px 0px 5px; -} - -#quick_login div.form div.links { - clear: both; - overflow: hidden; - margin: 10px 0 0; - padding: 0 0 2px; -} - -#quick_login ol.links { - display: block; - font-weight: bold; - list-style: none outside none; - text-align: right; -} -#quick_login ol.links li { - line-height: 27px; - margin: 0; - padding: 0; - color: #fff; - display: block; - float: none !important; -} - -#quick_login ol.links li a { - color: #fff; - display: block; - padding: 2px; -} -#quick_login ol.links li a:HOVER { - background-color: inherit !important; -} - -#register div.title { - clear: both; - overflow: hidden; - position: relative; - background-color: #577632; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #577632, #577632); - margin: 0 auto; - padding: 0; -} - -#register div.inner { - background: #FFF; - border-top: none; - border-bottom: none; - margin: 0 auto; - padding: 20px; -} - -#register div.form div.fields div.field div.label { - width: 135px; - float: left; - text-align: right; - margin: 2px 10px 0 0; - padding: 5px 0 0 5px; -} - -#register div.form div.fields div.field div.input input { - width: 300px; - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 11px; - margin: 0; - padding: 7px 7px 6px; -} - -#register div.form div.fields div.buttons { - clear: both; - overflow: hidden; - border-top: 1px solid #DDD; - text-align: left; - margin: 0; - padding: 10px 0 0 150px; -} - -#register div.form div.activation_msg { - padding-top: 4px; - padding-bottom: 4px; -} - -#journal .journal_day { - font-size: 20px; - padding: 10px 0px; - border-bottom: 2px solid #DDD; - margin-left: 10px; - margin-right: 10px; -} - -#journal .journal_container { - padding: 5px; - clear: both; - margin: 0px 5px 0px 10px; -} - -#journal .journal_action_container { - padding-left: 38px; -} - -#journal .journal_user { - color: #747474; - font-size: 14px; - font-weight: bold; - height: 30px; -} - -#journal .journal_user.deleted { - color: #747474; - font-size: 14px; - font-weight: normal; - height: 30px; - font-style: italic; -} - - -#journal .journal_icon { - clear: both; - float: left; - padding-right: 4px; - padding-top: 3px; -} - -#journal .journal_action { - padding-top: 4px; - min-height: 2px; - float: left -} - -#journal .journal_action_params { - clear: left; - padding-left: 22px; -} - -#journal .journal_repo { - float: left; - margin-left: 6px; - padding-top: 3px; -} - -#journal .date { - clear: both; - color: #777777; - font-size: 11px; - padding-left: 22px; -} - -#journal .journal_repo .journal_repo_name { - font-weight: bold; - font-size: 1.1em; -} - -#journal .compare_view { - padding: 5px 0px 5px 0px; - width: 95px; -} - -.journal_highlight { - font-weight: bold; - padding: 0 2px; - vertical-align: bottom; -} - -.trending_language_tbl, .trending_language_tbl td { - border: 0 !important; - margin: 0 !important; - padding: 0 !important; -} - -.trending_language_tbl, .trending_language_tbl tr { - border-spacing: 1px; -} - -.trending_language { - background-color: #577632; - color: #FFF; - display: block; - min-width: 20px; - text-decoration: none; - height: 12px; - margin-bottom: 0px; - margin-left: 5px; - white-space: pre; - padding: 3px; -} - -h3.files_location { - font-size: 1.8em; - font-weight: 700; - border-bottom: none !important; - margin: 10px 0 !important; -} - -#files_data dl dt { - float: left; - width: 60px; - margin: 0 !important; - padding: 5px; -} - -#files_data dl dd { - margin: 0 !important; - padding: 5px !important; -} - -#files_data .codeblock #editor_container .error-message { - color: red; - padding: 10px 10px 10px 26px -} - -.file_history { - padding-top: 10px; - font-size: 16px; -} -.file_author { - float: left; -} - -.file_author .item { - float: left; - padding: 5px; - color: #888; -} - -.changeset_id { - color: #666666; - margin-right: -3px; -} - -.changeset-logical-index { - color: #666666; - font-style: italic; - font-size: 85%; - padding-right: 0.5em; - text-align: right; -} - -.changeset_hash { - color: #000000; -} - -#changeset_content { - border-left: 1px solid #CCC; - border-right: 1px solid #CCC; - border-bottom: 1px solid #CCC; - padding: 5px; -} - -#changeset_compare_view_content { - border: 1px solid #CCC; - padding: 5px; -} - -#changeset_content .container { - min-height: 100px; - font-size: 1.2em; - overflow: hidden; -} - -#changeset_compare_view_content .compare_view_commits { - width: auto !important; -} - -#changeset_compare_view_content .compare_view_commits td { - padding: 0px 0px 0px 12px !important; -} - -#changeset_content .container .right { - float: right; - width: 20%; - text-align: right; -} - -#changeset_content .container .message { - white-space: pre-wrap; -} -#changeset_content .container .message a:hover { - text-decoration: none; -} -.cs_files .cur_cs { - margin: 10px 2px; - font-weight: bold; -} - -.cs_files .node { - float: left; -} - -.cs_files .changes { - float: right; - color: #577632; -} - -.cs_files .changes .added { - background-color: #BBFFBB; - float: left; - text-align: center; - font-size: 9px; - padding: 2px 0px 2px 0px; -} - -.cs_files .changes .deleted { - background-color: #FF8888; - float: left; - text-align: center; - font-size: 9px; - padding: 2px 0px 2px 0px; -} -/*new binary -NEW_FILENODE = 1 -DEL_FILENODE = 2 -MOD_FILENODE = 3 -RENAMED_FILENODE = 4 -CHMOD_FILENODE = 5 -BIN_FILENODE = 6 -*/ -.cs_files .changes .bin { - background-color: #BBFFBB; - float: left; - text-align: center; - font-size: 9px; - padding: 2px 0px 2px 0px; -} -.cs_files .changes .bin.bin1 { - background-color: #BBFFBB; -} - -/*deleted binary*/ -.cs_files .changes .bin.bin2 { - background-color: #FF8888; -} - -/*mod binary*/ -.cs_files .changes .bin.bin3 { - background-color: #DDDDDD; -} - -/*rename file*/ -.cs_files .changes .bin.bin4 { - background-color: #6D99FF; -} - -/*rename file*/ -.cs_files .changes .bin.bin4 { - background-color: #6D99FF; -} - -/*chmod file*/ -.cs_files .changes .bin.bin5 { - background-color: #6D99FF; -} - -.cs_files .cs_added, -.cs_files .cs_A { - height: 16px; - margin-top: 7px; - text-align: left; -} - -.cs_files .cs_changed, -.cs_files .cs_M { - height: 16px; - margin-top: 7px; - text-align: left; -} - -.cs_files .cs_removed, -.cs_files .cs_D { - height: 16px; - margin-top: 7px; - text-align: left; -} - -.cs_files .cs_renamed, -.cs_files .cs_R { - height: 16px; - margin-top: 7px; - text-align: left; -} - -.table { - position: relative; -} - -#graph { - position: relative; - overflow: hidden; -} - -#graph_nodes { - position: absolute; -} - -#graph_content, -#graph .info_box, -#graph .container_header { - margin-left: 100px; -} - -#graph_content { - position: relative; -} - -#graph .container_header { - padding: 10px; - height: 25px; -} - -#graph_content #rev_range_container { - float: left; - margin: 0px 0px 0px 3px; -} - -#graph_content #rev_range_clear { - float: left; - margin: 0px 0px 0px 3px; -} - -#graph_content #changesets { - table-layout: fixed; - border-collapse: collapse; - border-left: none; - border-right: none; - border-color: #cdcdcd; -} - -#graph_content #changesets tr.out-of-range, -#graph_content #changesets tr.mergerow { - opacity: 0.5; -} - -#graph_content #changesets td { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - height: 31px; - border-color: #cdcdcd; - text-align: left; -} - -#graph_content .container .checkbox { - width: 14px; - font-size: 0.85em; -} - -#graph_content .container .status { - width: 14px; - font-size: 0.85em; -} - -#graph_content .container .author { - width: 105px; -} - -#graph_content .container .hash { - width: 100px; - font-size: 0.85em; -} - -#graph_content #changesets .container .date { - width: 76px; - color: #666; - font-size: 10px; -} - -#graph_content_pr .compare_view_commits .expand_commit, -#graph_content .container .expand_commit { - width: 24px; - cursor: pointer; -} - -#graph_content #changesets .container .right { - width: 120px; - padding-right: 0px; - overflow: visible; - position: relative; -} - -#graph_content .container .mid { - padding: 0; -} - -#graph_content .log-container { - position: relative; -} - -#graph_content .container #singlerange, -#graph_content .container .changeset_range { - float: left; - margin: 6px 3px; -} - -#graph_content .container .author img { - vertical-align: middle; -} - -#graph_content .container .author .user { - color: #444444; -} - -#graph_content .container .mid .message { - white-space: pre-wrap; - padding: 0; - overflow: hidden; - height: 1.1em; -} - -#graph_content_pr .compare_view_commits .message { - padding: 0 !important; - height: 1.1em; -} - -#graph_content .container .mid .message.expanded, -#graph_content_pr .compare_view_commits .message.expanded { - height: auto; - margin: 8px 0px 8px 0px; - overflow: initial; -} - -#graph_content .container .extra-container { - display: block; - position: absolute; - top: -15px; - right: 0; - padding-left: 5px; - background: #FFFFFF; - height: 41px; -} - -#pull_request_overview .comments-container, -#changeset_compare_view_content .comments-container, -#graph_content .comments-container, -#shortlog_data .comments-container, -#graph_content .logtags { - display: block; - float: left; - overflow: hidden; - padding: 0; - margin: 0; - white-space: nowrap; -} - -#graph_content .comments-container { - margin: 0.8em 0; - margin-right: 0.5em; -} - -#graph_content .tagcontainer { - width: 80px; - position: relative; - float: right; - height: 100%; - top: 7px; - margin-left: 0.5em; -} - -#graph_content .logtags { - min-width: 80px; - height: 1.1em; - position: absolute; - left: 0px; - width: auto; - top: 0px; -} - -#graph_content .logtags.tags { - top: 14px; -} - -#graph_content .logtags:hover { - overflow: visible; - position: absolute; - width: auto; - right: 0; - left: initial; -} - -#graph_content .logtags .booktag, -#graph_content .logtags .tagtag { - float: left; - line-height: 1em; - margin-bottom: 1px; - margin-right: 1px; - padding: 1px 3px; - font-size: 10px; -} - -#graph_content .container .mid .message a:hover { - text-decoration: none; -} - -#compare_branches + .table .revision-link, -#compare_tags + .table .revision-link, -#compare_bookmarks + .table .revision-link, -.table #files_data .revision-link, -#repos_list_wrap .revision-link, -#shortlog_data .revision-link { - font-weight: normal !important; - font-family: monospace; - font-size: 12px; - color: #577632; -} - -.revision-link { - color: #3F6F9F; - font-weight: bold !important; -} - -.issue-tracker-link { - color: #3F6F9F; - font-weight: bold !important; -} - -.changeset-status-container { - padding-right: 5px; - margin-top: 1px; - float: right; - height: 14px; -} -.code-header .changeset-status-container { - float: left; - padding: 2px 0px 0px 2px; -} -.code-header .changeset-status-container .changeset-status-lbl { - float: left; - padding: 0px 4px 0px 0px; -} -.changeset-status-container div.changeset-status-ico { - float: left; -} -.code-header .changeset-status-container .changeset-status-ico, -.container .changeset-status-ico { - float: left; -} - -/* changeset statuses (must be the same name as the status) */ -.changeset-status-not_reviewed { - color: #bababa; -} -.changeset-status-approved { - color: #81ba51; -} -.changeset-status-rejected { - color: #cc392e; -} -.changeset-status-under_review { - color: #ffc71e; -} - -#graph_content .comments-cnt { - color: rgb(136, 136, 136); - padding: 5px 0; -} - -#shortlog_data .comments-cnt { - color: rgb(136, 136, 136); - padding: 3px 0; -} - -.right .changes { - clear: both; -} - -.right .changes .changed_total { - display: block; - float: right; - text-align: center; - min-width: 45px; - cursor: pointer; - color: #444444; - background: #FEA; - border-radius: 0px 0px 0px 6px; - padding: 1px; -} - -.right .changes .added, -.changed, .removed { - display: block; - padding: 1px; - color: #444444; - float: right; - text-align: center; - min-width: 15px; -} - -.right .changes .added { - background: #CFC; -} - -.right .changes .changed { - background: #FEA; -} - -.right .changes .removed { - background: #FAA; -} - -.right .merge { - padding: 1px 3px 1px 3px; - background-color: #fca062; - font-size: 10px; - color: #ffffff; - text-transform: uppercase; - white-space: nowrap; - border-radius: 3px; - margin-right: 2px; -} - -.right .parent { - color: #666666; - clear: both; -} -.right .logtags { - line-height: 2.2em; -} -.repotag, .branchtag, .logtags .tagtag, .logtags .booktag { - margin: 0px 2px; -} - -.repotag, -.branchtag, -.tagtag, -.booktag, -.spantag { - padding: 1px 3px 1px 3px; - font-size: 10px; - color: #577632; - white-space: nowrap; - border-radius: 4px; - border: 1px solid #d9e8f8; - line-height: 1.5em; -} - -#graph_content .branchtag, -#graph_content .tagtag, -#graph_content .booktag { - margin: 1.1em 0; - margin-right: 0.5em; -} - -.repotag, -.branchtag, -.tagtag, -.booktag { - float: left; -} - -.right .logtags .branchtag, -.right .logtags .tagtag, -.right .logtags .booktag, -.right .merge { - float: right; - line-height: 1em; - margin: 1px 1px !important; - display: block; -} - -.repotag { - border-color: #56A546; - color: #46A546; - font-size: 8px; - text-transform: uppercase; -} - -#context-bar .repotag, -.repo-icons .repotag { - border-color: white; - color: white; - margin-top: 3px; -} - -.repo-icons .repotag { - margin-top: 0px; - padding-top: 0px; - padding-bottom: 0px; -} - -.booktag { - border-color: #46A546; - color: #46A546; -} - -.tagtag { - border-color: #62cffc; - color: #62cffc; -} - -.logtags .branchtag a:hover, -.logtags .branchtag a, -.branchtag a, -.branchtag a:hover { - text-decoration: none; - color: inherit; -} -.logtags .tagtag { - padding: 1px 3px 1px 3px; - background-color: #62cffc; - font-size: 10px; - color: #ffffff; - white-space: nowrap; - border-radius: 3px; -} - -.tagtag a, -.tagtag a:hover, -.logtags .tagtag a, -.logtags .tagtag a:hover { - text-decoration: none; - color: inherit; -} -.logbooks .booktag, -.logbooks .booktag, -.logtags .booktag, -.logtags .booktag { - padding: 1px 3px 1px 3px; - background-color: #46A546; - font-size: 10px; - color: #ffffff; - white-space: nowrap; - border-radius: 3px; -} -.logbooks .booktag, -.logbooks .booktag a, -.right .logtags .booktag, -.logtags .booktag a { - color: #ffffff; -} - -.logbooks .booktag, -.logbooks .booktag a:hover, -.logtags .booktag, -.logtags .booktag a:hover, -.booktag a, -.booktag a:hover { - text-decoration: none; - color: inherit; -} -div.browserblock { - overflow: hidden; - border: 1px solid #ccc; - background: #f8f8f8; - font-size: 100%; - line-height: 125%; - padding: 0; - border-radius: 6px 6px 0px 0px; -} - -div.browserblock .browser-header { - background: #FFF; - padding: 10px 0px 15px 0px; - width: 100%; -} - -div.browserblock .browser-nav { - float: left -} - -div.browserblock .browser-branch { - float: left; -} - -div.browserblock .browser-branch label { - color: #4A4A4A; - vertical-align: text-top; - padding-right: 2px; -} - -div.browserblock .browser-header span { - margin-left: 5px; - font-weight: 700; -} - -div.browserblock .browser-search { - clear: both; - padding: 8px 8px 0px 5px; - height: 20px; -} - -div.browserblock #node_filter_box { -} - -div.browserblock .search_activate { - float: left -} - -div.browserblock .add_node { - float: left; - padding-left: 5px; -} - -div.browserblock .search_activate a:hover, -div.browserblock .add_node a:hover { - text-decoration: none !important; -} - -div.browserblock .browser-body { - background: #EEE; - border-top: 1px solid #CCC; -} - -table.code-browser { - border-collapse: collapse; - width: 100%; -} - -table.code-browser tr { - margin: 3px; -} - -table.code-browser thead th { - background-color: #EEE; - height: 20px; - font-size: 1.1em; - font-weight: 700; - text-align: left; - padding-left: 10px; -} - -table.code-browser tbody td { - padding-left: 10px; - height: 20px; -} - -table.code-browser .browser-file { - height: 16px; - padding-left: 5px; - text-align: left; -} -.diffblock .changeset_header { - height: 16px; -} -.diffblock .changeset_file { - float: left; -} -.diffblock .diff-menu-wrapper { - float: left; -} - -.diffblock .diff-menu { - position: absolute; - background: none repeat scroll 0 0 #FFFFFF; - border-color: #577632 #666666 #666666; - border-right: 1px solid #666666; - border-style: solid solid solid; - border-width: 1px; - box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2); - margin-top: 5px; - margin-left: 1px; - -} -.diffblock .diff-actions { - padding: 2px 0px 0px 2px; - float: left; -} -.diffblock .diff-menu ul li { - padding: 0px 0px 0px 0px !important; -} -.diffblock .diff-menu ul li a { - display: block; - padding: 3px 8px 3px 8px !important; -} -.diffblock .diff-menu ul li a:hover { - text-decoration: none; - background-color: #EEEEEE; -} -table.code-browser .browser-dir { - height: 16px; - padding-left: 5px; - text-align: left; -} - -table.code-browser .submodule-dir { - height: 16px; - padding-left: 5px; - text-align: left; -} - -/* add some padding to the right of the file, folder, or submodule icon and -before the text */ -table.code-browser i[class^='icon-'] { - padding-right: .3em; -} - -.box .search { - clear: both; - overflow: hidden; - margin: 0; - padding: 0 20px 10px; -} - -.box .search div.search_path { - background: none repeat scroll 0 0 #EEE; - border: 1px solid #CCC; - color: blue; - margin-bottom: 10px; - padding: 10px 0; -} - -.box .search div.search_path div.link { - font-weight: 700; - margin-left: 25px; -} - -.box .search div.search_path div.link a { - color: #577632; - cursor: pointer; - text-decoration: none; -} - -#path_unlock { - color: red; - font-size: 1.2em; - padding-left: 4px; -} - -.info_box span { - margin-left: 3px; - margin-right: 3px; -} - -.info_box .rev { - color: #577632; - font-size: 1.6em; - font-weight: bold; - vertical-align: sub; -} - -.info_box input#at_rev, -.info_box input#size { - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 12px; - margin: 0; - padding: 1px 5px 1px; -} - -.info_box input#view { - text-align: center; - padding: 4px 3px 2px 2px; -} - -.info_box_elem { - display: inline-block; - padding: 0 2px; -} - -.yui-overlay, .yui-panel-container { - visibility: hidden; - position: absolute; - z-index: 2; -} - -#tip-box { - position: absolute; - - background-color: #FFF; - border: 2px solid #577632; - font: 100% sans-serif; - width: auto; - opacity: 1; - padding: 8px; - - white-space: pre-wrap; - border-radius: 8px 8px 8px 8px; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); - z-index: 100000; -} - -.hl-tip-box { - z-index: 1; - position: absolute; - color: #666; - background-color: #FFF; - border: 2px solid #577632; - font: 100% sans-serif; - width: auto; - opacity: 1; - padding: 8px; - white-space: pre-wrap; - border-radius: 8px 8px 8px 8px; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); -} - - -.mentions-container { - width: 90% !important; -} -.mentions-container .yui-ac-content { - width: 100% !important; -} - -.ac { - vertical-align: top; -} - -.ac .yui-ac { - position: inherit; - font-size: 100%; -} - -.ac .perm_ac { - width: 20em; -} - -.ac .yui-ac-input { - width: 100%; -} - -.ac .yui-ac-container { - position: absolute; - top: 1.6em; - width: auto; -} - -.ac .yui-ac-content { - position: absolute; - border: 1px solid gray; - background: #fff; - z-index: 9050; -} - -.ac .yui-ac-shadow { - position: absolute; - width: 100%; - background: #000; - opacity: .10; - z-index: 9049; - margin: .3em; -} - -.ac .yui-ac-content ul { - width: 100%; - margin: 0; - padding: 0; - z-index: 9050; -} - -.ac .yui-ac-content li { - cursor: default; - white-space: nowrap; - margin: 0; - padding: 2px 5px; - height: 18px; - z-index: 9050; - display: block; - width: auto !important; -} - -.ac .yui-ac-content li .ac-container-wrap { - width: auto; -} - -.ac .yui-ac-content li.yui-ac-prehighlight { - background: #B3D4FF; - z-index: 9050; -} - -.ac .yui-ac-content li.yui-ac-highlight { - background: #556CB5; - color: #FFF; - z-index: 9050; -} -.ac .yui-ac-bd { - z-index: 9050; -} - -#repo_size { - display: block; - margin-top: 4px; - color: #666; - float: right; -} - -.currently_following { - padding-left: 10px; - padding-bottom: 5px; -} - -.action_button { - border: 0; - display: inline; -} - -.action_button:hover { - border: 0; - text-decoration: underline; - cursor: pointer; -} - -#switch_repos { - position: absolute; - height: 25px; - z-index: 1; -} - -#switch_repos select { - min-width: 150px; - max-height: 250px; - z-index: 1; -} - -.breadcrumbs { - border: medium none; - color: #FFF; - float: left; - font-weight: 700; - font-size: 14px; - margin: 0; - padding: 11px 0 11px 10px; -} - -.breadcrumbs .hash { - text-transform: none; - color: #fff; -} - -.breadcrumbs a { - color: #FFF; -} - -.flash_msg { -} - -.flash_msg ul { -} - -.error_red { - color: red; -} - -.flash_msg .alert-error { - background-color: #c43c35; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - border-color: #c43c35 #c43c35 #882a25; -} - -.flash_msg .alert-error a { - text-decoration: underline; -} - -.flash_msg .alert-warning { - color: #404040 !important; - background-color: #eedc94; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #fceec1, #eedc94); - border-color: #eedc94 #eedc94 #e4c652; -} - -.flash_msg .alert-warning a { - text-decoration: underline; -} - -.flash_msg .alert-success { - background-color: #57a957; - background-repeat: repeat-x !important; - background-image: linear-gradient(to bottom, #62c462, #57a957); - border-color: #57a957 #57a957 #3d773d; -} - -.flash_msg .alert-success a { - text-decoration: underline; - color: #FFF !important; -} - -.flash_msg .alert-info { - background-color: #339bb9; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - border-color: #339bb9 #339bb9 #22697d; -} - -.flash_msg .alert-info a { - text-decoration: underline; -} - -.flash_msg .alert-error, -.flash_msg .alert-warning, -.flash_msg .alert-success, -.flash_msg .alert-info { - font-size: 12px; - font-weight: 700; - min-height: 14px; - line-height: 14px; - margin-bottom: 10px; - margin-top: 0; - display: block; - overflow: auto; - padding: 6px 10px 6px 10px; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - position: relative; - color: #FFF; - border-width: 1px; - border-style: solid; - border-radius: 4px; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); -} - -div#legend_data { - padding-left: 10px; -} -div#legend_container table { - border: none !important; -} -div#legend_container table, -div#legend_choices table { - width: auto !important; -} - -table#permissions_manage { - width: 0 !important; -} - -table#permissions_manage span.private_repo_msg { - font-size: 0.8em; - opacity: 0.6; -} - -table#permissions_manage td.private_repo_msg { - font-size: 0.8em; -} - -table#permissions_manage tr#add_perm_input td { - vertical-align: middle; -} - -div.gravatar { - background-color: #FFF; - float: left; - margin-right: 0.7em; - padding: 1px 1px 1px 1px; - line-height: 0; - border-radius: 3px; -} - -div.gravatar img { - border-radius: 2px; -} - -#header, #content, #footer { - min-width: 978px; -} - -#content { - clear: both; - padding: 10px 10px 14px 10px; -} - -#content.hover { - padding: 55px 10px 14px 10px !important; -} - -#content div.box div.title div.search { - border-left: 1px solid #576622; -} - -#content div.box div.title div.search div.input input { - border: 1px solid #576622; -} - -.btn { - color: #515151; - background-color: #DADADA; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #F4F4F4, #DADADA); - - border-top: 1px solid #DDD; - border-left: 1px solid #c6c6c6; - border-right: 1px solid #DDD; - border-bottom: 1px solid #c6c6c6; - outline: none; - margin: 0px 3px 3px 0px; - border-radius: 4px 4px 4px 4px !important; - cursor: pointer !important; - padding: 3px 3px 3px 3px; - display: inline-block; -} - -ul.nav-stacked { - margin: 20px; - color: #393939; - font-weight: 700; -} - -ul.nav-stacked a { - color: inherit; -} - -ul.nav-stacked li.active { - list-style-type: disc -} - -/* make .btn inputs and buttons and divs look the same */ -button.btn, -input.btn { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -.btn::-moz-focus-inner { - border: 0; - padding: 0; -} - -.btn.badge { - cursor: default !important; -} - -input[disabled].btn, -.btn.disabled { - color: #999; -} - -.btn.btn-danger.disabled { - color: #eee; - background-color: #c77; - border-color: #b66 -} - -.btn.btn-small { - padding: 2px 6px; -} - -.btn.btn-mini { - padding: 0px 4px; -} - -.btn:focus { - outline: none; -} -.btn:hover { - text-decoration: none; - color: #515151; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 3px #FFFFFF !important; -} -.btn.badge:hover { - box-shadow: none !important; -} -.btn.disabled:hover { - background-position: 0; - color: #999; - text-decoration: none; - box-shadow: none !important; -} - -.btn.red { - color: #fff; - background-color: #c43c35; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - border-color: #c43c35 #c43c35 #882a25; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - - -.btn.blue { - color: #fff; - background-color: #339bb9; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - border-color: #339bb9 #339bb9 #22697d; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - -.btn.green { - color: #fff; - background-color: #57a957; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #62c462, #57a957); - border-color: #57a957 #57a957 #3d773d; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - -.btn.yellow { - color: #fff; - background-color: #faa732; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #fbb450, #f89406); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - -label.disabled { - color: #aaa; -} - -.btn.blue.hidden { - display: none; -} - -.btn.active { - font-weight: bold; -} - -ins, div.options a:hover { - text-decoration: none; -} - -img, -#header #header-inner #quick li a:hover span.normal, -#content div.box div.form div.fields div.field div.textarea table td table td a, -#clone_url, -#clone_url_id -{ - border: none; -} - -img.icon, .right .merge img { - vertical-align: bottom; -} - -#header ul#logged-user, -#content div.box div.title ul.links, -#content div.box div.message div.dismiss, -#content div.box div.traffic div.legend ul { - float: right; - margin: 0; - padding: 0; -} - -#header #header-inner #home, -#header #header-inner #logo, -#content div.box ul.left, -#content div.box ol.left, -div#commit_history, -div#legend_data, div#legend_container, div#legend_choices { - float: left; -} - -#header #header-inner #quick li #quick_login, -#header #header-inner #quick li:hover ul ul, -#header #header-inner #quick li:hover ul ul ul, -#header #header-inner #quick li:hover ul ul ul ul, -#content #left #menu ul.closed, -#content #left #menu li ul.collapsed, -.yui-tt-shadow { - display: none; -} - -#header #header-inner #quick li:hover #quick_login, -#header #header-inner #quick li:hover ul, -#header #header-inner #quick li li:hover ul, -#header #header-inner #quick li li li:hover ul, -#header #header-inner #quick li li li li:hover ul, -#content #left #menu ul.opened, -#content #left #menu li ul.expanded { - display: block; -} - -.repo-switcher .select2-choice { - padding: 0px 8px 1px !important; - display: block; - height: 100%; -} - -.repo-switcher .select2-container, -.repo-switcher .select2-choice, -.repo-switcher .select2-choice span { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - color: #FFFFFF !important; -} - -.repo-switcher .select2-arrow { - display: none !important; -} - -.repo-switcher .select2-chosen:after { - font-family: 'kallithea'; - content: ' \23f7'; -} - -.repo-switcher-dropdown.select2-drop.select2-drop-active { - box-shadow: none; - color: #fff; - background-color: #576622; -} - -.repo-switcher-dropdown.select2-drop.select2-drop-active .select2-results .select2-highlighted { - background-color: #6388ad; -} - -#content div.graph { - padding: 0 10px 10px; - height: 450px; -} - -#content div.box ol.lower-roman, -#content div.box ol.upper-roman, -#content div.box ol.lower-alpha, -#content div.box ol.upper-alpha, -#content div.box ol.decimal { - margin: 10px 24px 10px 44px; -} - -#content div.box div.form, -#content div.box div.table, -#content div.box div.traffic { - position: relative; - clear: both; - margin: 0; - padding: 0 20px 10px; -} - -#content div.box div.form div.fields, -#login div.form-horizontal, -#login div.form-horizontal div.form-group, -#register div.form, -#register div.form div.fields { - clear: both; - overflow: hidden; - margin: 0; - padding: 0; -} - -#content div.box div.form div.fields div.field div.label span, -#login div.form div.form-horizontal div.form-group div.label span, -#register div.form div.fields div.field div.label span { - height: 1%; - display: block; - color: #363636; - margin: 0; - padding: 2px 0 0; -} - -#content div.box div.form div.fields div.field div.input input.error, -#login div.form div.form-horizontal div.form-group div.input input.error, -#register div.form div.fields div.field div.input input.error { - background: #FBE3E4; - border-top: 1px solid #e1b2b3; - border-left: 1px solid #e1b2b3; - border-right: 1px solid #FBC2C4; - border-bottom: 1px solid #FBC2C4; -} - -#content div.box div.form div.fields div.field div.input input.success, -#login div.form div.form-horizontal div.form-group div.input input.success, -#register div.form div.fields div.field div.input input.success { - background: #E6EFC2; - border-top: 1px solid #cebb98; - border-left: 1px solid #cebb98; - border-right: 1px solid #c6d880; - border-bottom: 1px solid #c6d880; -} - -#content div.box-left div.form div.fields div.field div.textarea, -#content div.box-right div.form div.fields div.field div.textarea, -#content div.box div.form div.fields div.field div.select select, -#content div.box table th.selected input, -#content div.box table td.selected input { - margin: 0; -} - -#content div.box-left div.form div.fields div.field div.select, -#content div.box-left div.form div.fields div.field div.checkboxes, -#content div.box-left div.form div.fields div.field div.radios, -#content div.box-right div.form div.fields div.field div.select, -#content div.box-right div.form div.fields div.field div.checkboxes, -#content div.box-right div.form div.fields div.field div.radios { - margin: 0 0 0 0px !important; - padding: 0; -} - -#content div.box div.form div.fields div.field div.select, -#content div.box div.form div.fields div.field div.checkboxes, -#content div.box div.form div.fields div.field div.radios { - margin: 0 0 0 200px; - padding: 0; -} - -#content div.box div.form div.fields div.field div.select a:hover, -#content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover, -#content div.box div.action a:hover { - color: #000; - text-decoration: none; -} - -#content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus, -#content div.box div.action a.ui-selectmenu-focus { - border: 1px solid #666; -} - -#content div.box div.form div.fields div.field div.checkboxes div.checkbox, -#content div.box div.form div.fields div.field div.radios div.radio { - clear: both; - overflow: hidden; - margin: 0; - padding: 8px 0 2px; -} - -#content div.box div.form div.fields div.field div.checkboxes div.checkbox input, -#content div.box div.form div.fields div.field div.radios div.radio input { - float: left; - margin: 0; -} - -#content div.box div.form div.fields div.field div.checkboxes div.checkbox label, -#content div.box div.form div.fields div.field div.radios div.radio label { - height: 1%; - display: block; - float: left; - margin: 2px 0 0 4px; -} - -div.form div.fields div.field div.button input, -#content div.box div.form div.fields div.buttons input -div.form div.fields div.buttons input, -#content div.box div.action div.button input { - font-size: 11px; - font-weight: 700; - margin: 0; -} - -div.form div.fields div.field div.highlight, -#content div.box div.form div.fields div.buttons div.highlight { - display: inline; -} - -#content div.box div.form div.fields div.buttons, -div.form div.fields div.buttons { - margin: 10px 0 0 200px; - padding: 0; -} - -#content div.box-left div.form div.fields div.buttons, -#content div.box-right div.form div.fields div.buttons, -div.box-left div.form div.fields div.buttons, -div.box-right div.form div.fields div.buttons { - margin: 10px 0 0; -} - -#content div.box table td.user, -#content div.box table td.address { - width: 10%; - text-align: center; -} - -#content div.box div.action div.button, -#login div.form div.form-horizontal div.form-group div.input div.link, -#register div.form div.fields div.field div.input div.link { - text-align: right; - margin: 6px 0 0; - padding: 0; -} - -#content div.box div.pagination div.results, -#content div.box div.pagination-wh div.results { - text-align: left; - float: left; - margin: 0; - padding: 0; -} - -#content div.box div.pagination div.results span, -#content div.box div.pagination-wh div.results span { - height: 1%; - display: block; - float: left; - background: #ebebeb url("../images/pager.png") repeat-x; - border-top: 1px solid #dedede; - border-left: 1px solid #cfcfcf; - border-right: 1px solid #c4c4c4; - border-bottom: 1px solid #c4c4c4; - color: #4A4A4A; - font-weight: 700; - margin: 0; - padding: 6px 8px; -} - -#content div.box div.pagination ul.pager li.disabled, -#content div.box div.pagination-wh a.disabled { - color: #B4B4B4; - padding: 6px; -} - -#login, #register { - width: 520px; - margin: 10% auto 0; - padding: 0; -} - -#login div.color, -#register div.color { - clear: both; - overflow: hidden; - background: #FFF; - margin: 10px auto 0; - padding: 3px 3px 3px 0; -} - -#login div.color a, -#register div.color a { - width: 20px; - height: 20px; - display: block; - float: left; - margin: 0 0 0 3px; - padding: 0; -} - -#login div.title h5, -#register div.title h5 { - color: #fff; - margin: 10px; - padding: 0; -} - -#login div.form div.form-horizontal div.form-group, -#register div.form div.fields div.field { - clear: both; - overflow: hidden; - margin: 0; - padding: 0 0 10px; -} - -#login div.form div.form-horizontal div.form-group span.error-message, -#register div.form div.fields div.field span.error-message { - height: 1%; - display: block; - color: red; - margin: 8px 0 0; - padding: 0; - max-width: 320px; -} - -#login div.form div.form-horizontal div.form-group label, -#register div.form div.fields div.field div.label label { - color: #000; - font-weight: 700; -} - -#login div.form div.form-horizontal div.form-group div, -#register div.form div.fields div.field div.input { - float: left; - margin: 0; - padding: 0; -} - -#login div.form div.form-horizontal div.form-group div input.large { - width: 250px; -} - -#login div.form div.form-horizontal div.form-group div.checkbox, -#register div.form div.fields div.field div.checkbox { - margin: 0 0 0 184px; - padding: 0; -} - -#login div.form div.form-horizontal div.form-group div.checkbox label, -#register div.form div.fields div.field div.checkbox label { - color: #565656; - font-weight: 700; -} - -#login div.form div.buttons input, -#register div.form div.fields div.buttons input { - color: #000; - font-size: 1em; - font-weight: 700; - margin: 0; -} - -#changeset_content .container .wrapper, -#graph_content .container .wrapper { - width: 600px; -} - -#changeset_content .container .date, -.ac .match { - font-weight: 700; - padding-top: 5px; - padding-bottom: 5px; -} - -div#legend_container table td, -div#legend_choices table td { - border: none !important; - height: 20px !important; - padding: 0 !important; -} - -.q_filter_box { - border-radius: 4px; - border: 0 none; - margin-bottom: -4px; - margin-top: -4px; - padding-left: 3px; -} - -#node_filter { - border: 0px solid #545454; - color: #AAAAAA; - padding-left: 3px; -} - - -.group_members_wrap { - min-height: 85px; - padding-left: 20px; -} - -.group_members .group_member { - height: 30px; - padding: 0px 0px 0px 0px; -} - -.reviewer_status { - float: left; -} - -.reviewers_member { - height: 15px; - padding: 0px 0px 0px 10px; -} - -.emails_wrap { - padding: 0px 20px; -} - -.emails_wrap .email_entry { - height: 30px; - padding: 0px 0px 0px 10px; -} -.emails_wrap .email_entry .email { - float: left -} -.emails_wrap .email_entry .email_action { - float: left -} - -.ips_wrap { - padding: 0px 20px; -} - -.ips_wrap .ip_entry { - height: 30px; - padding: 0px 0px 0px 10px; -} -.ips_wrap .ip_entry .ip { - float: left -} -.ips_wrap .ip_entry .ip_action { - float: left -} - - -/*README STYLE*/ - -div.readme { - padding: 0px; -} - -div.readme h2 { - font-weight: normal; -} - -div.readme .readme_box { - background-color: #fafafa; -} - -div.readme .readme_box { - clear: both; - overflow: hidden; - margin: 0; - padding: 0 20px 10px; -} - -div.readme .readme_box h1, -div.readme .readme_box h2, -div.readme .readme_box h3, -div.readme .readme_box h4, -div.readme .readme_box h5, -div.readme .readme_box h6 { - border-bottom: 0 !important; - margin: 0 !important; - padding: 0 !important; - line-height: 1.5em !important; -} - - -div.readme .readme_box h1:first-child { - padding-top: .25em !important; -} - -div.readme .readme_box h2, -div.readme .readme_box h3 { - margin: 1em 0 !important; -} - -div.readme .readme_box h2 { - margin-top: 1.5em !important; - border-top: 4px solid #e0e0e0 !important; - padding-top: .5em !important; -} - -div.readme .readme_box p { - color: black !important; - margin: 1em 0 !important; - line-height: 1.5em !important; -} - -div.readme .readme_box ul { - list-style: disc !important; - margin: 1em 0 1em 2em !important; -} - -div.readme .readme_box ol { - list-style: decimal; - margin: 1em 0 1em 2em !important; -} - -div.readme .readme_box code { - font-size: 12px !important; - background-color: ghostWhite !important; - color: #444 !important; - padding: 0 .2em !important; - border: 1px solid #dedede !important; -} - -div.readme .readme_box pre code { - padding: 0 !important; - font-size: 12px !important; - background-color: #eee !important; - border: none !important; -} - -div.readme .readme_box pre { - margin: 1em 0; - font-size: 12px; - background-color: #eee; - border: 1px solid #ddd; - padding: 5px; - color: #444; - overflow: auto; - border-radius: 3px; -} - -div.readme .readme_box table { - display: table; - border-collapse: separate; - border-spacing: 2px; - border-color: gray; - width: auto !important; -} - - -/** RST STYLE **/ - - -div.rst-block { - padding: 0px; -} - -div.rst-block h2 { - font-weight: normal; -} - -div.rst-block { - background-color: #fafafa; -} - -div.rst-block { - clear: both; - overflow: hidden; - margin: 0; - padding: 0 20px; -} - -div.rst-block h1, -div.rst-block h2, -div.rst-block h3, -div.rst-block h4, -div.rst-block h5, -div.rst-block h6 { - border-bottom: 0 !important; - margin: 0 !important; - padding: 0 !important; - line-height: 1.5em !important; -} - - -div.rst-block h1:first-child { - padding-top: .25em !important; -} - -div.rst-block h2, -div.rst-block h3 { - margin: 1em 0 !important; -} - -div.rst-block h2 { - margin-top: 1.5em !important; - border-top: 4px solid #e0e0e0 !important; - padding-top: .5em !important; -} - -div.rst-block p { - color: black !important; - margin: 1em 0 !important; - line-height: 1.5em !important; -} - -div.rst-block ul { - list-style: disc !important; - margin: 1em 0 1em 2em !important; -} - -div.rst-block ol { - list-style: decimal; - margin: 1em 0 1em 2em !important; -} - -div.rst-block code { - font-size: 12px !important; - background-color: ghostWhite !important; - color: #444 !important; - padding: 0 .2em !important; - border: 1px solid #dedede !important; -} - -div.rst-block pre code { - padding: 0 !important; - font-size: 12px !important; - background-color: #eee !important; - border: none !important; -} - -div.rst-block pre { - margin: 1em 0; - font-size: 12px; - background-color: #eee; - border: 1px solid #ddd; - padding: 5px; - color: #444; - overflow: auto; - border-radius: 3px; -} - - -/** comment main **/ -.comments { - padding: 10px 20px; - max-width: 978px; -} - -.comments .comment .comment-wrapp { - border: 1px solid #ddd; - margin-top: 10px; - border-radius: 4px; -} - -.comments .comment .meta { - background: #f8f8f8; - padding: 4px; - border-bottom: 1px solid #ddd; - min-height: 18px; - overflow: auto; -} - -.comments .comment .meta img { - vertical-align: middle; -} - -.comments .comment .meta .user { - font-weight: bold; - float: left; - padding: 4px 2px 2px 2px; -} - -.comments .comment .meta .date { - float: left; - padding: 4px 4px 0px 4px; -} - -.comments .comment .text { - background-color: #FAFAFA; -} -.comment .text div.rst-block p { - margin: 0.5em 0px !important; -} - -.comments-number { - margin: 5px; - padding: 0px 0px 10px 0px; - font-weight: bold; - color: #666; - font-size: 16px; -} - -.automatic-comment { - font-style: italic; -} - -/** comment form **/ - -.status-block { - margin: 5px; - clear: both -} - -.comment-form textarea { - width: 100%; - height: 100px; - font-family: Lucida Console, Consolas, Monaco, Inconsolata, Liberation Mono, monospace; -} - -form.comment-form { - margin-top: 10px; - margin-left: 10px; -} - -.comment-inline-form .comment-block-ta, -.comment-form .comment-block-ta { - border: 1px solid #ccc; - border-radius: 3px; - box-sizing: border-box; -} - -.comment-form-submit { - margin-top: 5px; - margin-left: 525px; -} - -.file-comments { - display: none; -} - -.comment-form .comment { - margin-left: 10px; -} - -.comment-form .comment-help { - padding: 5px 5px 5px 5px; - color: #666; -} -.comment-form .comment-help .preview-btn, -.comment-form .comment-help .edit-btn { - float: right; - margin: -6px 0px 0px 0px; -} - -.comment-form .preview-box.unloaded, -.comment-inline-form .preview-box.unloaded { - height: 50px; - text-align: center; - padding: 20px; - background-color: #fafafa; -} - -.comment-form .comment-button { - padding-top: 5px; -} - -.add-another-button { - margin-left: 10px; - margin-top: 10px; - margin-bottom: 10px; -} - -.comment .buttons { - float: right; - margin: -1px 0px 0px 0px; -} - - -.show-inline-comments { - position: relative; - top: 1px -} - -/** comment inline form **/ -.comment-inline-form { - margin: 4px; - max-width: 978px; -} -.comment-inline-form .submitting-overlay { - display: none; - height: 0; - text-align: center; - font-size: 16px; - opacity: 0.5; -} - -.comment-inline-form .clearfix, -.comment-form .clearfix { - background: #EEE; - border-radius: 4px; - padding: 5px; - margin: 0px; -} - -div.comment-inline-form { - padding: 4px 0px 6px 0px; -} - -.comment-inline-form textarea { - width: 100%; - height: 100px; - font-family: Lucida Console, Consolas, Monaco, Inconsolata, Liberation Mono, monospace; -} - -form.comment-inline-form { - margin-top: 10px; - margin-left: 10px; -} - -.comment-inline-form-submit { - margin-top: 5px; - margin-left: 525px; -} - -.file-comments { - display: none; -} - -.comment-inline-form .comment { - margin-left: 10px; -} - -.comment-inline-form .comment-help { - padding: 5px 5px 5px 5px; - color: #666; -} - -.comment-inline-form .comment-help .preview-btn, -.comment-inline-form .comment-help .edit-btn { - float: right; - margin: -6px 0px 0px 0px; -} - -.comment-inline-form .comment-button { - padding-top: 5px; -} - -/** comment inline **/ -.inline-comments { - padding: 0 20px; -} - -.inline-comments div.rst-block { - clear: both; - overflow: hidden; - margin: 0; - padding: 0 20px 0px; -} - -.inline-comments .comment .comment-wrapp { - max-width: 978px; - border: 1px solid #ddd; - border-radius: 4px; - margin: 3px 3px 5px 5px; - background-color: #FAFAFA; -} - -.inline-comments .add-button-row { - padding: 2px 4px 8px 5px; -} - -.inline-comments .comment .meta { - background: #f8f8f8; - padding: 4px; - border-bottom: 1px solid #ddd; - min-height: 20px; - overflow: auto; -} - -.inline-comments .comment .meta img { - vertical-align: middle; -} - -.inline-comments .comment .meta .user { - font-weight: bold; - float: left; - padding: 3px; -} - -.inline-comments .comment .meta .date { - float: left; - padding: 3px; -} - -.inline-comments .comment .text { - background-color: #FAFAFA; -} - -.inline-comments .comments-number { - padding: 0px 0px 10px 0px; - font-weight: bold; - color: #666; - font-size: 16px; -} -.inline-comments-button .add-comment { - margin: 2px 0px 8px 5px !important -} - -input.status_change_radio { - margin: 2px 0 5px 15px; - vertical-align: middle; -} - -.notification-paginator { - padding: 0px 0px 4px 16px; -} - -#context-pages .pull-request span, -.menu_link_notifications { - padding: 4px 4px !important; - text-align: center; - color: #888 !important; - background-color: #DEDEDE !important; - border-radius: 4px !important; -} - -#context-pages .forks span, -.menu_link_notifications { - padding: 4px 4px !important; - text-align: center; - color: #888 !important; - background-color: #DEDEDE !important; - border-radius: 4px !important; -} - - -.notification-header { - padding-top: 6px; -} -.notification-header .desc { - font-size: 16px; - height: 24px; - float: left -} -.notification-list .container.unread { - background: none repeat scroll 0 0 rgba(255, 255, 180, 0.6); -} -.notification-header .gravatar { - background: none repeat scroll 0 0 transparent; - padding: 0px 0px 0px 8px; -} -.notification-list .container .notification-header .desc { - font-weight: bold; - font-size: 17px; -} -.notification-table { - border: 1px solid #ccc; - border-radius: 6px 6px 6px 6px; - clear: both; - margin: 0px 20px 0px 20px; -} -.notification-header .delete-notifications { - float: right; - padding-top: 8px; - cursor: pointer; -} -.notification-header .read-notifications { - float: right; - padding-top: 8px; - cursor: pointer; -} -.notification-subject { - clear: both; - border-bottom: 1px solid #eee; - padding: 5px 0px 5px 38px; -} - -.notification-body { - clear: both; - margin: 34px 2px 2px 8px -} - -/**** -PULL REQUESTS -*****/ -.pullrequests_section_head { - padding: 10px 10px 10px 0px; - margin: 0 20px; - font-size: 16px; - font-weight: bold; -} - -div.pr-details-title.closed { - color: #555; - background: #eee; -} - -div.pr-details-title { - font-size: 1.6em; - padding: 5px 0px 5px 10px; -} - -div.pr { - margin: 0px 20px; - padding: 4px 4px; -} -div.pr-desc { - margin: 0px 20px; -} -tr.pr-closed td { - background-color: #eee !important; - color: #555 !important; -} - -span.pr-closed-tag { - margin-bottom: 1px; - margin-right: 1px; - padding: 1px 3px; - font-size: 10px; - padding: 1px 3px 1px 3px; - font-size: 10px; - color: #577632; - white-space: nowrap; - border-radius: 4px; - border: 1px solid #d9e8f8; - line-height: 1.5em; -} - -.pr-box { - max-width: 978px; -} - -#s2id_org_ref, -#s2id_other_ref, -#s2id_org_repo, -#s2id_other_repo { - min-width: 150px; - margin: 5px; -} - -#pr-summary .msg-div { - margin: 5px 0; -} - -/**** - PERMS -*****/ -#perms .perms_section_head { - padding: 10px 10px 10px 0px; - font-size: 16px; - font-weight: bold; - text-transform: capitalize; -} - -#perms .perm_tag { - padding: 1px 3px 1px 3px; - font-size: 10px; - font-weight: bold; - text-transform: uppercase; - white-space: nowrap; - border-radius: 3px; -} - -#perms .perm_tag.admin { - background-color: #B94A48; - color: #ffffff; -} - -#perms .perm_tag.write { - background-color: #DB7525; - color: #ffffff; -} - -#perms .perm_tag.read { - background-color: #468847; - color: #ffffff; -} - -#perms .perm_tag.none { - background-color: #bfbfbf; - color: #ffffff; -} - -.perm-gravatar { - vertical-align: middle; - padding: 2px; -} -.perm-gravatar-ac { - vertical-align: middle; - padding: 2px; - width: 14px; - height: 14px; -} - -/***************************************************************************** - DIFFS CSS -******************************************************************************/ -.diff-collapse { - text-align: center; - margin-bottom: -15px; -} -.diff-collapse-button { - cursor: pointer; - color: #666; - font-size: 16px; -} -.diff-container { - -} - -.diff-container.hidden { - display: none; - overflow: hidden; -} - - -div.diffblock { - overflow: auto; - padding: 0px; - border: 1px solid #ccc; - background: #f8f8f8; - font-size: 100%; - line-height: 100%; - /* new */ - line-height: 125%; - border-radius: 6px 6px 0px 0px; -} -div.diffblock.margined { - margin: 0px 20px 0px 20px; -} -div.diffblock .code-header { - border-bottom: 1px solid #CCCCCC; - background: #EEEEEE; - padding: 10px 0 10px 0; - min-height: 14px; -} - -div.diffblock .code-header.banner { - border-bottom: 1px solid #CCCCCC; - background: #EEEEEE; - height: 14px; - margin: 0; - padding: 3px 100px 11px 100px; -} - -div.diffblock .code-header-title { - padding: 0px 0px 10px 5px !important; - margin: 0 !important; -} -div.diffblock .code-header .hash { - float: left; - padding: 2px 0 0 2px; -} -div.diffblock .code-header .date { - float: left; - text-transform: uppercase; - padding: 2px 0px 0px 2px; -} -div.diffblock .code-header div { - margin-left: 4px; - font-weight: bold; - font-size: 14px; -} - -div.diffblock .parents { - float: left; - min-height: 26px; - font-size: 10px; - font-weight: 400; - vertical-align: middle; - padding: 0px 2px 2px 2px; - background-color: #eeeeee; - border-bottom: 1px solid #CCCCCC; -} - -div.diffblock .children { - float: right; - min-height: 26px; - font-size: 10px; - font-weight: 400; - vertical-align: middle; - text-align: right; - padding: 0px 2px 2px 2px; - background-color: #eeeeee; - border-bottom: 1px solid #CCCCCC; -} - -div.diffblock .code-body { - background: #FFFFFF; - clear: both; -} -div.diffblock pre.raw { - background: #FFFFFF; - color: #000000; -} -table.code-difftable { - border-collapse: collapse; - width: 99%; - border-radius: 0px !important; -} -table.code-difftable td { - padding: 0 !important; - background: none !important; - border: 0 !important; - vertical-align: baseline !important -} -table.code-difftable .context { - background: none repeat scroll 0 0 #DDE7EF; - color: #999; -} -table.code-difftable .add { - background: none repeat scroll 0 0 #DDFFDD; -} -table.code-difftable .add ins { - background: none repeat scroll 0 0 #AAFFAA; - text-decoration: none; -} -table.code-difftable .del { - background: none repeat scroll 0 0 #FFDDDD; -} -table.code-difftable .del del { - background: none repeat scroll 0 0 #FFAAAA; - text-decoration: none; -} - -table.code-highlighttable div.code-highlight pre u:before, -table.code-difftable td.code pre u:before { - content: "\21a6"; - display: inline-block; - width: 0; -} -table.code-highlighttable div.code-highlight pre u.cr:before, -table.code-difftable td.code pre u.cr:before { - content: "\21a4"; - display: inline-block; - color: rgba(0,0,0,0.5); -} -table.code-highlighttable div.code-highlight pre u, -table.code-difftable td.code pre u { - color: rgba(0,0,0,0.15); -} -table.code-highlighttable div.code-highlight pre i, -table.code-difftable td.code pre i { - border-style: solid; - border-left-width: 1px; - color: rgba(0,0,0,0.5); -} - -/** LINE NUMBERS **/ -table.code-difftable .lineno { - padding-left: 2px; - padding-right: 2px !important; - width: 30px; - -moz-user-select: none; - -webkit-user-select: none; - border-right: 1px solid #CCC !important; - border-left: 0px solid #CCC !important; - border-top: 0px solid #CCC !important; - border-bottom: none !important; - vertical-align: middle !important; - text-align: center; -} -table.code-difftable .lineno.new { - text-align: right; -} -table.code-difftable .lineno.old { - text-align: right; -} -table.code-difftable .lineno a { - color: #aaa !important; - font: 11px Lucida Console, Consolas, Monaco, Inconsolata, Liberation Mono, monospace !important; - letter-spacing: -1px; - padding-left: 10px; - padding-right: 8px; - box-sizing: border-box; - cursor: pointer; - display: block; - width: 100%; -} - -table.code-difftable .lineno-inline { - background: none repeat scroll 0 0 #FFF !important; - padding-left: 2px; - padding-right: 2px; - text-align: right; - width: 30px; - -moz-user-select: none; - -webkit-user-select: none; -} - -/** CODE **/ -table.code-difftable .code { - display: block; - width: 100%; -} -table.code-difftable .code td { - margin: 0; - padding: 0; -} -table.code-difftable .code pre { - margin: 0 0 0 12px; - padding: 0; - min-height: 17px; - line-height: 17px; - white-space: pre-wrap; -} - -table.code-difftable .del .code pre:before { - content: "-"; - color: #800; - float: left; - left: -1em; - position: relative; - width: 0; -} - -table.code-difftable .add .code pre:before { - content: "+"; - color: #080; - float: left; - left: -1em; - position: relative; - width: 0; -} - -table.code-difftable .unmod .code pre:before { - content: " "; - float: left; - left: -1em; - position: relative; - width: 0; -} - -.add-bubble { - position: relative; - display: none; - float: left; - width: 0px; - height: 0px; - left: -8px; - box-sizing: border-box; -} - -/* comment bubble, only visible when in a commentable diff */ -.commentable-diff tr.line.add:hover td .add-bubble, -.commentable-diff tr.line.del:hover td .add-bubble, -.commentable-diff tr.line.unmod:hover td .add-bubble { - display: block; - z-index: 1; -} - -.add-bubble div { - background: #577632; - width: 16px; - height: 16px; - cursor: pointer; - padding: 0 2px 2px 0.5px; - border: 1px solid #577632; - border-radius: 3px; - box-sizing: border-box; -} - -.add-bubble div:before { - font-size: 14px; - color: #ffffff; - font-family: "kallithea"; - content: '\1f5ea'; -} - -.add-bubble div:hover { - transform: scale(1.2, 1.2); -} - -/* show some context of link targets - but only works when the link target - can be extended with any visual difference */ -div.comment:target:before { - display: block; - height: 100px; - margin: -100px 0 0; - content: ""; -} - -div.comment:target>.comment-wrapp { - border: solid 2px #ee0 !important; - margin: 2px 2px 4px 4px; -} - -.lineno:target a { - border: solid 2px #ee0 !important; - margin: -2px; -} - -.btn-image-diff-show, -.btn-image-diff-swap { - margin: 5px; -} - -.img-diff { - max-width: 45%; - height: auto; - margin: 5px; - /* http://lea.verou.me/demos/css3-patterns.html */ - background-image: - linear-gradient(45deg, #888 25%, transparent 25%, transparent), - linear-gradient(-45deg, #888 25%, transparent 25%, transparent), - linear-gradient(45deg, transparent 75%, #888 75%), - linear-gradient(-45deg, transparent 75%, #888 75%); - background-size: 10px 10px; - background-color: #999; -} - -.img-preview { - max-width: 100%; - height: auto; - margin: 5px; -} - -div.comment-prev-next-links div.prev-comment, -div.comment-prev-next-links div.next-comment { - display: inline-block; - min-width: 150px; - margin: 3px 6px; -} - -#help_kb { - display: none; -} - -.icon-only-links i { - color: white; -} diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/fontello/LICENSE.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/public/fontello/LICENSE.txt Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,12 @@ +Font license info + + +## Font Awesome + + Copyright (C) 2016 by Dave Gandy + + Author: Dave Gandy + License: SIL () + Homepage: http://fortawesome.github.com/Font-Awesome/ + + diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/fontello/README.txt --- a/kallithea/public/fontello/README.txt Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/public/fontello/README.txt Thu Jun 07 01:46:02 2018 +0200 @@ -2,16 +2,16 @@ ================================================================================ -Please, note, that you should obey original font licences, used to make this +Please, note, that you should obey original font licenses, used to make this webfont pack. Details available in LICENSE.txt file. - Usually, it's enough to publish content of LICENSE.txt file somewhere on your site in "About" section. - If your project is open-source, usually, it will be ok to make LICENSE.txt - file publically available in your repository. + file publicly available in your repository. -- Fonts, used in Fontello, don't require to make clickable links on your site. +- Fonts, used in Fontello, don't require a clickable link on your site. But any kind of additional authors crediting is welcome. ================================================================================ @@ -29,8 +29,8 @@ - LICENSE.txt - license info about source fonts, used to build your one. -- config.json - keeps your settings. You can import it back to fontello anytime, - to continue your work +- config.json - keeps your settings. You can import it back into fontello + anytime, to continue your work Why so many CSS files ? @@ -38,17 +38,17 @@ Because we like to fit all your needs :) -- basic file, .css - is usually enougth, in contains @font-face - and character codes definition +- basic file, .css - is usually enough, it contains @font-face + and character code definitions - *-ie7.css - if you need IE7 support, but still don't wish to put char codes directly into html - *-codes.css and *-ie7-codes.css - if you like to use your own @font-face - rules, but still wish to benefit of css generation. That can be very - convenient for automated assets build systems. When you need to update font - - no needs to manually edit files, just override old version with archive - content. See fontello source codes for example. + rules, but still wish to benefit from css generation. That can be very + convenient for automated asset build systems. When you need to update font - + no need to manually edit files, just override old version with archive + content. See fontello source code for examples. - *-embedded.css - basic css file, but with embedded WOFF font, to avoid CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. @@ -63,11 +63,11 @@ Attention for server setup -------------------------- -You MUST setup server to reply with proper `mime-types` for font files. In other -case, some browsers will fail to show fonts. +You MUST setup server to reply with proper `mime-types` for font files - +otherwise some browsers will fail to show fonts. Usually, `apache` already has necessary settings, but `nginx` and other -webservers should be tuned. Here is list of mime types for our file extentions: +webservers should be tuned. Here is list of mime types for our file extensions: - `application/vnd.ms-fontobject` - eot - `application/x-font-woff` - woff diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/fontello/css/kallithea.css --- a/kallithea/public/fontello/css/kallithea.css Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/public/fontello/css/kallithea.css Thu Jun 07 01:46:02 2018 +0200 @@ -2,11 +2,12 @@ @font-face { font-family: 'kallithea'; - src: url('../font/kallithea.eot?23730278'); - src: url('../font/kallithea.eot?23730278#iefix') format('embedded-opentype'), - url('../font/kallithea.woff?23730278') format('woff'), - url('../font/kallithea.ttf?23730278') format('truetype'), - url('../font/kallithea.svg?23730278#kallithea') format('svg'); + src: url('../font/kallithea.eot?96450582'); + src: url('../font/kallithea.eot?96450582#iefix') format('embedded-opentype'), + url('../font/kallithea.woff2?96450582') format('woff2'), + url('../font/kallithea.woff?96450582') format('woff'), + url('../font/kallithea.ttf?96450582') format('truetype'), + url('../font/kallithea.svg?96450582#kallithea') format('svg'); font-weight: normal; font-style: normal; } @@ -16,7 +17,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'kallithea'; - src: url('../font/kallithea.svg?23730278#kallithea') format('svg'); + src: url('../font/kallithea.svg?96450582#kallithea') format('svg'); } } */ diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/fontello/demo.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/public/fontello/demo.html Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,459 @@ + + + + + + + + +
+

+ kallithea + font demo +

+ +
+
+
+
icon-circle0x2022
+
icon-right-open0x2190
+
icon-up-open0x2191
+
icon-left-open0x2192
+
+
+
icon-down-open0x2193
+
icon-code0x2194
+
icon-sort0x2195
+
icon-exchange0x21c4
+
+
+
icon-plus-circled0x2295
+
icon-minus-circled0x2296
+
icon-diff-added0x229e
+
icon-diff-removed0x229f
+
+
+
icon-diff-modified0x22a1
+
icon-clock0x231a
+
icon-triangle-left0x23f4
+
icon-triangle-right0x23f5
+
+
+
icon-triangle-up0x23f6
+
icon-triangle-down0x23f7
+
icon-circle-empty0x25e6
+
icon-heart-empty0x2661
+
+
+
icon-heart0x2665
+
icon-cog-alt0x2699
+
icon-database0x26c3
+
icon-gear0x26ed
+
+
+
icon-plus0x2795
+
icon-minus0x2796
+
icon-resize-vertical0x2b65
+
icon-move-up0x2b71
+
+
+
icon-move-down0x2b73
+
icon-file-submodule0xe801
+
icon-git-merge0xe802
+
icon-ruler0xe811
+
+
+
icon-download-cloud0xe813
+
icon-upload-cloud0xe814
+
icon-graph0xe815
+
icon-file-zip0xe816
+
+
+
icon-file-code0xe81a
+
icon-doc-text-inv0xe81c
+
icon-diff0xe81d
+
icon-diff-ignored0xe81e
+
+
+
icon-diff-renamed0xe81f
+
icon-paste0xe820
+
icon-file-directory0xe823
+
icon-git-compare0xe824
+
+
+
icon-git-pull-request0xe825
+
icon-repo-forked0xe827
+
icon-fork0xe828
+
icon-docs0xe834
+
+
+
icon-doc-inv0xe836
+
icon-file-powerpoint0xe837
+
icon-tags0xe83d
+
icon-bookmark-empty0xe83f
+
+
+
icon-bookmark0xe840
+
icon-align-left0xe841
+
icon-sliders0xe843
+
icon-eye-off0xe851
+
+
+
icon-rss0xe855
+
icon-rss-squared0xe856
+
icon-strike0xe859
+
icon-box0xe85e
+
+
+
icon-right0xe85f
+
icon-left0xe860
+
icon-left-circled0xe861
+
icon-right-circled0xe862
+
+
+
icon-up-circled0xe863
+
icon-up0xe864
+
icon-down0xe865
+
icon-down-circled0xe866
+
+
+
🌎 icon-globe0x1f30e
+
👁 icon-eye0x1f441
+
👤 icon-user0x1f464
+
👥 icon-users0x1f465
+
+
+
💾 icon-floppy0x1f4be
+
📁 icon-folder-empty0x1f4c1
+
📂 icon-folder-open-empty0x1f4c2
+
📋 icon-clippy0x1f4cb
+
+
+
📒 icon-book0x1f4d2
+
🔍 icon-search0x1f50d
+
🔐 icon-keyhole-circled0x1f510
+
🔑 icon-key0x1f511
+
+
+
🔒 icon-lock0x1f512
+
🔓 icon-lock-open-alt0x1f513
+
🔖 icon-tag0x1f516
+
🔧 icon-wrench0x1f527
+
+
+
🖉 icon-pencil0x1f589
+
🖊 icon-pencil-squared0x1f58a
+
🖋 icon-edit0x1f58b
+
🗀 icon-folder0x1f5c0
+
+
+
🗁 icon-folder-open0x1f5c1
+
🗅 icon-doc0x1f5c5
+
🗈 icon-doc-text0x1f5c8
+
🗑 icon-trashcan0x1f5d1
+
+
+
🗘 icon-arrows-cw0x1f5d8
+
🗩 icon-comment0x1f5e9
+
🗪 icon-comment-discussion0x1f5ea
+
🗴 icon-cancel0x1f5f4
+
+
+
🗵 icon-cancel-circled0x1f5f5
+
🗸 icon-ok0x1f5f8
+
🗹 icon-ok-circled0x1f5f9
+
🚫 icon-block0x1f6ab
+
+
+
🛠 icon-tools0x1f6e0
+
+
+ + + \ No newline at end of file diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/fontello/font/kallithea.eot Binary file kallithea/public/fontello/font/kallithea.eot has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/fontello/font/kallithea.svg --- a/kallithea/public/fontello/font/kallithea.svg Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/public/fontello/font/kallithea.svg Thu Jun 07 01:46:02 2018 +0200 @@ -1,112 +1,212 @@ -Copyright (C) 2015 by original authors @ fontello.com +Copyright (C) 2018 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/fontello/font/kallithea.ttf Binary file kallithea/public/fontello/font/kallithea.ttf has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/fontello/font/kallithea.woff Binary file kallithea/public/fontello/font/kallithea.woff has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/fontello/font/kallithea.woff2 Binary file kallithea/public/fontello/font/kallithea.woff2 has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/android-chrome-192x192.png Binary file kallithea/public/images/android-chrome-192x192.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/android-chrome-512x512.png Binary file kallithea/public/images/android-chrome-512x512.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/apple-touch-icon.png Binary file kallithea/public/images/apple-touch-icon.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/browserconfig.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/public/images/browserconfig.xml Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/favicon-16x16.png Binary file kallithea/public/images/favicon-16x16.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/favicon-32x32.png Binary file kallithea/public/images/favicon-32x32.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/favicon.ico Binary file kallithea/public/images/favicon.ico has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/favicon.png Binary file kallithea/public/images/favicon.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/kallithea-logo.png Binary file kallithea/public/images/kallithea-logo.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/manifest.json --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/public/images/manifest.json Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,18 @@ +{ + "name": "Kallithea", + "icons": [ + { + "src": "/images/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/images/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/mstile-144x144.png Binary file kallithea/public/images/mstile-144x144.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/mstile-150x150.png Binary file kallithea/public/images/mstile-150x150.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/mstile-310x150.png Binary file kallithea/public/images/mstile-310x150.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/mstile-310x310.png Binary file kallithea/public/images/mstile-310x310.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/mstile-70x70.png Binary file kallithea/public/images/mstile-70x70.png has changed diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/images/safari-pinned-tab.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/public/images/safari-pinned-tab.svg Thu Jun 07 01:46:02 2018 +0200 @@ -0,0 +1,44 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + + diff -r 42788d5f5967 -r b3289fef0daa kallithea/public/js/base.js --- a/kallithea/public/js/base.js Wed Jun 06 21:37:21 2018 +0200 +++ b/kallithea/public/js/base.js Thu Jun 07 01:46:02 2018 +0200 @@ -311,12 +311,6 @@ })(); -/** - * GLOBAL YUI Shortcuts - */ -var YUD = YAHOO.util.Dom; -var YUE = YAHOO.util.Event; - /* Invoke all functions in callbacks */ var _run_callbacks = function(callbacks){ if (callbacks !== undefined){ @@ -371,21 +365,22 @@ .fail(function(jqXHR, textStatus, errorThrown) { if (textStatus == "abort") return; - $target.html('ERROR: {0}'.format(textStatus)); + $target.html('ERROR: {0}'.format(textStatus)); $target.css('opacity','1.0'); }) ; }; -var ajaxGET = function(url,success) { +var ajaxGET = function(url, success, failure) { + if(failure === undefined) { + failure = function(jqXHR, textStatus, errorThrown) { + if (textStatus != "abort") + alert("Ajax GET error: " + textStatus); + }; + } return $.ajax({url: url, headers: {'X-PARTIAL-XHR': '1'}, cache: false}) .done(success) - .fail(function(jqXHR, textStatus, errorThrown) { - if (textStatus == "abort") - return; - alert("Ajax GET error: " + textStatus); - }) - ; + .fail(failure); }; var ajaxPOST = function(url, postData, success, failure) { @@ -416,25 +411,6 @@ }); }; -/** - * activate .lazy-cs mouseover for showing changeset tooltip - */ -var show_changeset_tooltip = function(){ - $('.lazy-cs').mouseover(function(e){ - var $target = $(e.currentTarget); - var rid = $target.attr('raw_id'); - var repo_name = $target.attr('repo_name'); - if(rid && !$target.hasClass('tooltip')){ - _show_tooltip(e, _TM['loading ...']); - var url = pyroutes.url('changeset_info', {"repo_name": repo_name, "revision": rid}); - ajaxGET(url, function(json){ - $target.addClass('tooltip'); - _show_tooltip(e, json['message']); - _activate_tooltip($target); - }); - } - }); -}; var _onSuccessFollow = function(target){ var $target = $(target); @@ -456,8 +432,8 @@ } } -var toggleFollowingRepo = function(target, follows_repo_id){ - var args = 'follows_repo_id=' + follows_repo_id; +var toggleFollowingRepo = function(target, follows_repository_id){ + var args = 'follows_repository_id=' + follows_repository_id; args += '&_authentication_token=' + _authentication_token; $.post(TOGGLE_FOLLOW_URL, args, function(data){ _onSuccessFollow(target); @@ -480,76 +456,57 @@ }; /** - * tooltips + * load tooltips dynamically based on data attributes, used for .lazy-cs changeset links */ - -var tooltip_activate = function(){ - $(document).ready(_init_tooltip); -}; - -var _activate_tooltip = function($tt){ - $tt.mouseover(_show_tooltip); - $tt.mousemove(_move_tooltip); - $tt.mouseout(_close_tooltip); -}; +var get_changeset_tooltip = function() { + var $target = $(this); + var tooltip = $target.data('tooltip'); + if (!tooltip) { + var raw_id = $target.data('raw_id'); + var repo_name = $target.data('repo_name'); + var url = pyroutes.url('changeset_info', {"repo_name": repo_name, "revision": raw_id}); -var _init_tooltip = function(){ - var $tipBox = $('#tip-box'); - if(!$tipBox.length){ - $tipBox = $('
'); - $(document.body).append($tipBox); + $.ajax(url, { + async: false, + success: function(data) { + tooltip = data["message"]; + } + }); + $target.data('tooltip', tooltip); } - - $tipBox.hide(); - $tipBox.css('position', 'absolute'); - $tipBox.css('max-width', '600px'); - - _activate_tooltip($('.tooltip')); + return tooltip; }; -var _show_tooltip = function(e, tipText, safe){ - e.stopImmediatePropagation(); - var el = e.currentTarget; - var $el = $(el); - if(tipText){ - // just use it - } else if(el.tagName.toLowerCase() === 'img'){ - tipText = el.alt ? el.alt : ''; - } else { - tipText = el.title ? el.title : ''; - safe = safe || $el.hasClass("safe-html-title"); +/** + * activate tooltips and popups + */ +var tooltip_activate = function(){ + function placement(p, e){ + if(e.getBoundingClientRect().top > 2*$(window).height()/3){ + return 'top'; + }else{ + return 'bottom'; + } } - - if(tipText !== ''){ - // save org title - $el.attr('tt_title', tipText); - // reset title to not show org tooltips - $el.prop('title', ''); - - var $tipBox = $('#tip-box'); - if (safe) { - $tipBox.html(tipText); - } else { - $tipBox.text(tipText); - } - $tipBox.css('display', 'block'); - } + $(document).ready(function(){ + $('[data-toggle="tooltip"]').tooltip({ + container: 'body', + placement: placement + }); + $('[data-toggle="popover"]').popover({ + html: true, + container: 'body', + placement: placement, + trigger: 'hover', + template: '' + }); + $('.lazy-cs').tooltip({ + title: get_changeset_tooltip, + placement: placement + }); + }); }; -var _move_tooltip = function(e){ - e.stopImmediatePropagation(); - var $tipBox = $('#tip-box'); - $tipBox.css('top', (e.pageY + 15) + 'px'); - $tipBox.css('left', (e.pageX + 15) + 'px'); -}; - -var _close_tooltip = function(e){ - e.stopImmediatePropagation(); - var $tipBox = $('#tip-box'); - $tipBox.hide(); - var el = e.currentTarget; - $(el).prop('title', $(el).attr('tt_title')); -}; /** * Quick filter widget @@ -621,9 +578,13 @@ var line_no = $anchorcomment.data('line_no'); if ($comment_div[0]) { $comment_div.append($anchorcomment.children()); - _comment_div_append_add($comment_div, f_path, line_no); + if (f_path && line_no) { + _comment_div_append_add($comment_div, f_path, line_no); + } else { + _comment_div_append_form($comment_div, f_path, line_no); + } } else { - $anchorcomment.before("Comment to {0} line {1} which is outside the diff context:".format(f_path || '?', line_no || '?')); + $anchorcomment.before("Comment to {0} line {1} which is outside the diff context:".format(f_path || '?', line_no || '?')); } }); linkInlineComments($('.firstlink'), $('.comment:first-child')); @@ -634,7 +595,7 @@ var children = $bubble.closest('tr.line').children('[id]'); var line_td_id = children[children.length - 1].id; var $comment_div = _get_add_comment_div(line_td_id); - var f_path = $bubble.closest('div.full_f_path').data('f_path'); + var f_path = $bubble.closest('[data-f_path]').data('f_path'); var parts = line_td_id.split('_'); var line_no = parts[parts.length-1]; comment_div_state($comment_div, f_path, line_no, true); @@ -652,28 +613,29 @@ return $comments_box; } -// set $comment_div state - showing or not showing form and Add button -function comment_div_state($comment_div, f_path, line_no, show_form) { +// Set $comment_div state - showing or not showing form and Add button. +// An Add button is shown on non-empty forms when no form is shown. +// The form is controlled by show_form_opt - if undefined, form is only shown for general comments. +function comment_div_state($comment_div, f_path, line_no, show_form_opt) { + var show_form = show_form_opt !== undefined ? show_form_opt : !f_path && !line_no; var $forms = $comment_div.children('.comment-inline-form'); var $buttonrow = $comment_div.children('.add-button-row'); - var $comments = $comment_div.children('.comment'); + var $comments = $comment_div.children('.comment:not(.submitting)'); + $forms.remove(); + $buttonrow.remove(); if (show_form) { - if (!$forms.length) { - _comment_div_append_form($comment_div, f_path, line_no); - } + _comment_div_append_form($comment_div, f_path, line_no); + } else if ($comments.length) { + _comment_div_append_add($comment_div, f_path, line_no); } else { - $forms.remove(); - } - $buttonrow.remove(); - if ($comments.length && !show_form) { - _comment_div_append_add($comment_div, f_path, line_no); + $comment_div.parent('tr').remove(); } } // append an Add button to $comment_div and hook it up to show form function _comment_div_append_add($comment_div, f_path, line_no) { var addlabel = TRANSLATION_MAP['Add Another Comment']; - var $add = $('
{0}
'.format(addlabel)); + var $add = $('
{0}
'.format(addlabel)); $comment_div.append($add); $add.children('.add-button').click(function(e) { comment_div_state($comment_div, f_path, line_no, true); @@ -682,78 +644,124 @@ // append a comment form to $comment_div function _comment_div_append_form($comment_div, f_path, line_no) { - var $form_div = $($('#comment-inline-form-template').html().format(f_path, line_no)) + var $form_div = $('#comment-inline-form-template').children() + .clone() .addClass('comment-inline-form'); $comment_div.append($form_div); + var $preview = $comment_div.find("div.comment-preview"); var $form = $comment_div.find("form"); + var $textarea = $form.find('textarea'); $form.submit(function(e) { e.preventDefault(); - var text = $('#text_'+line_no).val(); - if (!text){ - return; + var text = $textarea.val(); + var review_status = $form.find('input:radio[name=changeset_status]:checked').val(); + var pr_close = $form.find('input:checkbox[name=save_close]:checked').length ? 'on' : ''; + var pr_delete = $form.find('input:checkbox[name=save_delete]:checked').length ? 'delete' : ''; + + if (!text && !review_status && !pr_close && !pr_delete) { + alert("Please provide a comment"); + return false; } - $form.find('.submitting-overlay').show(); + if (pr_delete) { + if (text || review_status || pr_close) { + alert('Cannot delete pull request while making other changes'); + return false; + } + if (!confirm('Confirm to delete this pull request')) { + return false; + } + var comments = $('.comment').size(); + if (comments > 0 && + !confirm('Confirm again to delete this pull request with {0} comments'.format(comments))) { + return false; + } + } - var success = function(json_data) { - $comment_div.append(json_data['rendered_text']); - comment_div_state($comment_div, f_path, line_no, false); - linkInlineComments($('.firstlink'), $('.comment:first-child')); - }; + if (review_status) { + var $review_status = $preview.find('.automatic-comment'); + var review_status_lbl = $("#comment-inline-form-template input.status_change_radio[value='" + review_status + "']").parent().text().strip(); + $review_status.find('.comment-status-label').text(review_status_lbl); + $review_status.show(); + } + $preview.find('.comment-text div').text(text); + $preview.show(); + $textarea.val(''); + if (f_path && line_no) { + $form.hide(); + } + var postData = { 'text': text, 'f_path': f_path, - 'line': line_no + 'line': line_no, + 'changeset_status': review_status, + 'save_close': pr_close, + 'save_delete': pr_delete + }; + var success = function(json_data) { + if (pr_delete) { + location = json_data['location']; + } else { + $comment_div.append(json_data['rendered_text']); + comment_div_state($comment_div, f_path, line_no); + linkInlineComments($('.firstlink'), $('.comment:first-child')); + if ((review_status || pr_close) && !f_path && !line_no) { + // Page changed a lot - reload it after closing the submitted form + comment_div_state($comment_div, f_path, line_no, false); + location.reload(true); + } + } }; - ajaxPOST(AJAX_COMMENT_URL, postData, success); + var failure = function(x, s, e) { + $preview.removeClass('submitting').addClass('failed'); + var $status = $preview.find('.comment-submission-status'); + $('', { + 'title': e, + text: _TM['Unable to post'] + }).replaceAll($status.contents()); + $('
', { + 'class': 'btn-group' + }).append( + $('
' + + '' + + '' + + '
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("