Changeset - 106323ecfdfa
[Not reviewed]
Merge default
2 34 1
Thomas De Schampheleire - 6 years ago 2020-05-06 20:36:23
thomas.de_schampheleire@nokia.com
merge stable
35 files changed:
0 comments (0 inline, 0 general)
.hgtags
Show inline comments
 
@@ -67,12 +67,13 @@ a84d40e9481fcea4dafadee86b03f0dd401527d6
 
64ea7ea0923618a0c117acebb816a6f0d162bfdb 0.3.3
 
cf635c823ea059cc3a1581b82d8672e46b682384 0.3.4
 
4cca4cc6a0a97f4c4763317184cd41aca4297630 0.3.5
 
082c9b8f0f17bd34740eb90c69bdc4c80d4b5b31 0.3.6
 
a18445b85d407294da0b7f1d8be3bedef5ffdea6 0.3.7
 
8db761c407685e7b08b800c947890035b0d67025 0.4.0rc1
 
60f726162fd6c515bd819feb423be73cad01d7d3 0.4.0rc2
 
19086c5de05f4984d7a90cd31624c45dd893f6bb 0.4.0
 
da65398a62fff50f3d241796cbf17acdea2092ef 0.4.1
 
bfa0b0a814644f0af3f492d17a9ed169cc3b89fe 0.5.0
 
d01a8e92936dbd62c76505432f60efba432e9397 0.5.1
 
aa0a637fa6f635a5e024fa56b19ed2a2dacca857 0.5.2
 
9f5ca9088067618d79129d224c35c818bd2d2f12 0.6.0
CONTRIBUTORS
Show inline comments
 
List of contributors to Kallithea project:
 

	
 
    Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> 2014-2020
 
    Mads Kiilerich <mads@kiilerich.com> 2016-2020
 
    Asterios Dimitriou <steve@pci.gr> 2016-2017 2020
 
    Private <adamantine.sword@gmail.com> 2019-2020
 
    Dennis Fink <dennis.fink@c3l.lu> 2020
 
    Étienne Gilli <etienne@gilli.io> 2020
 
    J. Lavoie <j.lavoie@net-c.ca> 2020
 
    robertus <robertuss12@gmail.com> 2020
 
    Ross Thomas <ross@lns-nevasoft.com> 2020
 
    Andrej Shadura <andrew@shadura.me> 2012 2014-2017 2019
 
    Étienne Gilli <etienne.gilli@gmail.com> 2015-2017 2019
 
    Allan Nordhøy <epost@anotheragency.no> 2017-2019
 
    ssantos <ssantos@web.de> 2018-2019
 
    Adi Kriegisch <adi@cg.tuwien.ac.at> 2019
 
    Danni Randeris <danniranderis@gmail.com> 2019
 
    Edmund Wong <ewong@crazy-cat.org> 2019
 
    Elizabeth Sherrock <lizzyd710@gmail.com> 2019
 
    Hüseyin Tunç <huseyin.tunc@bulutfon.com> 2019
 
    leela <53352@protonmail.com> 2019
 
    Manuel Jacob <me@manueljacob.de> 2019
 
    Mateusz Mendel <mendelm9@gmail.com> 2019
 
    Nathan <bonnemainsnathan@gmail.com> 2019
 
    Oleksandr Shtalinberg <o.shtalinberg@gmail.com> 2019
 
    Private <adamantine.sword@gmail.com> 2019
 
    THANOS SIOURDAKIS <siourdakisthanos@gmail.com> 2019
 
    Wolfgang Scherer <wolfgang.scherer@gmx.de> 2019
 
    Христо Станев <hstanev@gmail.com> 2019
 
    Dominik Ruf <dominikruf@gmail.com> 2012 2014-2018
 
    Michal Čihař <michal@cihar.com> 2014-2015 2018
 
    Branko Majic <branko@majic.rs> 2015 2018
 
    Chris Rule <crule@aegistg.com> 2018
 
    Jesús Sánchez <jsanchezfdz95@gmail.com> 2018
 
    Patrick Vane <patrick_vane@lowentry.com> 2018
 
    Pheng Heong Tan <phtan90@gmail.com> 2018
 
    Максим Якимчук <xpinovo@gmail.com> 2018
 
    Марс Ямбар <mjambarmeta@gmail.com> 2018
 
    Mads Kiilerich <madski@unity3d.com> 2012-2017
 
    Unity Technologies 2012-2017
 
    Søren Løvborg <sorenl@unity3d.com> 2015-2017
 
    Sam Jaques <sam.jaques@me.com> 2015 2017
 
    Asterios Dimitriou <steve@pci.gr> 2016-2017
 
    Alessandro Molina <alessandro.molina@axant.it> 2017
 
    Anton Schur <tonich.sh@gmail.com> 2017
 
    Ching-Chen Mao <mao@lins.fju.edu.tw> 2017
 
    Eivind Tagseth <eivindt@gmail.com> 2017
 
    FUJIWARA Katsunori <foozy@lares.dti.ne.jp> 2017
 
    Holger Schramm <info@schramm.by> 2017
 
    Karl Goetz <karl@kgoetz.id.au> 2017
 
    Lars Kruse <devel@sumpfralle.de> 2017
 
    Marko Semet <markosemet@googlemail.com> 2017
 
    Viktar Vauchkevich <victorenator@gmail.com> 2017
 
    Takumi IINO <trot.thunder@gmail.com> 2012-2016
 
    Jan Heylen <heyleke@gmail.com> 2015-2016
MANIFEST.in
Show inline comments
 
include           .coveragerc
 
include           .eslintrc.js
 
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           conftest.py
 
include           dev_requirements.txt
 
include           development.ini
 
include           pytest.ini
docs/contributing.rst
Show inline comments
 
@@ -260,26 +260,26 @@ rarely needed:
 
  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``).
 

	
 
Debugging
 
^^^^^^^^^
 

	
 
A good way to trace what Kallithea is doing is to keep an eye on the output of
 
stdout/stderr from the server process. Perhaps change ``my.ini`` to log at
 
A good way to trace what Kallithea is doing is to keep an eye on the output on
 
stdout/stderr of the server process. Perhaps change ``my.ini`` to log at
 
``DEBUG`` or ``INFO`` level, especially ``[logger_kallithea]``, but perhaps
 
also other loggers. It is often easier to add additional ``log`` or ``print``
 
statements than to use a Python debugger.
 

	
 
Sometimes it is simpler to disable ``errorpage.enabled`` and perhaps also
 
``trace_errors.enable`` to expose raw errors instead of adding extra
 
processing. Enabling ``debug`` can be helpful for showing and exploring
 
tracebacks in the browser, but is also insecure and will add extra processing.
 

	
 
TurboGears2 DebugBar
 
^^^^^^^^^^^^^^^^^^^^
 

	
docs/dev/i18n.rst
Show inline comments
 
file renamed from kallithea/i18n/how_to to docs/dev/i18n.rst
 
.. _translations:
 

	
 
============
 
Translations
 
============
 

	
 
Translations are available on Hosted Weblate at the following URL:
 

	
 
    https://hosted.weblate.org/projects/kallithea/kallithea/
 

	
 
Registered users may contribute to the existing languages, or request a new
 
language translation.
 

	
 

	
 
@@ -108,13 +110,148 @@ Edit the newly updated translation file.
 
`init_catalog` step from the 'new translation' instructions above.
 

	
 

	
 
Testing translations
 
--------------------
 

	
 
Edit `kallithea/tests/conftest.py` and set `i18n.lang` to `<new_language_code>`
 
and run Kallithea tests by executing::
 

	
 
    py.test
 

	
 

	
 
Managing translations with scripts/i18n tooling
 
-----------------------------------------------
 

	
 
The general idea with the ``scripts/i18n`` tooling is to keep changes in the
 
main repository focussed on actual and reviewable changes with minimal noise.
 
Noisy generated or redundant localization changes (that are useful when
 
translations) are contained in the ``kallithea-i18n`` repo on the ``i18n``
 
branch. The translation files in the main repository have no line numbers, no
 
untranslated entries, no fuzzy entries, no unused entries, and no constantly
 
changing records of "latest" this and that (name, date, version, etc).
 

	
 
The branches in the main repo (``default`` and ``stable``) will thus only have
 
stripped ``.pot`` and ``.po`` files: an (almost) empty
 
``kallithea/i18n/kallithea.pot`` file, and minimal ``.po`` files. There are no
 
binary ``.mo`` files in any repo - these are only generated when packaging for
 
release (or locally if installing from source).
 

	
 
Generally, ``kallithea/i18n/`` should not be changed on the ``default`` and
 
``stable`` branches at all. The ``i18n`` branch should *only* change
 
``kallithea/i18n/`` . If there are changesets with exceptions from that, these
 
changesets should probably be grafted/redone in the "right" place.
 

	
 
The basic flow is thus:
 

	
 
0. All weblate translation is done on the ``i18n`` branch which generally is
 
   based on the ``stable`` branch.
 
1. Graft the essential part of all new changes on the ``i18n`` branch to
 
   ``stable`` (while normalizing to current stripped state of stable).
 
2. Merge from ``stable`` to ``i18n`` (while normalizing to the resulting
 
   unstripped and fully ``msgmerge``'d state and ``.pot``-updating state).
 
3. Verify that the content of the ``i18n`` branch will give exactly the content
 
   of the ``stable`` branch after stripping. If there is a diff, something has
 
   to be fixed in one way or the other ... and the whole process should
 
   probably be redone.
 

	
 
Translate
 
^^^^^^^^^
 

	
 
First land full translation changes in the ``kallithea-i18n`` repo on the
 
``i18n`` branch. That can be done in pretty much any way you want. If changes
 
for some reason have to be grafted or merged, there might be odd conflicts due
 
to all the noise. Conflicts on the full ``i18n`` branch can perhaps be resolved
 
more easily using non-stripping normalization before merging::
 

	
 
  python3 setup.py extract_messages && cp kallithea/i18n/kallithea.pot full.pot && hg revert kallithea/i18n/kallithea.pot -r .
 
  hg resolve kallithea/i18n/ --tool X --config merge-tools.X.executable=python3 --config merge-tools.X.args='scripts/i18n normalized-merge --merge-pot-file full.pot $local $base $other $output'
 

	
 
Land in main repository - stripped
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 

	
 
When the full i18n changes have landed on the ``i18n`` branch, prepare to land
 
them on ``stable``::
 

	
 
  hg up -cr stable
 
  python3 setup.py extract_messages && cp kallithea/i18n/kallithea.pot full.pot && hg revert kallithea/i18n/kallithea.pot
 

	
 
Consider all new ``i18n`` changes since last merge from ``stable``::
 

	
 
  hg log -G --style compact -r 'only("i18n", children(::stable))'
 

	
 
Graft them one by one (or in collapsed chunks) while normalizing.
 

	
 
If the graft has conflicts, use the ``scripts/i18n`` normalization tool to
 
apply ``msgmerge`` and strip before doing 3-way merge and resolving conflicts::
 

	
 
  hg resolve kallithea/i18n/ --tool X --config merge-tools.X.executable=python3 --config merge-tools.X.args='scripts/i18n normalized-merge --merge-pot-file full.pot --strip $local $base $other $output'
 

	
 
When all conflicts have been resolved, continue the graft::
 

	
 
  hg graft --continue
 

	
 
Then make sure any non-conflicting files are normalized and stripped too::
 

	
 
  scripts/i18n normalize-po-files --strip --merge-pot-file full.pot kallithea/i18n/*/LC_MESSAGES/kallithea.po
 
  hg ci --amend --config ui.editor=true
 

	
 
When things have been grafted to the ``stable`` branch, clean up history if
 
necessary: clean up the author and commit message when necessary, and perhaps
 
merge multiple changesets from same contributor.
 

	
 
Merge back to ``i18n``
 
^^^^^^^^^^^^^^^^^^^^^^
 

	
 
For any i18n changes that for some reason have been done on the ``stable``
 
branch, apply them manually on the ``i18n`` branch too - perhaps by grafting
 
and editing manually. The merge done in this step will `not` take care of it.
 
If the verification step done a bit later points out that something has been
 
missed, strip and go back to this point.
 

	
 
Then merge back to the ``i18n`` branch using normalization while keeping the
 
full ``.po`` files, and updating the full ``.pot`` and ``.po`` to current
 
state::
 

	
 
  hg up -cr i18n
 
  hg merge stable --tool internal:fail
 
  hg revert kallithea/i18n/*/LC_MESSAGES/*.po -r .
 
  hg resolve -m kallithea/i18n/*/LC_MESSAGES/*.po
 
  hg resolve -l  # verify all conflicts have been resolved
 
  python3 setup.py extract_messages && cp kallithea/i18n/kallithea.pot full.pot
 
  scripts/i18n normalize-po-files --merge-pot-file full.pot kallithea/i18n/*/LC_MESSAGES/kallithea.po
 
  hg commit  # "Merge from stable"
 

	
 
Note: ``normalize-po-files`` can also pretty much be done manually with::
 

	
 
  for po in kallithea/i18n/*/LC_MESSAGES/kallithea.po; do msgmerge --width=76 --backup=none --previous --update $po full.pot ; done
 

	
 
Note: Additional merges from ``stable`` to ``i18n`` can be done any time.
 

	
 
Verify
 
^^^^^^
 

	
 
Verify things are in sync between the full ``i18n`` branch and the stripped
 
``stable`` branch::
 

	
 
  hg up -cr stable
 
  hg revert -a -r i18n
 
  python3 setup.py extract_messages && cp kallithea/i18n/kallithea.pot full.pot && hg revert kallithea/i18n/kallithea.pot
 
  scripts/i18n normalize-po-files --strip --merge-pot-file full.pot kallithea/i18n/*/LC_MESSAGES/kallithea.po
 
  hg diff
 

	
 
If there is a diff, figure out where it came from, go back and fix the root
 
cause, and redo the graft/merge.
 

	
 
Push
 
^^^^
 

	
 
The changes on the ``stable`` branch should now be ready for pushing - verify
 
the actual changes with a thorough review of::
 

	
 
  hg out -pvr stable
 

	
 
When ``stable`` changes have been pushed, also push the ``i18n`` branch to the
 
``kallithea-i18n`` repo so Weblate can see it.
 

	
 

	
 
.. _Weblate: http://weblate.org/
docs/dev/translation.rst
Show inline comments
 
deleted file
docs/index.rst
Show inline comments
 
@@ -65,25 +65,25 @@ User guide
 
   usage/vcs_notes
 
   usage/statistics
 
   api/api
 

	
 

	
 
Developer guide
 
***************
 

	
 
.. toctree::
 
   :maxdepth: 1
 

	
 
   contributing
 
   dev/translation
 
   dev/i18n
 
   dev/dbmigrations
 

	
 

	
 
.. _python: http://www.python.org/
 
.. _django: http://www.djangoproject.com/
 
.. _mercurial: https://www.mercurial-scm.org/
 
.. _bitbucket: http://bitbucket.org/
 
.. _subversion: http://subversion.tigris.org/
 
.. _git: http://git-scm.com/
 
.. _celery: http://celeryproject.org/
 
.. _Sphinx: http://sphinx.pocoo.org/
 
.. _vcs: http://pypi.python.org/pypi/vcs
docs/setup.rst
Show inline comments
 
@@ -144,24 +144,34 @@ be writeable by the Kallithea user.
 
    each update. If it already exists with other data, Kallithea will not
 
    overwrite the existing ``authorized_keys``, and the server process will
 
    instead throw an exception. The system administrator thus cannot ssh
 
    directly to the Kallithea user but must use su/sudo from another account.
 

	
 
    If ``/home/kallithea/.ssh/`` (the directory of the path specified in the
 
    ``ssh_authorized_keys`` setting of the ``.ini`` file) does not exist as a
 
    directory, Kallithea will attempt to create it. If that path exists but is
 
    *not* a directory, or is not readable-writable-executable by the server
 
    process, the server process will raise an exception each time it attempts to
 
    write the ``authorized_keys`` file.
 

	
 
.. note:: It is possible to configure the SSH server to look for authorized
 
   keys in multiple files, for example reserving ``ssh/authorized_keys`` to be
 
   used for normal SSH and with Kallithea using
 
   ``.ssh/authorized_keys_kallithea``. In ``/etc/ssh/sshd_config`` set
 
   ``AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys_kallithea``
 
   and restart sshd, and in ``my.ini`` set ``ssh_authorized_keys =
 
   /home/kallithea/.ssh/authorized_keys_kallithea``. Note that this new
 
   location will apply to all system users, and that multiple entries for the
 
   same SSH key will shadow each other.
 

	
 
.. warning:: The handling of SSH access is steered directly by the command
 
    specified in the ``authorized_keys`` file. There is no interaction with the
 
    web UI.  Once SSH access is correctly configured and enabled, it will work
 
    regardless of whether the Kallithea web process is actually running. Hence,
 
    if you want to perform repository or server maintenance and want to fully
 
    disable all access to the repositories, disable SSH access by setting
 
    ``ssh_enabled = false`` in the correct ``.ini`` file (i.e. the ``.ini`` file
 
    specified in the ``authorized_keys`` file.)
 

	
 
The ``authorized_keys`` file can be updated manually with ``kallithea-cli
 
ssh-update-authorized-keys -c my.ini``. This command is not needed in normal
 
operation but is for example useful after changing SSH-related settings in the
kallithea/__init__.py
Show inline comments
 
@@ -25,25 +25,25 @@ Original author and date, and relevant c
 
:author: marcink
 
:copyright: (c) 2013 RhodeCode GmbH, (C) 2014 Bradley M. Kuhn, and others.
 
:license: GPLv3, see LICENSE.md for more details.
 
"""
 

	
 
import platform
 
import sys
 

	
 

	
 
if sys.version_info < (3, 6):
 
    raise Exception('Kallithea requires python 3.6 or later')
 

	
 
VERSION = (0, 5, 99)
 
VERSION = (0, 6, 0)
 
BACKENDS = {
 
    'hg': 'Mercurial repository',
 
    'git': 'Git repository',
 
}
 

	
 
CELERY_APP = None  # set to Celery app instance if using Celery
 
CELERY_EAGER = False
 

	
 
CONFIG = {}
 

	
 
# Linked module for extensions
 
EXTENSIONS = {}
kallithea/controllers/error.py
Show inline comments
 
@@ -32,29 +32,26 @@ from tg import config, expose, request
 
from tg import tmpl_context as c
 
from tg.i18n import ugettext as _
 

	
 
from kallithea.lib.base import BaseController
 

	
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class ErrorController(BaseController):
 
    """Generates error documents as and when they are required.
 

	
 
    The ErrorDocuments middleware forwards to ErrorController when error
 
    The errorpage middleware renders /error/document when error
 
    related status codes are returned from the application.
 

	
 
    This behavior can be altered by changing the parameters to the
 
    ErrorDocuments middleware in your config/middleware.py file.
 
    """
 

	
 
    def _before(self, *args, **kwargs):
 
        # disable all base actions since we don't need them here
 
        pass
 

	
 
    @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')
kallithea/controllers/root.py
Show inline comments
 
@@ -22,14 +22,14 @@ from kallithea.lib.base import BaseContr
 
# 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):
 

	
 
    def __init__(self):
 
        self.mapper = make_map(config)
 

	
 
        # the following assignment hooks in error handling
 
        # The URL '/error/document' (the default TG errorpage.path) should be handled by ErrorController.document
 
        self.error = ErrorController()
kallithea/i18n/be/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -441,30 +441,24 @@ msgstr "Бачнасць рэпазітара ў публічным часопісе абноўлена"
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr "Памылка пры даданні рэпазітара ў агульнадаступны часопіс"
 

	
 
msgid "Nothing"
 
msgstr "Нічога"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "Рэпазітар %s адзначаны як форк %s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "Памылка пры выкананні аперацыі"
 

	
 
msgid "Cache invalidation successful"
 
msgstr "Кэш скінуты"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "Памылка пры скіданні кэша"
 

	
 
msgid "Pulled from remote location"
 
msgstr "Занесеныя змены з аддаленага рэпазітара"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "Памылка пры занясенні змен з аддаленага рэпазітара"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Адбылася памылка пры выдаленні статыстыкі рэпазітара"
 

	
 
msgid "Updated VCS settings"
 
msgstr "Абноўлены налады VCS"
 

	
 
@@ -1487,27 +1481,24 @@ msgstr "Рэвізія для выгрузкі"
 
msgid "%s Creating Repository"
 
msgstr "Стварэнне рэпазітара %s"
 

	
 
msgid "Creating repository"
 
msgstr "Стварэнне рэпазітара"
 

	
 
msgid "%s Repository Settings"
 
msgstr "Налады рэпазітара %s"
 

	
 
msgid "Extra Fields"
 
msgstr "Дадатковыя палі"
 

	
 
msgid "Caches"
 
msgstr "Кэшы"
 

	
 
msgid "Remote"
 
msgstr "Выдалены"
 

	
 
msgid "Statistics"
 
msgstr "Статыстыка"
 

	
 
msgid "Parent"
 
msgstr "Бацькоўская група"
 

	
 
msgid "Set"
 
msgstr "Набор"
 

	
 
@@ -1539,44 +1530,27 @@ msgstr "Выдаліць гэты рэпазітар"
 
msgid "This repository has %s fork"
 
msgid_plural "This repository has %s forks"
 
msgstr[0] "Дадзены рэпазітар мае %s копію"
 
msgstr[1] "Дадзены рэпазітар мае %s копіі"
 
msgstr[2] "Дадзены рэпазітар мае %s копій"
 

	
 
msgid "Detach forks"
 
msgstr "Адлучыць форкі"
 

	
 
msgid "Delete forks"
 
msgstr "Выдаліць форкі"
 

	
 
msgid "Invalidate Repository Cache"
 
msgstr "Скінуць кэш рэпазітара"
 

	
 
msgid ""
 
"Manually invalidate cache for this repository. On first access, the "
 
"repository will be cached again."
 
msgstr "Ручное скіданне кэша рэпазітара. Пры першым доступе кэш адновіцца."
 

	
 
msgid "List of Cached Values"
 
msgstr "Спіс кэшаваных значэнняў"
 

	
 
msgid "Prefix"
 
msgstr "Прэфікс"
 

	
 
msgid "Key"
 
msgstr "Ключ"
 

	
 
msgid "Active"
 
msgstr "Актыўны"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "Пацвердзіце выдаленне гэтага поля: %s"
 

	
 
msgid "New field key"
 
msgstr "Ключ"
 

	
 
msgid "New field label"
 
msgstr "Імя поля"
 

	
 
msgid "Enter short label"
 
msgstr "Увядзіце кароткае імя поля"
 

	
 
@@ -1748,24 +1722,27 @@ msgstr "Метатэгаванне"
 
msgid "Add user group"
 
msgstr "Дадаць групу карыстальнікаў"
 

	
 
msgid "User Groups"
 
msgstr "Групы карыстальнікаў"
 

	
 
msgid "Add User Group"
 
msgstr "Дадаць групу карыстальнікаў"
 

	
 
msgid "Short, optional description for this user group."
 
msgstr "Кароткае дадатковае апісанне для гэтай групы карыстальнікаў."
 

	
 
msgid "Active"
 
msgstr "Актыўны"
 

	
 
msgid "Show Members"
 
msgstr "Паказаць удзельнікаў"
 

	
 
msgid "Members"
 
msgstr "Удзельнікі"
 

	
 
msgid "Confirm to delete this user group: %s"
 
msgstr "Пацвердзіце выдаленне наступнай групы карыстальнікаў: %s"
 

	
 
msgid "Delete this user group"
 
msgstr "Выдаліць гэтую групу карыстальнікаў"
 

	
kallithea/i18n/da/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -477,30 +477,24 @@ msgstr ""
 
"Der opstod en fejl under indstilling af dette repository, i den "
 
"offentlige journal"
 

	
 
msgid "Nothing"
 
msgstr "Intet"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "Mærket repository %s som fork af %s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "Der opstod en fejl under denne operation"
 

	
 
msgid "Cache invalidation successful"
 
msgstr "Ugyldiggørelse af cache er succesfuld"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "Der opstod en fejl under cache ugyldiggørelse"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "Der opstod en fejl under pull fra remote placering"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Der opstod en fejl under sletning af repository statistik"
 

	
 
msgid "Updated VCS settings"
 
msgstr "Opdateret VCS-indstillinger"
 

	
 
msgid ""
 
"Unable to activate hgsubversion support. The \"hgsubversion\" library is "
 
"missing"
kallithea/i18n/de/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -309,40 +309,40 @@ msgstr "Erfolgreich Kerninhalt aktualisi
 
msgid "Successfully updated gist data"
 
msgstr "Erfolgreich Kerndaten aktualisiert"
 

	
 
msgid "Error occurred during update of gist %s"
 
msgstr "Fehler beim Aktualisieren der Kerndaten %s"
 

	
 
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"
 

	
 
msgid "Your account was updated successfully"
 
msgstr "Ihr Account wurde erfolgreich aktualisiert"
 
msgstr "Ihr Konto wurde erfolgreich aktualisiert"
 

	
 
msgid "Error occurred during update of user %s"
 
msgstr "Fehler beim Aktualisieren der Benutzer %s"
 

	
 
msgid "Error occurred during update of user password"
 
msgstr "Fehler bei der Änderung des Kennworts"
 

	
 
msgid "Added email %s to user"
 
msgstr "Die EMail Addresse %s wurde zum Benutzer hinzugefügt"
 
msgstr "Die E-Mail-Addresse %s wurde zum Benutzer hinzugefügt"
 

	
 
msgid "An error occurred during email saving"
 
msgstr "Währen der Speicherung der EMail Addresse trat ein Fehler auf"
 
msgstr "Währen der Speicherung der E-Mail-Addresse trat ein Fehler auf"
 

	
 
msgid "Removed email from user"
 
msgstr "Die EMail Addresse wurde vom Benutzer entfernt"
 
msgstr "Die E-Mail-Addresse wurde vom Benutzer entfernt"
 

	
 
msgid "API key successfully created"
 
msgstr "API Key wurde erfolgreich erstellt"
 

	
 
msgid "API key successfully reset"
 
msgstr "API-Schlüssel erfolgreich zurückgesetzt"
 

	
 
msgid "API key successfully deleted"
 
msgstr "API-Schlüssel erfolgreich gelöscht"
 

	
 
msgid "Read"
 
msgstr "Lesen"
 
@@ -463,30 +463,24 @@ msgstr ""
 
"Es trat ein Fehler während der Aktualisierung der Sicherbarkeit dieses "
 
"Repositorys im Öffentlichen Logbuch auf"
 

	
 
msgid "Nothing"
 
msgstr "Nichts"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "Markiere Repository %s als Abzweig von Repository %s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "Während dieser operation trat ein Fehler auf"
 

	
 
msgid "Cache invalidation successful"
 
msgstr "Cache Entfernung war erfolgreich"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "Währen der Cache Invalidierung trat ein Fehler auf"
 

	
 
msgid "Pulled from remote location"
 
msgstr "Von entferntem Ort übertragen"
 

	
 
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"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Während des löschens der Repository Statistiken trat ein Fehler auf"
 

	
 
msgid "Updated VCS settings"
 
@@ -512,25 +506,25 @@ msgstr ""
 
msgid "Updated application settings"
 
msgstr "Anwendungseinstellungen aktualisiert"
 

	
 
msgid "Updated visualisation settings"
 
msgstr "Visualisierungseinstellungen aktualisiert"
 

	
 
msgid "Error occurred during updating visualisation settings"
 
msgstr ""
 
"Es ist ein Fehler während der Aktualisierung der Layouteinstellung "
 
"aufgetreten"
 

	
 
msgid "Please enter email address"
 
msgstr "Bitte gebe eine E-Mailadresse an"
 
msgstr "Bitte geben Sie eine E-Mail-Adresse an"
 

	
 
msgid "Send email task created"
 
msgstr "Task zum Versenden von E-Mails erstellt"
 

	
 
msgid "Builtin hooks are read-only. Please use another hook name."
 
msgstr ""
 
"Die eingebauten Hooks sind schreibgeschützt. Bitte verwenden Sie einen "
 
"anderen Hook-Namen."
 

	
 
msgid "Added new hook"
 
msgstr "Neuer Hook hinzugefügt"
 

	
 
@@ -1046,24 +1040,30 @@ msgid "no permission to create repositor
 
msgstr "keine Berechtigung, um ein Repository auf höchster Ebene anzulegen"
 

	
 
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"
 

	
 
msgid "This username or user group name is not valid"
 
msgstr "Dieser Benutzername oder Benutzergruppenname ist nicht gültig"
 

	
 
msgid "This is not a valid path"
 
msgstr "Dies ist ein Ungültiger Pfad"
 

	
 
msgid "This email address is already in use"
 
msgstr "Diese E-Mail-Addresse ist bereits in Benutzung"
 

	
 
msgid "Email address \"%(email)s\" not found"
 
msgstr "E-Mail-Addresse „%(email)s“ existiert nicht."
 

	
 
msgid ""
 
"The LDAP Login attribute of the CN must be specified - this is the name "
 
"of the attribute that is equivalent to \"username\""
 
msgstr ""
 
"Das LDAP-Login-Attribut des CN muss angeben werden - Es ist der Name des "
 
"Attributes äquivalent zu \"Benutzername\""
 

	
 
msgid "Please enter a valid IPv4 or IPv6 address"
 
msgstr "Bitte eine gültige IPv4- oder IPv6-Adresse angeben"
 

	
 
msgid ""
 
"The network size (bits) must be within the range of 0-32 (not %(bits)r)"
 
@@ -1139,32 +1139,39 @@ msgid "Sign In"
 
msgstr "Einloggen"
 

	
 
msgid "Password Reset"
 
msgstr "Passwort zurücksetzen"
 

	
 
msgid "Reset Your Password to %s"
 
msgstr "Setze dein Passwort auf %s zurück"
 

	
 
msgid "Reset Your Password"
 
msgstr "Setze dein Passwort zurück"
 

	
 
msgid "Email Address"
 
msgstr "E-Mailadresse"
 
msgstr "E-Mail-Adresse"
 

	
 
msgid "Captcha"
 
msgstr "CAPTCHA"
 

	
 
msgid "Send Password Reset Email"
 
msgstr "E-Mail zum Zurücksetzen des Passworts anfordern"
 

	
 
msgid ""
 
"A password reset link will be sent to the specified email address if it "
 
"is registered in the system."
 
msgstr ""
 
"Ein Link zum Zurücksetzen des Passworts wird an die angegebene E-Mail-"
 
"Adresse gesendet, wenn diese im System registriert ist."
 

	
 
msgid "You are about to set a new password for the email address %s."
 
msgstr ""
 
"Du bist dabei, ein neues Passwort für die E-Mail-Adresse %s festzulegen."
 

	
 
msgid ""
 
"Note that you must use the same browser session for this as the one used "
 
"to request the password reset."
 
msgstr ""
 
"Beachten Sie, dass Sie dafür die gleiche Browsersitzung verwenden müssen, "
 
"mit der Sie das Zurücksetzen des Passworts beantragt haben."
 

	
 
msgid "Code you received in the email"
 
@@ -1427,25 +1434,25 @@ msgstr ""
 
"\n"
 
"Ebenso wie Passworte, sollten API-Schlüssel somit niemals mit anderen\n"
 
"geteilt oder von nicht-vertrauenswürdigen Skripten oder Diensten\n"
 
"verwendet werden. Falls ein solcher Zugriff zwischenzeitlich passiert "
 
"sein\n"
 
"sollte, dann können Sie hier den API-Schlüssel zurücksetzen, um weiteren\n"
 
"Missbrauchen zu verhindern.\n"
 

	
 
msgid "Primary"
 
msgstr "Primär"
 

	
 
msgid "Confirm to delete this email: %s"
 
msgstr "Löschen der E-Mail \"%s\" bestätigen"
 
msgstr "Löschen der E-Mail %s bestätigen"
 

	
 
msgid "No additional emails specified."
 
msgstr "Keine weiteren E-Mails spezifiziert."
 

	
 
msgid "New email address"
 
msgstr "Neue E-Mailadresse"
 

	
 
msgid "Change Your Account Password"
 
msgstr "Passwort des Benutzerkontos ändern"
 

	
 
msgid "Current password"
 
msgstr "Aktuelles Passwort"
 
@@ -1755,27 +1762,24 @@ msgid ""
 
"Kallithea server logs, or contact administrator."
 
msgstr ""
 
"Bedauerlicherweise ist bei dieser Operation ein Fehler aufgetreten. Bitte "
 
"prüfen Sie die Kallithea-Server-Logs or kontaktieren Sie die "
 
"Administrierenden."
 

	
 
msgid "%s Repository Settings"
 
msgstr "%s Repositoryeinstellungen"
 

	
 
msgid "Extra Fields"
 
msgstr "Extra-Feld"
 

	
 
msgid "Caches"
 
msgstr "Zwischenspeicher"
 

	
 
msgid "Remote"
 
msgstr "Entfernt"
 

	
 
msgid "Statistics"
 
msgstr "Statistiken"
 

	
 
msgid "Parent"
 
msgstr "Übergeordnet"
 

	
 
msgid "Set"
 
msgstr "Setzen"
 

	
 
@@ -1816,49 +1820,30 @@ msgstr "Fork abtrennen"
 
msgid "Delete forks"
 
msgstr "Forks löschen"
 

	
 
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 ""
 
"Das gelöschte Repository wird beiseitegelegt und versteckt, bis ein "
 
"Administrierender es verfallen lässt. Der Administrierende kann es sowohl "
 
"permanent löschen oder wiederherstellen."
 

	
 
msgid "Invalidate Repository Cache"
 
msgstr "Ungültiger Repositorycache"
 

	
 
msgid ""
 
"Manually invalidate cache for this repository. On first access, the "
 
"repository will be cached again."
 
msgstr ""
 
"Manuell den Zwischenspeicher für dieses Repository verfallen lassen. Beim "
 
"ersten Zugriff wird der Zwischenspeicher erneut aufgefüllt."
 

	
 
msgid "List of Cached Values"
 
msgstr "Liste der zwischengespeicherten Werte"
 

	
 
msgid "Prefix"
 
msgstr "Präfix"
 
msgid "Label"
 
msgstr "Bezeichnung"
 

	
 
msgid "Key"
 
msgstr "Schlüssel"
 

	
 
msgid "Active"
 
msgstr "Aktiv"
 

	
 
msgid "Label"
 
msgstr "Bezeichnung"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "Löschen des Felds bestätigen: %s"
 

	
 
msgid "New field key"
 
msgstr "Eindeutiges Kennzeichen des neuen Felds"
 

	
 
msgid "New field label"
 
msgstr "Neue Bezeichnung des Felds"
 

	
 
msgid "Enter short label"
 
msgstr "Eingabe einer kurzen Bezeichnung"
 

	
 
@@ -2243,24 +2228,27 @@ msgstr "Erkannte Meta-Tags stilisieren:"
 
msgid "Add user group"
 
msgstr "Benutzergruppe hinzufügen"
 

	
 
msgid "User Groups"
 
msgstr "Benutzergruppen"
 

	
 
msgid "Add User Group"
 
msgstr "Benutzergruppe hinzufügen"
 

	
 
msgid "Short, optional description for this user group."
 
msgstr "Kurze, optionale Beschreibung für diese Benutzergruppe."
 

	
 
msgid "Active"
 
msgstr "Aktiv"
 

	
 
msgid "User Group: %s"
 
msgstr "Benutzergruppe: %s"
 

	
 
msgid "Members"
 
msgstr "Mitglieder"
 

	
 
msgid "Confirm to delete this user group: %s"
 
msgstr "Bestätigen, um diese Benutzergruppe zu löschen: %s"
 

	
 
msgid "Delete this user group"
 
msgstr "Diese Benutzergruppe löschen"
 

	
 
@@ -2444,24 +2432,27 @@ msgstr "Öffenentliches Repository"
 
msgid "Subscribe to %s rss feed"
 
msgstr "Abonniere den %s RSS Feed"
 

	
 
msgid "Subscribe to %s atom feed"
 
msgstr "Abonniere den %s ATOM Feed"
 

	
 
msgid "Hello %s"
 
msgstr "Hallo %s"
 

	
 
msgid "or"
 
msgstr "oder"
 

	
 
msgid "Upload File"
 
msgstr "Datei hochladen"
 

	
 
msgid "Commit Changes"
 
msgstr "Änderungen einchecken"
 

	
 
msgid "Size"
 
msgstr "Größe"
 

	
 
msgid "Last Modified"
 
msgstr "Zuletzt geändert"
 

	
 
msgid "Delete file"
 
msgstr "Datei löschen"
 

	
 
@@ -2605,17 +2596,20 @@ msgstr "Clone-URL"
 
msgid "Download as zip"
 
msgstr "Herunterladen als zip"
 

	
 
msgid "Feed"
 
msgstr "Feed"
 

	
 
msgid "Latest Changes"
 
msgstr "Letzte Änderungen"
 

	
 
msgid "Quick Start"
 
msgstr "Schnelleinstieg"
 

	
 
msgid "Add or upload files directly via Kallithea"
 
msgstr "Dateien direkt über Kallithea hinzufügen oder hochladen"
 

	
 
msgid "Readme file from revision %s:%s"
 
msgstr "Liesmich-Datei von Revision %s:%s"
 

	
 
msgid "Download %s as %s"
 
msgstr "%s als %s herunterladen"
kallithea/i18n/el/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -19,40 +19,58 @@ msgstr "Χωρίς"
 
msgid "(closed)"
 
msgstr "(κλειστό)"
 

	
 
msgid "Show whitespace"
 
msgstr "Εμφάνιση κενού"
 

	
 
msgid "Ignore whitespace"
 
msgstr "Αγνόηση κενού"
 

	
 
msgid "Increase diff context to %(num)s lines"
 
msgstr "Αύξηση του diff πλαισίου σε %(num)s γραμμές"
 

	
 
msgid "No permission to change status"
 
msgstr "Χωρίς δικαιώματα αλλαγής της κατάστασης"
 

	
 
msgid "Successfully deleted pull request %s"
 
msgstr "Επιτυχής διαγραφή αιτήματος έλξης %s"
 

	
 
msgid "Such revision does not exist for this repository"
 
msgstr "Δεν υπάρχει τέτοια αναθεώρηση για αυτό το αποθετήριο"
 

	
 
msgid "Could not find other repository %s"
 
msgstr "Δεν βρέθηκε το αποθετήριο %s"
 

	
 
msgid "Cannot compare repositories of different types"
 
msgstr "Δεν μπορεί να γίνει σύγκριση αποθετηρίων διαφορετικού τύπου"
 

	
 
msgid "Cannot show empty diff"
 
msgstr "Δεν μπορεί να γίνει η εμφάνιση άδειου diff"
 

	
 
msgid "No ancestor found for merge diff"
 
msgstr "Δεν βρέθηκε πρόγονος για να συγχωνευθούν οι διαφορές"
 

	
 
msgid "Multiple merge ancestors found for merge compare"
 
msgstr "Βρέθηκαν πολλαπλοί πρόγονοι για σύγκριση της συγχώνευσης"
 

	
 
msgid "Cannot compare repositories without using common ancestor"
 
msgstr ""
 
"Δεν μπορεί να γίνει σύγκριση αποθετηρίων χωρίς να χρησιμοποιηθεί κοινός "
 
"πρόγονος"
 

	
 
msgid "No response"
 
msgstr "Χωρίς απόκριση"
 

	
 
msgid "Unknown error"
 
msgstr "Άγνωστο λάθος"
 
msgstr "Άγνωστο σφάλμα"
 

	
 
msgid ""
 
"The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 
"Η αίτηση δεν  μπόρεσε να ερμηνευτεί από τον εξυπηρετητή λόγω κακής "
 
"διατύπωσης."
 

	
 
msgid "Unauthorized access to resource"
 
msgstr "Ανεξουσιοδοτημένη πρόσβαση στον πόρο"
 

	
 
msgid "You don't have permission to view this page"
 
msgstr "Δεν έχετε άδεια για να εμφανίσετε αυτή τη σελίδα"
 
@@ -73,52 +91,60 @@ msgstr "%s συνέβαλε στο %s"
 
msgid "Changeset was too big and was cut off..."
 
msgstr "Το σετ αλλαγών ήταν πολύ μεγάλο και περικόπηκε..."
 

	
 
msgid "%s %s feed"
 
msgstr "%s %s τροφοδοσία"
 

	
 
msgid "Changes on %s repository"
 
msgstr "Αλλαγές στο αποθετήριο %s"
 

	
 
msgid "Click here to add new file"
 
msgstr "Κλικ εδώ για προθήκη νέου αρχείου"
 

	
 
msgid "There are no files yet."
 
msgstr "Δεν υπάρχουν αρχεία ακόμα."
 

	
 
msgid "%s at %s"
 
msgstr "%s την %s"
 

	
 
msgid "You can only delete files with revision being a valid branch"
 
msgstr ""
 
"Μπορείτε να διαγράψετε μόνο αρχεία με αναθεώρηση που βρίσκονται σε έγκυρη "
 
"διακλάδωση"
 

	
 
msgid "Deleted file %s via Kallithea"
 
msgstr "Διαγραφή αρχείου %s μέσω του Kallithea"
 
msgstr "Διαγραφή αρχείου %s μέσω της Καλλιθέας"
 

	
 
msgid "Successfully deleted file %s"
 
msgstr "Επιτυχής διαγραφή αρχείου %s"
 

	
 
msgid "Error occurred during commit"
 
msgstr "Συνέβη λάθος κατά το commit"
 
msgstr "Παρουσιάστηκε σφάλμα κατά το commit"
 

	
 
msgid "You can only edit files with revision being a valid branch"
 
msgstr ""
 
"Μπορείτε να επεξεργαστείτε μόνο αρχεία σε αναθεώρηση που βρίσκονται σε "
 
"έγκυρη διακλάδωση"
 

	
 
msgid "Edited file %s via Kallithea"
 
msgstr "Επεξεργασία αρχείου %s μέσω του Kallithea"
 
msgstr "Επεξεργασία αρχείου %s μέσω της Καλλιθέας"
 

	
 
msgid "No changes"
 
msgstr "Καμία αλλαγή"
 

	
 
msgid "Successfully committed to %s"
 
msgstr "Επιτυχής παράδοση σε %s"
 

	
 
msgid "Added file via Kallithea"
 
msgstr "Προσθήκη αρχείου μέσω Kallithea"
 
msgstr "Προσθήκη αρχείου μέσω της Καλλιθέας"
 

	
 
msgid "No content"
 
msgstr "Χωρίς περιεχόμενο"
 

	
 
msgid "No filename"
 
msgstr "Χωρίς όνομα αρχείου"
 

	
 
msgid "Location must be relative path and must not contain .. in path"
 
msgstr ""
 
"Η τοποθεσία πρέπει να είναι σχετική διαδρομή και να μην περιέχει .. μέσα "
 
"της"
 

	
 
@@ -135,25 +161,25 @@ msgid "Unknown archive type"
 
msgstr "Άγνωστος τύπος αρχειοθέτησης"
 

	
 
msgid "Changesets"
 
msgstr "Σετ αλλαγών"
 

	
 
msgid "Branches"
 
msgstr "Κλάδοι"
 

	
 
msgid "Tags"
 
msgstr "Ετικέτες"
 

	
 
msgid "An error occurred during repository forking %s"
 
msgstr "Συνέβει ένα λάθος κατά την διακλάδωση του αποθετηρίου %s"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την διακλάδωση του αποθετηρίου %s"
 

	
 
msgid "Groups"
 
msgstr "Ομάδες"
 

	
 
msgid "Repositories"
 
msgstr "Αποθετήρια"
 

	
 
msgid "Branch"
 
msgstr "Κλάδος"
 

	
 
msgid "Closed Branches"
 
msgstr "Κλειστοί Κλάδοι"
 
@@ -195,94 +221,136 @@ msgid "Changeset"
 
msgstr "Σετ αλλαγών"
 

	
 
msgid "Special"
 
msgstr "Ειδικός"
 

	
 
msgid "Peer branches"
 
msgstr "Ομότιμοι κλάδοι"
 

	
 
msgid "Bookmarks"
 
msgstr "Σελιδοδείκτες"
 

	
 
msgid "Error creating pull request: %s"
 
msgstr "Λάθος στη δημιουργία αιτήματος έλξης - pull request: %s"
 
msgstr "Σφάλμα στη δημιουργία αιτήματος έλξης - pull request: %s"
 

	
 
msgid "Error occurred while creating pull request"
 
msgstr "Λάθος κατά τη δημιουργία αιτήματος έλξης (pull request)"
 
msgstr "Παρουσιάστηκε σφάλμα κατά τη δημιουργία αίτησης έλξης"
 

	
 
msgid "Successfully opened new pull request"
 
msgstr "Ένα νέο αίτημα έλξης (pull request) δημιουργήθηκε επιτυχώς"
 

	
 
msgid "New pull request iteration created"
 
msgstr "Δημιουργήθηκε νέο αίτημα έλξης"
 

	
 
msgid "Meanwhile, the following reviewers have been added: %s"
 
msgstr "Εντωμεταξύ, οι ακόλουθοι κριτικοί προστέθηκαν: %s"
 

	
 
msgid "Meanwhile, the following reviewers have been removed: %s"
 
msgstr "Εντωμεταξύ, οι ακόλουθοι κριτικοί αφαιρέθηκαν: %s"
 

	
 
msgid "No description"
 
msgstr "Χωρίς περιγραφή"
 

	
 
msgid "Pull request updated"
 
msgstr "Ενημερώθηκε η αίτηση έλξης"
 

	
 
msgid "Successfully deleted pull request"
 
msgstr "Επιτυχής διαγραφή αιτήματος έλξης"
 

	
 
msgid "Revision %s not found in %s"
 
msgstr "Η αναθεώρηση %s δεν βρέθηκε στο %s"
 

	
 
msgid "Error: changesets not found when displaying pull request from %s."
 
msgstr ""
 
"Σφάλμα: τα σετ αλλαγών δεν βρέθηκαν όταν εμφανίζεται το αίτημα έλξης από "
 
"το %s."
 

	
 
msgid "This pull request has already been merged to %s."
 
msgstr "Το αίτημα έλξης έχει ήδη συγχωνευτεί με το %s."
 

	
 
msgid "This pull request has been closed and can not be updated."
 
msgstr "Αυτό το αίτημα έλξης έχει κλείσει και δεν μπορεί να ενημερωθεί."
 

	
 
msgid "The following additional changes are available on %s:"
 
msgstr "Οι επιπλέον ακόλουθες αλλαγές είναι διαθέσιμες στο %s:"
 

	
 
msgid "No additional changesets found for iterating on this pull request."
 
msgstr ""
 
"Δεν βρέθηκαν επιπλέον σετ αλλαγών στην προσέγγιση αυτού του αιτήματος "
 
"έλξης."
 

	
 
msgid "Note: Branch %s has another head: %s."
 
msgstr "Σημείωση: Ο κλάδος %s έχει άλλη κεφαλή (head): %s."
 

	
 
msgid "Git pull requests don't support iterating yet."
 
msgstr "Αιτήματα έλξης του git δεν υποστηρίζουν ακόμα ενημερώσεις."
 

	
 
msgid ""
 
"Error: some changesets not found when displaying pull request from %s."
 
msgstr ""
 
"Σφάλμα: κάποια σετ αλλαγών δεν βρέθηκαν όταν εμφανιζόταν αυτό το αίτημα "
 
"έλξης από το %s."
 

	
 
msgid "The diff can't be shown - the PR revisions could not be found."
 
msgstr ""
 
"Οι διαφορές δεν μπορούν να εμφανιστούν - οι αναθεωρήσεις δεν βρέθηκαν."
 

	
 
msgid "Invalid search query. Try quoting it."
 
msgstr "Άκυρο αίτημα αναζήτησης. Δοκιμάστε με εισαγωγικά."
 

	
 
msgid "The server has no search index."
 
msgstr "Ο διακομιστής δεν έχει ευρετήριο αναζήτησης."
 

	
 
msgid "An error occurred during search operation."
 
msgstr "Ένα λάθος συνέβη κατά την διαδικασία αναζήτησης."
 
msgstr "Παρουσιάστηκε σφάλμα κατά τη λειτουργία αναζήτησης."
 

	
 
msgid "No data ready yet"
 
msgstr "Δεν υπάρχουν ακόμα έτοιμα δεδομένα"
 

	
 
msgid "Statistics are disabled for this repository"
 
msgstr "Τα στατιστικά είναι απενεργοποιημένα για αυτό το αποθετήριο"
 

	
 
msgid "Auth settings updated successfully"
 
msgstr "Οι ρυθμίσεις εξουσιοδότησης ενημερώθηκαν επιτυχώς"
 

	
 
msgid "error occurred during update of auth settings"
 
msgstr "παρουσιάστηκε βλάβη κατά την ενημέρωση των ρυθμίσεων εξουσιοδότησης"
 
msgstr ""
 
"παρουσιάστηκε σφάλμα κατά την ενημέρωση των ρυθμίσεων εξουσιοδότησης"
 

	
 
msgid "Default settings updated successfully"
 
msgstr "Οι προεπιλεγμένες ρυθμίσεις ενημερώθηκαν επιτυχώς"
 

	
 
msgid "Error occurred during update of defaults"
 
msgstr "Συνέβη μία βλάβη κατά την ενημέρωση των προεπιλογών"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την ενημέρωση των προεπιλογών"
 

	
 
msgid "Forever"
 
msgstr "Πάντα"
 

	
 
msgid "5 minutes"
 
msgstr "5 λεπτά"
 

	
 
msgid "1 hour"
 
msgstr "1 ώρα"
 

	
 
msgid "1 day"
 
msgstr "1 ημέρα"
 

	
 
msgid "1 month"
 
msgstr "1 μήνας"
 

	
 
msgid "Lifetime"
 
msgstr "Διάρκεια ζωής"
 

	
 
msgid "Error occurred during gist creation"
 
msgstr "Συνέβη μία βλάβη κατά τη δημιουργία του gist"
 
msgstr "Παρουσιάστηκε σφάλμα κατά τη δημιουργία του gist"
 

	
 
msgid "Deleted gist %s"
 
msgstr "Διαγράφηκε το gist %s"
 

	
 
msgid "Unmodified"
 
msgstr "Mη τροποποιημένo"
 

	
 
msgid "Successfully updated gist content"
 
msgstr "Το περιεχόμενο του gist ενημερώθηκε επιτυχώς"
 

	
 
msgid "Successfully updated gist data"
 
msgstr "Τα δεδομένα του gist ενημερώθηκαν επιτυχώς"
 
@@ -313,24 +381,30 @@ msgstr "Συνέβη ένα σφάλμα κατά την αποθήκευση του email"
 
msgid "Removed email from user"
 
msgstr "Αφαιρέθηκε το email από τον χρήστη"
 

	
 
msgid "API key successfully created"
 
msgstr "Το API κλειδί δημιουργήθηκε επιτυχώς"
 

	
 
msgid "API key successfully reset"
 
msgstr "Το API κλειδί επαναφέρθηκε επιτυχώς"
 

	
 
msgid "API key successfully deleted"
 
msgstr "Το API κλειδί διαγράφηκε επιτυχώς"
 

	
 
msgid "SSH key %s successfully added"
 
msgstr "Το SSH κλειδί %s δημιουργήθηκε επιτυχώς"
 

	
 
msgid "SSH key successfully deleted"
 
msgstr "Το SSH κλειδί διαγράφηκε επιτυχώς"
 

	
 
msgid "Read"
 
msgstr "Ανάγνωση"
 

	
 
msgid "Write"
 
msgstr "Εγγραφή"
 

	
 
msgid "Admin"
 
msgstr "Διαχειριστής"
 

	
 
msgid "Disabled"
 
msgstr "Απενεργοποιημένο"
 

	
 
@@ -344,117 +418,3182 @@ msgid "Manual activation of external acc
 
msgstr "Χειροποίητη ενεργοποίηση εξωτερικού λογαριασμού"
 

	
 
msgid "Automatic activation of external account"
 
msgstr "Αυτόματη ενεργοποίηση εξωτερικού λογαριασμού"
 

	
 
msgid "Enabled"
 
msgstr "Ενεργό"
 

	
 
msgid "Global permissions updated successfully"
 
msgstr "Τα καθολικά δικαιώματα ενημερώθηκαν επιτυχώς"
 

	
 
msgid "Error occurred during update of permissions"
 
msgstr "Συνέβει μια βλάβη κατά την ενημέρωση των δικαιωμάτων"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την ενημέρωση δικαιωμάτων"
 

	
 
msgid "Error occurred during creation of repository group %s"
 
msgstr "Συνέβει μια βλάβη κατά την δημιουργία της ομάδας αποθετηρίου %s"
 
msgstr "Συνέβηκε κάποιο λάθος κατά την δημιουργία της ομάδας αποθετηρίου %s"
 

	
 
msgid "Created repository group %s"
 
msgstr "Δημιουργήθηκε η ομάδα αποθετηρίου %s"
 

	
 
msgid "Updated repository group %s"
 
msgstr "Ενημερώθηκε η ομάδα αποθετηρίου %s"
 

	
 
msgid "Error occurred during update of repository group %s"
 
msgstr "Συνέβει μια βλάβη κατά την ενημέρωση της ομάδας αποθετηρίου %s"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την ενημέρωση της ομάδας αποθετηρίων %s"
 

	
 
msgid "This group contains %s repositories and cannot be deleted"
 
msgstr "Αυτή η ομάδα περιέχει %s αποθετήρια και δε μπορεί να διαγραφεί"
 

	
 
msgid "This group contains %s subgroups and cannot be deleted"
 
msgstr "Αυτή η ομάδα περιέχει %s υποομάδες και δε μπορεί να διαγραφεί"
 

	
 
msgid "Removed repository group %s"
 
msgstr "Αφαιρέθηκε η ομάδα αποθετηρίου %s"
 

	
 
msgid "Error occurred during deletion of repository group %s"
 
msgstr "Συνέβει μια βλάβη κατά την διαγραφή της ομάδας αποθετηρίου %s"
 
msgstr "Παρουσιάστηκε σφάλμα κατά τη διαγραφή της ομάδας αποθετηρίων %s"
 

	
 
msgid "Cannot revoke permission for yourself as admin"
 
msgstr "Δεν μπορείτε να ανακαλέσετε την άδεια σας ως διαχειριστής"
 

	
 
msgid "Repository group permissions updated"
 
msgstr "Τα δικαιώματα της ομάδας αποθετηρίου ενημερώθηκαν"
 

	
 
msgid "An error occurred during revoking of permission"
 
msgstr "Συνέβει μια βλάβη κατά την ανάκληση της άδειας"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την ανάκληση του δικαιώματος"
 

	
 
msgid "Error creating repository %s"
 
msgstr "Βλάβη κατά τη δημιουργία του αποθετηρίου %s"
 
msgstr "Σφάλμα κατά τη δημιουργία αποθετηρίου %s"
 

	
 
msgid "Created repository %s from %s"
 
msgstr "Δημιουργήθηκε το αποθετήριο %s από το %s"
 

	
 
msgid "Forked repository %s as %s"
 
msgstr "Κλωνοποιήθηκε το αποθετηρίο %s ως %s"
 

	
 
msgid "Created repository %s"
 
msgstr "Δημιουργήθηκε το αποθετήριο %s"
 

	
 
msgid "Repository %s updated successfully"
 
msgstr "Το αποθετήριο %s ενημερώθηκε επιτυχώς"
 

	
 
msgid "Error occurred during update of repository %s"
 
msgstr "Συνέβει μια βλάβη κατά την ενημέρωση του αποθετηρίου %s"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την ενημέρωση του αποθετηρίου %s"
 

	
 
msgid "Detached %s forks"
 
msgstr "Αποσυνδέθηκαν %s κλώνοι"
 

	
 
msgid "Deleted %s forks"
 
msgstr "Διαγράφηκαν %s κλώνοι"
 

	
 
msgid "Deleted repository %s"
 
msgstr "Διαγράφηκε το αποθετήριο %s"
 

	
 
msgid "Cannot delete repository %s which still has forks"
 
msgstr "Δε μπορεί να διαγραφεί το αποθετήριο %s που ακόμα έχει κλώνους"
 

	
 
msgid "An error occurred during deletion of %s"
 
msgstr "Συνέβει μια βλάβη κατά την διαγραφή του %s"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την διαγραφή του %s"
 

	
 
msgid "Repository permissions updated"
 
msgstr "Τα δικαιώματα του αποθετηρίου ενημερώθηκαν"
 

	
 
msgid "Field validation error: %s"
 
msgstr "Σφάλμα στην επιβεβαίωση του πεδίου: %s"
 

	
 
msgid "An error occurred during creation of field: %r"
 
msgstr "Παρουσιάστηκε σφάλμα κατά τη δημιουργία πεδίου: %r"
 

	
 
msgid "An error occurred during removal of field"
 
msgstr "Συνέβει μια βλάβη κατά την απομάκρυνση του πεδίου"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την απομάκρυνση του πεδίου"
 

	
 
msgid "-- Not a fork --"
 
msgstr "-- Όχι κλώνος --"
 

	
 
msgid "Updated repository visibility in public journal"
 
msgstr "Ενημερώθηκε η ορατότητα του αποθετηρίου στο δημόσιο ημερολόγιο"
 

	
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 
"Συνέβει μια βλάβη κατά την τοποθέτηση αυτού το αποθετηρίου στο δημόσιο "
 
"Παρουσιάστηκε σφάλμα κατά την τοποθέτηση αυτού το αποθετηρίου στο δημόσιο "
 
"ημερολόγιο"
 

	
 
msgid "Nothing"
 
msgstr "Χωρίς"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "Σημειώθηκε το αποθετήριο %s σαν κλώνος του %s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "Παρουσιάστηκε ένα σφάλμα κατά τη διάρκεια αυτής της λειτουργίας"
 

	
 
msgid "Cache invalidation successful"
 
msgstr "Η ακύρωση της cache ήταν επιτυχής"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "Παρουσιάστηκε ένα σφάλμα κατά τη διάρκεια ακύρωσης της cache"
 
msgid "Pulled from remote location"
 
msgstr "Ελκύσθηκε από απομακρυσμένη τοποθεσία"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την έλξη από την απομακρυσμένη τοποθεσία"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr ""
 
"Παρουσιάστηκε σφάλμα κατά τη διαγραφή των στατιστικών του αποθετηρίου"
 

	
 
msgid "Updated VCS settings"
 
msgstr "Ενημερωμένες ρυθμίσεις VCS"
 

	
 
msgid ""
 
"Unable to activate hgsubversion support. The \"hgsubversion\" library is "
 
"missing"
 
msgstr ""
 
"Δεν γίνεται να ενεργοποιηθεί υποστήριξη για το hgsubversion. Λείπει η "
 
"βιβλιοθήκη \"hgsubversion\""
 

	
 
msgid "Error occurred while updating application settings"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την ενημέρωση των ρυθμίσεων της εφαρμογής"
 

	
 
msgid "Repositories successfully rescanned. Added: %s. Removed: %s."
 
msgstr ""
 
"Τα αποθετήρια ξανασαρώθηκαν επιτυχώς. Προστέθηκαν: %s. Αφαιρέθηκαν %s."
 

	
 
msgid "Invalidated %s repositories"
 
msgstr "Ακυρώθηκαν %s αποθετήρια"
 

	
 
msgid "Updated application settings"
 
msgstr "Ενημερώθηκαν οι ρυθμίσεις της εφαρμογής"
 

	
 
msgid "Updated visualisation settings"
 
msgstr "Ενημερώθηκαν οι ρυθμίσεις της απεικόνισης"
 

	
 
msgid "Error occurred during updating visualisation settings"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την ενημέρωση των ρυθμίσεων απεικόνισης"
 

	
 
msgid "Please enter email address"
 
msgstr "Παρακαλώ εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου"
 

	
 
msgid "Send email task created"
 
msgstr "Δημιουργήθηκε η εργασία της αποστολής ηλεκτρονικού ταχυδρομείου"
 

	
 
msgid "Hook already exists"
 
msgstr "Το άγκιστρο υπάρχει ήδη"
 

	
 
msgid "Builtin hooks are read-only. Please use another hook name."
 
msgstr ""
 
"Τα ενσωματωμένα άγκιστρα είναι μόνο για ανάγνωση. Παρακαλώ δώστε άλλο "
 
"όνομα στο άγκιστρο."
 

	
 
msgid "Added new hook"
 
msgstr "Προσθήκη νέου άγκιστρου"
 

	
 
msgid "Updated hooks"
 
msgstr "Τα άγκιστρα ενημερώθηκαν"
 

	
 
msgid "Error occurred during hook creation"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την δημιουργία του άγκιστρου"
 

	
 
msgid "Whoosh reindex task scheduled"
 
msgstr "Προγραμματίστηκε η αναδημιουργία ευρετηρίου για το Whoosh"
 

	
 
msgid "Created user group %s"
 
msgstr "Δημιουργήθηκε η ομάδα χρηστών %s"
 

	
 
msgid "Error occurred during creation of user group %s"
 
msgstr "Παρουσιάστηκε σφάλμα κατά τη δημιουργία της ομάδας χρηστών %s"
 

	
 
msgid "Updated user group %s"
 
msgstr "Ενημερώθηκε η ομάδα χρηστών %s"
 

	
 
msgid "Error occurred during update of user group %s"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την ενημέρωση της ομάδας χρηστών %s"
 

	
 
msgid "Successfully deleted user group"
 
msgstr "Η ομάδα χρηστών διαγράφηκε επιτυχώς"
 

	
 
msgid "An error occurred during deletion of user group"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την διαγραφή της ομάδας χρηστών"
 

	
 
msgid "Target group cannot be the same"
 
msgstr "Η ομάδα προορισμός δεν μπορεί να είναι η ίδια"
 

	
 
msgid "User group permissions updated"
 
msgstr "Τα δικαιώματα της ομάδας χρηστών ενημερώθηκαν"
 

	
 
msgid "Updated permissions"
 
msgstr "Τα δικαιώματα ενημερώθηκαν"
 

	
 
msgid "An error occurred during permissions saving"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την αποθήκευση των δικαιωμάτων"
 

	
 
msgid "Created user %s"
 
msgstr "Δημιουργήθηκε ο χρήστης %s"
 

	
 
msgid "Error occurred during creation of user %s"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την δημιουργία του χρήστη %s"
 

	
 
msgid "User updated successfully"
 
msgstr "Ο χρήστης ενημερώθηκε επιτυχώς"
 

	
 
msgid "Successfully deleted user"
 
msgstr "Ο χρήστης διαγράφηκε επιτυχώς"
 

	
 
msgid "An error occurred during deletion of user"
 
msgstr "Παρουσιάστηκε σφάλμα κατά τη διαγραφή του χρήστη"
 

	
 
msgid "The default user cannot be edited"
 
msgstr "Δεν μπορεί να γίνει επεξεργασία στον προεπιλεγμένο χρήστη"
 

	
 
msgid "Added IP address %s to user whitelist"
 
msgstr "Η IP διεύθυνση %s προστέθηκε στην λίστα επιτρεπόμενων του χρήστη"
 

	
 
msgid "An error occurred while adding IP address"
 
msgstr "Παρουσιάστηκε σφάλμα κατά την προσθήκη της IP διεύθυνσης"
 

	
 
msgid "Removed IP address from user whitelist"
 
msgstr "Η IP διεύθυνση αφαιρέθηκε από τη λίστα επιτρεπόμενων του χρήστη"
 

	
 
msgid "You need to be a registered user to perform this action"
 
msgstr ""
 
"Πρέπει να είστε εγγεγραμμένος χρήστης για να εκτελέσετε αυτή την ενέργεια"
 

	
 
msgid "You need to be signed in to view this page"
 
msgstr "Πρέπει να είστε συνδεμένος για να δείτε αυτήν τη σελίδα"
 

	
 
msgid ""
 
"CSRF token leak has been detected - all form tokens have been expired"
 
msgstr ""
 
"Εντοπίστηκε διαρροή ενός διακριτικού CSRF - όλα τα διακριτικά της φόρμας "
 
"έχουν λήξει"
 

	
 
msgid "Repository not found in the filesystem"
 
msgstr "Το αποθετήριο δε βρέθηκε στο σύστημα αρχείων"
 

	
 
msgid "Changeset for %s %s not found in %s"
 
msgstr "Το σετ αλλαγών για %s %sδεν βρέθηκε στο %s"
 

	
 
msgid "SSH access is disabled."
 
msgstr "Η πρόσβαση μέσω SSH είναι απενεργοποιημένη."
 

	
 
msgid "Binary file"
 
msgstr "Δυαδικό αρχείο"
 

	
 
msgid ""
 
"Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 
"Το σετ αλλαγών ήταν πολύ μεγάλο και αποκόπηκε, χρησιμοποιήστε το μενού "
 
"διαφορών για να εμφανίσετε τις διαφορές"
 

	
 
msgid "No changes detected"
 
msgstr "Δεν εντοπίστηκαν αλλαγές"
 

	
 
msgid "Deleted branch: %s"
 
msgstr "Διαγραφή κλάδου: %s"
 

	
 
msgid "Created tag: %s"
 
msgstr "Δημιουργηθείσα ετικέτα: %s"
 

	
 
msgid "Changeset %s not found"
 
msgstr "Δεν βρέθηκε το σετ αλλαγών %s"
 

	
 
msgid "Show all combined changesets %s->%s"
 
msgstr "Εμφάνιση όλων των συνδυασμένων σετ αλλαγών %s->%s"
 

	
 
msgid "Compare view"
 
msgstr "Σύγκριση εμφάνισης"
 

	
 
msgid "and"
 
msgstr "και"
 

	
 
msgid "%s more"
 
msgstr "%s επιπλέον"
 

	
 
msgid "revisions"
 
msgstr "αναθεωρήσεις"
 

	
 
msgid "Fork name %s"
 
msgstr "Όνομα κλώνου %s"
 

	
 
msgid "Pull request %s"
 
msgstr "Αίτημα έλξης %s"
 

	
 
msgid "[deleted] repository"
 
msgstr "[διαγραμμένο] αποθετήριο"
 

	
 
msgid "[created] repository"
 
msgstr "[δημιουργημένο] αποθετήριο"
 

	
 
msgid "[updated] repository"
 
msgstr "[ενημερωμένο] αποθετήριο"
 

	
 
msgid "[downloaded] archive from repository"
 
msgstr "[λήψη] αρχείο από το αποθετήριο"
 

	
 
msgid "[delete] repository"
 
msgstr "[διαγραμμένο] αποθετήριο"
 

	
 
msgid " and %s more"
 
msgstr " και %s περισσότερα"
 

	
 
msgid "No files"
 
msgstr "Δεν υπάρχουν αρχεία"
 

	
 
msgid "new file"
 
msgstr "νέο αρχείο"
 

	
 
msgid "mod"
 
msgstr "τροποποιημένο"
 

	
 
msgid "del"
 
msgstr "διαγραμμένο"
 

	
 
msgid "rename"
 
msgstr "μετονομασμένο"
 

	
 
msgid "chmod"
 
msgstr "αλλ δικαιωμ"
 

	
 
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 ""
 
"Το αποθετήριο δεδομένων %s δεν έχει αντιστοιχιστεί στη βάση δεδομένων. "
 
"Ίσως δημιουργήθηκε ή μετονομάστηκε από το σύστημα αρχείων. Εκτελέστε ξανά "
 
"την εφαρμογή για να σαρώσετε ξανά τα αποθετήρια δεδομένων"
 

	
 
msgid "SSH key is missing"
 
msgstr "Το κλειδί SSH λείπει"
 

	
 
msgid ""
 
"Incorrect SSH key - it must have both a key type and a base64 part, like "
 
"'ssh-rsa ASRNeaZu4FA...xlJp='"
 
msgstr ""
 
"Λανθασμένο κλειδί SSH - πρέπει να έχει έναν τύπο κλειδιού καθώς και ένα "
 
"τμήμα base64, όπως \"ssh-rsa ASRNeaZu4FA ... xlJp =\""
 

	
 
msgid "Incorrect SSH key - it must start with 'ssh-(rsa|dss|ed25519)'"
 
msgstr "Εσφαλμένο κλειδί SSH - πρέπει να ξεκινά με 'ssh-(rsa|dss|ed25519)'"
 

	
 
msgid "Incorrect SSH key - unexpected characters in base64 part %r"
 
msgstr ""
 
"Εσφαλμένο κλειδί SSH - μη αναμενόμενοι χαρακτήρες στο τμήμα base64 %r"
 

	
 
msgid "Incorrect SSH key - failed to decode base64 part %r"
 
msgstr ""
 
"Εσφαλμένο κλειδί SSH - απέτυχε η αποκωδικοποίηση του τμήματος base64 %r"
 

	
 
msgid "Incorrect SSH key - base64 part is not %r as claimed but %r"
 
msgstr ""
 
"Εσφαλμένο κλειδί SSH - το base64 μέρος δεν είναι %r όπως ζητήθηκε, αλλά %r"
 

	
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "%d έτος"
 
msgstr[1] "%d έτη"
 

	
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "%d μήνας"
 
msgstr[1] "%d μήνες"
 

	
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "%d ημέρα"
 
msgstr[1] "%d ημέρες"
 

	
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "%d ώρα"
 
msgstr[1] "%d ώρες"
 

	
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "%d λεπτό"
 
msgstr[1] "%d λεπτά"
 

	
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "%d δευτερόλεπτο"
 
msgstr[1] "%d δευτερόλεπτα"
 

	
 
msgid "in %s"
 
msgstr "σε %s"
 

	
 
msgid "%s ago"
 
msgstr "%s πριν"
 

	
 
msgid "in %s and %s"
 
msgstr "σε %s και %s"
 

	
 
msgid "%s and %s ago"
 
msgstr "%s και %s πριν"
 

	
 
msgid "just now"
 
msgstr "μόλις τώρα"
 

	
 
msgid "on line %s"
 
msgstr "στη γραμμή %s"
 

	
 
msgid "[Mention]"
 
msgstr "[Αναφορά]"
 

	
 
msgid "top level"
 
msgstr "ανώτερο επίπεδο"
 

	
 
msgid "Kallithea Administrator"
 
msgstr "Διαχειριστής Καλλιθέας"
 

	
 
msgid "Default user has no access to new repositories"
 
msgstr "Ο προεπιλεγμένος χρήστης δεν έχει πρόσβαση σε νέα αποθετήρια"
 

	
 
msgid "Default user has read access to new repositories"
 
msgstr "Ο προεπιλεγμένος χρήστης έχει πρόσβαση ανάγνωσης σε νέα αποθετήρια"
 

	
 
msgid "Default user has write access to new repositories"
 
msgstr "Ο προεπιλεγμένος χρήστης έχει πρόσβαση εγγραφής σε νέα αποθετήρια"
 

	
 
msgid "Default user has admin access to new repositories"
 
msgstr ""
 
"Ο προεπιλεγμένος χρήστης έχει πρόσβαση διαχειριστή σε νέα αποθετήρια"
 

	
 
msgid "Default user has no access to new repository groups"
 
msgstr ""
 
"Ο προεπιλεγμένος χρήστης δεν έχει πρόσβαση σε νέες ομάδες αποθετηρίων"
 

	
 
msgid "Default user has read access to new repository groups"
 
msgstr ""
 
"Ο προεπιλεγμένος χρήστης έχει πρόσβαση ανάγνωσης σε νέες ομάδες "
 
"αποθετηρίων"
 

	
 
msgid "Default user has write access to new repository groups"
 
msgstr ""
 
"Ο προεπιλεγμένος χρήστης έχει πρόσβαση εγγραφής σε νέες ομάδες αποθετηρίων"
 

	
 
msgid "Default user has admin access to new repository groups"
 
msgstr ""
 
"Ο προεπιλεγμένος χρήστης έχει πρόσβαση διαχειριστή σε νέες ομάδες "
 
"αποθετηρίων"
 

	
 
msgid "Default user has no access to new user groups"
 
msgstr "Ο προεπιλεγμένος χρήστης δεν έχει πρόσβαση σε νέες ομάδες χρηστών"
 

	
 
msgid "Default user has read access to new user groups"
 
msgstr ""
 
"Ο προεπιλεγμένος χρήστης έχει πρόσβαση ανάγνωσης σε νέες ομάδες χρηστών"
 

	
 
msgid "Default user has write access to new user groups"
 
msgstr ""
 
"Ο προεπιλεγμένος χρήστης έχει πρόσβαση εγγραφής σε νέες ομάδες χρηστών"
 

	
 
msgid "Default user has admin access to new user groups"
 
msgstr ""
 
"Ο προεπιλεγμένος χρήστης έχει πρόσβαση διαχειριστή σε νέες ομάδες χρηστών"
 

	
 
msgid "Only admins can create repository groups"
 
msgstr "Μόνο οι διαχειριστές μπορούν να δημιουργήσουν ομάδες αποθετηρίων"
 

	
 
msgid "Non-admins can create repository groups"
 
msgstr "Οι μη διαχειριστές μπορούν να δημιουργήσουν ομάδες αποθετηρίων"
 

	
 
msgid "Only admins can create user groups"
 
msgstr "Μόνο οι διαχειριστές μπορούν να δημιουργήσουν ομάδες χρηστών"
 

	
 
msgid "Non-admins can create user groups"
 
msgstr "Οι μη διαχειριστές μπορούν να δημιουργήσουν ομάδες χρηστών"
 

	
 
msgid "Only admins can create top level repositories"
 
msgstr ""
 
"Μόνο οι διαχειριστές μπορούν να δημιουργήσουν αποθετήρια ανώτατου επιπέδου"
 

	
 
msgid "Non-admins can create top level repositories"
 
msgstr ""
 
"Οι μη διαχειριστές μπορούν να δημιουργήσουν αποθετήρια ανώτατου επιπέδου"
 

	
 
msgid ""
 
"Repository creation enabled with write permission to a repository group"
 
msgstr ""
 
"Η δημιουργία αποθετηρίου είναι ενεργοποιημένη με δικαιώματα εγγραφής σε "
 
"μια ομάδα αποθετηρίων"
 

	
 
msgid ""
 
"Repository creation disabled with write permission to a repository group"
 
msgstr ""
 
"Η δημιουργία αποθετηρίου απενεργοποιήθηκε με δικαιώματα εγγραφής σε μια "
 
"ομάδα αποθετηρίων"
 

	
 
msgid "Registration disabled"
 
msgstr "Η εγγραφή απενεργοποιήθηκε"
 

	
 
msgid "User registration with manual account activation"
 
msgstr "Εγγραφή χρήστη με χειροκίνητη ενεργοποίηση λογαριασμού"
 

	
 
msgid "User registration with automatic account activation"
 
msgstr "Εγγραφή χρήστη με αυτόματη ενεργοποίηση λογαριασμού"
 

	
 
msgid "Not reviewed"
 
msgstr "Δεν έχει ελεγχθεί"
 

	
 
msgid "Under review"
 
msgstr "Υπό εξέταση"
 

	
 
msgid "Not approved"
 
msgstr "Δεν έχει εγκριθεί"
 

	
 
msgid "Approved"
 
msgstr "Εγκρίθηκε"
 

	
 
msgid "Please enter a login"
 
msgstr "Παρακαλώ εισάγετε ένα όνομα χρήστη"
 

	
 
msgid "Enter a value %(min)i characters long or more"
 
msgstr "Εισαγάγετε μια τιμή με μήκος %(min)i χαρακτήρες ή περισσότερους"
 

	
 
msgid "Please enter a password"
 
msgstr "Παρακαλώ εισάγετε έναν κωδικό πρόσβασης"
 

	
 
msgid "Enter %(min)i characters or more"
 
msgstr "Εισαγάγετε %(min)i χαρακτήρες ή περισσότερους"
 

	
 
msgid "Name must not contain only digits"
 
msgstr "Το όνομα δεν πρέπει να περιέχει μόνο ψηφία"
 

	
 
msgid "New user %(new_username)s registered"
 
msgstr "Καταχωρήθηκε νέος χρήστης %(new_username)s"
 

	
 
msgid "Closing"
 
msgstr "Κλείσιμο"
 

	
 
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"
 

	
 
msgid "Cannot create empty pull request"
 
msgstr "Δεν είναι δυνατή η δημιουργία κενής αίτησης έλξης"
 

	
 
msgid ""
 
"Cannot create pull request - criss cross merge detected, please merge a "
 
"later %s revision to %s"
 
msgstr ""
 
"Δεν είναι δυνατή η δημιουργία αίτησης έλξης - εντοπίστηκε διασταυρούμενη "
 
"συγχώνευση, παρακαλώ συγχωνεύστε μια μεταγενέστερη αναθεώρηση %s στο %s"
 

	
 
msgid "You are not authorized to create the pull request"
 
msgstr "Δεν έχετε εξουσιοδότηση για τη δημιουργία του αιτήματος έλξης"
 

	
 
msgid "Missing changesets since the previous iteration:"
 
msgstr "Λείπουν σετ αλλαγών από την προηγούμενη επανάληψη:"
 

	
 
msgid "New changesets on %s %s since the previous iteration:"
 
msgstr "Νέα σετ αλλαγών στο %s %s από την προηγούμενη επανάληψη:"
 

	
 
msgid "Ancestor didn't change - diff since previous iteration:"
 
msgstr "Ο πρόγονος δεν άλλαξε - διαφορά από την προηγούμενη επανάληψη:"
 

	
 
msgid ""
 
"This iteration is based on another %s revision and there is no simple "
 
"diff."
 
msgstr ""
 
"Αυτή η επανάληψη βασίζεται σε μια άλλη αναθεώρηση %s και δεν υπάρχει απλή "
 
"διαφορά."
 

	
 
msgid "No changes found on %s %s since previous iteration."
 
msgstr "Δεν βρέθηκαν αλλαγές στο %s %s από την προηγούμενη έκδοση."
 

	
 
msgid "Closed, next iteration: %s ."
 
msgstr "Κλειστή, επόμενη επανάληψη: %s ."
 

	
 
msgid "latest tip"
 
msgstr "τελευταία κεφαλή"
 

	
 
msgid "SSH key %r is invalid: %s"
 
msgstr "Το κλειδί SSH %r δεν είναι έγκυρο: %s"
 

	
 
msgid "SSH key %s is already used by %s"
 
msgstr "Το κλειδί SSH %s χρησιμοποιείται ήδη από το χρήστη %s"
 

	
 
msgid "SSH key with fingerprint %r found"
 
msgstr "Βρέθηκε κλειδί SSH με δακτυλικό αποτύπωμα %r"
 

	
 
msgid "New user registration"
 
msgstr "Εγγραφή νέου χρήστη"
 

	
 
msgid ""
 
"You can't remove this user since it is crucial for the entire application"
 
msgstr ""
 
"Δεν μπορείτε να καταργήσετε αυτόν το χρήστη, καθώς είναι ζωτικής σημασίας "
 
"για ολόκληρη την εφαρμογή"
 

	
 
msgid ""
 
"User \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories: %s"
 
msgstr ""
 
"Ο χρήστης \"%s\" εξακολουθεί να κατέχει %s αποθετήρια και δεν είναι "
 
"δυνατόν να αφαιρεθεί. Αλλάξτε κάτοχο ή καταργείστε αυτά τα αποθετήρια: %s"
 

	
 
msgid ""
 
"User \"%s\" still owns %s repository groups and cannot be removed. Switch "
 
"owners or remove those repository groups: %s"
 
msgstr ""
 
"Ο χρήστης \"%s\" εξακολουθεί να κατέχει %s ομάδες αποθετηρίων και δεν "
 
"είναι δυνατόν να αφαιρεθεί. Αλλάξτε κάτοχο ή καταργείστε αυτές τις "
 
"ομάδες: %s"
 

	
 
msgid ""
 
"User \"%s\" still owns %s user groups and cannot be removed. Switch "
 
"owners or remove those user groups: %s"
 
msgstr ""
 
"Ο χρήστης \"%s\" εξακολουθεί να κατέχει %s ομάδες χρηστών και δεν είναι "
 
"δυνατόν να αφαιρεθεί. Αλλάξτε κάτοχο ή αφαιρέστε αυτές τις ομάδες "
 
"χρηστών: %s"
 

	
 
msgid "Password reset link"
 
msgstr "Σύνδεσμος επαναφοράς κωδικού πρόσβασης"
 

	
 
msgid "Password reset notification"
 
msgstr "Ειδοποίηση επαναφοράς κωδικού πρόσβασης"
 

	
 
msgid ""
 
"The password to your account %s has been changed using password reset "
 
"form."
 
msgstr ""
 
"Ο κωδικός πρόσβασης στο λογαριασμό σας %s έχει αλλάξει χρησιμοποιώντας τη "
 
"φόρμα επαναφοράς κωδικού πρόσβασης."
 

	
 
msgid "Value cannot be an empty list"
 
msgstr "Η τιμή δεν μπορεί να είναι μια κενή λίστα"
 

	
 
msgid "Username \"%(username)s\" already exists"
 
msgstr "Το όνομα χρήστη \"%(username)s\" υπάρχει ήδη"
 

	
 
msgid "Username \"%(username)s\" cannot be used"
 
msgstr "Δεν είναι δυνατή η χρήση του ονόματος χρήστη \"%(username)s\""
 

	
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or "
 
"dashes and must begin with an alphanumeric character or underscore"
 
msgstr ""
 
"Το όνομα χρήστη μπορεί να περιέχει μόνο αλφαριθμητικούς χαρακτήρες, κάτω "
 
"παύλες, τελείες ή παύλες και πρέπει να ξεκινά με αλφαριθμητικό χαρακτήρα "
 
"ή κάτω παύλα"
 

	
 
msgid "The input is not valid"
 
msgstr "Η είσοδος δεν είναι έγκυρη"
 

	
 
msgid "Username %(username)s is not valid"
 
msgstr "Το όνομα χρήστη %(username)s δεν είναι έγκυρο"
 

	
 
msgid "Invalid user group name"
 
msgstr "Μη έγκυρο όνομα ομάδας χρηστών"
 

	
 
msgid "User group \"%(usergroup)s\" already exists"
 
msgstr "Η ομάδα χρηστών \"%(usergroup)s\" υπάρχει ήδη"
 

	
 
msgid ""
 
"user group name may only contain alphanumeric characters underscores, "
 
"periods or dashes and must begin with alphanumeric character"
 
msgstr ""
 
"Το όνομα της ομάδας χρηστών μπορεί να περιέχει μόνο αλφαριθμητικούς "
 
"χαρακτήρες, κάτω παύλες, τελείες ή παύλες και πρέπει να ξεκινά με "
 
"αλφαριθμητικό χαρακτήρα"
 

	
 
msgid "Cannot assign this group as parent"
 
msgstr "Δεν είναι δυνατή η εκχώρηση αυτής της ομάδας ως γονικής"
 

	
 
msgid "Group \"%(group_name)s\" already exists"
 
msgstr "Η ομάδα \"%(group_name)s\" υπάρχει ήδη"
 

	
 
msgid "Repository with name \"%(group_name)s\" already exists"
 
msgstr "Το αποθετήριο με όνομα \"%(group_name)s\" υπάρχει ήδη"
 

	
 
msgid "Invalid characters (non-ascii) in password"
 
msgstr "Μη έγκυροι χαρακτήρες (μη ascii) στον κωδικό πρόσβασης"
 

	
 
msgid "Invalid old password"
 
msgstr "Ο παλιός κωδικός πρόσβασης δεν είναι έγκυρος"
 

	
 
msgid "Passwords do not match"
 
msgstr "Οι κωδικοί πρόσβασης δεν ταιριάζουν"
 

	
 
msgid "Invalid username or password"
 
msgstr "Το όνομα χρήστη ή ο κωδικός πρόσβασης δεν είναι έγκυρος"
 

	
 
msgid "Repository name %(repo)s is not allowed"
 
msgstr "Δεν επιτρέπεται το %(repo)s ως όνομα του αποθετηρίου"
 

	
 
msgid "Repository named %(repo)s already exists"
 
msgstr "Το αποθετήριο με το όνομα %(repo)s υπάρχει ήδη"
 

	
 
msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
 
msgstr "Το αποθετήριο \"%(repo)s\" υπάρχει ήδη στην ομάδα \"%(group)s\""
 

	
 
msgid "Repository group with name \"%(repo)s\" already exists"
 
msgstr "Η ομάδα αποθετηρίου με το όνομα \"%(repo)s\" υπάρχει ήδη"
 

	
 
msgid "Invalid repository URL"
 
msgstr "Μη έγκυρη διεύθυνση URL αποθετηρίου"
 

	
 
msgid ""
 
"Invalid repository URL. It must be a valid http, https, ssh, svn+http or "
 
"svn+https URL"
 
msgstr ""
 
"Μη έγκυρη διεύθυνση URL του αποθετηρίου. Πρέπει να είναι μια έγκυρη http, "
 
"https, ssh, svn+http ή svn+https διεύθυνση URL"
 

	
 
msgid "You don't have permissions to create repository in this group"
 
msgstr "Δεν έχετε δικαιώματα δημιουργίας αποθετηρίου σε αυτήν την ομάδα"
 

	
 
msgid "no permission to create repository in root location"
 
msgstr "Δεν υπάρχει δικαίωμα δημιουργίας αποθετηρίου στη ριζική τοποθεσία"
 

	
 
msgid "You don't have permissions to create a group in this location"
 
msgstr "Δεν έχετε δικαιώματα δημιουργίας ομάδας σε αυτήν την τοποθεσία"
 

	
 
msgid "This username or user group name is not valid"
 
msgstr "Αυτό το όνομα χρήστη ή το όνομα ομάδας χρηστών δεν είναι έγκυρο"
 

	
 
msgid "This is not a valid path"
 
msgstr "Αυτή η διαδρομή δεν είναι έγκυρη"
 

	
 
msgid "This email address is already in use"
 
msgstr "Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου χρησιμοποιείται ήδη"
 

	
 
msgid "Email address \"%(email)s\" not found"
 
msgstr "Η διεύθυνση ηλεκτρονικού ταχυδρομείου \"%(email)s\" δεν βρέθηκε"
 

	
 
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 Login του CN - αυτό είναι "
 
"το όνομα του χαρακτηριστικού που είναι ισοδύναμο με το \"όνομα χρήστη\""
 

	
 
msgid "Please enter a valid IPv4 or IPv6 address"
 
msgstr "Παρακαλώ εισαγάγετε μια έγκυρη διεύθυνση IPv4 ή IPv6"
 

	
 
msgid ""
 
"The network size (bits) must be within the range of 0-32 (not %(bits)r)"
 
msgstr ""
 
"Το μέγεθος δικτύου (bits) πρέπει να βρίσκεται εντός της περιοχής 0-32 "
 
"(όχι %(bits)r)"
 

	
 
msgid "Key name can only consist of letters, underscore, dash or numbers"
 
msgstr ""
 
"Το όνομα κλειδιού μπορεί να αποτελείται μόνο από γράμματα, κάτω παύλα, "
 
"παύλα ή αριθμούς"
 

	
 
msgid "Filename cannot be inside a directory"
 
msgstr "Το όνομα αρχείου δεν μπορεί να βρίσκεται μέσα σε έναν κατάλογο"
 

	
 
msgid "Plugins %(loaded)s and %(next_to_load)s both export the same name"
 
msgstr ""
 
"Τα πρόσθετα %(loaded)s και %(next_to_load)s εξάγουν και τα δύο το ίδιο "
 
"όνομα"
 

	
 
msgid "About"
 
msgstr "Σχετικά"
 

	
 
msgid "Add Repository"
 
msgstr "Προσθήκη Αποθετηρίου"
 

	
 
msgid "Add Repository Group"
 
msgstr "Προσθήκη Ομάδας Αποθετηρίων"
 

	
 
msgid "You have admin right to this group, and can edit it"
 
msgstr ""
 
"Έχετε δικαίωμα διαχειριστή σε αυτήν την ομάδα και μπορείτε να την "
 
"επεξεργαστείτε"
 

	
 
msgid "Edit Repository Group"
 
msgstr "Επεξεργασία Ομάδας Αποθετηρίων"
 

	
 
msgid "Repository"
 
msgstr "Αποθετήριο"
 

	
 
msgid "Description"
 
msgstr "Περιγραφή"
 

	
 
msgid "Last Change"
 
msgstr "Τελευταία Αλλαγή"
 

	
 
msgid "Tip"
 
msgstr "Κεφαλή"
 

	
 
msgid "Owner"
 
msgstr "Κάτοχος"
 

	
 
msgid "Log In"
 
msgstr "Σύνδεση"
 

	
 
msgid "Log In to %s"
 
msgstr "Συνδεθείτε στο %s"
 

	
 
msgid "Username"
 
msgstr "Όνομα χρήστη"
 

	
 
msgid "Password"
 
msgstr "Κωδικό πρόσβασης"
 

	
 
msgid "Stay logged in after browser restart"
 
msgstr ""
 
"Μείνετε συνδεδεμένοι μετά την επανεκκίνηση του προγράμματος περιήγησης"
 

	
 
msgid "Forgot your password ?"
 
msgstr "Ξεχάσατε τον κωδικό σας;"
 

	
 
msgid "Don't have an account ?"
 
msgstr "Δεν έχετε λογαριασμό;"
 

	
 
msgid "Sign In"
 
msgstr "Είσοδος"
 

	
 
msgid "Password Reset"
 
msgstr "Επαναφορά κωδικού"
 

	
 
msgid "Reset Your Password to %s"
 
msgstr "Επαναφορά του κωδικού πρόσβασής σας στο %s"
 

	
 
msgid "Reset Your Password"
 
msgstr "Επαναφορά του κωδικού πρόσβασής σας"
 

	
 
msgid "Email Address"
 
msgstr "Διεύθυνση ηλεκτρονικού ταχυδρομείου"
 

	
 
msgid "Captcha"
 
msgstr "Captcha"
 

	
 
msgid "Send Password Reset Email"
 
msgstr ""
 
"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου για την επαναφορά του "
 
"κωδικού πρόσβασης"
 

	
 
msgid ""
 
"A password reset link will be sent to the specified email address if it "
 
"is registered in the system."
 
msgstr ""
 
"Ένας σύνδεσμος για την επαναφορά του κωδικού πρόσβασης θα σταλεί στην "
 
"καθορισμένη διεύθυνση ηλεκτρονικού ταχυδρομείου, εάν έχει καταχωρηθεί στο "
 
"σύστημα."
 

	
 
msgid "You are about to set a new password for the email address %s."
 
msgstr ""
 
"Πρόκειται να ορίσετε έναν νέο κωδικό πρόσβασης για τη διεύθυνση "
 
"ηλεκτρονικού ταχυδρομείου %s."
 

	
 
msgid ""
 
"Note that you must use the same browser session for this as the one used "
 
"to request the password reset."
 
msgstr ""
 
"Λάβετε υπόψη ότι πρέπει να χρησιμοποιήσετε την ίδια περίοδο λειτουργίας "
 
"του προγράμματος περιήγησης με αυτήν που χρησιμοποιήθηκε για να ζητήσετε "
 
"την επαναφορά του κωδικού πρόσβασης."
 

	
 
msgid "Code you received in the email"
 
msgstr "Κωδικός που λάβατε στο μήνυμα ηλεκτρονικού ταχυδρομείου"
 

	
 
msgid "New Password"
 
msgstr "Νέος Κωδικός"
 

	
 
msgid "Confirm New Password"
 
msgstr "Επιβεβαίωση Νέου Κωδικού Πρόσβασης"
 

	
 
msgid "Confirm"
 
msgstr "Επιβεβαίωση"
 

	
 
msgid "Sign Up"
 
msgstr "Εγγραφή"
 

	
 
msgid "Sign Up to %s"
 
msgstr "Εγγραφείτε στο %s"
 

	
 
msgid "Re-enter password"
 
msgstr "Εισαγάγετε ξανά τον κωδικό πρόσβασης"
 

	
 
msgid "First Name"
 
msgstr "Όνομα"
 

	
 
msgid "Last Name"
 
msgstr "Επώνυμο"
 

	
 
msgid "Email"
 
msgstr "Διεύθυνση Ηλεκτρονικού Ταχυδρομείου"
 

	
 
msgid "Registered accounts are ready to use and need no further action."
 
msgstr ""
 
"Οι εγγεγραμμένοι λογαριασμοί είναι έτοιμοι για χρήση και δεν χρειάζονται "
 
"περαιτέρω ενέργειες."
 

	
 
msgid "Please wait for an administrator to activate your account."
 
msgstr ""
 
"Περιμένετε έως ότου ένας διαχειριστής ενεργοποιήσει τον λογαριασμό σας."
 

	
 
msgid "Admin Journal"
 
msgstr "Ημερολόγιο Διαχειριστή"
 

	
 
msgid "journal filter..."
 
msgstr "φίλτρο εγγραφών..."
 

	
 
msgid "Filter"
 
msgstr "Φίλτρο"
 

	
 
msgid "%s Entry"
 
msgid_plural "%s Entries"
 
msgstr[0] "%s Καταχώρηση"
 
msgstr[1] "%s Καταχωρήσεις"
 

	
 
msgid "Action"
 
msgstr "Ενέργεια"
 

	
 
msgid "Date"
 
msgstr "Ημερομηνία"
 

	
 
msgid "From IP"
 
msgstr "Από IP"
 

	
 
msgid "No actions yet"
 
msgstr "Καμία ενέργεια ακόμα"
 

	
 
msgid "Authentication Settings"
 
msgstr "Ρυθμίσεις ελέγχου ταυτότητας"
 

	
 
msgid "Authentication"
 
msgstr "Έλεγχος ταυτότητας"
 

	
 
msgid "Authentication Plugins"
 
msgstr "Πρόσθετα ελέγχου ταυτότητας"
 

	
 
msgid "Enabled Plugins"
 
msgstr "Ενεργοποιημένα Πρόσθετα"
 

	
 
msgid ""
 
"Comma-separated list of plugins; Kallithea will try user authentication "
 
"in plugin order"
 
msgstr ""
 
"Λίστα πρόσθετων διαχωρισμένη με κόμματα. Η Καλλιθέα θα προσπαθήσει να "
 
"ελέγξει την ταυτότητα του χρήστη με τη σειρά του πρόσθετου"
 

	
 
msgid "Available built-in plugins"
 
msgstr "Διαθέσιμα ενσωματωμένα πρόσθετα"
 

	
 
msgid "Plugin"
 
msgstr "Πρόσθετο"
 

	
 
msgid "Save"
 
msgstr "Αποθήκευση"
 

	
 
msgid "Repository Defaults"
 
msgstr "Προεπιλογές Αποθετηρίου"
 

	
 
msgid "Type"
 
msgstr "Τύπος"
 

	
 
msgid "Private repository"
 
msgstr "Ιδιωτικό αποθετήριο"
 

	
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 
"Τα ιδιωτικά αποθετήρια είναι ορατά μόνο σε άτομα που προστίθενται ρητά ως "
 
"συνεργάτες."
 

	
 
msgid "Enable statistics"
 
msgstr "Ενεργοποίηση στατιστικών"
 

	
 
msgid "Enable statistics window on summary page."
 
msgstr "Ενεργοποίηση παραθύρου στατιστικών στοιχείων στη σελίδα περίληψης."
 

	
 
msgid "Enable downloads"
 
msgstr "Ενεργοποίηση λήψεων"
 

	
 
msgid "Enable download menu on summary page."
 
msgstr "Ενεργοποίηση μενού λήψης στη σελίδα περίληψης."
 

	
 
msgid "Edit Gist"
 
msgstr "Επεξεργασία Gist"
 

	
 
msgid ""
 
"Gist was updated since you started editing. Copy your changes and click "
 
"%(here)s to reload new version."
 
msgstr ""
 
"Το gist ενημερώθηκε από τότε που αρχίσατε την επεξεργασία. Αντιγράψτε τις "
 
"αλλαγές σας και κάντε κλικ στο κουμπί %(here)s για να φορτώσετε τη νέα "
 
"έκδοση."
 

	
 
msgid "here"
 
msgstr "εδώ"
 

	
 
msgid "Gist description ..."
 
msgstr "Περιγραφή gist..."
 

	
 
msgid "Gist lifetime"
 
msgstr "Διάρκεια ζωής του gist"
 

	
 
msgid "Expires"
 
msgstr "Λήγει"
 

	
 
msgid "Never"
 
msgstr "Ποτέ"
 

	
 
msgid "Update Gist"
 
msgstr "Ενημέρωση του gist"
 

	
 
msgid "Cancel"
 
msgstr "Ακύρωση"
 

	
 
msgid "Private Gists for User %s"
 
msgstr "Ιδιωτικά gists για το χρήστη %s"
 

	
 
msgid "Public Gists for User %s"
 
msgstr "Δημόσια gists για το χρήστη %s"
 

	
 
msgid "Public Gists"
 
msgstr "Δημόσια Gists"
 

	
 
msgid "Create New Gist"
 
msgstr "Δημιουργία Νέου Gist"
 

	
 
msgid "Created"
 
msgstr "Δημιουργήθηκε"
 

	
 
msgid "There are no gists yet"
 
msgstr "Δεν υπάρχουν ακόμη gists"
 

	
 
msgid "New Gist"
 
msgstr "Νέο Gist"
 

	
 
msgid "Name this gist ..."
 
msgstr "Ονομάστε αυτό το gist..."
 

	
 
msgid "Create Private Gist"
 
msgstr "Δημιουργία Ιδιωτικού Gist"
 

	
 
msgid "Create Public Gist"
 
msgstr "Δημιουργία Δημόσιου Gist"
 

	
 
msgid "Reset"
 
msgstr "Επαναφορά"
 

	
 
msgid "Gist"
 
msgstr "Gist"
 

	
 
msgid "URL"
 
msgstr "URL"
 

	
 
msgid "Public Gist"
 
msgstr "Δημόσιο Gist"
 

	
 
msgid "Private Gist"
 
msgstr "Ιδιωτικό Gist"
 

	
 
msgid "Delete"
 
msgstr "Διαγραφή"
 

	
 
msgid "Confirm to delete this Gist"
 
msgstr "Επιβεβαίωση για διαγραφή αυτού του Gist"
 

	
 
msgid "Edit"
 
msgstr "Επεξεργασία"
 

	
 
msgid "Show as Raw"
 
msgstr "Ακατέργαστη Εμφάνιση"
 

	
 
msgid "created"
 
msgstr "δημιουργήθηκε"
 

	
 
msgid "Show as raw"
 
msgstr "Ακατέργαστη εμφάνιση"
 

	
 
msgid "My Account"
 
msgstr "Ο Λογαριασμός Μου"
 

	
 
msgid "Profile"
 
msgstr "Προφίλ"
 

	
 
msgid "Email Addresses"
 
msgstr "Διευθύνσεις ηλεκτρονικού ταχυδρομείου"
 

	
 
msgid "SSH Keys"
 
msgstr "Κλειδιά SSH"
 

	
 
msgid "API Keys"
 
msgstr "Κλειδιά API"
 

	
 
msgid "Owned Repositories"
 
msgstr "Αποθετήρια που μου Ανήκουν"
 

	
 
msgid "Watched Repositories"
 
msgstr "Αποθετήρια που Παρακολουθώ"
 

	
 
msgid "Show Permissions"
 
msgstr "Εμφάνιση Δικαιωμάτων"
 

	
 
msgid "Built-in"
 
msgstr "Ενσωματωμένο"
 

	
 
msgid "Confirm to reset this API key: %s"
 
msgstr "Επιβεβαίωση για επαναφορά αυτού του κλειδιού API: %s"
 

	
 
msgid "Expired"
 
msgstr "Έληξε"
 

	
 
msgid "Confirm to remove this API key: %s"
 
msgstr "Επιβεβαίωση κατάργησης αυτού του κλειδιού API: %s"
 

	
 
msgid "Remove"
 
msgstr "Κατάργηση"
 

	
 
msgid "No additional API keys specified"
 
msgstr "Δεν έχουν καθοριστεί πρόσθετα κλειδιά API"
 

	
 
msgid "New API key"
 
msgstr "Νέο κλειδί API"
 

	
 
msgid "Add"
 
msgstr "Προσθήκη"
 

	
 
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 ""
 
"\n"
 
"Τα κλειδιά API χρησιμοποιούνται για να επιτρέπουν προγράμματα ή υπηρεσίες "
 
"να έχουν πρόσβαση στο %s χρησιμοποιώντας το λογαριασμό σας, σαν να "
 
"παρείχατε στο πρόγραμμα ή την υπηρεσία, τον πραγματικό σας κωδικό "
 
"πρόσβασης.\n"
 

	
 
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 ""
 
"\n"
 
"Όπως οι κωδικοί πρόσβασης, τα κλειδιά API δεν πρέπει επομένως να "
 
"κοινοποιούνται ποτέ σε άλλους,\n"
 
"ούτε να μεταβιβάζονται σε μη αξιόπιστα προγράμματα ή υπηρεσίες. Εάν μια "
 
"τέτοια κοινοποίηση πρέπει\n"
 
"γίνει, επαναφέρετε το κλειδί API σε αυτήν τη σελίδα για να αποφύγετε "
 
"περαιτέρω χρήση.\n"
 

	
 
msgid "Primary"
 
msgstr "Πρωτεύων"
 

	
 
msgid "Confirm to delete this email: %s"
 
msgstr ""
 
"Επιβεβαίωση διαγραφής αυτού του μηνύματος ηλεκτρονικού ταχυδρομείου: %s"
 

	
 
msgid "No additional emails specified."
 
msgstr "Δεν έχουν καθοριστεί πρόσθετα μηνύματα ηλεκτρονικού ταχυδρομείου."
 

	
 
msgid "New email address"
 
msgstr "Νέα διεύθυνση ηλεκτρονικού ταχυδρομείου"
 

	
 
msgid "Change Your Account Password"
 
msgstr "Αλλαγή του Κωδικού Πρόσβασης του Λογαριασμού σας"
 

	
 
msgid "Current password"
 
msgstr "Τρέχων κωδικός πρόσβασης"
 

	
 
msgid "New password"
 
msgstr "Νέος κωδικός πρόσβασης"
 

	
 
msgid "Confirm new password"
 
msgstr "Επιβεβαίωση νέου κωδικού πρόσβασης"
 

	
 
msgid ""
 
"This account is managed with %s and the password cannot be changed here"
 
msgstr ""
 
"Η διαχείριση αυτού του λογαριασμού γίνεται με %s και ο κωδικός πρόσβασης "
 
"δεν μπορεί να αλλάξει εδώ"
 

	
 
msgid "Current IP"
 
msgstr "Τρέχουσα IP"
 

	
 
msgid "Gravatar"
 
msgstr "Gravatar"
 

	
 
msgid "Change %s avatar at"
 
msgstr "Αλλαγή avatar %s στο"
 

	
 
msgid "Avatars are disabled"
 
msgstr "Τα Avatars είναι απενεργοποιημένα"
 

	
 
msgid "Repositories You Own"
 
msgstr "Αποθετήρια που σας ανήκουν"
 

	
 
msgid "Name"
 
msgstr "Όνομα"
 

	
 
msgid "Fingerprint"
 
msgstr "Αποτύπωμα"
 

	
 
msgid "Last Used"
 
msgstr "Τελευταία χρησιμοποιήθηκε"
 

	
 
msgid "Confirm to remove this SSH key: %s"
 
msgstr "Επιβεβαίωση κατάργησης αυτού του κλειδιού SSH: %s"
 

	
 
msgid "No SSH keys have been added"
 
msgstr "Δεν έχουν προστεθεί κλειδιά SSH"
 

	
 
msgid "New SSH key"
 
msgstr "Νέο κλειδί SSH"
 

	
 
msgid "Public key"
 
msgstr "Δημόσιο κλειδί"
 

	
 
msgid "Public key (contents of e.g. ~/.ssh/id_rsa.pub)"
 
msgstr "Δημόσιο κλειδί (περιεχόμενο π.χ. ~/.ssh/id_rsa.pub)"
 

	
 
msgid "Repositories You are Watching"
 
msgstr "Αποθετήρια που παρακολουθείτε"
 

	
 
msgid "Default Permissions"
 
msgstr "Προεπιλεγμένα Δικαιώματα"
 

	
 
msgid "Global"
 
msgstr "Γενικά"
 

	
 
msgid "IP Whitelist"
 
msgstr "Λίστα επιτρεπόμενων IP"
 

	
 
msgid "Anonymous access"
 
msgstr "Ανώνυμη πρόσβαση"
 

	
 
msgid "Allow anonymous access"
 
msgstr "Να επιτρέπεται η ανώνυμη πρόσβαση"
 

	
 
msgid ""
 
"Allow access to Kallithea without needing to log in. Anonymous users use "
 
"%s user permissions."
 
msgstr ""
 
"Να επιτρέπεται η πρόσβαση στην Καλλιθέα χωρίς να χρειάζεται να "
 
"συνδεθείτε. Οι ανώνυμοι χρήστες χρησιμοποιούν δικαιώματα χρήστη %s."
 

	
 
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 ""
 
"Όλα τα προεπιλεγμένα δικαιώματα σε κάθε αποθετήριο θα επαναφερθούν στα "
 
"επιλεγμένα δικαιώματα. Σημειώστε ότι όλα τα προσαρμοσμένα προεπιλεγμένα "
 
"δικαιώματα στα αποθετήρια θα χαθούν"
 

	
 
msgid "Apply to all existing repositories"
 
msgstr "Εφαρμογή σε όλα τα υπάρχοντα αποθετήρια"
 

	
 
msgid "Permissions for the Default user on new repositories."
 
msgstr "Δικαιώματα για τον προεπιλεγμένο χρήστη σε νέα αποθετήρια."
 

	
 
msgid "Repository group"
 
msgstr "Ομάδα αποθετηρίου"
 

	
 
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 ""
 
"Όλα τα προεπιλεγμένα δικαιώματα σε κάθε ομάδα αποθετηρίων θα επαναφερθούν "
 
"στα επιλεγμένα δικαιώματα. Σημειώστε ότι όλα τα προσαρμοσμένα "
 
"προεπιλεγμένα δικαιώματα στις ομάδες αποθετηρίων θα χαθούν"
 

	
 
msgid "Apply to all existing repository groups"
 
msgstr "Εφαρμογή σε όλες τις υπάρχουσες ομάδες αποθετηρίων"
 

	
 
msgid "Permissions for the Default user on new repository groups."
 
msgstr "Δικαιώματα για τον προεπιλεγμένο χρήστη σε νέες ομάδες αποθετηρίων."
 

	
 
msgid "User group"
 
msgstr "Ομάδα χρηστών"
 

	
 
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 ""
 
"Όλα τα προεπιλεγμένα δικαιώματα σε κάθε ομάδα χρηστών θα επαναφερθούν στα "
 
"επιλεγμένα δικαιώματα. Σημειώστε ότι όλα τα προσαρμοσμένα προεπιλεγμένα "
 
"δικαιώματα στις ομάδες χρηστών θα χαθούν"
 

	
 
msgid "Apply to all existing user groups"
 
msgstr "Εφαρμογή σε όλες τις υπάρχουσες ομάδες χρηστών"
 

	
 
msgid "Permissions for the Default user on new user groups."
 
msgstr "Δικαιώματα για τον προεπιλεγμένο χρήστη σε νέες ομάδες χρηστών."
 

	
 
msgid "Top level repository creation"
 
msgstr "Δημιουργία αποθετηρίου ανώτατου επιπέδου"
 

	
 
msgid ""
 
"Enable this to allow non-admins to create repositories at the top level."
 
msgstr ""
 
"Ενεργοποιήστε αυτήν την επιλογή ώστε να επιτρέπεται σε μη διαχειριστές να "
 
"δημιουργούν αποθετήρια στο ανώτερο επίπεδο."
 

	
 
msgid ""
 
"Note: This will also give all users API access to create repositories "
 
"everywhere. That might change in future versions."
 
msgstr ""
 
"Σημείωση: Αυτό θα δώσει επίσης σε όλους τους χρήστες πρόσβαση API για τη "
 
"δημιουργία αποθετηρίων παντού. Αυτό μπορεί να αλλάξει σε μελλοντικές "
 
"εκδόσεις."
 

	
 
msgid "Repository creation with group write access"
 
msgstr "Δημιουργία αποθετηρίου με πρόσβαση εγγραφής ομάδας"
 

	
 
msgid ""
 
"With this, write permission to a repository group allows creating "
 
"repositories inside that group. Without this, group write permissions "
 
"mean nothing."
 
msgstr ""
 
"Με αυτό, η άδεια εγγραφής σε μια ομάδα αποθετηρίων επιτρέπει τη "
 
"δημιουργία αποθετηρίων εντός αυτής της ομάδας. Χωρίς αυτό, τα δικαιώματα "
 
"ομαδικής εγγραφής δεν σημαίνουν τίποτα."
 

	
 
msgid "User group creation"
 
msgstr "Δημιουργία ομάδας χρηστών"
 

	
 
msgid "Enable this to allow non-admins to create user groups."
 
msgstr ""
 
"Ενεργοποιήστε αυτήν την επιλογή για να επιτρέψετε σε μη διαχειριστές να "
 
"δημιουργούν ομάδες χρηστών."
 

	
 
msgid "Registration"
 
msgstr "Εγγραφή"
 

	
 
msgid "External auth account activation"
 
msgstr "Ενεργοποίηση λογαριασμού εξωτερικού ελέγχου"
 

	
 
msgid "Confirm to delete this IP address: %s"
 
msgstr "Επιβεβαίωση για διαγραφή αυτής της διεύθυνσης IP: %s"
 

	
 
msgid "All IP addresses are allowed."
 
msgstr "Επιτρέπονται όλες οι διευθύνσεις IP."
 

	
 
msgid "New IP address"
 
msgstr "Νέα διεύθυνση IP"
 

	
 
msgid "Repository Groups"
 
msgstr "Ομάδες Αποθετηρίου"
 

	
 
msgid "Group name"
 
msgstr "Όνομα ομάδας"
 

	
 
msgid "Group parent"
 
msgstr "Γονική ομάδα"
 

	
 
msgid "Copy parent group permissions"
 
msgstr "Αντιγραφή δικαιωμάτων γονικής ομάδας"
 

	
 
msgid "Copy permission set from parent repository group."
 
msgstr "Αντιγραφή συνόλου δικαιωμάτων από γονική ομάδα αποθετηρίου."
 

	
 
msgid "%s Repository Group Settings"
 
msgstr "Ρυθμίσεις ομάδας αποθετηρίου %s"
 

	
 
msgid "Add Child Group"
 
msgstr "Προσθήκη Θυγατρικής Ομάδας"
 

	
 
msgid "Settings"
 
msgstr "Ρυθμίσεις"
 

	
 
msgid "Advanced"
 
msgstr "Προχωρημένες Ρυθμίσεις"
 

	
 
msgid "Permissions"
 
msgstr "Δικαιώματα"
 

	
 
msgid "Repository Group: %s"
 
msgstr "Ομάδα αποθετηρίου: %s"
 

	
 
msgid "Top level repositories"
 
msgstr "Αποθετήρια ανώτατου επιπέδου"
 

	
 
msgid "Total repositories"
 
msgstr "Σύνολο αποθετηρίων"
 

	
 
msgid "Children groups"
 
msgstr "Θυγατρικές ομάδες"
 

	
 
msgid "Created on"
 
msgstr "Δημιουργήθηκε στις"
 

	
 
msgid "Confirm to delete this group: %s with %s repository"
 
msgid_plural "Confirm to delete this group: %s with %s repositories"
 
msgstr[0] ""
 
"Επιβεβαίωση διαγραφής αυτής της ομάδας: %s με αποθετήριο δεδομένων %s"
 
msgstr[1] ""
 
"Επιβεβαίωση διαγραφής αυτής της ομάδας: %s με αποθετήρια δεδομένων %s"
 

	
 
msgid "Delete this repository group"
 
msgstr "Διαγραφή αυτής της ομάδας αποθετηρίων"
 

	
 
msgid "Not visible"
 
msgstr "Μη ορατό"
 

	
 
msgid "Visible"
 
msgstr "Ορατό"
 

	
 
msgid "Add repos"
 
msgstr "Προσθήκη αποθετηρίων"
 

	
 
msgid "Add/Edit groups"
 
msgstr "Προσθήκη/Επεξεργασία ομάδων"
 

	
 
msgid "User/User Group"
 
msgstr "Χρήστης / Ομάδα χρηστών"
 

	
 
msgid "Default"
 
msgstr "Προεπιλογή"
 

	
 
msgid "Revoke"
 
msgstr "Ανακάλεσε"
 

	
 
msgid "Add new"
 
msgstr "Προσθήκη νέου"
 

	
 
msgid "Apply to children"
 
msgstr "Εφαρμογή στα θυγατρικά"
 

	
 
msgid "Both"
 
msgstr "Και τα δυο"
 

	
 
msgid ""
 
"Set or revoke permission to all children of that group, including non-"
 
"private repositories and other groups if selected."
 
msgstr ""
 
"Ορίστε ή ανακαλέστε τα θυγατρικά δικαιώματα αυτής της ομάδας, "
 
"συμπεριλαμβανομένων των μη ιδιωτικών αποθετηρίων και άλλων ομάδων, εάν "
 
"επιλεγεί."
 

	
 
msgid "Remove this group"
 
msgstr "Κατάργηση αυτής της ομάδας"
 

	
 
msgid "Confirm to delete this group"
 
msgstr "Επιβεβαιώστε για να διαγράψετε αυτή την ομάδα"
 

	
 
msgid "Repository group %s"
 
msgstr "Ομάδα αποθετηρίων %s"
 

	
 
msgid "Repository Groups Administration"
 
msgstr "Διαχείριση Ομάδων Αποθετηρίου"
 

	
 
msgid "Number of Top-level Repositories"
 
msgstr "Αριθμός αποθετηρίων ανώτατου επιπέδου"
 

	
 
msgid "Clone remote repository"
 
msgstr "Κλωνοποίηση απομακρυσμένου αποθετηρίου"
 

	
 
msgid ""
 
"Optional: URL of a remote repository. If set, the repository will be "
 
"created as a clone from this URL."
 
msgstr ""
 
"Προαιρετικό: Διεύθυνση URL ενός απομακρυσμένου αποθετηρίου. Εάν οριστεί, "
 
"το αποθετήριο θα δημιουργηθεί ως κλώνος από αυτήν τη διεύθυνση URL."
 

	
 
msgid ""
 
"Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 
"Κρατήστε τη σύντομη και περιεκτική. Χρησιμοποιήστε ένα αρχείο README για "
 
"μεγαλύτερες περιγραφές."
 

	
 
msgid "Optionally select a group to put this repository into."
 
msgstr ""
 
"Προαιρετικά, επιλέξτε μια ομάδα για να τοποθετήσετε αυτό το αποθετήριο."
 

	
 
msgid "Type of repository to create."
 
msgstr "Τύπος αποθετηρίου προς δημιουργία."
 

	
 
msgid ""
 
"Default revision for files page, downloads, full text search index and "
 
"readme generation"
 
msgstr ""
 
"Προεπιλεγμένη αναθεώρηση για τη σελίδα αρχείων, λήψεων, ευρετήριο "
 
"αναζήτησης πλήρους κειμένου και δημιουργία readme"
 

	
 
msgid "%s Creating Repository"
 
msgstr "%s Δημιουργία Αποθετηρίου"
 

	
 
msgid "Creating repository"
 
msgstr "Δημιουργία αποθετηρίου"
 

	
 
msgid ""
 
"Repository \"%(repo_name)s\" is being created, you will be redirected "
 
"when this process is finished.repo_name"
 
msgstr ""
 
"Δημιουργείται το αποθετήριο \"%(repo_name)s\", θα ανακατευθυνθείτε όταν "
 
"ολοκληρωθεί αυτή η διαδικασία."
 

	
 
msgid ""
 
"We're sorry but error occurred during this operation. Please check your "
 
"Kallithea server logs, or contact administrator."
 
msgstr ""
 
"Λυπούμαστε, αλλά παρουσιάστηκε σφάλμα κατά τη διάρκεια αυτής της "
 
"λειτουργίας. Ελέγξτε τα αρχεία καταγραφής του διακομιστή Καλλιθέας ή "
 
"επικοινωνήστε με το διαχειριστή."
 

	
 
msgid "%s Repository Settings"
 
msgstr "Ρυθμίσεις Αποθετηρίου %s"
 

	
 
msgid "Extra Fields"
 
msgstr "Επιπλέον Πεδία"
 

	
 
msgid "Remote"
 
msgstr "Απομακρυσμένο"
 

	
 
msgid "Statistics"
 
msgstr "Στατιστικά"
 

	
 
msgid "Parent"
 
msgstr "Γονικό"
 

	
 
msgid "Set"
 
msgstr "Ορισμός"
 

	
 
msgid "Public Journal Visibility"
 
msgstr "Ορατότητα δημόσιων εγγραφών"
 

	
 
msgid "Remove from public journal"
 
msgstr "Κατάργηση από τις δημόσιες εγγραφές"
 

	
 
msgid "Add to Public Journal"
 
msgstr "Προσθήκη στις Δημόσια Εγγραφές"
 

	
 
msgid ""
 
"All actions done in this repository will be visible to everyone in the "
 
"public journal."
 
msgstr ""
 
"Όλες οι ενέργειες που γίνονται σε αυτό το αποθετήριο θα είναι ορατές σε "
 
"όλους στις δημόσιες εγγραφές."
 

	
 
msgid "Confirm to delete this repository: %s"
 
msgstr "Επιβεβαίωση διαγραφής αυτού του αποθετηρίου: %s"
 

	
 
msgid "Delete this Repository"
 
msgstr "Διαγραφή αυτού του Αποθετηρίου"
 

	
 
msgid "This repository has %s fork"
 
msgid_plural "This repository has %s forks"
 
msgstr[0] "Αυτό το αποθετήριο έχει %s παράγωγο"
 
msgstr[1] "Αυτό το αποθετήριο έχει %s παράγωγα"
 

	
 
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 ""
 
"Το διαγραμμένο αποθετήριο θα απομακρυνθεί και θα κρυφτεί έως ότου το "
 
"λήξει ο διαχειριστής. Ο διαχειριστής μπορεί να το διαγράψει οριστικά ή να "
 
"το επαναφέρει."
 

	
 
msgid "Label"
 
msgstr "Ετικέτα"
 

	
 
msgid "Key"
 
msgstr "Κλειδί"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "Επιβεβαίωση διαγραφής αυτού του πεδίου: %s"
 

	
 
msgid "New field key"
 
msgstr "Νέο κλειδί πεδίου"
 

	
 
msgid "New field label"
 
msgstr "Νέα ετικέτα πεδίου"
 

	
 
msgid "Enter short label"
 
msgstr "Εισαγωγή σύντομης ετικέτας"
 

	
 
msgid "New field description"
 
msgstr "Νέα περιγραφή πεδίου"
 

	
 
msgid "Enter description of a field"
 
msgstr "Εισαγωγή περιγραφής ενός πεδίου"
 

	
 
msgid "Extra fields are disabled."
 
msgstr "Τα επιπλέον πεδία είναι απενεργοποιημένα."
 

	
 
msgid "Private Repository"
 
msgstr "Ιδιωτικό Αποθετήριο"
 

	
 
msgid "Remote repository URL"
 
msgstr "Διεύθυνση URL απομακρυσμένου αποθετηρίου"
 

	
 
msgid "Pull Changes from Remote Repository"
 
msgstr "Τραβήξτε τις αλλαγές από το απομακρυσμένο αποθετήριο"
 

	
 
msgid "Confirm to pull changes from remote repository."
 
msgstr ""
 
"Επιβεβαιώστε ότι θα τραβήξετε αλλαγές από το απομακρυσμένο αποθετήριο "
 
"δεδομένων."
 

	
 
msgid "This repository does not have a remote repository URL."
 
msgstr ""
 
"Αυτό το αποθετήριο δεν έχει διεύθυνση URL απομακρυσμένου αποθετηρίου."
 

	
 
msgid "Permanent URL"
 
msgstr "Μόνιμη διεύθυνση URL"
 

	
 
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 ""
 
"Η διεύθυνση URL του αποθετηρίου αλλάζει όταν αυτό μετονομαστεί ή "
 
"μετακινηθεί σε άλλη ομάδα.\n"
 
"                               Η χρήση της παραπάνω μόνιμης διεύθυνσης "
 
"URL εγγυάται ότι αυτό το αποθετήριο θα είναι πάντα προσβάσιμο σε αυτήν τη "
 
"διεύθυνση URL.\n"
 
"                               Αυτό είναι χρήσιμο για συστήματα CI ή για "
 
"άλλες περιπτώσεις που χρειάζεστε να κωδικοποιήσετε τη διεύθυνση URL σε "
 
"κάποια υπηρεσία τρίτου μέρους."
 

	
 
msgid "Remote repository"
 
msgstr "Απομακρυσμένο αποθετήριο"
 

	
 
msgid "Repository URL"
 
msgstr "URL Αποθετηρίου"
 

	
 
msgid ""
 
"Optional: URL of a remote repository. If set, the repository can be "
 
"pulled from this URL."
 
msgstr ""
 
"Προαιρετικό: Διεύθυνση URL ενός απομακρυσμένου αποθετηρίου. Εάν οριστεί, "
 
"το αποθετήριο μπορεί να τραβηχτεί από αυτήν τη διεύθυνση URL."
 

	
 
msgid "Default revision for files page, downloads, whoosh and readme"
 
msgstr ""
 
"Προεπιλεγμένη αναθεώρηση για τη σελίδα αρχείων, λήψεων, Whoosh και readme"
 

	
 
msgid "Type name of user"
 
msgstr "Πληκτρολογήστε το όνομα του χρήστη"
 

	
 
msgid "Change owner of this repository."
 
msgstr "Αλλάξτε τον κάτοχο αυτού του αποθετηρίου."
 

	
 
msgid "Processed commits"
 
msgstr "Επεξεργασμένα commits"
 

	
 
msgid "Processed progress"
 
msgstr "Επεξεργασμένη πρόοδος"
 

	
 
msgid "Reset Statistics"
 
msgstr "Επαναφορά Στατιστικών"
 

	
 
msgid "Confirm to remove current statistics."
 
msgstr "Επιβεβαιώστε την κατάργηση των τρεχόντων στατιστικών στοιχείων."
 

	
 
msgid "Repositories Administration"
 
msgstr "Διαχείριση Αποθετηρίων"
 

	
 
msgid "State"
 
msgstr "Κατάσταση"
 

	
 
msgid "Settings Administration"
 
msgstr "Διαχείριση Ρυθμίσεων"
 

	
 
msgid "VCS"
 
msgstr "VCS"
 

	
 
msgid "Remap and Rescan"
 
msgstr "Επανάληψη αντιστοίχισης και επανασάρωση"
 

	
 
msgid "Visual"
 
msgstr "Εμφάνιση"
 

	
 
msgid "Full Text Search"
 
msgstr "Αναζήτηση Πλήρους Κειμένου"
 

	
 
msgid "System Info"
 
msgstr "Πληροφορίες Συστήματος"
 

	
 
msgid "Send test email to"
 
msgstr "Αποστολή δοκιμαστικού μηνύματος ηλεκτρονικού ταχυδρομείου σε"
 

	
 
msgid "Send"
 
msgstr "Αποστολή"
 

	
 
msgid "Site branding"
 
msgstr "Επωνυμία ιστότοπου"
 

	
 
msgid "Set a custom title for your Kallithea Service."
 
msgstr "Ορίστε έναν προσαρμοσμένο τίτλο για την υπηρεσία της Καλλιθέα σας."
 

	
 
msgid "HTML/JavaScript/CSS customization block"
 
msgstr "Μπλοκ προσαρμογής HTML / JavaScript / CSS"
 

	
 
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, but also "
 
"to                         perform instance-specific customizations like "
 
"adding a                         project banner at the top of every page."
 
msgstr ""
 
"HTML (ενδεχομένως με JavaScript ή / και CSS) που θα προστεθούν στο κάτω "
 
"μέρος της κάθε σελίδας. Αυτό μπορεί να χρησιμοποιηθεί για web analytics, "
 
"αλλά και για την προσαρμογή της εμφάνισης, όπως η προσθήκη ενός banner "
 
"στο επάνω μέρος κάθε σελίδας."
 

	
 
msgid "ReCaptcha public key"
 
msgstr "Δημόσιο κλειδί ReCaptcha"
 

	
 
msgid "Public key for reCaptcha system."
 
msgstr "Δημόσιο κλειδί για το σύστημα reCaptcha."
 

	
 
msgid "ReCaptcha private key"
 
msgstr "Ιδιωτικό κλειδί ReCaptcha"
 

	
 
msgid ""
 
"Private key for reCaptcha system. Setting this value will enable captcha "
 
"on registration."
 
msgstr ""
 
"Ιδιωτικό κλειδί για το σύστημα reCaptcha. Ο καθορισμός αυτής της τιμής θα "
 
"ενεργοποιήσει το captcha κατά την εγγραφή."
 

	
 
msgid "Save Settings"
 
msgstr "Αποθήκευση Ρυθμίσεων"
 

	
 
msgid "Built-in Mercurial Hooks (Read-Only)"
 
msgstr "Ενσωματωμένοι Mercurial Hooks (μόνο για ανάγνωση)"
 

	
 
msgid "Rescan options"
 
msgstr "Επιλογές Επανασάρωσης"
 

	
 
msgid "Delete records of missing repositories"
 
msgstr "Διαγραφή εγγραφών αποθετηρίων που λείπουν"
 

	
 
msgid ""
 
"Check this option to remove all comments, pull requests and other records "
 
"related to repositories that no longer exist in the filesystem."
 
msgstr ""
 
"Επιλέξτε αυτήν την επιλογή για να καταργήσετε όλα τα σχόλια, να αιτήματα "
 
"έλξης και άλλες εγγραφές που σχετίζονται με αποθετήρια που δεν υπάρχουν "
 
"πλέον στο σύστημα αρχείων."
 

	
 
msgid "Invalidate cache for all repositories"
 
msgstr "Ακυρώνει την προσωρινή αποθήκευση για όλα τα αποθετήρια"
 

	
 
msgid "Check this to reload data and clear cache keys for all repositories."
 
msgstr ""
 
"Επιλέξτε αυτό για να φορτώσετε ξανά τα δεδομένα και να καταργήστε την "
 
"cache για όλα τα αποθετήρια."
 

	
 
msgid "Install Git hooks"
 
msgstr "Εγκατάσταση Git hooks"
 

	
 
msgid ""
 
"Verify if Kallithea's Git hooks are installed for each repository. "
 
"Current hooks will be updated to the latest version."
 
msgstr ""
 
"Επαληθεύστε εάν τα Git hooks της Καλλιθέας είναι εγκατεστημένα για κάθε "
 
"αποθετήριο. Τα τρέχοντα hooks θα ενημερωθούν στην τελευταία έκδοση."
 

	
 
msgid "Overwrite existing Git hooks"
 
msgstr "Αντικατάσταση υπαρχόντων Git hooks"
 

	
 
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 ""
 
"Εάν εγκαθιστάτε Git hooks, αντικαταστήστε τυχόν υπάρχοντα hooks, ακόμα κι "
 
"αν δεν φαίνεται να προέρχονται από την Καλλιθέα. ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτή η "
 
"λειτουργία θα καταστρέψει τυχόν προσαρμοσμένα git hooks που μπορεί να "
 
"έχετε αναπτύξει με το χέρι!"
 

	
 
msgid "Rescan Repositories"
 
msgstr "Επανασάρωση αποθετηρίων"
 

	
 
msgid "Index build option"
 
msgstr "Επιλογή δημιουργίας ευρετηρίου"
 

	
 
msgid "Build from scratch"
 
msgstr "Κατασκευή από το μηδέν"
 

	
 
msgid ""
 
"This option completely reindexeses all of the repositories for proper "
 
"fulltext search capabilities."
 
msgstr ""
 
"Αυτή η επιλογή ξαναδημιουργεί πλήρως τα ευρετήρια σε όλα τα αποθετήρια "
 
"για δυνατότητα αναζήτησης πλήρους κειμένου."
 

	
 
msgid "Reindex"
 
msgstr "Αναδημιουργία ευρετηρίου"
 

	
 
msgid "Checking for updates..."
 
msgstr "Έλεγχος για ενημερώσεις..."
 

	
 
msgid "Kallithea version"
 
msgstr "Έκδοση Καλλιθέας"
 

	
 
msgid "Kallithea configuration file"
 
msgstr "Αρχείο διαμόρφωσης Καλλιθέας"
 

	
 
msgid "Python version"
 
msgstr "Έκδοση Python"
 

	
 
msgid "Platform"
 
msgstr "Πλατφόρμα"
 

	
 
msgid "Git version"
 
msgstr "Έκδοση Git"
 

	
 
msgid "Git path"
 
msgstr "Διαδρομή Git"
 

	
 
msgid "Python Packages"
 
msgstr "Πακέτα Python"
 

	
 
msgid "Show repository size after push"
 
msgstr "Εμφάνιση μεγέθους αποθετηρίου μετά την ώθηση"
 

	
 
msgid "Update repository after push (hg update)"
 
msgstr "Ενημέρωση αποθετηρίου μετά την ώθηση (hg update)"
 

	
 
msgid "Mercurial extensions"
 
msgstr "Επεκτάσεις Mercurial"
 

	
 
msgid "Enable largefiles extension"
 
msgstr "Ενεργοποίηση επέκτασης μεγάλων αρχείων"
 

	
 
msgid "Enable hgsubversion extension"
 
msgstr "Ενεργοποίηση επέκτασης hgsubversion"
 

	
 
msgid ""
 
"Requires hgsubversion library to be installed. Enables cloning of remote "
 
"Subversion repositories while converting them to Mercurial."
 
msgstr ""
 
"Απαιτεί την εγκατάσταση της βιβλιοθήκης hgsubversion. Ενεργοποιεί την "
 
"κλωνοποίηση απομακρυσμένων Subversion αποθετηρίων και τη μετατροπή τους "
 
"σε Mercurial."
 

	
 
msgid "Location of repositories"
 
msgstr "Τοποθεσία αποθετηρίων"
 

	
 
msgid ""
 
"Click to unlock. You must restart Kallithea in order to make this setting "
 
"take effect."
 
msgstr ""
 
"Κάντε κλικ για να ξεκλειδώσετε. Πρέπει να επανεκκινήσετε την Καλλιθέα για "
 
"να εφαρμοστεί αυτή η ρύθμιση."
 

	
 
msgid ""
 
"Filesystem location where repositories are stored. After changing this "
 
"value, a restart and rescan of the repository folder are both required."
 
msgstr ""
 
"Θέση συστήματος αρχείων όπου αποθηκεύονται τα αποθετήρια. Μετά την αλλαγή "
 
"αυτής της τιμής, απαιτείται επανεκκίνηση και σάρωση του φακέλου "
 
"αποθετηρίου."
 

	
 
msgid "General"
 
msgstr "Γενικά"
 

	
 
msgid "Use repository extra fields"
 
msgstr "Χρήση πρόσθετων πεδίων αποθετηρίου"
 

	
 
msgid "Allows storing additional customized fields per repository."
 
msgstr ""
 
"Επιτρέπει την αποθήκευση πρόσθετων προσαρμοσμένων πεδίων ανά αποθετήριο."
 

	
 
msgid "Show Kallithea version"
 
msgstr "Εμφάνιση της έκδοσης Καλλιθέας"
 

	
 
msgid ""
 
"Shows or hides a version number of Kallithea displayed in the footer."
 
msgstr ""
 
"Εμφανίζει ή αποκρύπτει τον αριθμό έκδοσης της Καλλιθέας που εμφανίζεται "
 
"στο υποσέλιδο."
 

	
 
msgid "Show user Gravatars"
 
msgstr "Εμφάνιση Gravatars του χρήστη"
 

	
 
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 ""
 
"Το Gravatar URL σας επιτρέπει να χρησιμοποιήσετε avatar από έναν άλλο "
 
"διακομιστή.\n"
 
"                                                        Οι ακόλουθες "
 
"μεταβλητές της διεύθυνσης URL θα αντικατασταθούν ανάλογα.\n"
 
"                                                        {scheme} 'http' ή "
 
"'https' που αποστέλλεται από την εκτέλεση του διακομιστή της Καλλιθέας,\n"
 
"                                                        {email} "
 
"ηλεκτρονικό ταχυδρομείο,\n"
 
"                                                        {md5email} md5 "
 
"hash του email χρήστη (όπως στο gravatar.com),\n"
 
"                                                        {size} μέγεθος "
 
"της εικόνας που αναμένεται από το διακομιστή,\n"
 
"                                                        {netloc} θέση "
 
"δικτύου/διακομιστή που τρέχει την Καλλιθέα"
 

	
 
msgid "HTTP Clone URL"
 
msgstr "HTTP Clone URL"
 

	
 
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,\n"
 
"                                                    {system_user}  name "
 
"of the Kallithea system user,\n"
 
"                                                    {hostname}  server "
 
"hostname\n"
 
"                                                    "
 
msgstr ""
 
"Κατασκευή σχήματος του URL clone π.χ. '{scheme}}}{user}@{netloc}/"
 
"{repo}'.\n"
 
"                                                    Οι ακόλουθες "
 
"μεταβλητές είναι διαθέσιμες:\n"
 
"                                                    {scheme} 'http' ή "
 
"'https' αποστέλλεται από την εκτέλεση του διακομιστή της Καλλιθέας,\n"
 
"                                                    {user} τρέχον όνομα "
 
"χρήστη,\n"
 
"                                                    {netloc} θέση δικτύου/"
 
"κεντρικός υπολογιστής διακομιστή που τρέχει το διακομιστή της Καλλιθέας,\n"
 
"                                                    {repo} πλήρες όνομα "
 
"αποθετηρίου,\n"
 
"                                                    {repoid} ID του "
 
"αποθετηρίου, μπορεί να χρησιμοποιηθεί για την κατασκευή clone-by-id,\n"
 
"                                                    {system_user} όνομα "
 
"του χρήστη του συστήματος Καλλιθέας,\n"
 
"                                                    {hostname} όνομα του "
 
"διακομιστή\n"
 
"                                                    "
 

	
 
msgid "SSH Clone URL"
 
msgstr "SSH Clone URL"
 

	
 
msgid ""
 
"Schema for constructing SSH clone URL, eg. 'ssh://{system_user}"
 
"@{hostname}/{repo}'."
 
msgstr ""
 
"Κατασκευή σχήματος SSH clone URL, πχ. 'ssh://{system_user}@{hostname}/"
 
"{repo}'."
 

	
 
msgid "Repository page size"
 
msgstr "Μέγεθος σελίδας αποθετηρίου"
 

	
 
msgid ""
 
"Number of items displayed in the repository pages before pagination is "
 
"shown."
 
msgstr ""
 
"Ο αριθμός των αντικειμένων που εμφανίζονται στις σελίδες αποθετηρίου πριν "
 
"εφαρμοστεί η σελιδοποίηση."
 

	
 
msgid "Admin page size"
 
msgstr "Μέγεθος σελίδας διαχειριστή"
 

	
 
msgid ""
 
"Number of items displayed in the admin pages grids before pagination is "
 
"shown."
 
msgstr ""
 
"Ο αριθμός των στοιχείων που εμφανίζονται στα πλέγματα των σελίδων "
 
"διαχειριστή πριν εφαρμοστεί η σελιδοποίηση."
 

	
 
msgid "Icons"
 
msgstr "Εικονίδια"
 

	
 
msgid "Show public repository icon on repositories"
 
msgstr "Εμφάνιση δημόσιου εικονιδίου αποθετηρίου στα αποθετήρια"
 

	
 
msgid "Show private repository icon on repositories"
 
msgstr "Εμφάνιση εικονιδίου ιδιωτικού αποθετηρίου στα αποθετήρια"
 

	
 
msgid "Show public/private icons next to repository names."
 
msgstr ""
 
"Εμφάνιση δημόσιων/ιδιωτικών εικονιδίων δίπλα στα ονόματα αποθετηρίων."
 

	
 
msgid "Meta Tagging"
 
msgstr "Μεταετικέτες"
 

	
 
msgid ""
 
"Parses meta tags from the repository description field and turns them "
 
"into colored tags."
 
msgstr ""
 
"Αναλύει τις μετα-ετικέτες από το πεδίο περιγραφής του αποθετηρίου και τις "
 
"μετατρέπει σε έγχρωμες ετικέτες."
 

	
 
msgid "Add user group"
 
msgstr "Προσθήκη ομάδας χρηστών"
 

	
 
msgid "User Groups"
 
msgstr "Ομάδες Χρηστών"
 

	
 
msgid "Add User Group"
 
msgstr "Προσθήκη Ομάδας Χρηστών"
 

	
 
msgid "Short, optional description for this user group."
 
msgstr "Σύντομη, προαιρετική περιγραφή για αυτήν την ομάδα χρηστών."
 

	
 
msgid "Active"
 
msgstr "Ενεργό"
 

	
 
msgid "%s user group settings"
 
msgstr "Ρυθμίσεις ομάδας χρηστών %s"
 

	
 
msgid "Show Members"
 
msgstr "Εμφάνιση Μελών"
 

	
 
msgid "User Group: %s"
 
msgstr "Ομάδα Χρηστών: %s"
 

	
 
msgid "Members"
 
msgstr "Μέλη"
 

	
 
msgid "Confirm to delete this user group: %s"
 
msgstr "Επιβεβαίωση για διαγραφή αυτής της ομάδας χρηστών: %s"
 

	
 
msgid "Delete this user group"
 
msgstr "Διαγραφή αυτής της ομάδας χρηστών"
 

	
 
msgid "No members yet"
 
msgstr "Δεν υπάρχουν μέλη ακόμα"
 

	
 
msgid "Chosen group members"
 
msgstr "Επιλεγμένα μέλη της ομάδας"
 

	
 
msgid "Available members"
 
msgstr "Διαθέσιμα μέλη"
 

	
 
msgid "User Groups Administration"
 
msgstr "Διαχείριση Ομάδων Χρηστών"
 

	
 
msgid "Add user"
 
msgstr "Προσθήκη χρήστη"
 

	
 
msgid "Users"
 
msgstr "Χρήστες"
 

	
 
msgid "Add User"
 
msgstr "Προσθήκη χρήστη"
 

	
 
msgid "Password confirmation"
 
msgstr "Επιβεβαίωση κωδικού πρόσβασης"
 

	
 
msgid "%s user settings"
 
msgstr "Ρυθμίσεις χρήστη %s"
 

	
 
msgid "Emails"
 
msgstr "Μηνύματα ηλεκτρονικού ταχυδρομείου"
 

	
 
msgid "User: %s"
 
msgstr "Χρήστης: %s"
 

	
 
msgid "Source of Record"
 
msgstr "Προέλευση εγγραφής"
 

	
 
msgid "Last Login"
 
msgstr "Τελευταία Σύνδεση"
 

	
 
msgid "Member of User Groups"
 
msgstr "Μέλος των Ομάδων Χρηστών"
 

	
 
msgid "Confirm to delete this user: %s"
 
msgstr "Επιβεβαίωση διαγραφής αυτού του χρήστη: %s"
 

	
 
msgid "Delete this user"
 
msgstr "Διαγραφή αυτού του χρήστη"
 

	
 
msgid "Inherited from %s"
 
msgstr "Κληρονομήθηκε από %s"
 

	
 
msgid "New password confirmation"
 
msgstr "Επιβεβαίωση νέου κωδικού πρόσβασης"
 

	
 
msgid "Users Administration"
 
msgstr "Διαχείριση Χρηστών"
 

	
 
msgid "Auth Type"
 
msgstr "Τύπος Πιστοποίησης"
 

	
 
msgid "Server instance: %s"
 
msgstr "Παρουσία διακομιστή: %s"
 

	
 
msgid "Support"
 
msgstr "Υποστήριξη"
 

	
 
msgid "Mercurial repository"
 
msgstr "Αποθετήριο Mercurial"
 

	
 
msgid "Git repository"
 
msgstr "Αποθετήριο Git"
 

	
 
msgid "Summary"
 
msgstr "Περίληψη"
 

	
 
msgid "Changelog"
 
msgstr "Ιστορικό αλλαγών"
 

	
 
msgid "Files"
 
msgstr "Αρχεία"
 

	
 
msgid "Show Pull Requests for %s"
 
msgstr "Εμφάνιση Αιτήσεων Έλξης για %s"
 

	
 
msgid "Pull Requests"
 
msgstr "Αιτήματα Έλξης"
 

	
 
msgid "Options"
 
msgstr "Επιλογές"
 

	
 
msgid "Compare"
 
msgstr "Σύγκριση"
 

	
 
msgid "Search"
 
msgstr "Αναζήτηση"
 

	
 
msgid "Follow"
 
msgstr "Παρακολούθηση"
 

	
 
msgid "Unfollow"
 
msgstr "Κατάργηση παρακολούθησης"
 

	
 
msgid "Create Pull Request"
 
msgstr "Δημιουργία Αιτήματος Έλξης"
 

	
 
msgid "Switch To"
 
msgstr "Αλλαγή Σε"
 

	
 
msgid "No matches found"
 
msgstr "Δεν βρέθηκαν αντιστοιχίσεις"
 

	
 
msgid "Show recent activity"
 
msgstr "Εμφάνιση πρόσφατης δραστηριότητας"
 

	
 
msgid "Public journal"
 
msgstr "Δημόσιο Ημερολόγιο"
 

	
 
msgid "Show public gists"
 
msgstr "Εμφάνιση δημόσιων gists"
 

	
 
msgid "Gists"
 
msgstr "Gists"
 

	
 
msgid "All Public Gists"
 
msgstr "Όλα τα Δημόσια Gists"
 

	
 
msgid "My Public Gists"
 
msgstr "Τα Δημόσιά μου Gists"
 

	
 
msgid "My Private Gists"
 
msgstr "Τα Ιδιωτικά μου Gists"
 

	
 
msgid "Search in repositories"
 
msgstr "Αναζήτηση σε αποθετήρια"
 

	
 
msgid "My Pull Requests"
 
msgstr "Τα αιτήματά μου για έλξη"
 

	
 
msgid "Not Logged In"
 
msgstr "Δεν έχετε συνδεθεί"
 

	
 
msgid "Login to Your Account"
 
msgstr "Συνδεθείτε στο λογαριασμό σας"
 

	
 
msgid "Forgot password?"
 
msgstr "Ξεχάσατε τον κωδικό πρόσβασης;"
 

	
 
msgid "Don't have an account?"
 
msgstr "Δεν έχετε λογαριασμό;"
 

	
 
msgid "Log Out"
 
msgstr "Αποσύνδεση"
 

	
 
msgid "Parent rev."
 
msgstr "Γονική αναθ."
 

	
 
msgid "Child rev."
 
msgstr "Θυγατρική αναθ."
 

	
 
msgid "Create repositories"
 
msgstr "Δημιουργία αποθετηρίων"
 

	
 
msgid "Select this option to allow repository creation for this user"
 
msgstr ""
 
"Ενεργοποιήστε αυτήν την επιλογή για να επιτρέψετε τη δημιουργία "
 
"αποθετηρίου για αυτόν το χρήστη"
 

	
 
msgid "Create user groups"
 
msgstr "Δημιουργία ομάδων χρηστών"
 

	
 
msgid "Select this option to allow user group creation for this user"
 
msgstr ""
 
"Ενεργοποιήστε αυτήν την επιλογή για να επιτρέψετε τη δημιουργία ομάδας "
 
"χρηστών για αυτόν το χρήστη"
 

	
 
msgid "Show"
 
msgstr "Εμφάνιση"
 

	
 
msgid "No permissions defined yet"
 
msgstr "Δεν έχουν οριστεί ακόμα δικαιώματα"
 

	
 
msgid "Permission"
 
msgstr "Δικαίωμα"
 

	
 
msgid "Edit Permission"
 
msgstr "Επεξεργασία Δικαιώματος"
 

	
 
msgid "No permission defined"
 
msgstr "Δεν έχει οριστεί κανένα δικαίωμα"
 

	
 
msgid "Retry"
 
msgstr "Επανάληψη"
 

	
 
msgid "Submitting ..."
 
msgstr "Υποβολή..."
 

	
 
msgid "Unable to post"
 
msgstr "Δεν είναι δυνατή η δημοσίευση"
 

	
 
msgid "Add Another Comment"
 
msgstr "Προσθήκη και άλλου Σχολίου"
 

	
 
msgid "Stop following this repository"
 
msgstr "Διακοπή παρακολούθησης αυτού του αποθετηρίου"
 

	
 
msgid "Start following this repository"
 
msgstr "Έναρξη παρακολούθησης αυτού του αποθετηρίου"
 

	
 
msgid "Group"
 
msgstr "Ομάδα"
 

	
 
msgid "Loading ..."
 
msgstr "Φόρτωση..."
 

	
 
msgid "loading ..."
 
msgstr "φόρτωση ..."
 

	
 
msgid "Search truncated"
 
msgstr "Περικομμένη αναζήτηση"
 

	
 
msgid "No matching files"
 
msgstr "Δεν υπάρχουν αρχεία που να ταιριάζουν"
 

	
 
msgid "Open New Pull Request from {0}"
 
msgstr "Άνοιγμα νέας αίτησης έλξης από {0}"
 

	
 
msgid "Open New Pull Request for {0} &rarr; {1}"
 
msgstr "Άνοιγμα νέου αιτήματος έλξης για {0} &rarr; {1}"
 

	
 
msgid "Show Selected Changesets {0} &rarr; {1}"
 
msgstr "Εμφάνιση Επιλεγμένων Σετ Αλλαγών {0} &rarr; {1}"
 

	
 
msgid "Selection Link"
 
msgstr "Σύνδεσμος Επιλογής"
 

	
 
msgid "Collapse Diff"
 
msgstr "Σύμπτυξη Διαφοράς"
 

	
 
msgid "Expand Diff"
 
msgstr "Ανάπτυξη Διαφοράς"
 

	
 
msgid "No revisions"
 
msgstr "Χωρίς αναθεωρήσεις"
 

	
 
msgid "Type name of user or member to grant permission"
 
msgstr ""
 
"Πληκτρολογήστε το όνομα του χρήστη ή του μέλους για την εκχώρηση "
 
"δικαιωμάτων"
 

	
 
msgid "Failed to revoke permission"
 
msgstr "Απέτυχε η ανάκληση του δικαιωμάτος"
 

	
 
msgid "Confirm to revoke permission for {0}: {1} ?"
 
msgstr "Επιβεβαιώστε την ανάκληση του δικαιώματος για {0}: {1};"
 

	
 
msgid "Select changeset"
 
msgstr "Επιλογή σετ αλλαγών"
 

	
 
msgid "Specify changeset"
 
msgstr "Καθορισμός σετ αλλαγών"
 

	
 
msgid "Click to sort ascending"
 
msgstr "Κάντε κλικ για αύξουσα ταξινόμηση"
 

	
 
msgid "Click to sort descending"
 
msgstr "Κάντε κλικ για φθίνουσα ταξινόμηση"
 

	
 
msgid "No records found."
 
msgstr "Δεν βρέθηκαν εγγραφές."
 

	
 
msgid "Data error."
 
msgstr "Σφάλμα δεδομένων."
 

	
 
msgid "Loading..."
 
msgstr "Φόρτωση..."
 

	
 
msgid "%s Changelog"
 
msgstr "%s Αρχείο καταγραφής αλλαγών"
 

	
 
msgid "showing %d out of %d revision"
 
msgid_plural "showing %d out of %d revisions"
 
msgstr[0] "εμφάνιση %d από %d αναθεώρηση"
 
msgstr[1] "εμφάνιση %d από %d αναθεώρησεις"
 

	
 
msgid "Clear selection"
 
msgstr "Καθαρισμός επιλογής"
 

	
 
msgid "Go to tip of repository"
 
msgstr "Μετάβαση στην κεφαλή του αποθετηρίου"
 

	
 
msgid "Branch filter:"
 
msgstr "Φίλτρο κλάδου:"
 

	
 
msgid "There are no changes yet"
 
msgstr "Δεν υπάρχουν αλλαγές ακόμα"
 

	
 
msgid "Removed"
 
msgstr "Αφαιρέθηκε"
 

	
 
msgid "Changed"
 
msgstr "Αλλάχτηκε"
 

	
 
msgid "Added"
 
msgstr "Προστέθηκε"
 

	
 
msgid "Affected %s files"
 
msgstr "Επηρεάστηκαν %s αρχεία"
 

	
 
msgid "First (oldest) changeset in this list"
 
msgstr "Πρώτο (παλαιότερο) σετ αλλαγών σε αυτήν τη λίστα"
 

	
 
msgid "Last (most recent) changeset in this list"
 
msgstr "Τελευταίο (πιο πρόσφατο) σετ αλλαγών σε αυτήν τη λίστα"
 

	
 
msgid "Position in this list of changesets"
 
msgstr "Θέση σε αυτήν τη λίστα των αλλαγών"
 

	
 
msgid ""
 
"Changeset status: %s by %s\n"
 
"Click to open associated pull request %s"
 
msgstr ""
 
"Κατάσταση συνόλου αλλαγών: %s από %s\n"
 
"Κάντε κλικ για να ανοίξετε το συσχετισμένο αίτημα έλξης %s"
 

	
 
msgid "Changeset status: %s by %s"
 
msgstr "Κατάσταση σετ αλλαγών: %s από %s"
 

	
 
msgid "Expand commit message"
 
msgstr "Ανάπτυξη μηνύματος commit"
 

	
 
msgid "%s comments"
 
msgstr "%s σχόλια"
 

	
 
msgid "Bookmark %s"
 
msgstr "Σελιδοδείκτης %s"
 

	
 
msgid "Tag %s"
 
msgstr "Ετικέτα %s"
 

	
 
msgid "Branch %s"
 
msgstr "Κλάδος %s"
 

	
 
msgid "%s Changeset"
 
msgstr "Σετ αλλαγών %s"
 

	
 
msgid "Changeset status"
 
msgstr "Κατάσταση σετ αλλαγών"
 

	
 
msgid "Raw diff"
 
msgstr "Ακατέργαστη διαφορά"
 

	
 
msgid "Patch diff"
 
msgstr "Διαφορά κώδικα"
 

	
 
msgid "Download diff"
 
msgstr "Λήψη διαφοράς"
 

	
 
msgid "Merge"
 
msgstr "Συγχώνευση"
 

	
 
msgid "Replaced by:"
 
msgstr "Αντικαταστάθηκε από:"
 

	
 
msgid "Preceded by:"
 
msgstr "Προηγείται από:"
 

	
 
msgid "%s file changed"
 
msgid_plural "%s files changed"
 
msgstr[0] "Άλλαξε %s αρχείο"
 
msgstr[1] "Άλλαξαν %s αρχεία"
 

	
 
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 διαγραφές"
 

	
 
msgid "Show full diff anyway"
 
msgstr "Εμφάνιση πλήρους διαφοράς ούτως ή άλλως"
 

	
 
msgid "comment"
 
msgstr "σχόλιο"
 

	
 
msgid "on pull request"
 
msgstr "κατόπιν αιτήματος έλξης"
 

	
 
msgid "No title"
 
msgstr "Χωρίς τίτλο"
 

	
 
msgid "on this changeset"
 
msgstr "σε αυτό το σετ αλλαγών"
 

	
 
msgid "Delete comment?"
 
msgstr "Διαγραφή σχολίου;"
 

	
 
msgid "Status change"
 
msgstr "Αλλαγή κατάστασης"
 

	
 
msgid "Comments are in plain text. Use @username to notify another user."
 
msgstr ""
 
"Τα σχόλια είναι σε απλό κείμενο. Χρησιμοποιήστε @username για να "
 
"ειδοποιήσετε έναν άλλο χρήστη."
 

	
 
msgid "Set changeset status"
 
msgstr "Ορισμός κατάστασης σετ αλλαγών"
 

	
 
msgid "Vote for pull request status"
 
msgstr "Ψηφοφορία για την κατάσταση του αιτήματος έλξης"
 

	
 
msgid "No change"
 
msgstr "Καμία αλλαγή"
 

	
 
msgid "Finish pull request"
 
msgstr "Τερματισμός αιτήματος έλξης"
 

	
 
msgid "Close"
 
msgstr "Κλείσιμο"
 

	
 
msgid "Comment"
 
msgstr "Σχολιασμός"
 

	
 
msgid "You need to be logged in to comment."
 
msgstr "Πρέπει να είστε συνδεδεμένος για να σχολιάσετε."
 

	
 
msgid "Login now"
 
msgstr "Συνδεθείτε τώρα"
 

	
 
msgid "Hide"
 
msgstr "Απόκρυψη"
 

	
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] "%d σχόλιο"
 
msgstr[1] "%d σχόλια"
 

	
 
msgid "%d inline"
 
msgid_plural "%d inline"
 
msgstr[0] "%d ενσωματωμένο"
 
msgstr[1] "%d ενσωματωμένα"
 

	
 
msgid "%d general"
 
msgid_plural "%d general"
 
msgstr[0] "%d γενικά"
 
msgstr[1] "%d γενικά"
 

	
 
msgid "%s Changesets"
 
msgstr "Σετ αλλαγών του %s"
 

	
 
msgid "Changeset status: %s"
 
msgstr "Κατάσταση σετ αλλαγών: %s"
 

	
 
msgid "Files affected"
 
msgstr "Αρχεία που επηρεάστηκαν"
 

	
 
msgid "No file before"
 
msgstr "Δεν υπάρχει αρχείο πριν"
 

	
 
msgid "File before"
 
msgstr "Αρχείο πριν"
 

	
 
msgid "Modified"
 
msgstr "Τροποποιημένο"
 

	
 
msgid "Deleted"
 
msgstr "Διαγράφηκε"
 

	
 
msgid "Renamed"
 
msgstr "Μετονομάστηκε"
 

	
 
msgid "Unknown operation: %r"
 
msgstr "Άγνωστη λειτουργία: %r"
 

	
 
msgid "No file after"
 
msgstr "Δεν υπάρχει αρχείο μετά"
 

	
 
msgid "File after"
 
msgstr "Αρχείο μετά"
 

	
 
msgid "Show full diff for this file"
 
msgstr "Εμφάνιση πλήρους διαφοράς για αυτό το αρχείο"
 

	
 
msgid "Show full side-by-side diff for this file"
 
msgstr "Εμφάνιση πλήρους διαφοράς δίπλα-δίπλα για αυτό το αρχείο"
 

	
 
msgid "Show inline comments"
 
msgstr "Εμφάνιση ενσωματωμένων σχολίων"
 

	
 
msgid "No changesets"
 
msgstr "Χωρίς σετ αλλαγών"
 

	
 
msgid "Criss cross merge situation with multiple merge ancestors detected!"
 
msgstr ""
 
"Εντοπίστηκε κατάσταση διασταυρούμενης συγχώνευσης με πολλούς προγόνους "
 
"συγχώνευσης!"
 

	
 
msgid ""
 
"Please merge the target branch to your branch before creating a pull "
 
"request."
 
msgstr ""
 
"Παρακαλώ συγχωνεύστε τον κλάδο-στόχο στον κλάδο σας πριν δημιουργήσετε "
 
"ένα αίτημα έλξης."
 

	
 
msgid "Merge Ancestor"
 
msgstr "Πρόγονος Συγχώνευσης"
 

	
 
msgid "Show merge diff"
 
msgstr "Εμφάνιση διαφοράς συγχώνευσης"
 

	
 
msgid "is"
 
msgstr "είναι"
 

	
 
msgid "%s changesets"
 
msgstr "%s σετ αλλαγών"
 

	
 
msgid "behind"
 
msgstr "πίσω"
 

	
 
msgid "%s Compare"
 
msgstr "Σύγκριση %s"
 

	
 
msgid "Compare Revisions"
 
msgstr "Σύγκριση Αναθεωρήσεων"
 

	
 
msgid "Swap"
 
msgstr "Ανταλαγή"
 

	
 
msgid "Compare revisions, branches, bookmarks, or tags."
 
msgstr "Συγκρίνετε αναθεωρήσεις, κλάδους, σελιδοδείκτες ή ετικέτες."
 

	
 
msgid "Showing %s commit"
 
msgid_plural "Showing %s commits"
 
msgstr[0] "Εμφάνιση %s commit"
 
msgstr[1] "Εμφάνιση %s commits"
 

	
 
msgid "Show full diff"
 
msgstr "Εμφάνιση πλήρους διαφοράς"
 

	
 
msgid "Public repository"
 
msgstr "Δημόσιο αποθετήριο"
 

	
 
msgid "Repository creation in progress..."
 
msgstr "Η δημιουργία αποθετηρίου βρίσκεται σε εξέλιξη..."
 

	
 
msgid "No changesets yet"
 
msgstr "Δεν υπάρχουν ακόμα σετ αλλαγών"
 

	
 
msgid "Subscribe to %s rss feed"
 
msgstr "Εγγραφή στην τροφοδοσία rss του %s"
 

	
 
msgid "Subscribe to %s atom feed"
 
msgstr "Εγγραφή στην τροφοδοσία του %s atom"
 

	
 
msgid "Creating"
 
msgstr "Δημιουργία σε εξέλιξη"
 

	
 
msgid "Mention in Comment on Changeset \"%s\""
 
msgstr "Αναφορά στο Σχόλιο για το σετ αλλαγών \"%s\""
 

	
 
msgid "Comment on Changeset \"%s\""
 
msgstr "Σχόλιο για το σετ αλλαγών \"%s\""
 

	
 
msgid "Changeset on"
 
msgstr "Σετ αλλαγών σε"
 

	
 
msgid "branch"
 
msgstr "κλάδος"
 

	
 
msgid "by"
 
msgstr "από"
 

	
 
msgid "Status change:"
 
msgstr "Αλλαγή κατάστασης:"
 

	
 
msgid "The pull request has been closed."
 
msgstr "Το αίτημα έλξης έχει κλείσει."
 

	
 
msgid "Hello %s"
 
msgstr "Γεια σας %s"
 

	
 
msgid "We have received a request to reset the password for your account."
 
msgstr ""
 
"Λάβαμε ένα αίτημα για επαναφορά του κωδικού πρόσβασης για το λογαριασμό "
 
"σας."
 

	
 
msgid ""
 
"This account is however managed outside this system and the password "
 
"cannot be changed here."
 
msgstr ""
 
"Ωστόσο, η διαχείριση αυτού του λογαριασμού γίνεται εκτός αυτού του "
 
"συστήματος και ο κωδικός πρόσβασης δεν μπορεί να αλλάξει εδώ."
 

	
 
msgid "To set a new password, click the following link"
 
msgstr ""
 
"Για να ορίσετε έναν νέο κωδικό πρόσβασης, κάντε κλικ στον ακόλουθο "
 
"σύνδεσμο"
 

	
 
msgid ""
 
"Should you not be able to use the link above, please type the following "
 
"code into the password reset form"
 
msgstr ""
 
"Εάν δεν μπορείτε να χρησιμοποιήσετε τον παραπάνω σύνδεσμο, πληκτρολογήστε "
 
"τον ακόλουθο κώδικα στη φόρμα επαναφοράς κωδικού πρόσβασης"
 

	
 
msgid ""
 
"If it weren't you who requested the password reset, just disregard this "
 
"message."
 
msgstr ""
 
"Αν δεν ήσασταν εσείς που ζητήσατε την επαναφορά κωδικού πρόσβασης, απλώς "
 
"αγνοήστε αυτό το μήνυμα."
 

	
 
msgid "Mention on Pull Request %s \"%s\" by %s"
 
msgstr "Αναφορά στην αίτημα έλξης %s \"%s\" από %s"
 

	
 
msgid "Added as Reviewer of Pull Request %s \"%s\" by %s"
 
msgstr "Προστεθήκατε ως αναθεωρητής του αιτήματος έλξης %s \"%s\" από %s"
 

	
 
msgid "Pull request"
 
msgstr "Αίτημα έλξης"
 

	
 
msgid "from"
 
msgstr "από"
 

	
 
msgid "to"
 
msgstr "προς"
 

	
 
msgid "Mention in Comment on Pull Request %s \"%s\""
 
msgstr "Αναφορά στο σχόλιο για το αίτημα έλξης %s \"%s\""
 

	
 
msgid "Pull Request %s \"%s\" Closed"
 
msgstr "Το αίτημα έλξης %s \"%s\" είναι Κλειστό"
 

	
 
msgid "Comment on Pull Request %s \"%s\""
 
msgstr "Σχόλιο στην αίτηση έλξης %s \"%s\""
 

	
 
msgid "Full Name"
 
msgstr "Ονοματεπώνυμο"
 

	
 
msgid "%s File side-by-side diff"
 
msgstr "%s Αρχείο διαφοράς δίπλα-δίπλα"
 

	
 
msgid "File diff"
 
msgstr "Αρχείο διαφοράς"
 

	
 
msgid "%s File Diff"
 
msgstr "%s Αρχείο διαφοράς"
 

	
 
msgid "%s Files"
 
msgstr "%s Αρχεία"
 

	
 
msgid "%s Files Add"
 
msgstr "%s Προσθήκη Αρχείων"
 

	
 
msgid "Add New File"
 
msgstr "Προσθήκη Νέου Αρχείου"
 

	
 
msgid "Location"
 
msgstr "Τοποθεσία"
 

	
 
msgid "Enter filename..."
 
msgstr "Εισαγωγή ονόματος αρχείου..."
 

	
 
msgid "or"
 
msgstr "ή"
 

	
 
msgid "Upload File"
 
msgstr "Ανέβασμα Αρχείου"
 

	
 
msgid "Create New File"
 
msgstr "Δημιουργία Νέου Αρχείου"
 

	
 
msgid "New file type"
 
msgstr "Νέος τύπος αρχείου"
 

	
 
msgid "Commit Message"
 
msgstr "Μήνυμα Υποβολής"
 

	
 
msgid "Commit Changes"
 
msgstr "Υποβολή Των Αλλαγών"
 

	
 
msgid "Search File List"
 
msgstr "Αναζήτηση στη Λίστα Αρχείων"
 

	
 
msgid "Loading file list..."
 
msgstr "Φόρτωση λίστας αρχείων..."
 

	
 
msgid "Size"
 
msgstr "Μέγεθος"
 

	
 
msgid "Last Revision"
 
msgstr "Τελευταία Αναθεώρηση"
 

	
 
msgid "Last Modified"
 
msgstr "Τελευταία Τροποποίηση"
 

	
 
msgid "Last Committer"
 
msgstr "Τελευταίος Υποβάλλων"
 

	
 
msgid "%s Files Delete"
 
msgstr "%s Διαγραφή Αρχείων"
 

	
 
msgid "Delete file"
 
msgstr "Διαγραφή αρχείου"
 

	
 
msgid "%s File Edit"
 
msgstr "%s Επεξεργασία Αρχείου"
 

	
 
msgid "Edit file"
 
msgstr "Επεξεργασία αρχείου"
 

	
 
msgid "Show Annotation"
 
msgstr "Εμφάνιση Σχολιασμού"
 

	
 
msgid "Download as Raw"
 
msgstr "Λήψη ως ακατέργαστο"
 

	
 
msgid "Source"
 
msgstr "Πηγή"
 

	
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] "%s συντάκτης"
 
msgstr[1] "%s συντάκτες"
 

	
 
msgid "Diff to Revision"
 
msgstr "Διαφορά σε Αναθεώρηση"
 

	
 
msgid "Show at Revision"
 
msgstr "Εμφάνιση στην Αναθεώρηση"
 

	
 
msgid "Show Full History"
 
msgstr "Εμφάνιση Πλήρους Ιστορικού"
 

	
 
msgid "Show Authors"
 
msgstr "Εμφάνιση Συντακτών"
 

	
 
msgid "Show Source"
 
msgstr "Εμφάνιση Πηγής"
 

	
 
msgid "Edit on Branch: %s"
 
msgstr "Επεξεργασία στον κλάδο: %s"
 

	
 
msgid "Editing binary files not allowed"
 
msgstr "Η επεξεργασία δυαδικών αρχείων δεν επιτρέπεται"
 

	
 
msgid "Editing files allowed only when on branch head revision"
 
msgstr ""
 
"Η επεξεργασία αρχείων επιτρέπεται μόνο σε αναθεώρηση επί της κεφαλής του "
 
"κλάδου"
 

	
 
msgid "Deleting files allowed only when on branch head revision"
 
msgstr ""
 
"Η διαγραφή αρχείων επιτρέπεται μόνο σε αναθεώρηση επί της κεφαλής του "
 
"κλάδου"
 

	
 
msgid "Binary file (%s)"
 
msgstr "Δυαδικό αρχείο (%s)"
 

	
 
msgid "File is too big to display."
 
msgstr "Το αρχείο είναι πολύ μεγάλο για προβολή."
 

	
 
msgid "Show full annotation anyway."
 
msgstr "Εμφάνιση πλήρους σχολιασμού ούτως ή άλλως."
 

	
 
msgid "Show as raw."
 
msgstr "Ακατέργαστη εμφάνιση."
 

	
 
msgid "annotation"
 
msgstr "σχολιασμός"
 

	
 
msgid "Go Back"
 
msgstr "Πήγαινε Πίσω"
 

	
 
msgid "No files at given path"
 
msgstr "Δεν υπάρχουν αρχεία στη δοσμένη διαδρομή"
 

	
 
msgid "%s Followers"
 
msgstr "%s Ακόλουθοι"
 

	
 
msgid "Followers"
 
msgstr "Ακόλουθοι"
 

	
 
msgid "Started following -"
 
msgstr "Ξεκίνησαν να ακολουθούν -"
 

	
 
msgid "Default revision for files page, downloads, whoosh, and readme."
 
msgstr ""
 
"Προεπιλεγμένη αναθεώρηση για τη σελίδα αρχείων, λήψεων, whoosh, και "
 
"readme."
 

	
 
msgid "Private"
 
msgstr "Ιδιωτικό"
 

	
 
msgid "Copy permissions"
 
msgstr "Αντιγραφή δικαιωμάτων"
 

	
 
msgid "Update after clone"
 
msgstr "Ενημέρωση μετά την κλωνοποίηση"
 

	
 
msgid "Checkout source after making a clone"
 
msgstr "Πηγαίνετε στον κώδικα μετά την κλωνοποίηση"
 

	
 
msgid "ATOM journal feed"
 
msgstr "Ημερολόγιο τροφοδοσίας ATOM"
 

	
 
msgid "RSS journal feed"
 
msgstr "Ημερολόγιο τροφοδοσίας RSS"
 

	
 
msgid "My Repositories"
 
msgstr "Τα αποθετήριά μου"
 

	
 
msgid "No entries yet"
 
msgstr "Δεν υπάρχουν ακόμη καταχωρήσεις"
 

	
 
msgid "ATOM public journal feed"
 
msgstr "Δημόσιο ημερολόγιο τροφοδοσίας ATOM"
 

	
 
msgid "RSS public journal feed"
 
msgstr "Δημόσιο ημερολόγιο τροφοδοσίας RSS"
 

	
 
msgid "New Pull Request"
 
msgstr "Νέο Αίτημα Έλξης"
 

	
 
msgid "Title"
 
msgstr "Τίτλος"
 

	
 
msgid "Summarize the changes - or leave empty"
 
msgstr "Συνοψίστε τις αλλαγές - ή αφήστε το κενό"
 

	
 
msgid "Write a short description on this pull request"
 
msgstr "Γράψτε μια σύντομη περιγραφή σχετικά με αυτό το αίτημα έλξης"
 

	
 
msgid "Changeset flow"
 
msgstr "Ροή σετ αλλαγών"
 

	
 
msgid "Origin repository"
 
msgstr "Αποθετήριο προέλευσης"
 

	
 
msgid "Revision"
 
msgstr "Αναθεώρηση"
 

	
 
msgid "Destination repository"
 
msgstr "Αποθετήριο προορισμού"
 

	
 
msgid "No entries"
 
msgstr "Χωρίς καταχωρήσεις"
 

	
 
msgid "Vote"
 
msgstr "Ψήφος"
 

	
 
msgid "Age"
 
msgstr "Ηλικία"
 

	
 
msgid "From"
 
msgstr "Από"
 

	
 
msgid "To"
 
msgstr "Προς"
 

	
 
msgid "You voted: %s"
 
msgstr "Ψηφίσατε: %s"
 

	
 
msgid "You didn't vote"
 
msgstr "Δεν ψηφίσατε"
 

	
 
msgid "(no title)"
 
msgstr "(χωρίς τίτλο)"
 

	
 
msgid "Closed"
 
msgstr "Κλειστό"
 

	
 
msgid "Delete Pull Request"
 
msgstr "Διαγραφή Αιτήματος Έλξης"
 

	
 
msgid "Confirm to delete this pull request"
 
msgstr "Επιβεβαίωση διαγραφής αυτού του αιτήματος έλξης"
 

	
 
msgid "Confirm again to delete this pull request with %s comments"
 
msgstr ""
 
"Επιβεβαίωση ξανά για τη διαγραφή αυτού του αιτήματος έλξης με %s σχόλια"
 

	
 
msgid "%s Pull Request %s"
 
msgstr "%s Αίτημα Έλξης %s"
 

	
 
msgid "Pull request %s from %s#%s"
 
msgstr "Αίτημα έλξης %s από %s#%s"
 

	
 
msgid "Summarize the changes"
 
msgstr "Σύνοψη των αλλαγών"
 

	
 
msgid "Voting Result"
 
msgstr "Αποτέλεσμα Ψηφοφορίας"
 

	
 
msgid "Pull request status calculated from votes"
 
msgstr "Η κατάσταση του αιτήματος έλξης υπολογισμένο από τις ψήφους"
 

	
 
msgid "Origin"
 
msgstr "Προέλευση"
 

	
 
msgid "on"
 
msgstr "επί"
 

	
 
msgid "Target"
 
msgstr "Στόχος"
 

	
 
msgid ""
 
"This is just a range of changesets and doesn't have a target or a real "
 
"merge ancestor."
 
msgstr ""
 
"Αυτό είναι μόνο μια σειρά από σετ αλλαγών και δεν έχει προορισμό ή "
 
"πραγματικό πρόγονο συγχώνευσης."
 

	
 
msgid "Pull changes"
 
msgstr "Τράβηγμα αλλαγών"
 

	
 
msgid "Next iteration"
 
msgstr "Επόμενη επανάληψη"
 

	
 
msgid "Current revision - no change"
 
msgstr "Τρέχουσα αναθεώρηση - καμία αλλαγή"
 

	
 
msgid ""
 
"Pull request iterations do not change content once created. Select a "
 
"revision to create a new iteration."
 
msgstr ""
 
"Οι επαναλήψεις αιτήσεων έλξης δεν αλλάζουν περιεχόμενο μετά τη δημιουργία "
 
"τους. Επιλέξτε μια αναθεώρηση για να δημιουργήσετε μια νέα επανάληψη."
 

	
 
msgid "Save Changes"
 
msgstr "Αποθήκευση Αλλαγών"
 

	
 
msgid "Create New Iteration with Changes"
 
msgstr "Δημιουργία Νέας Επανάληψης με τις Αλλαγές"
 

	
 
msgid "Cancel Changes"
 
msgstr "Ακύρωση Αλλαγών"
 

	
 
msgid "Reviewers"
 
msgstr "Επιθεωρητές"
 

	
 
msgid "Remove reviewer"
 
msgstr "Κατάργηση επιθεωρητή"
 

	
 
msgid "Type name of reviewer to add"
 
msgstr "Πληκτρολογήστε το όνομα του επιθεωρητή για προσθήκη"
 

	
 
msgid "Potential Reviewers"
 
msgstr "Πιθανοί Επιθεωρητές"
 

	
 
msgid "Click to add the repository owner as reviewer:"
 
msgstr ""
 
"Κάντε κλικ για να προσθέσετε τον κάτοχο του αποθετηρίου ως επιθεωρητή:"
 

	
 
msgid "Pull Request Content"
 
msgstr "Περιεχόμενο Αιτήματος Έλξης"
 

	
 
msgid "Common ancestor"
 
msgstr "Κοινός πρόγονος"
 

	
 
msgid "%s Pull Requests"
 
msgstr "%s Αιτήματα Έλξης"
 

	
 
msgid "Pull Requests from '%s'"
 
msgstr "Αιτήματα Έλξης από '%s'"
 

	
 
msgid "Pull Requests to '%s'"
 
msgstr "Αιτήματα Έλξης προς '%s'"
 

	
 
msgid "Open New Pull Request"
 
msgstr "Άνοιγμα Νέου Αιτήματος Έλξης"
 

	
 
msgid "Show Pull Requests to %s"
 
msgstr "Εμφάνιση Αιτημάτων Έλξης προς %s"
 

	
 
msgid "Show Pull Requests from '%s'"
 
msgstr "Εμφάνιση Αιτημάτων Έλξης από '%s'"
 

	
 
msgid "Hide closed pull requests (only show open pull requests)"
 
msgstr ""
 
"Απόκρυψη κλειστών αιτημάτων έλξης (εμφάνιση μόνο ανοικτών αιτημάτων έλξης)"
 

	
 
msgid "Show closed pull requests (in addition to open pull requests)"
 
msgstr ""
 
"Εμφάνιση κλειστών αιτημάτων έλξης (εκτός από τα ανοιχτά αιτήματα έλξης)"
 

	
 
msgid "Pull Requests Created by Me"
 
msgstr "Αιτήματα Έλξης που Δημιουργήθηκαν από Εμένα"
 

	
 
msgid "Pull Requests Needing My Review"
 
msgstr "Αιτήματα Έλξης που Χρειάζονται την Επιθεώρησή μου"
 

	
 
msgid "Pull Requests I Participate In"
 
msgstr "Αιτήματα Έλξης που Συμμετέχω"
 

	
 
msgid "%s Search"
 
msgstr "%s Αναζήτηση"
 

	
 
msgid "Search in All Repositories"
 
msgstr "Αναζήτηση σε Όλα τα Αποθετήρια"
 

	
 
msgid "Search term"
 
msgstr "Όρος αναζήτησης"
 

	
 
msgid "Search in"
 
msgstr "Αναζήτηση σε"
 

	
 
msgid "File contents"
 
msgstr "Περιεχόμενα αρχείου"
 

	
 
msgid "Commit messages"
 
msgstr "Μηνύματα commit"
 

	
 
msgid "File names"
 
msgstr "Ονόματα αρχείων"
 

	
 
msgid "Permission denied"
 
msgstr "Άρνηση δικαιώματος"
 

	
 
msgid "%s Statistics"
 
msgstr "%s Στατιστικά"
 

	
 
msgid "%s ATOM feed"
 
msgstr "%s Τροφοδοσία ATOM"
 

	
 
msgid "%s RSS feed"
 
msgstr "%s Τροφοδοσία RSS"
 

	
 
msgid "Enable"
 
msgstr "Ενεργοποίηση"
 

	
 
msgid "Stats gathered: "
 
msgstr "Στατιστικά που συγκεντρώθηκαν: "
 

	
 
msgid "files"
 
msgstr "αρχεία"
 

	
 
msgid "Show more"
 
msgstr "Εμφάνιση περισσότερων"
 

	
 
msgid "commits"
 
msgstr "commits"
 

	
 
msgid "files added"
 
msgstr "αρχεία που προστέθηκαν"
 

	
 
msgid "files changed"
 
msgstr "αρχεία που άλλαξαν"
 

	
 
msgid "files removed"
 
msgstr "αρχεία που αφαιρέθηκαν"
 

	
 
msgid "commit"
 
msgstr "commit"
 

	
 
msgid "file added"
 
msgstr "αρχείο προστέθηκε"
 

	
 
msgid "file changed"
 
msgstr "αρχείο άλλαξε"
 

	
 
msgid "file removed"
 
msgstr "αρχείο αφαιρέθηκε"
 

	
 
msgid "%s Summary"
 
msgstr "%s Σύνοψη"
 

	
 
msgid "Clone from"
 
msgstr "Κλώνος από"
 

	
 
msgid "Clone URL"
 
msgstr "Clone URL"
 

	
 
msgid "Use ID"
 
msgstr "Χρήση ID"
 

	
 
msgid "Use SSH"
 
msgstr "Χρήση SSH"
 

	
 
msgid "Use Name"
 
msgstr "Χρήση Ονόματος"
 

	
 
msgid "Use HTTP"
 
msgstr "Χρήση HTTP"
 

	
 
msgid "Trending files"
 
msgstr "Δημοφιλή αρχεία"
 

	
 
msgid "Download"
 
msgstr "Λήψη"
 

	
 
msgid "There are no downloads yet"
 
msgstr "Δεν υπάρχουν λήψεις ακόμα"
 

	
 
msgid "Downloads are disabled for this repository"
 
msgstr "Οι λήψεις είναι απενεργοποιημένες για αυτό το αποθετήριο"
 

	
 
msgid "Download as zip"
 
msgstr "Λήψη ως zip"
 

	
 
msgid "Check this to download archive with subrepos"
 
msgstr "Επιλέξτε αυτό για τη λήψη του αρχείου με τα υπο-αποθετήρια"
 

	
 
msgid "With subrepos"
 
msgstr "Με υπο-αποθετήρια"
 

	
 
msgid "Feed"
 
msgstr "Ροή"
 

	
 
msgid "Latest Changes"
 
msgstr "Τελευταίες Αλλαγές"
 

	
 
msgid "Quick Start"
 
msgstr "Γρήγορη Εκκίνηση"
 

	
 
msgid "Add or upload files directly via Kallithea"
 
msgstr "Προσθέστε ή ανεβάστε αρχεία απευθείας μέσω Καλλιθέας"
 

	
 
msgid "Push new repository"
 
msgstr "Ώθηση νέου αποθετηρίου"
 

	
 
msgid "Existing repository?"
 
msgstr "Υπάρχον αποθετήριο;"
 

	
 
msgid "Readme file from revision %s:%s"
 
msgstr "Αρχείο Readme από την αναθεώρηση %s:%s"
 

	
 
msgid "Download %s as %s"
 
msgstr "Λήψη %s ως %s"
kallithea/i18n/fr/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -185,24 +185,27 @@ msgstr "Branches fermées"
 
msgid "Tag"
 
msgstr "Étiquette"
 

	
 
msgid "Bookmark"
 
msgstr "Signet"
 

	
 
msgid "Public Journal"
 
msgstr "Journal public"
 

	
 
msgid "Journal"
 
msgstr "Historique"
 

	
 
msgid "Authentication failed."
 
msgstr "Échec de l'authentification."
 

	
 
msgid "Bad captcha"
 
msgstr "Mauvais captcha"
 

	
 
msgid "You have successfully registered with %s"
 
msgstr "Vous vous êtes inscrit avec succès avec %s"
 

	
 
msgid "A password reset confirmation code has been sent"
 
msgstr ""
 
"Un lien de confirmation de réinitialisation de mot de passe a été envoyé"
 

	
 
msgid "Invalid password reset token"
 
msgstr "Clé de réinitialisation de mot de passe invalide"
 
@@ -385,24 +388,30 @@ msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail"
 
msgid "Removed email from user"
 
msgstr "L’e-mail a été enlevé de l’utilisateur"
 

	
 
msgid "API key successfully created"
 
msgstr "Clé d'API créée avec succès"
 

	
 
msgid "API key successfully reset"
 
msgstr "Clé d'API remise à zéro avec succès"
 

	
 
msgid "API key successfully deleted"
 
msgstr "Clé d'API supprimée avec succès"
 

	
 
msgid "SSH key %s successfully added"
 
msgstr "Clé SSH %s ajoutée avec succès"
 

	
 
msgid "SSH key successfully deleted"
 
msgstr "Clé SSH supprimée avec succès"
 

	
 
msgid "Read"
 
msgstr "Lire"
 

	
 
msgid "Write"
 
msgstr "Écrire"
 

	
 
msgid "Admin"
 
msgstr "Administration"
 

	
 
msgid "Disabled"
 
msgstr "Interdite"
 

	
 
@@ -518,30 +527,24 @@ msgstr ""
 
"Une erreur est survenue durant la configuration du journal public pour ce "
 
"dépôt"
 

	
 
msgid "Nothing"
 
msgstr "[Aucun dépôt]"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "Le dépôt %s a été marké comme fork de %s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "Une erreur est survenue durant cette opération"
 

	
 
msgid "Cache invalidation successful"
 
msgstr "Invalidation du cache réalisée avec succès"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "Une erreur est survenue durant l’invalidation du cache"
 

	
 
msgid "Pulled from remote location"
 
msgstr "Les changements distants ont été récupérés"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "Une erreur est survenue durant le pull depuis la source distante"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr ""
 
"Une erreur est survenue durant la suppression des statistiques du dépôt"
 

	
 
msgid "Updated VCS settings"
 
msgstr "Réglages des gestionnaires de versions mis à jour"
 
@@ -671,24 +674,27 @@ msgstr "Vous devez être connecté pour visualiser cette page"
 
msgid ""
 
"CSRF token leak has been detected - all form tokens have been expired"
 
msgstr ""
 
"Une fuite de jeton CSRF a été détectée - tous les jetons de formulaire "
 
"sont considérés comme expirés"
 

	
 
msgid "Repository not found in the filesystem"
 
msgstr "Dépôt non trouvé sur le système de fichiers"
 

	
 
msgid "Changeset for %s %s not found in %s"
 
msgstr "Ensemble de changements pour %s %s non trouvé dans %s"
 

	
 
msgid "SSH access is disabled."
 
msgstr "L'accès SSH est désactivé."
 

	
 
msgid "Binary file"
 
msgstr "Fichier binaire"
 

	
 
msgid ""
 
"Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 
"Cet ensemble de changements était trop gros pour être affiché et a été "
 
"découpé, utilisez le menu « diff » pour afficher les différences"
 

	
 
msgid "No changes detected"
 
msgstr "Aucun changement détecté"
 

	
 
@@ -803,24 +809,47 @@ msgstr "renommer"
 
msgid "chmod"
 
msgstr "chmod"
 

	
 
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 ""
 
"Le dépôt %s n’est pas représenté dans la base de données. Il a "
 
"probablement été créé ou renommé manuellement. Veuillez relancer "
 
"l’application pour rescanner les dépôts"
 

	
 
msgid "SSH key is missing"
 
msgstr "La clé SSH est manquante"
 

	
 
msgid ""
 
"Incorrect SSH key - it must have both a key type and a base64 part, like "
 
"'ssh-rsa ASRNeaZu4FA...xlJp='"
 
msgstr ""
 
"Clé SSH incorrecte – elle doit comporter à la fois un type de clé et une "
 
"partie base64, comme 'ssh-rsa ASRNeaZu4FA...xlJp='"
 

	
 
msgid "Incorrect SSH key - it must start with 'ssh-(rsa|dss|ed25519)'"
 
msgstr "Clé SSH incorrecte – elle doit commencer par « ssh-(rsa|dss|ed25519) »"
 

	
 
msgid "Incorrect SSH key - unexpected characters in base64 part %r"
 
msgstr "Clé SSH incorrecte – caractères inattendus dans la partie base 64 %r"
 

	
 
msgid "Incorrect SSH key - failed to decode base64 part %r"
 
msgstr "Clé SSH incorrecte – échec du décodage de la partie base64 %r"
 

	
 
msgid "Incorrect SSH key - base64 part is not %r as claimed but %r"
 
msgstr ""
 
"Clé SSH incorrecte – la partie base 64 n'est pas %r comme il est dit mais %r"
 

	
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "%d an"
 
msgstr[1] "%d ans"
 

	
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "%d mois"
 
msgstr[1] "%d mois"
 

	
 
msgid "%d day"
 
msgid_plural "%d days"
 
@@ -1060,24 +1089,33 @@ msgstr ""
 
"Cette itération est basée sur une autre révision %s et il n'y a pas de "
 
"diff simple."
 

	
 
msgid "No changes found on %s %s since previous iteration."
 
msgstr "Aucun changement constaté sur %s %s depuis l'itération précédente."
 

	
 
msgid "Closed, next iteration: %s ."
 
msgstr "Fermé, itération suivante : %s."
 

	
 
msgid "latest tip"
 
msgstr "Dernier sommet"
 

	
 
msgid "SSH key %r is invalid: %s"
 
msgstr "La clé SSH %r est invalide : %s"
 

	
 
msgid "SSH key %s is already used by %s"
 
msgstr "La clé SSH %s est déjà utilisée par %s"
 

	
 
msgid "SSH key with fingerprint %r found"
 
msgstr "Clé SSH avec l'empreinte %r trouvée"
 

	
 
msgid "New user registration"
 
msgstr "Nouveau enregistrement d'utilisateur"
 

	
 
msgid ""
 
"You can't remove this user since it is crucial for the entire application"
 
msgstr ""
 
"Vous ne pouvez pas supprimer cet utilisateur ; il est nécessaire pour le "
 
"bon fonctionnement de l’application"
 

	
 
msgid ""
 
"User \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories: %s"
 
@@ -1554,24 +1592,27 @@ msgstr "créé"
 
msgid "Show as raw"
 
msgstr "Montrer en brut"
 

	
 
msgid "My Account"
 
msgstr "Mon compte"
 

	
 
msgid "Profile"
 
msgstr "Profil"
 

	
 
msgid "Email Addresses"
 
msgstr "Adresses e-mail"
 

	
 
msgid "SSH Keys"
 
msgstr "Clés SSH"
 

	
 
msgid "API Keys"
 
msgstr "Clés de l'API"
 

	
 
msgid "Owned Repositories"
 
msgstr "Dépôts possédés"
 

	
 
msgid "Watched Repositories"
 
msgstr "Dépôts surveillés"
 

	
 
msgid "Show Permissions"
 
msgstr "Afficher les permissions"
 

	
 
@@ -1621,28 +1662,28 @@ msgstr ""
 
"diffusées à des tiers, ni passés à des scripts ou services auxquels vous "
 
"ne faites pas confiance. Si cette diffusion a tout de même lieu, vous "
 
"pouvez réinitialiser la clé API sur cette page pour qu'elle ne puisse "
 
"plus être utilisée.\n"
 

	
 
msgid "Primary"
 
msgstr "Primaire"
 

	
 
msgid "Confirm to delete this email: %s"
 
msgstr "Veuillez confirmer la suppression de l’e-mail : %s"
 

	
 
msgid "No additional emails specified."
 
msgstr "Pas d'adresse email supplémentaires spécifiées."
 
msgstr "Pas d'adresse e-mail supplémentaires spécifiées."
 

	
 
msgid "New email address"
 
msgstr "Nouvelle adrese"
 
msgstr "Nouvelle adresse e-mail"
 

	
 
msgid "Change Your Account Password"
 
msgstr "Changer le mot de passe de votre compte"
 

	
 
msgid "Current password"
 
msgstr "Mot de passe actuel"
 

	
 
msgid "New password"
 
msgstr "Nouveau mot de passe"
 

	
 
msgid "Confirm new password"
 
msgstr "Confirmer le nouveau mot de passe"
 
@@ -1661,24 +1702,39 @@ msgstr "Gravatar"
 
msgid "Change %s avatar at"
 
msgstr "Changer l'avatar de %s sur"
 

	
 
msgid "Avatars are disabled"
 
msgstr "Les avatars sont désactivés"
 

	
 
msgid "Repositories You Own"
 
msgstr "Dépôts dont vous êtes le propriétaire"
 

	
 
msgid "Name"
 
msgstr "Nom"
 

	
 
msgid "Fingerprint"
 
msgstr "Empreinte"
 

	
 
msgid "Confirm to remove this SSH key: %s"
 
msgstr "Confirmer la suppression de cette clé SSH : %s"
 

	
 
msgid "No SSH keys have been added"
 
msgstr "Aucune clé SSH n'a été ajoutée"
 

	
 
msgid "New SSH key"
 
msgstr "Nouvelle clé SSH"
 

	
 
msgid "Public key"
 
msgstr "Clé publique"
 

	
 
msgid "Repositories You are Watching"
 
msgstr "Dépôts que vous surveillez"
 

	
 
msgid "Default Permissions"
 
msgstr "Permissions par défaut"
 

	
 
msgid "Global"
 
msgstr "Global"
 

	
 
msgid "IP Whitelist"
 
msgstr "Liste blanche d'adresses IP"
 

	
 
@@ -1965,27 +2021,24 @@ msgid ""
 
"We're sorry but error occurred during this operation. Please check your "
 
"Kallithea server logs, or contact administrator."
 
msgstr ""
 
"Désolé, une erreur est survenue pendant l'opération. Vérifiez les "
 
"journaux du serveur Kallithea, ou contactez votre administrateur."
 

	
 
msgid "%s Repository Settings"
 
msgstr "Réglages du dépôt %s"
 

	
 
msgid "Extra Fields"
 
msgstr "Champs supplémentaires"
 

	
 
msgid "Caches"
 
msgstr "Caches"
 

	
 
msgid "Remote"
 
msgstr "Dépôt distant"
 

	
 
msgid "Statistics"
 
msgstr "Statistiques"
 

	
 
msgid "Parent"
 
msgstr "Parent"
 

	
 
msgid "Set"
 
msgstr "Appliquer"
 

	
 
@@ -2026,49 +2079,30 @@ msgstr "Détacher les forks"
 
msgid "Delete forks"
 
msgstr "Supprimer les forks"
 

	
 
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 ""
 
"Le dépôt supprimé sera mis de côté et caché jusqu'à ce que "
 
"l'administrateur le fasse expirer. L'administrateur peut soit le "
 
"supprimer définitivement, soit le restaurer."
 

	
 
msgid "Invalidate Repository Cache"
 
msgstr "Invalider le cache du dépôt"
 

	
 
msgid ""
 
"Manually invalidate cache for this repository. On first access, the "
 
"repository will be cached again."
 
msgstr ""
 
"Invalider manuellement le cache de ce dépôt. Au prochain accès sur ce "
 
"dépôt, il sera à nouveau mis en cache."
 

	
 
msgid "List of Cached Values"
 
msgstr "Liste des valeurs en cache"
 

	
 
msgid "Prefix"
 
msgstr "Préfixe"
 
msgid "Label"
 
msgstr "Libellé"
 

	
 
msgid "Key"
 
msgstr "Clé"
 

	
 
msgid "Active"
 
msgstr "Actif"
 

	
 
msgid "Label"
 
msgstr "Libellé"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "Voulez-vous vraiment supprimer ce champ : %s ?"
 

	
 
msgid "New field key"
 
msgstr "Clé du nouveau champ"
 

	
 
msgid "New field label"
 
msgstr "Libellé du nouveau champ"
 

	
 
msgid "Enter short label"
 
msgstr "Saisir un libellé court"
 

	
 
@@ -2091,24 +2125,27 @@ msgid "Remote repository URL"
 
msgstr "URL du dépôt distant"
 

	
 
msgid "Pull Changes from Remote Repository"
 
msgstr "Récupérer les modifications depuis le dépôt distant"
 

	
 
msgid "Confirm to pull changes from remote repository."
 
msgstr ""
 
"Voulez-vous vraiment récupérer les changements depuis le dépôt distant ?"
 

	
 
msgid "This repository does not have a remote repository URL."
 
msgstr "Ce dépôt n'a pas d'URL de dépôt distant."
 

	
 
msgid "Permanent URL"
 
msgstr "URL permanente"
 

	
 
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 ""
 
"Si ce dépôt est renommé ou déplacé dans un autre groupe, l'URL du dépôt "
 
"change.\n"
 
"                               L'utilisation de l'URL permanente ci-"
 
"dessus garantit que ce dépôt sera toujours accessible via cette URL.\n"
 
@@ -2472,24 +2509,27 @@ msgstr "Styliser les méta-tags reconnus :"
 
msgid "Add user group"
 
msgstr "Ajouter un groupe d'utilisateurs"
 

	
 
msgid "User Groups"
 
msgstr "Groupes d'utilisateurs"
 

	
 
msgid "Add User Group"
 
msgstr "Ajouter un groupe d'utilisateurs"
 

	
 
msgid "Short, optional description for this user group."
 
msgstr "Description courte pour ce groupe d'utilisateur (optionnel)."
 

	
 
msgid "Active"
 
msgstr "Actif"
 

	
 
msgid "%s user group settings"
 
msgstr "Réglages du groupe d'utilisateurs %s"
 

	
 
msgid "Show Members"
 
msgstr "Afficher les membres"
 

	
 
msgid "User Group: %s"
 
msgstr "Groupe d'utilisateurs : %s"
 

	
 
msgid "Members"
 
msgstr "Membres"
 

	
 
@@ -3088,30 +3128,36 @@ msgstr "Mention dans le commentaire sur le changeset « %s »"
 
msgid "Comment on Changeset \"%s\""
 
msgstr "Commentaire sur le changeset « %s »"
 

	
 
msgid "Changeset on"
 
msgstr "Changeset sur"
 

	
 
msgid "branch"
 
msgstr "branche"
 

	
 
msgid "by"
 
msgstr "par"
 

	
 
msgid "View Comment"
 
msgstr "Afficher le commentaire"
 

	
 
msgid "Status change:"
 
msgstr "Changement de statut :"
 

	
 
msgid "The pull request has been closed."
 
msgstr "La requête de pull a été fermée."
 

	
 
msgid "Message"
 
msgstr "Message"
 

	
 
msgid "Hello %s"
 
msgstr "Bonjour %s"
 

	
 
msgid "We have received a request to reset the password for your account."
 
msgstr ""
 
"Nous avons reçu une demande de réinitialisation du mot de passe de votre "
 
"compte."
 

	
 
msgid ""
 
"This account is however managed outside this system and the password "
 
"cannot be changed here."
 
msgstr ""
 
@@ -3150,27 +3196,33 @@ msgstr "depuis"
 
msgid "to"
 
msgstr "vers"
 

	
 
msgid "Mention in Comment on Pull Request %s \"%s\""
 
msgstr "Mention dans le commentaire sur la requête de pull %s « %s »"
 

	
 
msgid "Pull Request %s \"%s\" Closed"
 
msgstr "Requête de pull %s « %s » fermée"
 

	
 
msgid "Comment on Pull Request %s \"%s\""
 
msgstr "Commentaire sur la requête de pull %s « %s »"
 

	
 
msgid "New User Registration"
 
msgstr "Nouvel enregistrement d'utilisateur"
 

	
 
msgid "Full Name"
 
msgstr "Nom complet"
 

	
 
msgid "View User Profile"
 
msgstr "Afficher le profil utilisateur"
 

	
 
msgid "%s File side-by-side diff"
 
msgstr "Diff côte-à-côte de fichier pour %s"
 

	
 
msgid "File diff"
 
msgstr "Diff de fichier"
 

	
 
msgid "%s File Diff"
 
msgstr "Diff de fichier pour %s"
 

	
 
msgid "%s Files"
 
msgstr "Fichiers de %s"
 

	
 
@@ -3181,25 +3233,25 @@ msgid "Add New File"
 
msgstr "Ajouter un nouveau fichier"
 

	
 
msgid "Location"
 
msgstr "Emplacement"
 

	
 
msgid "Enter filename..."
 
msgstr "Saisir le nom du fichier..."
 

	
 
msgid "or"
 
msgstr "ou"
 

	
 
msgid "Upload File"
 
msgstr "Uploader un fichier"
 
msgstr "Téléverser un fichier"
 

	
 
msgid "Create New File"
 
msgstr "Créer un nouveau fichier"
 

	
 
msgid "New file type"
 
msgstr "Type du nouveau fichier"
 

	
 
msgid "Commit Message"
 
msgstr "Message de commit"
 

	
 
msgid "Commit Changes"
 
msgstr "Commiter les changements"
 
@@ -3617,29 +3669,32 @@ msgstr "fichier supprimé"
 
msgid "%s Summary"
 
msgstr "Résumé de %s"
 

	
 
msgid "Fork of"
 
msgstr "Fork de"
 

	
 
msgid "Clone from"
 
msgstr "Cloner depuis"
 

	
 
msgid "Clone URL"
 
msgstr "URL de clone"
 

	
 
msgid "Use Name"
 
msgstr "Utiliser le nom"
 

	
 
msgid "Trending files"
 
msgstr "Populaires"
 

	
 
msgid "Download"
 
msgstr "Téléchargements"
 
msgstr "Télécharger"
 

	
 
msgid "There are no downloads yet"
 
msgstr "Il n’y a pas encore de téléchargements proposés"
 

	
 
msgid "Downloads are disabled for this repository"
 
msgstr "Les téléchargements sont désactivés pour ce dépôt"
 

	
 
msgid "Download as zip"
 
msgstr "Télécharger en ZIP"
 

	
 
msgid "Check this to download archive with subrepos"
 
msgstr ""
kallithea/i18n/ja/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -414,30 +414,24 @@ msgstr "公開ジャーナルでのリポジトリの可視性を更新しました"
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr "このリポジトリの公開ジャーナルの設定中にエラーが発生しました"
 

	
 
msgid "Nothing"
 
msgstr "ありません"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "%s リポジトリを %s のフォークとする"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "操作中にエラーが発生しました"
 

	
 
msgid "Cache invalidation successful"
 
msgstr "キャッシュの無効化に成功しました"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "キャッシュの無効化中にエラーが発生しました"
 

	
 
msgid "Pulled from remote location"
 
msgstr "リモートから取得"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "リモートから取得中にエラーが発生しました"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "リポジトリステートの削除中にエラーが発生しました"
 

	
 
msgid "Updated VCS settings"
 
msgstr "VCS設定を更新しました"
 

	
 
@@ -1512,27 +1506,24 @@ msgid ""
 
"We're sorry but error occurred during this operation. Please check your "
 
"Kallithea server logs, or contact administrator."
 
msgstr ""
 
"恐れいります。操作中にエラーが発生しました。 Kallithea サーバのログを"
 
"チェックするか、管理者に問い合わせてください。"
 

	
 
msgid "%s Repository Settings"
 
msgstr "%s リポジトリ設定"
 

	
 
msgid "Extra Fields"
 
msgstr "拡張フィールド"
 

	
 
msgid "Caches"
 
msgstr "キャッシュ"
 

	
 
msgid "Remote"
 
msgstr "リモート"
 

	
 
msgid "Statistics"
 
msgstr "統計"
 

	
 
msgid "Parent"
 
msgstr "Parent"
 

	
 
msgid "Set"
 
msgstr "保存"
 

	
 
@@ -1561,49 +1552,30 @@ msgid "Delete this Repository"
 
msgstr "このリポジトリを削除"
 

	
 
msgid "This repository has %s fork"
 
msgid_plural "This repository has %s forks"
 
msgstr[0] "このリポジトリには %s 個のフォークがあります"
 

	
 
msgid "Detach forks"
 
msgstr "フォークの切り離し"
 

	
 
msgid "Delete forks"
 
msgstr "フォークも削除"
 

	
 
msgid "Invalidate Repository Cache"
 
msgstr "リポジトリのキャッシュを無効化"
 

	
 
msgid ""
 
"Manually invalidate cache for this repository. On first access, the "
 
"repository will be cached again."
 
msgstr ""
 
"このリポジトリのキャッシュを手動で無効化します。リポジトリへの初回アクセス"
 
"時に再びキャッシュされます。"
 

	
 
msgid "List of Cached Values"
 
msgstr "キャッシュしている値の一覧"
 

	
 
msgid "Prefix"
 
msgstr "プレフィックス"
 
msgid "Label"
 
msgstr "ラベル"
 

	
 
msgid "Key"
 
msgstr "キー"
 

	
 
msgid "Active"
 
msgstr "アクティブ"
 

	
 
msgid "Label"
 
msgstr "ラベル"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "このフィールドを削除してもよろしいですか? : %s"
 

	
 
msgid "New field key"
 
msgstr "新しいフィールドのキー"
 

	
 
msgid "New field label"
 
msgstr "新しいフィールドのラベル"
 

	
 
msgid "Enter short label"
 
msgstr "ラベルを入力してください"
 

	
 
@@ -1913,24 +1885,27 @@ msgstr "次のメタタグを変換する:"
 
msgid "Add user group"
 
msgstr "ユーザーグループを追加"
 

	
 
msgid "User Groups"
 
msgstr "ユーザーグループ"
 

	
 
msgid "Add User Group"
 
msgstr "ユーザーグループを追加"
 

	
 
msgid "Short, optional description for this user group."
 
msgstr "このユーザーグループの簡潔な説明を書いてください。"
 

	
 
msgid "Active"
 
msgstr "アクティブ"
 

	
 
msgid "%s user group settings"
 
msgstr "%s ユーザーグループ設定"
 

	
 
msgid "Show Members"
 
msgstr "メンバーを表示"
 

	
 
msgid "User Group: %s"
 
msgstr "ユーサーグループ: %s"
 

	
 
msgid "Members"
 
msgstr "メンバー"
 

	
kallithea/i18n/lb/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -4,14 +4,221 @@
 
msgid ""
 
msgstr ""
 
"Report-Msgid-Bugs-To: translations@kallithea-scm.org\n"
 
"Language: lb\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"
 

	
 
msgid "There are no changesets yet"
 
msgstr "Et sinn nach keng Ännerungen do"
 

	
 
msgid "None"
 
msgstr "Keng"
 

	
 
msgid "(closed)"
 
msgstr "(Zou)"
 

	
 
msgid "Show whitespace"
 
msgstr "Leerzeechen uweisen"
 

	
 
msgid "Ignore whitespace"
 
msgstr "Leerzechen ignoréieren"
 

	
 
msgid "No permission to change status"
 
msgstr "Keng Erlabnis fir den Status ze änneren"
 

	
 
msgid "No response"
 
msgstr "Keng Äntwert"
 

	
 
msgid "Unknown error"
 
msgstr "Onbekannten Feeler"
 

	
 
msgid "Click here to add new file"
 
msgstr "Klick hei fir eng Datei bäizefügen"
 

	
 
msgid "There are no files yet."
 
msgstr "Et sinn nach keng Dateien do."
 

	
 
msgid "No changes"
 
msgstr "Keng Ännerungen"
 

	
 
msgid "Added file via Kallithea"
 
msgstr "Datei iwwert Kallithea bäifügen"
 

	
 
msgid "No content"
 
msgstr "Keen Contenu"
 

	
 
msgid "No filename"
 
msgstr "Keen Dateinumm"
 

	
 
msgid "Downloads disabled"
 
msgstr "Eroflueden ausgeschalt"
 

	
 
msgid "Empty repository"
 
msgstr "Eidel Quell"
 

	
 
msgid "Changesets"
 
msgstr "Ännerungen"
 

	
 
msgid "Branches"
 
msgstr "Äascht"
 

	
 
msgid "Groups"
 
msgstr "Gruppen"
 

	
 
msgid "Repositories"
 
msgstr "Quellen"
 

	
 
msgid "Branch"
 
msgstr "Aascht"
 

	
 
msgid "Bookmark"
 
msgstr "Lieszeechen"
 

	
 
msgid "Public Journal"
 
msgstr "Ëffentleche Protokoll"
 

	
 
msgid "Journal"
 
msgstr "Protokoll"
 

	
 
msgid "You have successfully registered with %s"
 
msgstr "Dir sidd erfollegräich registréiert mat %s"
 

	
 
msgid "Successfully updated password"
 
msgstr "Passwuert erfollegräich erneiert"
 

	
 
msgid "%s (closed)"
 
msgstr "%s (Zou)"
 

	
 
msgid "Changeset"
 
msgstr "Ännerung"
 

	
 
msgid "Special"
 
msgstr "Spezial"
 

	
 
msgid "Bookmarks"
 
msgstr "Lieszeechen"
 

	
 
msgid "No description"
 
msgstr "Keng Beschreiwung"
 

	
 
msgid "No data ready yet"
 
msgstr "Daten sinn nach net prett"
 

	
 
msgid "Statistics are disabled for this repository"
 
msgstr "Statistike si fir des Quell ausgeschalt"
 

	
 
msgid "Forever"
 
msgstr "Éiweg"
 

	
 
msgid "5 minutes"
 
msgstr "5 Minutten"
 

	
 
msgid "1 hour"
 
msgstr "1 Stonn"
 

	
 
msgid "1 day"
 
msgstr "1 Dag"
 

	
 
msgid "1 month"
 
msgstr "1 Mount"
 

	
 
msgid "Lifetime"
 
msgstr "Liewenszäit"
 

	
 
msgid "Unmodified"
 
msgstr "Onmodifizéiert"
 

	
 
msgid "SSH key %s successfully added"
 
msgstr "SSH Schlëssel %s erfollegräich bäigefüügt"
 

	
 
msgid "SSH key successfully deleted"
 
msgstr "SSH Schlëssel erfollegräich geläscht"
 

	
 
msgid "Read"
 
msgstr "Liesen"
 

	
 
msgid "Write"
 
msgstr "Schreiwen"
 

	
 
msgid "Admin"
 
msgstr "Administrateur"
 

	
 
msgid "Disabled"
 
msgstr "Ausgeschalt"
 

	
 
msgid "Enabled"
 
msgstr "Aktivéiert"
 

	
 
msgid "Created repository %s"
 
msgstr "Quell %s erstallt"
 

	
 
msgid "Deleted repository %s"
 
msgstr "Quell %s geläscht"
 

	
 
msgid "Nothing"
 
msgstr "Näischt"
 

	
 
msgid "Please enter email address"
 
msgstr "Wannechgelift E-Mail-Adress afügen"
 

	
 
msgid "SSH access is disabled."
 
msgstr "SSH Accès ass ausgeschalt."
 

	
 
msgid "Binary file"
 
msgstr "Binär Datei"
 

	
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "%d Joer"
 
msgstr[1] "%d Joer"
 

	
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "%d Mount"
 
msgstr[1] "%d Méint"
 

	
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "%d Dag"
 
msgstr[1] "%d Deeg"
 

	
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "%d Stonn"
 
msgstr[1] "%d Stonnen"
 

	
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "%d Minutt"
 
msgstr[1] "%d Minutten"
 

	
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "%d Sekonn"
 
msgstr[1] "%d Sekonnen"
 

	
 
msgid "There are no gists yet"
 
msgstr "Et sinn nach keng Gists do"
 

	
 
msgid "There are no changes yet"
 
msgstr "Et sinn nach keng Ännerungen do"
 

	
 
msgid "Close"
 
msgstr "(Zou)"
 

	
 
msgid "No changesets"
 
msgstr "Keng Ännerungen"
 

	
 
msgid "No changesets yet"
 
msgstr "Nach keng Ännerungen do"
 

	
 
msgid "There are no forks yet"
 
msgstr "Et sinn nach keng Ofzweigungen do"
 

	
 
msgid "Closed"
 
msgstr "(Zou)"
 

	
 
msgid "There are no downloads yet"
 
msgstr "Et sinn nach keng Erofluedungen do"
kallithea/i18n/nb_NO/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -916,33 +916,30 @@ msgstr "Statistikk"
 

	
 
msgid "Set"
 
msgstr "Sett"
 

	
 
msgid "This repository has %s fork"
 
msgid_plural "This repository has %s forks"
 
msgstr[0] "Denne pakkebrønnen har %s forgrening"
 
msgstr[1] "Denne pakkebrønnen har %s forgreninger"
 

	
 
msgid "Delete forks"
 
msgstr "Slett forgreninger"
 

	
 
msgid "Label"
 
msgstr "Etikett"
 

	
 
msgid "Key"
 
msgstr "Nøkkel"
 

	
 
msgid "Active"
 
msgstr "Aktiv"
 

	
 
msgid "Label"
 
msgstr "Etikett"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "Bekreft sletting av dette feltet: %s"
 

	
 
msgid "New field key"
 
msgstr "Ny feltnøkkel"
 

	
 
msgid "New field label"
 
msgstr "Ny feltetikett"
 

	
 
msgid "Enter short label"
 
msgstr "Skriv inn kort etikett"
 

	
 
@@ -1012,24 +1009,27 @@ msgstr "Generelt"
 
msgid "Show user Gravatars"
 
msgstr "Vis bruker-Gravatarer"
 

	
 
msgid "Add user group"
 
msgstr "Legg til brukergruppe"
 

	
 
msgid "User Groups"
 
msgstr "Brukergrupper"
 

	
 
msgid "Add User Group"
 
msgstr "Legg til brukergruppe"
 

	
 
msgid "Active"
 
msgstr "Aktiv"
 

	
 
msgid "%s user group settings"
 
msgstr "%s brukergruppeinnstillinger"
 

	
 
msgid "Show Members"
 
msgstr "Vis medlemmer"
 

	
 
msgid "User Group: %s"
 
msgstr "Brukergruppe: %s"
 

	
 
msgid "Members"
 
msgstr "Medlemmer"
 

	
kallithea/i18n/pl/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -387,30 +387,24 @@ msgid "An error occurred during setting 
 
msgstr ""
 
"Wystąpił błąd podczas ustawiania tego repozytorium w dzienniku publicznym"
 

	
 
msgid "Nothing"
 
msgstr "Brak"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "Oznaczono %s repo jako rozwidlenie %s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "Wystąpił błąd podczas tej operacji"
 

	
 
msgid "Cache invalidation successful"
 
msgstr "Cache wyczyszczony poprawnie"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "Wystąpił błąd podczas unieważniania cache"
 

	
 
msgid "Pulled from remote location"
 
msgstr "Pobieranie z lokalizacji zdalnej"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "Wystąpił błąd podczas pobierania z lokalizacji zdalnej"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Wystąpił błąd podczas usuwania z repozytorium statystyk"
 

	
 
msgid "Updated VCS settings"
 
msgstr "Aktualizacja ustawień VCS"
 

	
 
@@ -1286,33 +1280,27 @@ msgstr "Ustaw"
 
msgid "Remove from public journal"
 
msgstr "Usuń z dziennika publicznego"
 

	
 
msgid "Confirm to delete this repository: %s"
 
msgstr "Potwierdź usunięcie repozytorium: %s"
 

	
 
msgid "Detach forks"
 
msgstr "Ustaw jako rozwidlenie"
 

	
 
msgid "Delete forks"
 
msgstr "Usuń rozwidlenie"
 

	
 
msgid "Prefix"
 
msgstr "Prefiks"
 

	
 
msgid "Key"
 
msgstr "Klucz"
 

	
 
msgid "Active"
 
msgstr "Aktywny"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "Potwierdź, aby usunąć to pole: %s"
 

	
 
msgid "New field key"
 
msgstr "Nowe pole klucza"
 

	
 
msgid "New field label"
 
msgstr "Nowa etykieta pola"
 

	
 
msgid "Enter short label"
 
msgstr "Wpisz krótką etykietę"
 

	
 
@@ -1390,24 +1378,27 @@ msgstr "Pokaż wersję Kallithea"
 
msgid "Icons"
 
msgstr "Ikony"
 

	
 
msgid "Show public repository icon on repositories"
 
msgstr "Pokazuj w publicznym repo ikonę w repozytoriach"
 

	
 
msgid "Show private repository icon on repositories"
 
msgstr "Pokazuj w prywatnym repo ikonę w repozytoriach"
 

	
 
msgid "Add user group"
 
msgstr "Dodaj grupę użytkowników"
 

	
 
msgid "Active"
 
msgstr "Aktywny"
 

	
 
msgid "Members"
 
msgstr "Użytkownicy"
 

	
 
msgid "Confirm to delete this user group: %s"
 
msgstr "Potwierdź usunięcie grupy użytkowników: %s"
 

	
 
msgid "No members yet"
 
msgstr "Nie ma jeszcze żadnego użytkownika"
 

	
 
msgid "Chosen group members"
 
msgstr "Wybrane grupy użytkowników"
 

	
kallithea/i18n/pt_BR/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -297,27 +297,24 @@ msgstr "Atualizada a visibilidade do repositório no diário público"
 
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"
 

	
 
msgid "Nothing"
 
msgstr "Nada"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "Marcado repositório %s como bifurcação de %s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "Ocorreu um erro durante essa operação"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "Ocorreu um erro ao invalidar o cache"
 

	
 
msgid "Pulled from remote location"
 
msgstr "Realizado pull de localização remota"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "Ocorreu um erro ao realizar pull de localização remota"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Ocorreu um erro ao excluir estatísticas de repositório"
 

	
 
msgid "Updated VCS settings"
 
msgstr "Configurações de VCS atualizadas"
 

	
 
@@ -940,33 +937,27 @@ msgstr "Estatísticas"
 
msgid "Remove from public journal"
 
msgstr "Remover do diário público"
 

	
 
msgid "Confirm to delete this repository: %s"
 
msgstr "Confirma excluir esse repositório: %s"
 

	
 
msgid "Detach forks"
 
msgstr "Desassociar bifurcações"
 

	
 
msgid "Delete forks"
 
msgstr "Excluir bifurcações"
 

	
 
msgid "Prefix"
 
msgstr "Prefixo"
 

	
 
msgid "Key"
 
msgstr "Chave"
 

	
 
msgid "Active"
 
msgstr "Ativo"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "Confirme para excluir este campo: %s"
 

	
 
msgid "New field key"
 
msgstr "Próxima chave de campo"
 

	
 
msgid "New field label"
 
msgstr "Próximo rótulo de campo"
 

	
 
msgid "Enter short label"
 
msgstr "Entre com o rótulo curto"
 

	
 
@@ -1043,24 +1034,27 @@ msgstr "Mostrar versão do Kallithea"
 
msgid "Icons"
 
msgstr "Ícones"
 

	
 
msgid "Show public repository icon on repositories"
 
msgstr "Mostrar ícone de repositório público nos repositórios"
 

	
 
msgid "Show private repository icon on repositories"
 
msgstr "Mostrar ícone de repositório privado nos repositórios"
 

	
 
msgid "Add user group"
 
msgstr "Adicionar grupo de usuários"
 

	
 
msgid "Active"
 
msgstr "Ativo"
 

	
 
msgid "Members"
 
msgstr "Membros"
 

	
 
msgid "Confirm to delete this user group: %s"
 
msgstr "Confirme para excluir este grupo de usuário: %s"
 

	
 
msgid "No members yet"
 
msgstr "Nenhum membro ainda"
 

	
 
msgid "Chosen group members"
 
msgstr "Membros escolhidos do grupo"
 

	
kallithea/i18n/ru/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -506,30 +506,24 @@ msgstr "Видимость репозитория в публичном журнале обновлена"
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr "Произошла ошибка при установке репозитария в общедоступный журнал"
 

	
 
msgid "Nothing"
 
msgstr "Отсутствуют"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "Репозиторий %s отмечен как форк от %s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "Произошла ошибка при выполнении операции"
 

	
 
msgid "Cache invalidation successful"
 
msgstr "Кэш сброшен"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "Произошла ошибка при очистке кэша"
 

	
 
msgid "Pulled from remote location"
 
msgstr "Внесены изменения из удалённого репозитория"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "Произошла ошибка при внесении изменений из удалённого репозитория"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Произошла ошибка при удалении статистики репозитория"
 

	
 
msgid "Updated VCS settings"
 
msgstr "Обновлены настройки VCS"
 

	
 
@@ -788,24 +782,31 @@ msgstr "chmod"
 
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 ""
 
"Репозиторий %s отсутствует в базе данных; возможно, он был создан или "
 
"переименован из файловой системы. Пожалуйста, перезапустите приложение "
 
"для сканирования репозиториев"
 

	
 
msgid "SSH key is missing"
 
msgstr "Отсутствует ключ SSH"
 

	
 
msgid ""
 
"Incorrect SSH key - it must have both a key type and a base64 part, like "
 
"'ssh-rsa ASRNeaZu4FA...xlJp='"
 
msgstr ""
 
"Некорректный ключ SSH — должен присутствовать тип ключа и код base64, "
 
"например 'ssh-rsa ASRNeaZu4FA...xlJp='"
 

	
 
msgid "Incorrect SSH key - it must start with 'ssh-(rsa|dss|ed25519)'"
 
msgstr ""
 
"Некорректный ключ SSH — он должен начинаться с 'ssh-(rsa|dss|ed25519)'"
 

	
 
msgid "Incorrect SSH key - unexpected characters in base64 part %r"
 
msgstr ""
 
"Некорректный ключ SSH — присутствуют некорректные символы в коде base64 %r"
 

	
 
msgid "Incorrect SSH key - failed to decode base64 part %r"
 
msgstr "Некорректный ключ SSH — ошибка декодирования кода base64 %r"
 

	
 
msgid "Incorrect SSH key - base64 part is not %r as claimed but %r"
 
@@ -1066,24 +1067,27 @@ msgstr "Нет изменений на %s %s относительно предыдущей итерации."
 
msgid "Closed, next iteration: %s ."
 
msgstr "Закрыто. Следующая итерация: %s."
 

	
 
msgid "latest tip"
 
msgstr "последняя версия"
 

	
 
msgid "SSH key %r is invalid: %s"
 
msgstr "Ошибка ключа SSH %r: %s"
 

	
 
msgid "SSH key %s is already used by %s"
 
msgstr "Ключ SSH %s уже используется пользователем %s"
 

	
 
msgid "SSH key with fingerprint %r found"
 
msgstr "Найден ключ SSH с отпечатком %r"
 

	
 
msgid "New user registration"
 
msgstr "Регистрация нового пользователя"
 

	
 
msgid ""
 
"You can't remove this user since it is crucial for the entire application"
 
msgstr ""
 
"Вы не можете удалить этого пользователя, поскольку это критично для "
 
"работы всего приложения"
 

	
 
msgid ""
 
"User \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories: %s"
 
@@ -1978,27 +1982,24 @@ msgid ""
 
"We're sorry but error occurred during this operation. Please check your "
 
"Kallithea server logs, or contact administrator."
 
msgstr ""
 
"К сожалению, во время данной операции произошла ошибка. Пожалуйста, "
 
"проверьте журнал сервера Kallithea или свяжитесь с администратором."
 

	
 
msgid "%s Repository Settings"
 
msgstr "Настройки репозитория %s"
 

	
 
msgid "Extra Fields"
 
msgstr "Дополнительные поля"
 

	
 
msgid "Caches"
 
msgstr "Кэш"
 

	
 
msgid "Remote"
 
msgstr "Удалённый репозиторий"
 

	
 
msgid "Statistics"
 
msgstr "Статистика"
 

	
 
msgid "Parent"
 
msgstr "Родительская группа"
 

	
 
msgid "Set"
 
msgstr "Набор"
 

	
 
@@ -2039,48 +2040,30 @@ msgstr "Отделить форки"
 
msgid "Delete forks"
 
msgstr "Удалить форки"
 

	
 
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 ""
 
"Удаляемый репозиторий будет перемещён и скрыт на срок, определяемый "
 
"администратором. Администратор может либо удалить, либо восстановить "
 
"репозиторий."
 

	
 
msgid "Invalidate Repository Cache"
 
msgstr "Сбросить кэш репозитория"
 

	
 
msgid ""
 
"Manually invalidate cache for this repository. On first access, the "
 
"repository will be cached again."
 
msgstr ""
 
"Ручной сброс кэша репозитория. При первом доступе кэш восстановится."
 

	
 
msgid "List of Cached Values"
 
msgstr "Список кешированных значений"
 

	
 
msgid "Prefix"
 
msgstr "Префикс"
 
msgid "Label"
 
msgstr "Имя"
 

	
 
msgid "Key"
 
msgstr "Ключ"
 

	
 
msgid "Active"
 
msgstr "Активный"
 

	
 
msgid "Label"
 
msgstr "Имя"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "Подтвердите удаление этого поля: %s"
 

	
 
msgid "New field key"
 
msgstr "Ключ"
 

	
 
msgid "New field label"
 
msgstr "Имя поля"
 

	
 
msgid "Enter short label"
 
msgstr "Введите краткое имя поля"
 

	
 
@@ -2536,24 +2519,27 @@ msgstr "Стилизовать обнаруженные мета-теги:"
 
msgid "Add user group"
 
msgstr "Добавить группу пользователей"
 

	
 
msgid "User Groups"
 
msgstr "Группы пользователей"
 

	
 
msgid "Add User Group"
 
msgstr "Добавить группу пользователей"
 

	
 
msgid "Short, optional description for this user group."
 
msgstr "Краткое, опциональное описание этой группы."
 

	
 
msgid "Active"
 
msgstr "Активный"
 

	
 
msgid "%s user group settings"
 
msgstr "Настройки группы %s"
 

	
 
msgid "Show Members"
 
msgstr "Участники"
 

	
 
msgid "User Group: %s"
 
msgstr "Группа пользователей: %s"
 

	
 
msgid "Members"
 
msgstr "Участники"
 

	
kallithea/i18n/uk/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -494,30 +494,24 @@ msgid "An error occurred during setting 
 
msgstr ""
 
"Сталася помилка під час налаштувань цього репозиторію в публічному журналі"
 

	
 
msgid "Nothing"
 
msgstr "Нічого"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "Позначено репозиторій %s як відгалуження від %s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "Сталася помилка під час виконання цієї операції"
 

	
 
msgid "Cache invalidation successful"
 
msgstr "Інвалідація кешу успішна"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "Сталася помилка під час Анулювання кеша"
 

	
 
msgid "Pulled from remote location"
 
msgstr "Витягнуто з віддаленого місця"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "Сталася помилка під час витягування з віддаленого розташування"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "Під час видалення статистики репозиторію сталася помилка"
 

	
 
msgid "Updated VCS settings"
 
msgstr "Оновлені налаштування VCS"
 

	
 
@@ -1135,27 +1129,24 @@ msgid ""
 
"We're sorry but error occurred during this operation. Please check your "
 
"Kallithea server logs, or contact administrator."
 
msgstr ""
 
"Вибачте, але помилка сталася під час виконання цієї операції. Будь ласка, "
 
"перевірте журнали сервера Kallithea або зверніться до адміністратора."
 

	
 
msgid "%s Repository Settings"
 
msgstr "Параметри репозиторію %s"
 

	
 
msgid "Extra Fields"
 
msgstr "Додаткові поля"
 

	
 
msgid "Caches"
 
msgstr "Кеши"
 

	
 
msgid "Remote"
 
msgstr "Віддалений"
 

	
 
msgid "Statistics"
 
msgstr "Статистика"
 

	
 
msgid "Parent"
 
msgstr "Батьківський"
 

	
 
msgid "Set"
 
msgstr "Набір"
 

	
 
@@ -1181,49 +1172,30 @@ msgstr ""
 
msgid "Confirm to delete this repository: %s"
 
msgstr "Підтвердити видалення цього сховища: %s"
 

	
 
msgid "Delete this Repository"
 
msgstr "Видалити цей репозиторій"
 

	
 
msgid "Detach forks"
 
msgstr "Від'єднати forks"
 

	
 
msgid "Delete forks"
 
msgstr "Видалити forks"
 

	
 
msgid "Invalidate Repository Cache"
 
msgstr "Скинути Кеш Репозиторію"
 

	
 
msgid ""
 
"Manually invalidate cache for this repository. On first access, the "
 
"repository will be cached again."
 
msgstr ""
 
"Вручну скинути кеш для цього репозиторію. При першому доступі, сховище "
 
"буде знову кешовано."
 

	
 
msgid "List of Cached Values"
 
msgstr "Список кешованих значень"
 

	
 
msgid "Prefix"
 
msgstr "Префікс"
 
msgid "Label"
 
msgstr "Мітка"
 

	
 
msgid "Key"
 
msgstr "Ключ"
 

	
 
msgid "Active"
 
msgstr "Активний"
 

	
 
msgid "Label"
 
msgstr "Мітка"
 

	
 
msgid "Confirm to delete this field: %s"
 
msgstr "Підтвердити видалення цього поля: %s"
 

	
 
msgid "New field key"
 
msgstr "Новий ключ поля"
 

	
 
msgid "New field label"
 
msgstr "Нова мітка поля"
 

	
 
msgid "Enter short label"
 
msgstr "Введіть коротку мітку"
 

	
 
@@ -1524,24 +1496,27 @@ msgstr "Іконки"
 
msgid "Show public repository icon on repositories"
 
msgstr "Показати піктограму загальнодоступного сховища на сховищах"
 

	
 
msgid "Show private repository icon on repositories"
 
msgstr "Показати значок приватної репозиторію на репозиторіїв"
 

	
 
msgid "Show public/private icons next to repository names."
 
msgstr "Показати публічні/приватні значки поруч із назвами сховищ."
 

	
 
msgid "Meta Tagging"
 
msgstr "Мета-теги"
 

	
 
msgid "Active"
 
msgstr "Активний"
 

	
 
msgid "Files"
 
msgstr "Файли"
 

	
 
msgid "Pull Requests"
 
msgstr "Запити Pull Requests"
 

	
 
msgid "Options"
 
msgstr "Параметри"
 

	
 
msgid "Compare Fork"
 
msgstr "Порівняти Вилки"
 

	
kallithea/i18n/zh_CN/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -340,27 +340,24 @@ msgstr "成功更新在公共日志中的可见性"
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr "设置版本库到公共日志时发生错误"
 

	
 
msgid "Nothing"
 
msgstr "无"
 

	
 
msgid "Marked repository %s as fork of %s"
 
msgstr "成功将版本库%s标记为复刻自%s"
 

	
 
msgid "An error occurred during this operation"
 
msgstr "在搜索操作中发生错误"
 

	
 
msgid "An error occurred during cache invalidation"
 
msgstr "清除缓存时发生错误"
 

	
 
msgid "Pulled from remote location"
 
msgstr "成功拉取自远程路径"
 

	
 
msgid "An error occurred during pull from remote location"
 
msgstr "从远程路径拉取时发生错误"
 

	
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "删除版本库统计时发生错误"
 

	
 
msgid "Updated VCS settings"
 
msgstr "成功更新版本控制系统设置"
 

	
 
@@ -754,33 +751,27 @@ msgstr "默认修订"
 
msgid "Remote"
 
msgstr "远程"
 

	
 
msgid "Statistics"
 
msgstr "统计"
 

	
 
msgid "Remove from public journal"
 
msgstr "从公共日志删除"
 

	
 
msgid "Confirm to delete this repository: %s"
 
msgstr "确认删除版本库:%s"
 

	
 
msgid "Prefix"
 
msgstr "前缀"
 

	
 
msgid "Key"
 
msgstr "键"
 

	
 
msgid "Active"
 
msgstr "启用"
 

	
 
msgid "Default revision for files page, downloads, whoosh and readme"
 
msgstr "文件浏览、下载、whoosh和README的默认修订版本"
 

	
 
msgid "Change owner of this repository."
 
msgstr "修改这个版本库的所有者。"
 

	
 
msgid "Hooks"
 
msgstr "钩子"
 

	
 
msgid "Send"
 
msgstr "发送"
 

	
 
@@ -799,24 +790,27 @@ msgstr "推送后更新版本库(hg update)"
 
msgid "General"
 
msgstr "通用"
 

	
 
msgid "Icons"
 
msgstr "图标"
 

	
 
msgid "Show public repository icon on repositories"
 
msgstr "显示公共版本库图标"
 

	
 
msgid "Show private repository icon on repositories"
 
msgstr "显示私有版本库图标"
 

	
 
msgid "Active"
 
msgstr "启用"
 

	
 
msgid "Members"
 
msgstr "成员"
 

	
 
msgid "No members yet"
 
msgstr "还没有成员"
 

	
 
msgid "Available members"
 
msgstr "启用成员"
 

	
 
msgid "Add user"
 
msgstr "添加用户"
 

	
kallithea/i18n/zh_TW/LC_MESSAGES/kallithea.po
Show inline comments
 
@@ -290,39 +290,39 @@ msgstr "設定"
 
msgid "Permissions"
 
msgstr "權限"
 

	
 
msgid "Remote"
 
msgstr "遠端"
 

	
 
msgid "Statistics"
 
msgstr "統計"
 

	
 
msgid "Remove from public journal"
 
msgstr "從公開日誌移除"
 

	
 
msgid "Active"
 
msgstr "啟用"
 

	
 
msgid "Failed to remove hook"
 
msgstr "移除hook失敗"
 

	
 
msgid "Reindex"
 
msgstr "重新索引"
 

	
 
msgid "Show repository size after push"
 
msgstr "push 後顯示版本庫大小"
 

	
 
msgid "Update repository after push (hg update)"
 
msgstr "push後更新版本庫 (hg update)"
 

	
 
msgid "Active"
 
msgstr "啟用"
 

	
 
msgid "Members"
 
msgstr "成員"
 

	
 
msgid "Available members"
 
msgstr "啟用的成員"
 

	
 
msgid "Add user"
 
msgstr "新增使用者"
 

	
 
msgid "Users"
 
msgstr "使用者"
 

	
kallithea/lib/helpers.py
Show inline comments
 
@@ -1182,36 +1182,45 @@ def urlify_issues(newtext, repo_name):
 
            return s
 

	
 
        issue_pat_re = re.compile(r'issue_pat(.*)')
 
        for k in CONFIG:
 
            # 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)
 
            issue_prefix = CONFIG.get('issue_prefix%s' % suffix)
 
            if issue_prefix:
 
                log.error('found unsupported issue_prefix%s = %r - use issue_sub%s instead', suffix, issue_prefix, suffix)
 
            if not issue_pat:
 
                log.error('skipping incomplete issue pattern %r: it needs a regexp', k)
 
                continue
 
            if not issue_server_link:
 
                log.error('skipping incomplete issue pattern %r: it needs issue_server_link%s', k, suffix)
 
                continue
 
            if issue_sub is None: # issue_sub can be empty but should be present
 
                log.error('skipping incomplete issue pattern %r: it needs (a potentially empty) issue_sub%s', k, suffix)
 
                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))
 
                log.error('skipping invalid issue pattern %r: %r -> %r %r. Error: %s', k, 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)
 
            log.debug('issue pattern %r: %r -> %r %r', k, 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:
kallithea/lib/hooks.py
Show inline comments
 
@@ -57,25 +57,28 @@ def _get_scm_size(alias, root_path):
 
                    size_root += os.path.getsize(os.path.join(path, f))
 
                except OSError:
 
                    pass
 

	
 
    size_scm_f = h.format_byte_size(size_scm)
 
    size_root_f = h.format_byte_size(size_root)
 
    size_total_f = h.format_byte_size(size_root + size_scm)
 

	
 
    return size_scm_f, size_root_f, size_total_f
 

	
 

	
 
def repo_size(ui, repo, hooktype=None, **kwargs):
 
    """Show size of Mercurial repository, to be called after push."""
 
    """Show size of Mercurial repository.
 

	
 
    Called as Mercurial hook changegroup.repo_size after push.
 
    """
 
    size_hg_f, size_root_f, size_total_f = _get_scm_size('.hg', safe_str(repo.root))
 

	
 
    last_cs = repo[len(repo) - 1]
 

	
 
    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(), ascii_str(last_cs.hex())[:12]
 
    )
 
    ui.status(safe_bytes(msg))
 

	
 

	
 
def log_pull_action(ui, repo, **kwargs):
 
@@ -94,41 +97,42 @@ def log_pull_action(ui, repo, **kwargs):
 
    from kallithea import EXTENSIONS
 
    callback = getattr(EXTENSIONS, 'PULL_HOOK', None)
 
    if callable(callback):
 
        kw = {}
 
        kw.update(ex)
 
        callback(**kw)
 

	
 
    return 0
 

	
 

	
 
def log_push_action(ui, repo, node, node_last, **kwargs):
 
    """
 
    Entry point for Mercurial hook changegroup.push_logger.
 
    Register that changes have been added to the repo - log the action *and* invalidate caches.
 
    Note: This hook is not only logging, but also the side effect invalidating
 
    caches! The function should perhaps be renamed.
 

	
 
    Called as Mercurial hook changegroup.kallithea_log_push_action .
 

	
 
    The pushed changesets is given by the revset 'node:node_last'.
 

	
 
    Note: This hook is not only logging, but also the side effect invalidating
 
    cahes! The function should perhaps be renamed.
 
    """
 
    revs = [ascii_str(repo[r].hex()) for r in mercurial.scmutil.revrange(repo, [b'%s:%s' % (node, node_last)])]
 
    process_pushed_raw_ids(revs)
 
    return 0
 

	
 

	
 
def process_pushed_raw_ids(revs):
 
    """
 
    Register that changes have been added to the repo - log the action *and* invalidate caches.
 

	
 
    Called from  Mercurial changegroup.push_logger calling hook log_push_action,
 
    Called from Mercurial changegroup.kallithea_log_push_action calling hook log_push_action,
 
    or from the Git post-receive hook calling handle_git_post_receive ...
 
    or from scm _handle_push.
 
    """
 
    ex = get_hook_environment()
 

	
 
    action = '%s:%s' % (ex.action, ','.join(revs))
 
    action_logger(ex.username, action, ex.repository, ex.ip, commit=True)
 

	
 
    from kallithea.model.scm import ScmModel
 
    ScmModel().mark_for_invalidation(ex.repository)
 

	
 
    # extension hook call
kallithea/lib/inifile.py
Show inline comments
 
@@ -68,61 +68,67 @@ def expand(template, mako_variable_value
 
    ... some_variable = "never mind - option-b will not be used anyway ..."
 
    ... %endif
 
    ...
 
    ... [comment-section]
 
    ... #variable3 = 3.0
 
    ... #variable4 = 4.0
 
    ... #variable5 = 5.0
 
    ... variable5 = 5.1
 
    ... #variable6 = 6.0
 
    ... #variable6 = 6.1
 
    ... #variable7 = 7.0
 
    ... variable7 = 7.1
 
    ... variable8 = 8.0
 
    ... '''
 
    >>> mako_variable_values = {'mako_variable': 'VALUE', 'mako_function': (lambda: 'FUNCTION RESULT'),
 
    ...                         'conditional_options': 'option-a', 'http_server': 'nc'}
 
    >>> settings = { # only partially used
 
    ...     '[first-section]': {'variable2': 'VAL2', 'first_extra': 'EXTRA'},
 
    ...     '[comment-section]': {'variable3': '3.0', 'variable4': '4.1', 'variable5': '5.2', 'variable6': '6.2', 'variable7': '7.0'},
 
    ...     '[first-section]': {'variable2': 'VAL2', 'first_extra': 'EXTRA', 'spacey': ' '},
 
    ...     '[comment-section]': {'variable3': '3.0', 'variable4': '4.1', 'variable5': '5.2', 'variable6': '6.2', 'variable7': '7.0', 'variable8': None, 'variable9': None},
 
    ...     '[third-section]': {'third_extra': ' 3'},
 
    ...     '[fourth-section]': {'fourth_extra': '4', 'fourth': '"four"'},
 
    ... }
 
    >>> print(expand(template, mako_variable_values, settings))
 
    ERROR: http_server is 'nc' - it should be one of 'waitress', 'gearbox', 'gevent', 'gunicorn', 'uwsgi'
 
    <BLANKLINE>
 
    [first-section]
 
    <BLANKLINE>
 
    variable=VALUE
 
    #variable2  =    value after tab
 
    variable2 = VAL2
 
    <BLANKLINE>
 
    first_extra = EXTRA
 
    spacey =
 
    <BLANKLINE>
 
    <BLANKLINE>
 
    # FUNCTION RESULT
 
    [second-section]
 
    # option a was chosen
 
    <BLANKLINE>
 
    [comment-section]
 
    variable3 = 3.0
 
    #variable4 = 4.0
 
    variable4 = 4.1
 
    #variable5 = 5.0
 
    #variable5 = 5.1
 
    variable5 = 5.2
 
    #variable6 = 6.0
 
    #variable6 = 6.1
 
    variable6 = 6.2
 
    variable7 = 7.0
 
    #variable7 = 7.1
 
    #variable8 = 8.0
 
    <BLANKLINE>
 
    variable8 = None
 
    variable9 = None
 
    <BLANKLINE>
 
    [fourth-section]
 
    fourth = "four"
 
    fourth_extra = 4
 
    <BLANKLINE>
 
    [third-section]
 
    third_extra =  3
 
    <BLANKLINE>
 
    """
 
    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
 
@@ -151,47 +157,50 @@ def expand(template, mako_variable_value
 
                comment, key, line_value = m.groups()
 
                if key not in section_settings:
 
                    return line
 
                new_value = section_settings[key]
 
                if line_value == new_value or add_after_key_value.get(key) != new_value:
 
                    add_after_key_value[key] = line_value
 
                if comment:
 
                    return line
 
                return '#' + line
 

	
 
            lines = re.sub(r'^(#)?([^#\n\s]*)[ \t]*=[ \t]*(.*)$', comment_out, lines, flags=re.MULTILINE)
 

	
 
            # 2nd pass:
 
            # find the best comment line and un-comment or add after
 
            def add_after_comment(m):
 
                """process a section comment line and add new value"""
 
                line = m.group(0)
 
                key, line_value = m.groups()
 
                if key not in section_settings:
 
                    return line
 
                if line_value != add_after_key_value.get(key):
 
                    return line
 
                new_value = section_settings[key]
 
                if new_value == line_value:
 
                    line = line.lstrip('#')
 
                else:
 
                    line += '\n%s = %s' % (key, new_value)
 
                section_settings.pop(key)
 
                return line
 

	
 
            lines = re.sub(r'^#([^#\n\s]*)[ \t]*=[ \t]*(.*)$', add_after_comment, lines, flags=re.MULTILINE)
 

	
 
            # add unused section settings
 
            # 3rd pass:
 
            # settings that haven't been consumed yet at is appended to section
 
            if section_settings:
 
                lines += '\n' + ''.join('%s = %s\n' % (key, value) for key, value in sorted(section_settings.items()))
 

	
 
        return sectionname + '\n' + lines
 
        return sectionname + '\n' + re.sub('[ \t]+\n', '\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
kallithea/templates/about.html
Show inline comments
 
@@ -17,56 +17,59 @@
 
  <p><a href="https://kallithea-scm.org/">Kallithea</a> is a project of the
 
  <a href="http://sfconservancy.org/">Software Freedom Conservancy, Inc.</a>
 
  and is released under the terms of the
 
  <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License,
 
  v 3.0 (GPLv3)</a>.</p>
 

	
 
  <p>Kallithea is copyrighted by various authors, including but not
 
  necessarily limited to the following:</p>
 
  <ul>
 

	
 
  <li>Copyright &copy; 2012&ndash;2020, Mads Kiilerich</li>
 
  <li>Copyright &copy; 2014&ndash;2020, Thomas De Schampheleire</li>
 
  <li>Copyright &copy; 2015&ndash;2017, 2019&ndash;2020, Étienne Gilli</li>
 
  <li>Copyright &copy; 2016&ndash;2017, 2020, Asterios Dimitriou</li>
 
  <li>Copyright &copy; 2019&ndash;2020, Private</li>
 
  <li>Copyright &copy; 2020, Dennis Fink</li>
 
  <li>Copyright &copy; 2020, J. Lavoie</li>
 
  <li>Copyright &copy; 2020, robertus</li>
 
  <li>Copyright &copy; 2020, Ross Thomas</li>
 
  <li>Copyright &copy; 2012, 2014&ndash;2017, 2019, Andrej Shadura</li>
 
  <li>Copyright &copy; 2015&ndash;2017, 2019, Étienne Gilli</li>
 
  <li>Copyright &copy; 2017&ndash;2019, Allan Nordhøy</li>
 
  <li>Copyright &copy; 2018&ndash;2019, ssantos</li>
 
  <li>Copyright &copy; 2019, Adi Kriegisch</li>
 
  <li>Copyright &copy; 2019, Danni Randeris</li>
 
  <li>Copyright &copy; 2019, Edmund Wong</li>
 
  <li>Copyright &copy; 2019, Elizabeth Sherrock</li>
 
  <li>Copyright &copy; 2019, Hüseyin Tunç</li>
 
  <li>Copyright &copy; 2019, leela</li>
 
  <li>Copyright &copy; 2019, Manuel Jacob</li>
 
  <li>Copyright &copy; 2019, Mateusz Mendel</li>
 
  <li>Copyright &copy; 2019, Nathan</li>
 
  <li>Copyright &copy; 2019, Oleksandr Shtalinberg</li>
 
  <li>Copyright &copy; 2019, Private</li>
 
  <li>Copyright &copy; 2019, THANOS SIOURDAKIS</li>
 
  <li>Copyright &copy; 2019, Wolfgang Scherer</li>
 
  <li>Copyright &copy; 2019, Христо Станев</li>
 
  <li>Copyright &copy; 2012, 2014&ndash;2018, Dominik Ruf</li>
 
  <li>Copyright &copy; 2014&ndash;2015, 2018, Michal Čihař</li>
 
  <li>Copyright &copy; 2015, 2018, Branko Majic</li>
 
  <li>Copyright &copy; 2018, Chris Rule</li>
 
  <li>Copyright &copy; 2018, Jesús Sánchez</li>
 
  <li>Copyright &copy; 2018, Patrick Vane</li>
 
  <li>Copyright &copy; 2018, Pheng Heong Tan</li>
 
  <li>Copyright &copy; 2018, Максим Якимчук</li>
 
  <li>Copyright &copy; 2018, Марс Ямбар</li>
 
  <li>Copyright &copy; 2012&ndash;2017, Unity Technologies</li>
 
  <li>Copyright &copy; 2015&ndash;2017, Søren Løvborg</li>
 
  <li>Copyright &copy; 2015, 2017, Sam Jaques</li>
 
  <li>Copyright &copy; 2016&ndash;2017, Asterios Dimitriou</li>
 
  <li>Copyright &copy; 2017, Alessandro Molina</li>
 
  <li>Copyright &copy; 2017, Anton Schur</li>
 
  <li>Copyright &copy; 2017, Ching-Chen Mao</li>
 
  <li>Copyright &copy; 2017, Eivind Tagseth</li>
 
  <li>Copyright &copy; 2017, FUJIWARA Katsunori</li>
 
  <li>Copyright &copy; 2017, Holger Schramm</li>
 
  <li>Copyright &copy; 2017, Karl Goetz</li>
 
  <li>Copyright &copy; 2017, Lars Kruse</li>
 
  <li>Copyright &copy; 2017, Marko Semet</li>
 
  <li>Copyright &copy; 2017, Viktar Vauchkevich</li>
 
  <li>Copyright &copy; 2012&ndash;2016, Takumi IINO</li>
 
  <li>Copyright &copy; 2015&ndash;2016, Jan Heylen</li>
kallithea/tests/api/api_base.py
Show inline comments
 
@@ -629,50 +629,50 @@ class _BaseTestApi(object):
 
        ('repository.read'),
 
    ])
 
    def test_api_get_repo_by_non_admin(self, grant_perm):
 
        RepoModel().grant_user_permission(repo=self.REPO,
 
                                          user=self.TEST_USER_LOGIN,
 
                                          perm=grant_perm)
 
        Session().commit()
 
        id_, params = _build_data(self.apikey_regular, 'get_repo',
 
                                  repoid=self.REPO)
 
        response = api_call(self, params)
 

	
 
        repo = RepoModel().get_by_repo_name(self.REPO)
 
        ret = repo.get_api_data()
 
        assert len(repo.repo_to_perm) >= 2  # make sure we actually are testing something - probably the default 2 permissions, possibly more
 

	
 
        expected = repo.get_api_data()
 

	
 
        members = []
 
        followers = []
 
        assert 2 == len(repo.repo_to_perm)
 
        for user in repo.repo_to_perm:
 
            perm = user.permission.permission_name
 
            user_obj = user.user
 
            user_data = {'name': user_obj.username, 'type': "user",
 
                         'permission': perm}
 
            members.append(user_data)
 

	
 
        for user_group in repo.users_group_to_perm:
 
            perm = user_group.permission.permission_name
 
            user_group_obj = user_group.users_group
 
            user_group_data = {'name': user_group_obj.users_group_name,
 
                               'type': "user_group", 'permission': perm}
 
            members.append(user_group_data)
 
        expected['members'] = members
 

	
 
        followers = []
 

	
 
        for user in repo.followers:
 
            followers.append(user.user.get_api_data())
 

	
 
        ret['members'] = members
 
        ret['followers'] = followers
 
        expected['followers'] = followers
 

	
 
        expected = ret
 
        try:
 
            self._compare_ok(id_, expected, given=response.body)
 
        finally:
 
            RepoModel().revoke_user_permission(self.REPO, self.TEST_USER_LOGIN)
 

	
 
    def test_api_get_repo_by_non_admin_no_permission_to_repo(self):
 
        RepoModel().grant_user_permission(repo=self.REPO,
 
                                          user=User.DEFAULT_USER_NAME,
 
                                          perm='repository.none')
 
        try:
 
            RepoModel().grant_user_permission(repo=self.REPO,
 
                                              user=self.TEST_USER_LOGIN,
kallithea/tests/functional/test_admin_auth_settings.py
Show inline comments
 
@@ -146,30 +146,30 @@ class TestAuthSettingsController(base.Te
 
    def test_container_auth_login_header_attr(self):
 
        self._container_auth_setup(
 
            auth_container_header='THE_USER_NAME',
 
            auth_container_email_header='THE_USER_EMAIL',
 
            auth_container_firstname_header='THE_USER_FIRSTNAME',
 
            auth_container_lastname_header='THE_USER_LASTNAME',
 
            auth_container_fallback_header='',
 
            auth_container_clean_username='False',
 
        )
 
        response = self.app.get(
 
            url=base.url(controller='admin/my_account', action='my_account'),
 
            extra_environ={'THE_USER_NAME': 'johnd',
 
                           'THE_USER_EMAIL': 'john@example.org',
 
                           'THE_USER_EMAIL': 'john2@example.org',
 
                           'THE_USER_FIRSTNAME': 'John',
 
                           'THE_USER_LASTNAME': 'Doe',
 
                           }
 
        )
 
        assert response.form['email'].value == 'john@example.org'
 
        assert response.form['email'].value == 'john2@example.org'
 
        assert response.form['firstname'].value == 'John'
 
        assert response.form['lastname'].value == 'Doe'
 

	
 
    def test_container_auth_login_fallback_header(self):
 
        self._container_auth_setup(
 
            auth_container_header='THE_USER_NAME',
 
            auth_container_email_header='',
 
            auth_container_firstname_header='',
 
            auth_container_lastname_header='',
 
            auth_container_fallback_header='HTTP_X_YZZY',
 
            auth_container_clean_username='False',
 
        )
kallithea/tests/functional/test_admin_settings.py
Show inline comments
 
@@ -37,38 +37,36 @@ class TestAdminSettingsController(base.T
 
    def test_create_custom_hook(self):
 
        self.log_user()
 
        response = self.app.post(base.url('admin_settings_hooks'),
 
                                params=dict(new_hook_ui_key='test_hooks_1',
 
                                            new_hook_ui_value='cd %s' % base.TESTS_TMP_PATH,
 
                                            _session_csrf_secret_token=self.session_csrf_secret_token()))
 

	
 
        self.checkSessionFlash(response, 'Added new hook')
 
        response = response.follow()
 
        response.mustcontain('test_hooks_1')
 
        response.mustcontain('cd %s' % base.TESTS_TMP_PATH)
 

	
 
    def test_edit_custom_hook(self):
 
        self.log_user()
 
        # test_edit_custom_hook
 
        response = self.app.post(base.url('admin_settings_hooks'),
 
                                params=dict(hook_ui_key='test_hooks_1',
 
                                            hook_ui_value='old_value_of_hook_1',
 
                                            hook_ui_value_new='new_value_of_hook_1',
 
                                            _session_csrf_secret_token=self.session_csrf_secret_token()))
 

	
 
        response = response.follow()
 
        response.mustcontain('test_hooks_1')
 
        response.mustcontain('new_value_of_hook_1')
 

	
 
    def test_add_existing_custom_hook(self):
 
        self.log_user()
 
        # test_add_existing_custom_hook
 
        response = self.app.post(base.url('admin_settings_hooks'),
 
                                params=dict(new_hook_ui_key='test_hooks_1',
 
                                            new_hook_ui_value='attempted_new_value',
 
                                            _session_csrf_secret_token=self.session_csrf_secret_token()))
 

	
 
        self.checkSessionFlash(response, 'Hook already exists')
 
        response = response.follow()
 
        response.mustcontain('test_hooks_1')
 
        response.mustcontain('new_value_of_hook_1')
 

	
 
    def test_create_custom_hook_delete(self):
 
        self.log_user()
kallithea/tests/models/test_permissions.py
Show inline comments
 
@@ -59,81 +59,61 @@ class TestPermissions(base.TestControlle
 
        if hasattr(self, 'g2'):
 
            RepoGroupModel().delete(self.g2.group_id)
 

	
 
        if hasattr(self, 'ug2'):
 
            UserGroupModel().delete(self.ug2, force=True)
 
        if hasattr(self, 'ug1'):
 
            UserGroupModel().delete(self.ug1, force=True)
 

	
 
        Session().commit()
 

	
 
    def test_default_perms_set(self):
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        perms = {
 
            'repositories_groups': {},
 
            'global': set(['hg.create.repository', 'repository.read',
 
                           'hg.register.manual_activate']),
 
            'repositories': {base.HG_REPO: 'repository.read'}
 
        }
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == perms['repositories'][base.HG_REPO]
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == 'repository.read'
 
        new_perm = 'repository.write'
 
        RepoModel().grant_user_permission(repo=base.HG_REPO, user=self.u1,
 
                                          perm=new_perm)
 
        Session().commit()
 

	
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == new_perm
 

	
 
    def test_default_admin_perms_set(self):
 
        a1_auth = AuthUser(user_id=self.a1.user_id)
 
        perms = {
 
            'repositories_groups': {},
 
            'global': set(['hg.admin', 'hg.create.write_on_repogroup.true']),
 
            'repositories': {base.HG_REPO: 'repository.admin'}
 
        }
 
        assert a1_auth.permissions['repositories'][base.HG_REPO] == perms['repositories'][base.HG_REPO]
 
        assert a1_auth.permissions['repositories'][base.HG_REPO] == 'repository.admin'
 
        new_perm = 'repository.write'
 
        RepoModel().grant_user_permission(repo=base.HG_REPO, user=self.a1,
 
                                          perm=new_perm)
 
        Session().commit()
 
        # cannot really downgrade admins permissions !? they still gets set as
 
        # admin !
 
        u1_auth = AuthUser(user_id=self.a1.user_id)
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == perms['repositories'][base.HG_REPO]
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == 'repository.admin'
 

	
 
    def test_default_group_perms(self):
 
        self.g1 = fixture.create_repo_group('test1', skip_if_exists=True)
 
        self.g2 = fixture.create_repo_group('test2', skip_if_exists=True)
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        perms = {
 
            'repositories_groups': {'test1': 'group.read', 'test2': 'group.read'},
 
            'global': set(Permission.DEFAULT_USER_PERMISSIONS),
 
            'repositories': {base.HG_REPO: 'repository.read'}
 
        }
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == perms['repositories'][base.HG_REPO]
 
        assert u1_auth.permissions['repositories_groups'] == perms['repositories_groups']
 
        assert u1_auth.permissions['global'] == perms['global']
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == 'repository.read'
 
        assert u1_auth.permissions['repositories_groups'].get('test1') == 'group.read'
 
        assert u1_auth.permissions['repositories_groups'].get('test2') == 'group.read'
 
        assert u1_auth.permissions['global'] == set(Permission.DEFAULT_USER_PERMISSIONS)
 

	
 
    def test_default_admin_group_perms(self):
 
        self.g1 = fixture.create_repo_group('test1', skip_if_exists=True)
 
        self.g2 = fixture.create_repo_group('test2', skip_if_exists=True)
 
        a1_auth = AuthUser(user_id=self.a1.user_id)
 
        perms = {
 
            'repositories_groups': {'test1': 'group.admin', 'test2': 'group.admin'},
 
            'global': set(['hg.admin', 'hg.create.write_on_repogroup.true']),
 
            'repositories': {base.HG_REPO: 'repository.admin'}
 
        }
 

	
 
        assert a1_auth.permissions['repositories'][base.HG_REPO] == perms['repositories'][base.HG_REPO]
 
        assert a1_auth.permissions['repositories_groups'] == perms['repositories_groups']
 
        assert a1_auth.permissions['repositories'][base.HG_REPO] == 'repository.admin'
 
        assert a1_auth.permissions['repositories_groups'].get('test1') == 'group.admin'
 
        assert a1_auth.permissions['repositories_groups'].get('test2') == 'group.admin'
 

	
 
    def test_propagated_permission_from_users_group_by_explicit_perms_exist(self):
 
        # make group
 
        self.ug1 = fixture.create_user_group('G1')
 
        UserGroupModel().add_user_to_group(self.ug1, self.u1)
 

	
 
        # set user permission none
 
        RepoModel().grant_user_permission(repo=base.HG_REPO, user=self.u1, perm='repository.none')
 
        Session().commit()
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == 'repository.read' # inherit from default user
 

	
 
@@ -149,165 +129,160 @@ class TestPermissions(base.TestControlle
 
    def test_propagated_permission_from_users_group(self):
 
        # make group
 
        self.ug1 = fixture.create_user_group('G1')
 
        UserGroupModel().add_user_to_group(self.ug1, self.u3)
 

	
 
        # grant perm for group this should override default permission from user
 
        new_perm_gr = 'repository.write'
 
        RepoModel().grant_user_group_permission(repo=base.HG_REPO,
 
                                                 group_name=self.ug1,
 
                                                 perm=new_perm_gr)
 
        # check perms
 
        u3_auth = AuthUser(user_id=self.u3.user_id)
 
        perms = {
 
            'repositories_groups': {},
 
            'global': set(['hg.create.repository', 'repository.read',
 
                           'hg.register.manual_activate']),
 
            'repositories': {base.HG_REPO: 'repository.read'}
 
        }
 
        assert u3_auth.permissions['repositories'][base.HG_REPO] == new_perm_gr
 
        assert u3_auth.permissions['repositories_groups'] == perms['repositories_groups']
 

	
 
    def test_propagated_permission_from_users_group_lower_weight(self):
 
        # make group
 
        self.ug1 = fixture.create_user_group('G1')
 
        # add user to group
 
        UserGroupModel().add_user_to_group(self.ug1, self.u1)
 

	
 
        # set permission to lower
 
        new_perm_h = 'repository.write'
 
        RepoModel().grant_user_permission(repo=base.HG_REPO, user=self.u1,
 
                                          perm=new_perm_h)
 
        Session().commit()
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == new_perm_h
 

	
 
        # grant perm for group this should NOT override permission from user
 
        # since it's lower than granted
 
        new_perm_l = 'repository.read'
 
        RepoModel().grant_user_group_permission(repo=base.HG_REPO,
 
                                                 group_name=self.ug1,
 
                                                 perm=new_perm_l)
 
        # check perms
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        perms = {
 
            'repositories_groups': {},
 
            'global': set(['hg.create.repository', 'repository.read',
 
                           'hg.register.manual_activate']),
 
            'repositories': {base.HG_REPO: 'repository.write'}
 
        }
 
        assert u1_auth.permissions['repositories'][base.HG_REPO] == new_perm_h
 
        assert u1_auth.permissions['repositories_groups'] == perms['repositories_groups']
 

	
 
    def test_repo_in_group_permissions(self):
 
        self.g1 = fixture.create_repo_group('group1', skip_if_exists=True)
 
        self.g2 = fixture.create_repo_group('group2', skip_if_exists=True)
 
        # both perms should be read !
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories_groups'] == {'group1': 'group.read', 'group2': 'group.read'}
 
        assert u1_auth.permissions['repositories_groups'].get('group1') == 'group.read'
 
        assert u1_auth.permissions['repositories_groups'].get('group2') == 'group.read'
 

	
 
        a1_auth = AuthUser(user_id=self.anon.user_id)
 
        assert a1_auth.permissions['repositories_groups'] == {'group1': 'group.read', 'group2': 'group.read'}
 
        assert a1_auth.permissions['repositories_groups'].get('group1') == 'group.read'
 
        assert a1_auth.permissions['repositories_groups'].get('group2') == 'group.read'
 

	
 
        # Change perms to none for both groups
 
        RepoGroupModel().grant_user_permission(repo_group=self.g1,
 
                                               user=self.anon,
 
                                               perm='group.none')
 
        RepoGroupModel().grant_user_permission(repo_group=self.g2,
 
                                               user=self.anon,
 
                                               perm='group.none')
 

	
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories_groups'] == {'group1': 'group.none', 'group2': 'group.none'}
 
        assert u1_auth.permissions['repositories_groups'].get('group1') == 'group.none'
 
        assert u1_auth.permissions['repositories_groups'].get('group2') == 'group.none'
 

	
 
        a1_auth = AuthUser(user_id=self.anon.user_id)
 
        assert a1_auth.permissions['repositories_groups'] == {'group1': 'group.none', 'group2': 'group.none'}
 
        assert a1_auth.permissions['repositories_groups'].get('group1') == 'group.none'
 
        assert a1_auth.permissions['repositories_groups'].get('group2') == 'group.none'
 

	
 
        # add repo to group
 
        name = db.URL_SEP.join([self.g1.group_name, 'test_perm'])
 
        self.test_repo = fixture.create_repo(name=name,
 
                                             repo_type='hg',
 
                                             repo_group=self.g1,
 
                                             cur_user=self.u1,)
 

	
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories_groups'] == {'group1': 'group.none', 'group2': 'group.none'}
 
        assert u1_auth.permissions['repositories_groups'].get('group1') == 'group.none'
 
        assert u1_auth.permissions['repositories_groups'].get('group2') == 'group.none'
 

	
 
        a1_auth = AuthUser(user_id=self.anon.user_id)
 
        assert a1_auth.permissions['repositories_groups'] == {'group1': 'group.none', 'group2': 'group.none'}
 
        assert a1_auth.permissions['repositories_groups'].get('group1') == 'group.none'
 
        assert a1_auth.permissions['repositories_groups'].get('group2') == 'group.none'
 

	
 
        # grant permission for u2 !
 
        RepoGroupModel().grant_user_permission(repo_group=self.g1, user=self.u2,
 
                                               perm='group.read')
 
        RepoGroupModel().grant_user_permission(repo_group=self.g2, user=self.u2,
 
                                               perm='group.read')
 
        Session().commit()
 
        assert self.u1 != self.u2
 
        # u1 and anon should have not change perms while u2 should !
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories_groups'] == {'group1': 'group.none', 'group2': 'group.none'}
 
        assert u1_auth.permissions['repositories_groups'].get('group1') == 'group.none'
 
        assert u1_auth.permissions['repositories_groups'].get('group2') == 'group.none'
 

	
 
        u2_auth = AuthUser(user_id=self.u2.user_id)
 
        assert u2_auth.permissions['repositories_groups'] == {'group1': 'group.read', 'group2': 'group.read'}
 
        assert u2_auth.permissions['repositories_groups'].get('group1') == 'group.read'
 
        assert u2_auth.permissions['repositories_groups'].get('group2') == 'group.read'
 

	
 
        a1_auth = AuthUser(user_id=self.anon.user_id)
 
        assert a1_auth.permissions['repositories_groups'] == {'group1': 'group.none', 'group2': 'group.none'}
 
        assert a1_auth.permissions['repositories_groups'].get('group1') == 'group.none'
 
        assert a1_auth.permissions['repositories_groups'].get('group2') == 'group.none'
 

	
 
    def test_repo_group_user_as_user_group_member(self):
 
        # create Group1
 
        self.g1 = fixture.create_repo_group('group1', skip_if_exists=True)
 
        a1_auth = AuthUser(user_id=self.anon.user_id)
 

	
 
        assert a1_auth.permissions['repositories_groups'] == {'group1': 'group.read'}
 
        assert a1_auth.permissions['repositories_groups'].get('group1') == 'group.read'
 

	
 
        # set default permission to none
 
        RepoGroupModel().grant_user_permission(repo_group=self.g1,
 
                                               user=self.anon,
 
                                               perm='group.none')
 
        # make group
 
        self.ug1 = fixture.create_user_group('G1')
 
        # add user to group
 
        UserGroupModel().add_user_to_group(self.ug1, self.u1)
 
        Session().commit()
 

	
 
        # check if user is in the group
 
        members = [x.user_id for x in UserGroupModel().get(self.ug1.users_group_id).members]
 
        assert members == [self.u1.user_id]
 
        # add some user to that group
 

	
 
        # check his permissions
 
        a1_auth = AuthUser(user_id=self.anon.user_id)
 
        assert a1_auth.permissions['repositories_groups'] == {'group1': 'group.none'}
 
        assert a1_auth.permissions['repositories_groups'].get('group1') == 'group.none'
 

	
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories_groups'] == {'group1': 'group.none'}
 
        assert u1_auth.permissions['repositories_groups'].get('group1') == 'group.none'
 

	
 
        # grant ug1 read permissions for
 
        RepoGroupModel().grant_user_group_permission(repo_group=self.g1,
 
                                                      group_name=self.ug1,
 
                                                      perm='group.read')
 
        Session().commit()
 
        # check if the
 
        obj = Session().query(UserGroupRepoGroupToPerm) \
 
            .filter(UserGroupRepoGroupToPerm.group == self.g1) \
 
            .filter(UserGroupRepoGroupToPerm.users_group == self.ug1) \
 
            .scalar()
 
        assert obj.permission.permission_name == 'group.read'
 

	
 
        a1_auth = AuthUser(user_id=self.anon.user_id)
 

	
 
        assert a1_auth.permissions['repositories_groups'] == {'group1': 'group.none'}
 
        assert a1_auth.permissions['repositories_groups'].get('group1') == 'group.none'
 

	
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories_groups'] == {'group1': 'group.read'}
 
        assert u1_auth.permissions['repositories_groups'].get('group1') == 'group.read'
 

	
 
    def test_inherit_nice_permissions_from_default_user(self):
 
        user_model = UserModel()
 
        # enable fork and create on default user
 
        usr = 'default'
 
        user_model.revoke_perm(usr, 'hg.create.none')
 
        user_model.grant_perm(usr, 'hg.create.repository')
 
        user_model.revoke_perm(usr, 'hg.fork.none')
 
        user_model.grant_perm(usr, 'hg.fork.repository')
 
        Session().commit()
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        # this user will have inherited permissions from default user
 
@@ -507,45 +482,45 @@ class TestPermissions(base.TestControlle
 
        self.g1 = fixture.create_repo_group('group1', skip_if_exists=True)
 

	
 
        # enable admin access for user group on repo group
 
        RepoGroupModel().grant_user_group_permission(self.g1,
 
                                                     group_name=self.ug1,
 
                                                     perm='group.admin')
 
        # enable only write access for default user on repo group
 
        RepoGroupModel().grant_user_permission(self.g1,
 
                                               user='default',
 
                                               perm='group.write')
 
        Session().commit()
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories_groups'] == {'group1': 'group.write'}
 
        assert u1_auth.permissions['repositories_groups'].get('group1') == 'group.write'
 

	
 
    def test_inactive_user_group_does_not_affect_repo_group_permissions_inverse(self):
 
        self.ug1 = fixture.create_user_group('G1')
 
        user_group_model = UserGroupModel()
 
        user_group_model.add_user_to_group(self.ug1, self.u1)
 
        user_group_model.update(self.ug1, {'users_group_active': False})
 

	
 
        self.g1 = fixture.create_repo_group('group1', skip_if_exists=True)
 

	
 
        # enable only write access for user group on repo group
 
        RepoGroupModel().grant_user_group_permission(self.g1,
 
                                                     group_name=self.ug1,
 
                                                     perm='group.write')
 
        # enable admin access for default user on repo group
 
        RepoGroupModel().grant_user_permission(self.g1,
 
                                               user='default',
 
                                               perm='group.admin')
 
        Session().commit()
 
        u1_auth = AuthUser(user_id=self.u1.user_id)
 
        assert u1_auth.permissions['repositories_groups'] == {'group1': 'group.admin'}
 
        assert u1_auth.permissions['repositories_groups'].get('group1') == 'group.admin'
 

	
 
    def test_inactive_user_group_does_not_affect_user_group_permissions(self):
 
        self.ug1 = fixture.create_user_group('G1')
 
        user_group_model = UserGroupModel()
 
        user_group_model.add_user_to_group(self.ug1, self.u1)
 
        user_group_model.update(self.ug1, {'users_group_active': False})
 

	
 
        self.ug2 = fixture.create_user_group('G2')
 

	
 
        # enable admin access for user group on user group
 
        UserGroupModel().grant_user_group_permission(self.ug2,
 
                                                     user_group=self.ug1,
kallithea/tests/models/test_repo_groups.py
Show inline comments
 
@@ -54,25 +54,25 @@ class TestRepoGroups(base.TestController
 
        return os.path.isdir(path)
 

	
 
    def __delete_group(self, id_):
 
        RepoGroupModel().delete(id_)
 

	
 
    def test_create_group(self):
 
        g = fixture.create_repo_group('newGroup')
 
        Session().commit()
 
        assert g.full_path == 'newGroup'
 

	
 
        assert self.__check_path('newGroup')
 

	
 
    def test_create_same_name_group(self):
 
        # test_create_same_name_group
 
        with pytest.raises(IntegrityError):
 
            fixture.create_repo_group('newGroup')
 
        Session().rollback()
 

	
 
    def test_same_subgroup(self):
 
        sg1 = fixture.create_repo_group('sub1', parent_group_id=self.g1.group_id)
 
        assert sg1.parent_group == self.g1
 
        assert sg1.full_path == 'test1/sub1'
 
        assert self.__check_path('test1', 'sub1')
 

	
 
        ssg1 = fixture.create_repo_group('subsub1', parent_group_id=sg1.group_id)
 
        assert ssg1.parent_group == sg1
kallithea/tests/other/test_auth_ldap.py
Show inline comments
 
@@ -15,25 +15,25 @@ def arrange_ldap_auth(set_test_settings)
 
        ('auth_ldap_attr_lastname', 'test_ldap_lastname'),
 
        ('auth_ldap_attr_email', 'test_ldap_email'))
 

	
 

	
 
class _AuthLdapMock():
 

	
 
    def __init__(self, **kwargs):
 
        pass
 

	
 
    def authenticate_ldap(self, username, password):
 
        return 'spam dn', dict(test_ldap_firstname=['spam ldap first name'],
 
                               test_ldap_lastname=['spam ldap last name'],
 
                               test_ldap_email=['spam ldap email'])
 
                               test_ldap_email=['%s ldap email' % username])
 

	
 

	
 
def test_update_user_attributes_from_ldap(monkeypatch, create_test_user,
 
                                          arrange_ldap_auth):
 
    """Authenticate user with mocked LDAP, verify attributes are updated.
 
    """
 

	
 
    # Arrange test user.
 
    uniqifier = uuid.uuid4()
 
    username = 'test-user-{0}'.format(uniqifier)
 
    assert User.get_by_username(username) is None
 
    user_input = dict(username='test-user-{0}'.format(uniqifier),
 
@@ -47,62 +47,62 @@ def test_update_user_attributes_from_lda
 

	
 
    # Arrange LDAP auth.
 
    monkeypatch.setattr(auth_ldap, 'AuthLdap', _AuthLdapMock)
 

	
 
    # Authenticate with LDAP.
 
    user_data = authenticate(username, 'password')
 

	
 
    # Verify that authenication succeeded and retrieved correct attributes
 
    # from LDAP.
 
    assert user_data is not None
 
    assert user_data.get('firstname') == 'spam ldap first name'
 
    assert user_data.get('lastname') == 'spam ldap last name'
 
    assert user_data.get('email') == 'spam ldap email'
 
    assert user_data.get('email') == '%s ldap email' % username
 

	
 
    # Verify that authentication overwrote user attributes with the ones
 
    # retrieved from LDAP.
 
    assert user.firstname == 'spam ldap first name'
 
    assert user.lastname == 'spam ldap last name'
 
    assert user.email == 'spam ldap email'
 
    assert user.email == '%s ldap email' % username
 

	
 

	
 
def test_init_user_attributes_from_ldap(monkeypatch, arrange_ldap_auth):
 
    """Authenticate unknown user with mocked LDAP, verify user is created.
 
    """
 

	
 
    # Arrange test user.
 
    uniqifier = uuid.uuid4()
 
    username = 'test-user-{0}'.format(uniqifier)
 
    assert User.get_by_username(username) is None
 

	
 
    # Arrange LDAP auth.
 
    monkeypatch.setattr(auth_ldap, 'AuthLdap', _AuthLdapMock)
 

	
 
    # Authenticate with LDAP.
 
    user_data = authenticate(username, 'password')
 

	
 
    # Verify that authenication succeeded and retrieved correct attributes
 
    # from LDAP.
 
    assert user_data is not None
 
    assert user_data.get('firstname') == 'spam ldap first name'
 
    assert user_data.get('lastname') == 'spam ldap last name'
 
    assert user_data.get('email') == 'spam ldap email'
 
    assert user_data.get('email') == '%s ldap email' % username
 

	
 
    # Verify that authentication created new user with attributes
 
    # retrieved from LDAP.
 
    new_user = User.get_by_username(username)
 
    assert new_user is not None
 
    assert new_user.firstname == 'spam ldap first name'
 
    assert new_user.lastname == 'spam ldap last name'
 
    assert new_user.email == 'spam ldap email'
 
    assert new_user.email == '%s ldap email' % username
 

	
 

	
 
class _AuthLdapNoEmailMock():
 

	
 
    def __init__(self, **kwargs):
 
        pass
 

	
 
    def authenticate_ldap(self, username, password):
 
        return 'spam dn', dict(test_ldap_firstname=['spam ldap first name'],
 
                               test_ldap_lastname=['spam ldap last name'],
 
                               test_ldap_email=[''])
 

	

Changeset was too big and was cut off... Show full diff anyway

0 comments (0 inline, 0 general)