Changeset - 8fe7c1024719
[Not reviewed]
development.ini
Show inline comments
 
################################################################################
 
################################################################################
 
# RhodeCode - Pylons environment configuration                                 #
 
#                                                                              # 
 
# The %(here)s variable will be replaced with the parent directory of this file#
 
################################################################################
 

	
 
[DEFAULT]
 
debug = true
 
pdebug = false
 
################################################################################
 
## Uncomment and replace with the address which should receive                ## 
 
## any error reports after application crash                                  ##
 
## Additionally those settings will be used by RhodeCode mailing system       ##
 
################################################################################
 
#email_to = admin@localhost
 
#error_email_from = paste_error@localhost
 
#app_email_from = rhodecode-noreply@localhost
 
#error_message =
 
#email_prefix = [RhodeCode]
 

	
 
#smtp_server = mail.server.com
 
#smtp_username = 
 
#smtp_password = 
 
#smtp_port = 
 
#smtp_use_tls = false
 
#smtp_use_ssl = true
 
# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
 
#smtp_auth = 
 

	
 
[server:main]
 
##nr of threads to spawn
 
threadpool_workers = 5
 

	
 
##max request before thread respawn
 
threadpool_max_requests = 10
 

	
 
##option to use threads of process
 
use_threadpool = true
 

	
 
use = egg:Paste#http
 
host = 0.0.0.0
 
port = 5000
 

	
 
[app:main]
 
use = egg:rhodecode
 
full_stack = true
 
static_files = true
 
# Optional Languages
 
# en, fr, pt_BR, zh_CN, zh_TW
 
lang = en
 
cache_dir = %(here)s/data
 
index_dir = %(here)s/data/index
 
app_instance_uuid = rc-develop
 
cut_off_limit = 256000
 
force_https = false
 
commit_parse_limit = 25
 
use_gravatar = true
 
container_auth_enabled = false
 
proxypass_auth_enabled = false
 
default_encoding = utf8
 

	
 
## overwrite schema of clone url
 
## available vars:
 
## scheme - http/https
 
## user - current user
 
## pass - password 
 
## netloc - network location
 
## path - usually repo_name
 

	
 
#clone_uri = {scheme}://{user}{pass}{netloc}{path}
 

	
 
## issue tracking mapping for commits messages
 
## comment out issue_pat, issue_server, issue_prefix to enable
 

	
 
## pattern to get the issues from commit messages
 
## default one used here is #<numbers> with a regex passive group for `#`
 
## {id} will be all groups matched from this pattern
 

	
 
issue_pat = (?:\s*#)(\d+)
 

	
 
## server url to the issue, each {id} will be replaced with match
 
## fetched from the regex and {repo} is replaced with repository name
 
## fetched from the regex and {repo} is replaced with full repository name
 
## including groups {repo_name} is replaced with just name of repo
 

	
 
issue_server_link = https://myissueserver.com/{repo}/issue/{id}
 

	
 
## prefix to add to link to indicate it's an url
 
## #314 will be replaced by <issue_prefix><id>
 

	
 
issue_prefix = #
 

	
 
## instance-id prefix
 
## a prefix key for this instance used for cache invalidation when running 
 
## multiple instances of rhodecode, make sure it's globally unique for 
 
## all running rhodecode instances. Leave empty if you don't use it
 
instance_id = 
 

	
 
## alternative return HTTP header for failed authentication. Default HTTP
 
## response is 401 HTTPUnauthorized. Currently HG clients have troubles with 
 
## handling that. Set this variable to 403 to return HTTPForbidden
 
auth_ret_code =
 

	
 
####################################
 
###        CELERY CONFIG        ####
 
####################################
 
use_celery = false
 
broker.host = localhost
 
broker.vhost = rabbitmqhost
 
broker.port = 5672
 
broker.user = rabbitmq
 
broker.password = qweqwe
 

	
 
celery.imports = rhodecode.lib.celerylib.tasks
 

	
 
celery.result.backend = amqp
 
celery.result.dburi = amqp://
 
celery.result.serialier = json
 

	
 
#celery.send.task.error.emails = true
 
#celery.amqp.task.result.expires = 18000
 

	
 
celeryd.concurrency = 2
 
#celeryd.log.file = celeryd.log
 
celeryd.log.level = debug
 
celeryd.max.tasks.per.child = 1
 

	
 
#tasks will never be sent to the queue, but executed locally instead.
 
celery.always.eager = false
 

	
 
####################################
 
###         BEAKER CACHE        ####
 
####################################
 
beaker.cache.data_dir=%(here)s/data/cache/data
 
beaker.cache.lock_dir=%(here)s/data/cache/lock
 

	
 
beaker.cache.regions=super_short_term,short_term,long_term,sql_cache_short,sql_cache_med,sql_cache_long
 

	
 
beaker.cache.super_short_term.type=memory
 
beaker.cache.super_short_term.expire=10
 
beaker.cache.super_short_term.key_length = 256
 

	
 
beaker.cache.short_term.type=memory
 
beaker.cache.short_term.expire=60
 
beaker.cache.short_term.key_length = 256
 

	
 
beaker.cache.long_term.type=memory
 
beaker.cache.long_term.expire=36000
 
beaker.cache.long_term.key_length = 256
 

	
 
beaker.cache.sql_cache_short.type=memory
 
beaker.cache.sql_cache_short.expire=10
 
beaker.cache.sql_cache_short.key_length = 256
 

	
 
beaker.cache.sql_cache_med.type=memory
 
beaker.cache.sql_cache_med.expire=360
 
beaker.cache.sql_cache_med.key_length = 256
 

	
 
beaker.cache.sql_cache_long.type=file
 
beaker.cache.sql_cache_long.expire=3600
 
beaker.cache.sql_cache_long.key_length = 256
 

	
 
####################################
 
###       BEAKER SESSION        ####
 
####################################
 
## Type of storage used for the session, current types are 
 
## dbm, file, memcached, database, and memory. 
 
## The storage uses the Container API 
 
## that is also used by the cache system.
 

	
 
## db session example
 

	
 
#beaker.session.type = ext:database
 
#beaker.session.sa.url = postgresql://postgres:qwe@localhost/rhodecode
 
#beaker.session.table_name = db_session 
 

	
 
## encrypted cookie session, good for many instances
 
#beaker.session.type = cookie
 

	
 
beaker.session.type = file
 
beaker.session.key = rhodecode
 
# secure cookie requires AES python libraries
 
#beaker.session.encrypt_key = g654dcno0-9873jhgfreyu
 
#beaker.session.validate_key = 9712sds2212c--zxc123
 
beaker.session.timeout = 36000
 
beaker.session.httponly = true
 

	
 
## uncomment for https secure cookie
 
beaker.session.secure = false
 

	
 
##auto save the session to not to use .save()
 
beaker.session.auto = False
 

	
 
##true exire at browser close
 
#beaker.session.cookie_expires = 3600
 

	
 

	
 
################################################################################
 
## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*  ##
 
## Debug mode will enable the interactive debugging tool, allowing ANYONE to  ##
 
## execute malicious code after an exception is raised.                       ##
 
################################################################################
 
#set debug = false
 

	
 
##################################
 
###       LOGVIEW CONFIG       ###
 
##################################
 
logview.sqlalchemy = #faa
 
logview.pylons.templating = #bfb
 
logview.pylons.util = #eee
 

	
 
#########################################################
 
### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG    ###
 
#########################################################
 
#sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db
 
sqlalchemy.db1.url = postgresql://postgres:qwe@localhost/rhodecode
 
sqlalchemy.db1.echo = false
 
sqlalchemy.db1.pool_recycle = 3600
 
sqlalchemy.db1.convert_unicode = true
 

	
 
################################
 
### LOGGING CONFIGURATION   ####
 
################################
 
[loggers]
 
keys = root, routes, rhodecode, sqlalchemy, beaker, templates, whoosh_indexer
 

	
 
[handlers]
 
keys = console, console_sql
 

	
 
[formatters]
 
keys = generic, color_formatter, color_formatter_sql
 

	
 
#############
 
## LOGGERS ##
 
#############
 
[logger_root]
 
level = NOTSET
 
handlers = console
 

	
 
[logger_routes]
 
level = DEBUG
 
handlers = 
 
qualname = routes.middleware
 
# "level = DEBUG" logs the route matched and routing variables.
 
propagate = 1
 

	
 
[logger_beaker]
 
level = DEBUG
 
handlers = 
 
qualname = beaker.container
 
propagate = 1
 

	
 
[logger_templates]
 
level = INFO
 
handlers = 
 
qualname = pylons.templating
 
propagate = 1
 

	
 
[logger_rhodecode]
 
level = DEBUG
 
handlers = 
 
qualname = rhodecode
 
propagate = 1
 

	
 
[logger_sqlalchemy]
 
level = INFO
 
handlers = console_sql
 
qualname = sqlalchemy.engine
 
propagate = 0
 

	
 
[logger_whoosh_indexer]
 
level = DEBUG
 
handlers = 
 
qualname = whoosh_indexer
 
propagate = 1
 

	
docs/api/api.rst
Show inline comments
 
@@ -222,433 +222,439 @@ OUTPUT::
 
              "id" : "<edited_user_id>",
 
              "msg" : "updated user <username>"
 
            }
 
    error:  null
 

	
 

	
 
get_users_group
 
---------------
 

	
 
Gets an existing users group. This command can be executed only using api_key
 
belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "get_users_group"
 
    args :    {
 
                "group_name" : "<name>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result : None if group not exist
 
             {
 
               "id" :         "<id>",
 
               "group_name" : "<groupname>",
 
               "active":      "<bool>",
 
               "members" :  [
 
                              { "id" :       "<userid>",
 
                                "username" : "<username>",
 
                                "firstname": "<firstname>",
 
                                "lastname" : "<lastname>",
 
                                "email" :    "<email>",
 
                                "active" :   "<bool>",
 
                                "admin" :    "<bool>",
 
                                "ldap" :     "<ldap_dn>"
 
                              },
 
 
                            ]
 
             }
 
    error : null
 

	
 

	
 
get_users_groups
 
----------------
 

	
 
Lists all existing users groups. This command can be executed only using 
 
api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "get_users_groups"
 
    args :    { }
 

	
 
OUTPUT::
 

	
 
    result : [
 
               {
 
                 "id" :         "<id>",
 
                 "group_name" : "<groupname>",
 
                 "active":      "<bool>",
 
                 "members" :  [
 
	    	                    {
 
	    	                      "id" :       "<userid>",
 
	                              "username" : "<username>",
 
	                              "firstname": "<firstname>",
 
	                              "lastname" : "<lastname>",
 
	                              "email" :    "<email>",
 
	                              "active" :   "<bool>",
 
	                              "admin" :    "<bool>",
 
	                              "ldap" :     "<ldap_dn>"
 
	                            },
 
	    	
 
	                          ]
 
	            }
 
              ]
 
    error : null
 

	
 

	
 
create_users_group
 
------------------
 

	
 
Creates new users group. This command can be executed only using api_key
 
belonging to user with admin rights
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "create_users_group"
 
    args:     {
 
                "group_name":  "<groupname>",
 
                "active":"<bool> = True"
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id":  "<newusersgroupid>",
 
              "msg": "created new users group <groupname>"
 
            }
 
    error:  null
 

	
 

	
 
add_user_to_users_group
 
-----------------------
 

	
 
Adds a user to a users group. If user exists in that group success will be 
 
`false`. This command can be executed only using api_key
 
belonging to user with admin rights
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "add_user_users_group"
 
    args:     {
 
                "group_name" :  "<groupname>",
 
                "username" :   "<username>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id":  "<newusersgroupmemberid>",
 
              "success": True|False # depends on if member is in group
 
              "msg": "added member <username> to users group <groupname> | 
 
                      User is already in that group"
 
            }
 
    error:  null
 

	
 

	
 
remove_user_from_users_group
 
----------------------------
 

	
 
Removes a user from a users group. If user is not in given group success will
 
be `false`. This command can be executed only 
 
using api_key belonging to user with admin rights
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "remove_user_from_users_group"
 
    args:     {
 
                "group_name" :  "<groupname>",
 
                "username" :   "<username>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "success":  True|False,  # depends on if member is in group
 
              "msg": "removed member <username> from users group <groupname> | 
 
                      User wasn't in group"
 
            }
 
    error:  null
 

	
 

	
 
get_repo
 
--------
 

	
 
Gets an existing repository by it's name or repository_id. Members will return
 
either users_group or user associated to that repository. This command can 
 
be executed only using api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "get_repo"
 
    args:     {
 
                "repoid" : "<reponame or repo_id>"
 
              }
 

	
 
OUTPUT::
 

	
 
    result: None if repository does not exist or
 
            {
 
                "id" :          "<id>",
 
                "repo_name" :   "<reponame>"
 
                "type" :        "<type>",
 
                "description" : "<description>",
 
                "clone_uri" :   "<clone_uri>",
 
                "private": :    "<bool>",
 
                "created_on" :  "<datetimecreated>",
 
                "members" :     [
 
                                  { 
 
                                    "type": "user",
 
                                    "id" :         "<userid>",
 
                                    "username" :   "<username>",
 
                                    "firstname":   "<firstname>",
 
                                    "lastname" :   "<lastname>",
 
                                    "email" :      "<email>",
 
                                    "active" :     "<bool>",
 
                                    "admin" :      "<bool>",
 
                                    "ldap" :       "<ldap_dn>",
 
                                    "permission" : "repository.(read|write|admin)"
 
                                  },
 
 
                                  { 
 
                                    "type": "users_group",
 
                                    "id" :       "<usersgroupid>",
 
                                    "name" :     "<usersgroupname>",
 
                                    "active":    "<bool>",
 
                                    "permission" : "repository.(read|write|admin)"
 
                                  },
 
 
                                ]
 
            }
 
    error:  null
 

	
 

	
 
get_repos
 
---------
 

	
 
Lists all existing repositories. This command can be executed only using api_key
 
belonging to user with admin rights
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "get_repos"
 
    args:     { }
 

	
 
OUTPUT::
 

	
 
    result: [
 
              {
 
                "id" :          "<id>",
 
                "repo_name" :   "<reponame>"
 
                "type" :        "<type>",
 
                "description" : "<description>"
 
                "description" : "<description>",
 
                "clone_uri" :   "<clone_uri>",
 
                "private": :    "<bool>",
 
                "created_on" :  "<datetimecreated>",
 
              },
 
 
            ]
 
    error:  null
 

	
 

	
 
get_repo_nodes
 
--------------
 

	
 
returns a list of nodes and it's children in a flat list for a given path 
 
at given revision. It's possible to specify ret_type to show only `files` or 
 
`dirs`. This command can be executed only using api_key belonging to user 
 
with admin rights
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "get_repo_nodes"
 
    args:     {
 
                "repo_name" : "<reponame>",
 
                "revision"  : "<revision>",
 
                "root_path" : "<root_path>",
 
                "ret_type"  : "<ret_type>" = 'all'
 
              }
 

	
 
OUTPUT::
 

	
 
    result: [
 
              {
 
                "name" :        "<name>"
 
                "type" :        "<type>",
 
              },
 
 
            ]
 
    error:  null
 

	
 

	
 
create_repo
 
-----------
 

	
 
Creates a repository. This command can be executed only using api_key
 
belonging to user with admin rights.
 
If repository name contains "/", all needed repository groups will be created.
 
For example "foo/bar/baz" will create groups "foo", "bar" (with "foo" as parent),
 
and create "baz" repository with "bar" as group.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "create_repo"
 
    args:     {
 
                "repo_name" :   "<reponame>",
 
                "owner_name" :  "<ownername>",
 
                "description" : "<description> = ''",
 
                "repo_type" :   "<type> = 'hg'",
 
                "private" :     "<bool> = False",
 
                "clone_uri" :   "<clone_uri> = None",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "id": "<newrepoid>",
 
              "msg": "Created new repository <reponame>",
 
            }
 
    error:  null
 

	
 

	
 
delete_repo
 
-----------
 

	
 
Deletes a repository. This command can be executed only using api_key
 
belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "delete_repo"
 
    args:     {
 
                "repo_name" :   "<reponame>",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "msg": "Deleted repository <reponame>",
 
            }
 
    error:  null
 

	
 

	
 
grant_user_permission
 
---------------------
 

	
 
Grant permission for user on given repository, or update existing one
 
if found. This command can be executed only using api_key belonging to user 
 
with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "grant_user_permission"
 
    args:     {
 
                "repo_name" :  "<reponame>",
 
                "username" :   "<username>",
 
                "perm" :       "(repository.(none|read|write|admin))",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "msg" : "Granted perm: <perm> for user: <username> in repo: <reponame>"
 
            }
 
    error:  null
 

	
 

	
 
revoke_user_permission
 
----------------------
 

	
 
Revoke permission for user on given repository. This command can be executed 
 
only using api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method  : "revoke_user_permission"
 
    args:     {
 
                "repo_name" :  "<reponame>",
 
                "username" :   "<username>",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "msg" : "Revoked perm for user: <suername> in repo: <reponame>"
 
            }
 
    error:  null
 

	
 

	
 
grant_users_group_permission
 
----------------------------
 

	
 
Grant permission for users group on given repository, or update
 
existing one if found. This command can be executed only using 
 
api_key belonging to user with admin rights.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "grant_users_group_permission"
 
    args:     {
 
                "repo_name" : "<reponame>",
 
                "group_name" : "<usersgroupname>",
 
                "perm" : "(repository.(none|read|write|admin))",
 
              }
 

	
 
OUTPUT::
 

	
 
    result: {
 
              "msg" : "Granted perm: <perm> for group: <usersgroupname> in repo: <reponame>"
 
            }
 
    error:  null
 
    
 
    
 
revoke_users_group_permission
 
-----------------------------
 

	
 
Revoke permission for users group on given repository.This command can be 
 
executed only using api_key belonging to user with admin rights.
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method  : "revoke_users_group_permission"
 
    args:     {
 
                "repo_name" :  "<reponame>",
 
                "users_group" :   "<usersgroupname>",
 
              }
 

	
 
OUTPUT::
docs/changelog.rst
Show inline comments
 
.. _changelog:
 

	
 
=========
 
Changelog
 
=========
 

	
 
1.4.0 (**2012-XX-XX**)
 
----------------------
 

	
 
:status: in-progress
 
:branch: beta
 

	
 
news
 
++++
 
 
 
- new codereview system
 
- email map, allowing users to have multiple email addresses mapped into
 
  their accounts
 
- changed setup-app into setup-rhodecode and added default options to it.
 
 
 
- new git repos are created as bare now by default
 

	
 
fixes
 
+++++
 

	
 

	
 
- improved translations
 
- fixes issue #455 Creating an archive generates an exception on Windows
 
- fixes #448 Download ZIP archive keeps file in /tmp open and results 
 
  in out of disk space
 
- fixes issue #454 Search results under Windows include proceeding
 
  backslash
 
- fixed issue #450. Rhodecode no longer will crash when bad revision is
 
  present in journal data.
 
- fix for issue #417, git execution was broken on windows for certain
 
  commands.
 
- fixed #413. Don't disable .git directory for bare repos on deleting
 
- fixed issue #459. Changed the way of obtaining logger in reindex task.
 

	
 
1.3.6 (**2012-05-17**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- chinese traditional translation
 
- changed setup-app into setup-rhodecode and added arguments for auto-setup 
 
  mode that doesn't need user interaction 
 

	
 
fixes
 
+++++
 

	
 
- fixed no scm found warning
 
- fixed __future__ import error on rcextensions
 
- made simplejson required lib for speedup on JSON encoding
 
- fixes #449 bad regex could get more than revisions from parsing history
 
- don't clear DB session when CELERY_EAGER is turned ON
 

	
 
1.3.5 (**2012-05-10**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- use ext_json for json module
 
- unified annotation view with file source view
 
- notification improvements, better inbox + css
 
- #419 don't strip passwords for login forms, make rhodecode 
 
  more compatible with LDAP servers
 
- Added HTTP_X_FORWARDED_FOR as another method of extracting 
 
  IP for pull/push logs. - moved all to base controller  
 
- #415: Adding comment to changeset causes reload. 
 
  Comments are now added via ajax and doesn't reload the page
 
- #374 LDAP config is discarded when LDAP can't be activated
 
- limited push/pull operations are now logged for git in the journal
 
- bumped mercurial to 2.2.X series
 
- added support for displaying submodules in file-browser
 
- #421 added bookmarks in changelog view
 

	
 
fixes
 
+++++
 

	
 
- fixed dev-version marker for stable when served from source codes
 
- fixed missing permission checks on show forks page
 
- #418 cast to unicode fixes in notification objects
 
- #426 fixed mention extracting regex
 
- fixed remote-pulling for git remotes remopositories
 
- fixed #434: Error when accessing files or changesets of a git repository 
 
  with submodules
 
- fixed issue with empty APIKEYS for users after registration ref. #438
 
- fixed issue with getting README files from git repositories
 

	
 
1.3.4 (**2012-03-28**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- Whoosh logging is now controlled by the .ini files logging setup
 
- added clone-url into edit form on /settings page
 
- added help text into repo add/edit forms
 
- created rcextensions module with additional mappings (ref #322) and
 
  post push/pull/create repo hooks callbacks
 
- implemented #377 Users view for his own permissions on account page
 
- #399 added inheritance of permissions for users group on repos groups
 
- #401 repository group is automatically pre-selected when adding repos 
 
  inside a repository group
 
- added alternative HTTP 403 response when client failed to authenticate. Helps 
 
  solving issues with Mercurial and LDAP
 
- #402 removed group prefix from repository name when listing repositories 
 
  inside a group
 
- added gravatars into permission view and permissions autocomplete
 
- #347 when running multiple RhodeCode instances, properly invalidates cache 
 
  for all registered servers
 

	
 
fixes
 
+++++
 

	
 
- fixed #390 cache invalidation problems on repos inside group
 
- fixed #385 clone by ID url was loosing proxy prefix in URL
 
- fixed some unicode problems with waitress
 
- fixed issue with escaping < and > in changeset commits
 
- fixed error occurring during recursive group creation in API 
 
  create_repo function
 
- fixed #393 py2.5 fixes for routes url generator
 
- fixed #397 Private repository groups shows up before login
 
- fixed #396 fixed problems with revoking users in nested groups
 
- fixed mysql unicode issues + specified InnoDB as default engine with 
 
  utf8 charset
 
- #406 trim long branch/tag names in changelog to not break UI
 
  
 
1.3.3 (**2012-03-02**)
 
----------------------
 

	
 
news
 
++++
 

	
 

	
 
fixes
 
+++++
 

	
 
- fixed some python2.5 compatibility issues 
 
- fixed issues with removed repos was accidentally added as groups, after
 
  full rescan of paths
 
- fixes #376 Cannot edit user (using container auth)
 
- fixes #378 Invalid image urls on changeset screen with proxy-prefix 
 
  configuration
 
- fixed initial sorting of repos inside repo group
 
- fixes issue when user tried to resubmit same permission into user/user_groups
 
- bumped beaker version that fixes #375 leap error bug
 
- fixed raw_changeset for git. It was generated with hg patch headers
 
- fixed vcs issue with last_changeset for filenodes
 
- fixed missing commit after hook delete
 
- fixed #372 issues with git operation detection that caused a security issue 
 
  for git repos
 

	
 
1.3.2 (**2012-02-28**)
 
----------------------
 

	
 
news
 
++++
 

	
 

	
 
fixes
 
+++++
 

	
 
- fixed git protocol issues with repos-groups
 
- fixed git remote repos validator that prevented from cloning remote git repos
 
- fixes #370 ending slashes fixes for repo and groups
 
- fixes #368 improved git-protocol detection to handle other clients
 
- fixes #366 When Setting Repository Group To Blank Repo Group Wont Be 
 
  Moved To Root
 
- fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys 
 
- fixed #373 missing cascade drop on user_group_to_perm table
 

	
 
1.3.1 (**2012-02-27**)
 
----------------------
 

	
 
news
 
++++
 

	
 

	
 
fixes
 
+++++
 

	
 
- redirection loop occurs when remember-me wasn't checked during login
 
- fixes issues with git blob history generation 
 
- don't fetch branch for git in file history dropdown. Causes unneeded slowness
 

	
 
1.3.0 (**2012-02-26**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- code review, inspired by github code-comments 
 
- #215 rst and markdown README files support
 
- #252 Container-based and proxy pass-through authentication support
 
- #44 branch browser. Filtering of changelog by branches
 
- mercurial bookmarks support
 
- new hover top menu, optimized to add maximum size for important views
 
- configurable clone url template with possibility to specify  protocol like 
 
  ssh:// or http:// and also manually alter other parts of clone_url.
 
- enabled largefiles extension by default
 
- optimized summary file pages and saved a lot of unused space in them
 
- #239 option to manually mark repository as fork
 
- #320 mapping of commit authors to RhodeCode users
 
- #304 hashes are displayed using monospace font    
 
- diff configuration, toggle white lines and context lines
 
- #307 configurable diffs, whitespace toggle, increasing context lines
 
- sorting on branches, tags and bookmarks using YUI datatable
 
- improved file filter on files page
 
- implements #330 api method for listing nodes ar particular revision
 
- #73 added linking issues in commit messages to chosen issue tracker url
 
  based on user defined regular expression
 
- added linking of changesets in commit messages  
 
- new compact changelog with expandable commit messages
 
- firstname and lastname are optional in user creation
 
- #348 added post-create repository hook
 
- #212 global encoding settings is now configurable from .ini files 
 
- #227 added repository groups permissions
 
- markdown gets codehilite extensions
 
- new API methods, delete_repositories, grante/revoke permissions for groups 
 
  and repos
 
  
 
    
 
fixes
 
+++++
 

	
 
- rewrote dbsession management for atomic operations, and better error handling
production.ini
Show inline comments
 
################################################################################
 
################################################################################
 
# RhodeCode - Pylons environment configuration                                 #
 
#                                                                              # 
 
# The %(here)s variable will be replaced with the parent directory of this file#
 
################################################################################
 

	
 
[DEFAULT]
 
debug = true
 
pdebug = false
 
################################################################################
 
## Uncomment and replace with the address which should receive                ## 
 
## any error reports after application crash                                  ##
 
## Additionally those settings will be used by RhodeCode mailing system       ##
 
################################################################################
 
#email_to = admin@localhost
 
#error_email_from = paste_error@localhost
 
#app_email_from = rhodecode-noreply@localhost
 
#error_message =
 
#email_prefix = [RhodeCode]
 

	
 
#smtp_server = mail.server.com
 
#smtp_username = 
 
#smtp_password = 
 
#smtp_port = 
 
#smtp_use_tls = false
 
#smtp_use_ssl = true
 
# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
 
#smtp_auth = 
 

	
 
[server:main]
 
##nr of threads to spawn
 
threadpool_workers = 5
 

	
 
##max request before thread respawn
 
threadpool_max_requests = 10
 

	
 
##option to use threads of process
 
use_threadpool = true
 

	
 
use = egg:Paste#http
 
host = 127.0.0.1
 
port = 8001
 

	
 
[app:main]
 
use = egg:rhodecode
 
full_stack = true
 
static_files = true
 
# Optional Languages
 
# en, fr, pt_BR, zh_CN, zh_TW
 
lang = en
 
cache_dir = %(here)s/data
 
index_dir = %(here)s/data/index
 
app_instance_uuid = rc-production
 
cut_off_limit = 256000
 
force_https = false
 
commit_parse_limit = 50
 
use_gravatar = true
 
container_auth_enabled = false
 
proxypass_auth_enabled = false
 
default_encoding = utf8
 

	
 
## overwrite schema of clone url
 
## available vars:
 
## scheme - http/https
 
## user - current user
 
## pass - password 
 
## netloc - network location
 
## path - usually repo_name
 

	
 
#clone_uri = {scheme}://{user}{pass}{netloc}{path}
 

	
 
## issue tracking mapping for commits messages
 
## comment out issue_pat, issue_server, issue_prefix to enable
 

	
 
## pattern to get the issues from commit messages
 
## default one used here is #<numbers> with a regex passive group for `#`
 
## {id} will be all groups matched from this pattern
 

	
 
issue_pat = (?:\s*#)(\d+)
 

	
 
## server url to the issue, each {id} will be replaced with match
 
## fetched from the regex and {repo} is replaced with repository name
 
## fetched from the regex and {repo} is replaced with full repository name
 
## including groups {repo_name} is replaced with just name of repo
 

	
 
issue_server_link = https://myissueserver.com/{repo}/issue/{id}
 

	
 
## prefix to add to link to indicate it's an url
 
## #314 will be replaced by <issue_prefix><id>
 

	
 
issue_prefix = #
 

	
 
## instance-id prefix
 
## a prefix key for this instance used for cache invalidation when running 
 
## multiple instances of rhodecode, make sure it's globally unique for 
 
## all running rhodecode instances. Leave empty if you don't use it
 
instance_id = 
 

	
 
## alternative return HTTP header for failed authentication. Default HTTP
 
## response is 401 HTTPUnauthorized. Currently HG clients have troubles with 
 
## handling that. Set this variable to 403 to return HTTPForbidden
 
auth_ret_code =
 

	
 
####################################
 
###        CELERY CONFIG        ####
 
####################################
 
use_celery = false
 
broker.host = localhost
 
broker.vhost = rabbitmqhost
 
broker.port = 5672
 
broker.user = rabbitmq
 
broker.password = qweqwe
 

	
 
celery.imports = rhodecode.lib.celerylib.tasks
 

	
 
celery.result.backend = amqp
 
celery.result.dburi = amqp://
 
celery.result.serialier = json
 

	
 
#celery.send.task.error.emails = true
 
#celery.amqp.task.result.expires = 18000
 

	
 
celeryd.concurrency = 2
 
#celeryd.log.file = celeryd.log
 
celeryd.log.level = debug
 
celeryd.max.tasks.per.child = 1
 

	
 
#tasks will never be sent to the queue, but executed locally instead.
 
celery.always.eager = false
 

	
 
####################################
 
###         BEAKER CACHE        ####
 
####################################
 
beaker.cache.data_dir=%(here)s/data/cache/data
 
beaker.cache.lock_dir=%(here)s/data/cache/lock
 

	
 
beaker.cache.regions=super_short_term,short_term,long_term,sql_cache_short,sql_cache_med,sql_cache_long
 

	
 
beaker.cache.super_short_term.type=memory
 
beaker.cache.super_short_term.expire=10
 
beaker.cache.super_short_term.key_length = 256
 

	
 
beaker.cache.short_term.type=memory
 
beaker.cache.short_term.expire=60
 
beaker.cache.short_term.key_length = 256
 

	
 
beaker.cache.long_term.type=memory
 
beaker.cache.long_term.expire=36000
 
beaker.cache.long_term.key_length = 256
 

	
 
beaker.cache.sql_cache_short.type=memory
 
beaker.cache.sql_cache_short.expire=10
 
beaker.cache.sql_cache_short.key_length = 256
 

	
 
beaker.cache.sql_cache_med.type=memory
 
beaker.cache.sql_cache_med.expire=360
 
beaker.cache.sql_cache_med.key_length = 256
 

	
 
beaker.cache.sql_cache_long.type=file
 
beaker.cache.sql_cache_long.expire=3600
 
beaker.cache.sql_cache_long.key_length = 256
 

	
 
####################################
 
###       BEAKER SESSION        ####
 
####################################
 
## Type of storage used for the session, current types are 
 
## dbm, file, memcached, database, and memory. 
 
## The storage uses the Container API 
 
## that is also used by the cache system.
 

	
 
## db session example
 

	
 
#beaker.session.type = ext:database
 
#beaker.session.sa.url = postgresql://postgres:qwe@localhost/rhodecode
 
#beaker.session.table_name = db_session 
 

	
 
## encrypted cookie session, good for many instances
 
#beaker.session.type = cookie
 

	
 
beaker.session.type = file
 
beaker.session.key = rhodecode
 
# secure cookie requires AES python libraries
 
#beaker.session.encrypt_key = g654dcno0-9873jhgfreyu
 
#beaker.session.validate_key = 9712sds2212c--zxc123
 
beaker.session.timeout = 36000
 
beaker.session.httponly = true
 

	
 
## uncomment for https secure cookie
 
beaker.session.secure = false
 

	
 
##auto save the session to not to use .save()
 
beaker.session.auto = False
 

	
 
##true exire at browser close
 
#beaker.session.cookie_expires = 3600
 

	
 

	
 
################################################################################
 
## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*  ##
 
## Debug mode will enable the interactive debugging tool, allowing ANYONE to  ##
 
## execute malicious code after an exception is raised.                       ##
 
################################################################################
 
set debug = false
 

	
 
##################################
 
###       LOGVIEW CONFIG       ###
 
##################################
 
logview.sqlalchemy = #faa
 
logview.pylons.templating = #bfb
 
logview.pylons.util = #eee
 

	
 
#########################################################
 
### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG    ###
 
#########################################################
 
#sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db
 
sqlalchemy.db1.url = postgresql://postgres:qwe@localhost/rhodecode
 
sqlalchemy.db1.echo = false
 
sqlalchemy.db1.pool_recycle = 3600
 
sqlalchemy.db1.convert_unicode = true
 

	
 
################################
 
### LOGGING CONFIGURATION   ####
 
################################
 
[loggers]
 
keys = root, routes, rhodecode, sqlalchemy, beaker, templates, whoosh_indexer
 

	
 
[handlers]
 
keys = console, console_sql
 

	
 
[formatters]
 
keys = generic, color_formatter, color_formatter_sql
 

	
 
#############
 
## LOGGERS ##
 
#############
 
[logger_root]
 
level = NOTSET
 
handlers = console
 

	
 
[logger_routes]
 
level = DEBUG
 
handlers = 
 
qualname = routes.middleware
 
# "level = DEBUG" logs the route matched and routing variables.
 
propagate = 1
 

	
 
[logger_beaker]
 
level = DEBUG
 
handlers = 
 
qualname = beaker.container
 
propagate = 1
 

	
 
[logger_templates]
 
level = INFO
 
handlers = 
 
qualname = pylons.templating
 
propagate = 1
 

	
 
[logger_rhodecode]
 
level = DEBUG
 
handlers = 
 
qualname = rhodecode
 
propagate = 1
 

	
 
[logger_sqlalchemy]
 
level = INFO
 
handlers = console_sql
 
qualname = sqlalchemy.engine
 
propagate = 0
 

	
 
[logger_whoosh_indexer]
 
level = DEBUG
 
handlers = 
 
qualname = whoosh_indexer
 
propagate = 1
 

	
rhodecode/config/deployment.ini_tmpl
Show inline comments
 
################################################################################
 
################################################################################
 
# RhodeCode - Pylons environment configuration                                 #
 
#                                                                              # 
 
# The %(here)s variable will be replaced with the parent directory of this file#
 
################################################################################
 

	
 
[DEFAULT]
 
debug = true
 
pdebug = false
 
################################################################################
 
## Uncomment and replace with the address which should receive                ## 
 
## any error reports after application crash                                  ##
 
## Additionally those settings will be used by RhodeCode mailing system       ##
 
################################################################################
 
#email_to = admin@localhost
 
#error_email_from = paste_error@localhost
 
#app_email_from = rhodecode-noreply@localhost
 
#error_message =
 
#email_prefix = [RhodeCode]
 

	
 
#smtp_server = mail.server.com
 
#smtp_username = 
 
#smtp_password = 
 
#smtp_port = 
 
#smtp_use_tls = false
 
#smtp_use_ssl = true
 
# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
 
#smtp_auth = 
 

	
 
[server:main]
 
##nr of threads to spawn
 
threadpool_workers = 5
 

	
 
##max request before thread respawn
 
threadpool_max_requests = 10
 

	
 
##option to use threads of process
 
use_threadpool = true
 

	
 
use = egg:Paste#http
 
host = 127.0.0.1
 
port = 5000
 

	
 
[app:main]
 
use = egg:rhodecode
 
full_stack = true
 
static_files = true
 
# Optional Languages
 
# en, fr, pt_BR, zh_CN, zh_TW
 
lang = en
 
cache_dir = %(here)s/data
 
index_dir = %(here)s/data/index
 
app_instance_uuid = ${app_instance_uuid}
 
cut_off_limit = 256000
 
force_https = false
 
commit_parse_limit = 50
 
use_gravatar = true
 
container_auth_enabled = false
 
proxypass_auth_enabled = false
 
default_encoding = utf8
 

	
 
## overwrite schema of clone url
 
## available vars:
 
## scheme - http/https
 
## user - current user
 
## pass - password 
 
## netloc - network location
 
## path - usually repo_name
 

	
 
#clone_uri = {scheme}://{user}{pass}{netloc}{path}
 

	
 
## issue tracking mapping for commits messages
 
## comment out issue_pat, issue_server, issue_prefix to enable
 

	
 
## pattern to get the issues from commit messages
 
## default one used here is #<numbers> with a regex passive group for `#`
 
## {id} will be all groups matched from this pattern
 

	
 
issue_pat = (?:\s*#)(\d+)
 

	
 
## server url to the issue, each {id} will be replaced with match
 
## fetched from the regex and {repo} is replaced with repository name
 
## fetched from the regex and {repo} is replaced with full repository name
 
## including groups {repo_name} is replaced with just name of repo
 

	
 
issue_server_link = https://myissueserver.com/{repo}/issue/{id}
 

	
 
## prefix to add to link to indicate it's an url
 
## #314 will be replaced by <issue_prefix><id>
 

	
 
issue_prefix = #
 

	
 
## instance-id prefix
 
## a prefix key for this instance used for cache invalidation when running 
 
## multiple instances of rhodecode, make sure it's globally unique for 
 
## all running rhodecode instances. Leave empty if you don't use it
 
instance_id = 
 

	
 
## alternative return HTTP header for failed authentication. Default HTTP
 
## response is 401 HTTPUnauthorized. Currently HG clients have troubles with 
 
## handling that. Set this variable to 403 to return HTTPForbidden
 
auth_ret_code =
 

	
 
####################################
 
###        CELERY CONFIG        ####
 
####################################
 
use_celery = false
 
broker.host = localhost
 
broker.vhost = rabbitmqhost
 
broker.port = 5672
 
broker.user = rabbitmq
 
broker.password = qweqwe
 

	
 
celery.imports = rhodecode.lib.celerylib.tasks
 

	
 
celery.result.backend = amqp
 
celery.result.dburi = amqp://
 
celery.result.serialier = json
 

	
 
#celery.send.task.error.emails = true
 
#celery.amqp.task.result.expires = 18000
 

	
 
celeryd.concurrency = 2
 
#celeryd.log.file = celeryd.log
 
celeryd.log.level = debug
 
celeryd.max.tasks.per.child = 1
 

	
 
#tasks will never be sent to the queue, but executed locally instead.
 
celery.always.eager = false
 

	
 
####################################
 
###         BEAKER CACHE        ####
 
####################################
 
beaker.cache.data_dir=%(here)s/data/cache/data
 
beaker.cache.lock_dir=%(here)s/data/cache/lock
 

	
 
beaker.cache.regions=super_short_term,short_term,long_term,sql_cache_short,sql_cache_med,sql_cache_long
 

	
 
beaker.cache.super_short_term.type=memory
 
beaker.cache.super_short_term.expire=10
 
beaker.cache.super_short_term.key_length = 256
 

	
 
beaker.cache.short_term.type=memory
 
beaker.cache.short_term.expire=60
 
beaker.cache.short_term.key_length = 256
 

	
 
beaker.cache.long_term.type=memory
 
beaker.cache.long_term.expire=36000
 
beaker.cache.long_term.key_length = 256
 

	
 
beaker.cache.sql_cache_short.type=memory
 
beaker.cache.sql_cache_short.expire=10
 
beaker.cache.sql_cache_short.key_length = 256
 

	
 
beaker.cache.sql_cache_med.type=memory
 
beaker.cache.sql_cache_med.expire=360
 
beaker.cache.sql_cache_med.key_length = 256
 

	
 
beaker.cache.sql_cache_long.type=file
 
beaker.cache.sql_cache_long.expire=3600
 
beaker.cache.sql_cache_long.key_length = 256
 

	
 
####################################
 
###       BEAKER SESSION        ####
 
####################################
 
## Type of storage used for the session, current types are 
 
## dbm, file, memcached, database, and memory. 
 
## The storage uses the Container API 
 
## that is also used by the cache system.
 

	
 
## db session example
 

	
 
#beaker.session.type = ext:database
 
#beaker.session.sa.url = postgresql://postgres:qwe@localhost/rhodecode
 
#beaker.session.table_name = db_session 
 

	
 
## encrypted cookie session, good for many instances
 
#beaker.session.type = cookie
 

	
 
beaker.session.type = file
 
beaker.session.key = rhodecode
 
# secure cookie requires AES python libraries
 
#beaker.session.encrypt_key = ${app_instance_secret}
 
#beaker.session.validate_key = ${app_instance_secret}
 
beaker.session.timeout = 36000
 
beaker.session.httponly = true
 

	
 
## uncomment for https secure cookie
 
beaker.session.secure = false
 

	
 
##auto save the session to not to use .save()
 
beaker.session.auto = False
 

	
 
##true exire at browser close
 
#beaker.session.cookie_expires = 3600
 

	
 

	
 
################################################################################
 
## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*  ##
 
## Debug mode will enable the interactive debugging tool, allowing ANYONE to  ##
 
## execute malicious code after an exception is raised.                       ##
 
################################################################################
 
set debug = false
 

	
 
##################################
 
###       LOGVIEW CONFIG       ###
 
##################################
 
logview.sqlalchemy = #faa
 
logview.pylons.templating = #bfb
 
logview.pylons.util = #eee
 

	
 
#########################################################
 
### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG    ###
 
#########################################################
 

	
 
# SQLITE [default]
 
sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db
 
 
 
# POSTGRESQL
 
# sqlalchemy.db1.url = postgresql://user:pass@localhost/rhodecode
 

	
 
# MySQL
 
# sqlalchemy.db1.url = mysql://user:pass@localhost/rhodecode
 

	
 
# see sqlalchemy docs for others
 

	
 
sqlalchemy.db1.echo = false
 
sqlalchemy.db1.pool_recycle = 3600
 
sqlalchemy.db1.convert_unicode = true
 

	
 
################################
 
### LOGGING CONFIGURATION   ####
 
################################
 
[loggers]
 
keys = root, routes, rhodecode, sqlalchemy, beaker, templates, whoosh_indexer
 

	
 
[handlers]
 
keys = console, console_sql
 

	
 
[formatters]
 
keys = generic, color_formatter, color_formatter_sql
 

	
 
#############
 
## LOGGERS ##
 
#############
 
[logger_root]
 
level = NOTSET
 
handlers = console
 

	
 
[logger_routes]
 
level = DEBUG
 
handlers = 
 
qualname = routes.middleware
 
# "level = DEBUG" logs the route matched and routing variables.
 
propagate = 1
 

	
 
[logger_beaker]
 
level = DEBUG
 
handlers = 
 
qualname = beaker.container
 
propagate = 1
 

	
 
[logger_templates]
 
level = INFO
 
handlers = 
 
qualname = pylons.templating
 
propagate = 1
 

	
 
[logger_rhodecode]
 
level = DEBUG
 
handlers = 
 
qualname = rhodecode
 
propagate = 1
 

	
 
[logger_sqlalchemy]
 
level = INFO
rhodecode/controllers/api/api.py
Show inline comments
 
@@ -202,404 +202,410 @@ class ApiController(JSONRPCController):
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to update user %s' % username)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def get_users_group(self, apiuser, group_name):
 
        """"
 
        Get users group by name
 

	
 
        :param apiuser:
 
        :param group_name:
 
        """
 

	
 
        users_group = UsersGroup.get_by_group_name(group_name)
 
        if not users_group:
 
            return None
 

	
 
        members = []
 
        for user in users_group.members:
 
            user = user.user
 
            members.append(dict(id=user.user_id,
 
                            username=user.username,
 
                            firstname=user.name,
 
                            lastname=user.lastname,
 
                            email=user.email,
 
                            active=user.active,
 
                            admin=user.admin,
 
                            ldap=user.ldap_dn))
 

	
 
        return dict(id=users_group.users_group_id,
 
                    group_name=users_group.users_group_name,
 
                    active=users_group.users_group_active,
 
                    members=members)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def get_users_groups(self, apiuser):
 
        """"
 
        Get all users groups
 

	
 
        :param apiuser:
 
        """
 

	
 
        result = []
 
        for users_group in UsersGroup.getAll():
 
            members = []
 
            for user in users_group.members:
 
                user = user.user
 
                members.append(dict(id=user.user_id,
 
                                username=user.username,
 
                                firstname=user.name,
 
                                lastname=user.lastname,
 
                                email=user.email,
 
                                active=user.active,
 
                                admin=user.admin,
 
                                ldap=user.ldap_dn))
 

	
 
            result.append(dict(id=users_group.users_group_id,
 
                                group_name=users_group.users_group_name,
 
                                active=users_group.users_group_active,
 
                                members=members))
 
        return result
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def create_users_group(self, apiuser, group_name, active=True):
 
        """
 
        Creates an new usergroup
 

	
 
        :param group_name:
 
        :param active:
 
        """
 

	
 
        if self.get_users_group(apiuser, group_name):
 
            raise JSONRPCError("users group %s already exist" % group_name)
 

	
 
        try:
 
            ug = UsersGroupModel().create(name=group_name, active=active)
 
            Session.commit()
 
            return dict(id=ug.users_group_id,
 
                        msg='created new users group %s' % group_name)
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to create group %s' % group_name)
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def add_user_to_users_group(self, apiuser, group_name, username):
 
        """"
 
        Add a user to a users group
 

	
 
        :param apiuser:
 
        :param group_name:
 
        :param username:
 
        """
 

	
 
        try:
 
            users_group = UsersGroup.get_by_group_name(group_name)
 
            if not users_group:
 
                raise JSONRPCError('unknown users group %s' % group_name)
 

	
 
            user = User.get_by_username(username)
 
            if user is None:
 
                raise JSONRPCError('unknown user %s' % username)
 

	
 
            ugm = UsersGroupModel().add_user_to_group(users_group, user)
 
            success = True if ugm != True else False
 
            msg = 'added member %s to users group %s' % (username, group_name)
 
            msg = msg if success else 'User is already in that group'
 
            Session.commit()
 

	
 
            return dict(
 
                id=ugm.users_group_member_id if ugm != True else None,
 
                success=success,
 
                msg=msg
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to add users group member')
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def remove_user_from_users_group(self, apiuser, group_name, username):
 
        """
 
        Remove user from a group
 

	
 
        :param apiuser
 
        :param group_name
 
        :param username
 
        """
 

	
 
        try:
 
            users_group = UsersGroup.get_by_group_name(group_name)
 
            if not users_group:
 
                raise JSONRPCError('unknown users group %s' % group_name)
 

	
 
            user = User.get_by_username(username)
 
            if user is None:
 
                raise JSONRPCError('unknown user %s' % username)
 

	
 
            success = UsersGroupModel().remove_user_from_group(users_group, user)
 
            msg = 'removed member %s from users group %s' % (username, group_name)
 
            msg = msg if success else "User wasn't in group"
 
            Session.commit()
 
            return dict(success=success, msg=msg)
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to remove user from group')
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def get_repo(self, apiuser, repoid):
 
        """"
 
        Get repository by name
 

	
 
        :param apiuser:
 
        :param repo_name:
 
        """
 

	
 
        repo = RepoModel().get_repo(repoid)
 
        if repo is None:
 
            raise JSONRPCError('unknown repository %s' % repo)
 

	
 
        members = []
 
        for user in repo.repo_to_perm:
 
            perm = user.permission.permission_name
 
            user = user.user
 
            members.append(
 
                dict(
 
                    type="user",
 
                    id=user.user_id,
 
                    username=user.username,
 
                    firstname=user.name,
 
                    lastname=user.lastname,
 
                    email=user.email,
 
                    active=user.active,
 
                    admin=user.admin,
 
                    ldap=user.ldap_dn,
 
                    permission=perm
 
                )
 
            )
 
        for users_group in repo.users_group_to_perm:
 
            perm = users_group.permission.permission_name
 
            users_group = users_group.users_group
 
            members.append(
 
                dict(
 
                    type="users_group",
 
                    id=users_group.users_group_id,
 
                    name=users_group.users_group_name,
 
                    active=users_group.users_group_active,
 
                    permission=perm
 
                )
 
            )
 

	
 
        return dict(
 
            id=repo.repo_id,
 
            repo_name=repo.repo_name,
 
            type=repo.repo_type,
 
            clone_uri=repo.clone_uri,
 
            private=repo.private,
 
            created_on=repo.created_on,
 
            description=repo.description,
 
            members=members
 
        )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def get_repos(self, apiuser):
 
        """"
 
        Get all repositories
 

	
 
        :param apiuser:
 
        """
 

	
 
        result = []
 
        for repository in Repository.getAll():
 
        for repo in Repository.getAll():
 
            result.append(
 
                dict(
 
                    id=repository.repo_id,
 
                    repo_name=repository.repo_name,
 
                    type=repository.repo_type,
 
                    description=repository.description
 
                    id=repo.repo_id,
 
                    repo_name=repo.repo_name,
 
                    type=repo.repo_type,
 
                    clone_uri=repo.clone_uri,
 
                    private=repo.private,
 
                    created_on=repo.created_on,
 
                    description=repo.description,
 
                )
 
            )
 
        return result
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def get_repo_nodes(self, apiuser, repo_name, revision, root_path,
 
                       ret_type='all'):
 
        """
 
        returns a list of nodes and it's children
 
        for a given path at given revision. It's possible to specify ret_type
 
        to show only files or dirs
 

	
 
        :param apiuser:
 
        :param repo_name: name of repository
 
        :param revision: revision for which listing should be done
 
        :param root_path: path from which start displaying
 
        :param ret_type: return type 'all|files|dirs' nodes
 
        """
 
        try:
 
            _d, _f = ScmModel().get_nodes(repo_name, revision, root_path,
 
                                          flat=False)
 
            _map = {
 
                'all': _d + _f,
 
                'files': _f,
 
                'dirs': _d,
 
            }
 
            return _map[ret_type]
 
        except KeyError:
 
            raise JSONRPCError('ret_type must be one of %s' % _map.keys())
 
        except Exception, e:
 
            raise JSONRPCError(e)
 

	
 
    @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
 
    def create_repo(self, apiuser, repo_name, owner_name, description='',
 
                    repo_type='hg', private=False, clone_uri=None):
 
        """
 
        Create repository, if clone_url is given it makes a remote clone
 

	
 
        :param apiuser:
 
        :param repo_name:
 
        :param owner_name:
 
        :param description:
 
        :param repo_type:
 
        :param private:
 
        :param clone_uri:
 
        """
 

	
 
        try:
 
            owner = User.get_by_username(owner_name)
 
            if owner is None:
 
                raise JSONRPCError('unknown user %s' % owner_name)
 

	
 
            if Repository.get_by_repo_name(repo_name):
 
                raise JSONRPCError("repo %s already exist" % repo_name)
 

	
 
            groups = repo_name.split(Repository.url_sep())
 
            real_name = groups[-1]
 
            # create structure of groups
 
            group = map_groups(repo_name)
 

	
 
            repo = RepoModel().create(
 
                dict(
 
                    repo_name=real_name,
 
                    repo_name_full=repo_name,
 
                    description=description,
 
                    private=private,
 
                    repo_type=repo_type,
 
                    repo_group=group.group_id if group else None,
 
                    clone_uri=clone_uri
 
                ),
 
                owner
 
            )
 
            Session.commit()
 

	
 
            return dict(
 
                id=repo.repo_id,
 
                msg="Created new repository %s" % repo.repo_name
 
            )
 

	
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to create repository %s' % repo_name)
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def delete_repo(self, apiuser, repo_name):
 
        """
 
        Deletes a given repository
 

	
 
        :param repo_name:
 
        """
 
        if not Repository.get_by_repo_name(repo_name):
 
            raise JSONRPCError("repo %s does not exist" % repo_name)
 
        try:
 
            RepoModel().delete(repo_name)
 
            Session.commit()
 
            return dict(
 
                msg='Deleted repository %s' % repo_name
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to delete repository %s' % repo_name)
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def grant_user_permission(self, apiuser, repo_name, username, perm):
 
        """
 
        Grant permission for user on given repository, or update existing one
 
        if found
 

	
 
        :param repo_name:
 
        :param username:
 
        :param perm:
 
        """
 

	
 
        try:
 
            repo = Repository.get_by_repo_name(repo_name)
 
            if repo is None:
 
                raise JSONRPCError('unknown repository %s' % repo)
 

	
 
            user = User.get_by_username(username)
 
            if user is None:
 
                raise JSONRPCError('unknown user %s' % username)
 

	
 
            RepoModel().grant_user_permission(repo=repo, user=user, perm=perm)
 

	
 
            Session.commit()
 
            return dict(
 
                msg='Granted perm: %s for user: %s in repo: %s' % (
 
                    perm, username, repo_name
 
                )
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError(
 
                'failed to edit permission %(repo)s for %(user)s' % dict(
 
                    user=username, repo=repo_name
 
                )
 
            )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def revoke_user_permission(self, apiuser, repo_name, username):
 
        """
 
        Revoke permission for user on given repository
 

	
 
        :param repo_name:
 
        :param username:
 
        """
 

	
 
        try:
 
            repo = Repository.get_by_repo_name(repo_name)
 
            if repo is None:
 
                raise JSONRPCError('unknown repository %s' % repo)
 

	
 
            user = User.get_by_username(username)
 
            if user is None:
 
                raise JSONRPCError('unknown user %s' % username)
 

	
 
            RepoModel().revoke_user_permission(repo=repo_name, user=username)
 

	
 
            Session.commit()
 
            return dict(
 
                msg='Revoked perm for user: %s in repo: %s' % (
 
                    username, repo_name
 
                )
 
            )
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError(
 
                'failed to edit permission %(repo)s for %(user)s' % dict(
 
                    user=username, repo=repo_name
 
                )
 
            )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def grant_users_group_permission(self, apiuser, repo_name, group_name, perm):
 
        """
 
        Grant permission for users group on given repository, or update
 
        existing one if found
 

	
 
        :param repo_name:
 
        :param group_name:
 
        :param perm:
 
        """
 

	
 
        try:
 
            repo = Repository.get_by_repo_name(repo_name)
 
            if repo is None:
 
                raise JSONRPCError('unknown repository %s' % repo)
 

	
 
            user_group = UsersGroup.get_by_group_name(group_name)
 
            if user_group is None:
 
                raise JSONRPCError('unknown users group %s' % user_group)
 

	
rhodecode/i18n/en/LC_MESSAGES/rhodecode.po
Show inline comments
 
# English translations for rhodecode.
 
# Copyright (C) 2010 ORGANIZATION
 
# This file is distributed under the same license as the rhodecode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: rhodecode 0.1\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-24 22:18+0200\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"PO-Revision-Date: 2011-02-25 19:13+0100\n"
 
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 
"Language-Team: en <LL@li.org>\n"
 
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
msgid "All Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:79
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
msgid "ignore white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#, python-format
 
msgid "%s line context"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:87
 
#, python-format
 
msgid "There are no files yet %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:247
 
#, python-format
 
msgid "Edited %s via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:252
 
msgid "No changes"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:263 rhodecode/controllers/files.py:316
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:268 rhodecode/controllers/files.py:322
 
msgid "Error occurred during commit"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:288
 
#, python-format
 
msgid "Added %s via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:302
 
msgid "No content"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:306
 
msgid "No filename"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:347
 
msgid "downloads disabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:358
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:360
 
msgid "Empty repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:362
 
msgid "Unknown archive type"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
@@ -436,483 +436,483 @@ msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "An error occurred during pull from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
msgid "An error occurred during this operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
msgid "Your account was updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#, python-format
 
msgid "created user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
msgid "User updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
msgid "successfully deleted user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
msgid "An error occurred during deletion of user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
msgid "You can't edit this user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#, python-format
 
msgid "created users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#, python-format
 
msgid "updated users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
msgid "successfully deleted users group"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
msgid "An error occurred during deletion of users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was to big and was cut off, use diff menu to display this diff"
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:414
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:418
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:462
 
#: rhodecode/lib/helpers.py:463
 
msgid "Changeset not found"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:485
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:491
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:511
 
msgid "and"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513 rhodecode/templates/changelog/changelog.html:40
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:536
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:539
 
#: rhodecode/lib/helpers.py:540
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:540 rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
msgid "[created] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:541
 
#: rhodecode/lib/helpers.py:542
 
msgid "[created] repository as fork"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:542 rhodecode/lib/helpers.py:546
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544
 
#: rhodecode/lib/helpers.py:545
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:548
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:549
 
msgid "[committed via RhodeCode] into"
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[pulled from remote] into"
 
msgid "[committed via RhodeCode] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled] from"
 
msgid "[pulled from remote] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:552
 
msgid "[started following] repository"
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:553
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:554
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:731
 
#: rhodecode/lib/helpers.py:732
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:735
 
#: rhodecode/lib/helpers.py:736
 
msgid "No Files"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, python-format
 
msgid "%s ago"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:357
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:360
 
msgid "just now"
 
msgstr ""
 

	
 
#: rhodecode/lib/celerylib/tasks.py:269
 
msgid "password reset link"
 
msgstr ""
 

	
 
#: rhodecode/model/comment.py:85
 
#, python-format
 
msgid "on line %s"
 
msgstr ""
 

	
 
#: rhodecode/model/comment.py:113
 
msgid "[Mention]"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:72
 
msgid "Invalid username"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:80
 
msgid "This username already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:85
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or"
 
" dashes and must begin with alphanumeric character"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:101
 
msgid "Invalid group name"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:111
 
msgid "This users group already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:117
 
msgid ""
 
"RepoGroup name may only contain  alphanumeric characters underscores, "
 
"periods or dashes and must begin with alphanumeric character"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:145
 
msgid "Cannot assign this group as parent"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:164
 
msgid "This group already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:176
 
msgid "Repository with this name already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:195 rhodecode/model/forms.py:204
 
#: rhodecode/model/forms.py:213
 
msgid "Invalid characters in password"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:226
 
msgid "Passwords do not match"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:232
 
msgid "invalid password"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:233
 
msgid "invalid user name"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:234
 
msgid "Your account is disabled"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:274
 
msgid "This username is not valid"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:287
 
msgid "This repository name is disallowed"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:310
 
#, python-format
 
msgid "This repository already exists in a group \"%s\""
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:317
 
#, python-format
 
msgid "There is a group with this name already \"%s\""
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:324
 
msgid "This repository already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:367
 
msgid "invalid clone url"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:384
 
msgid "Invalid clone url, provide a valid clone http\\s url"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:398
 
msgid "Fork have to be the same type as original"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:414
 
msgid "This username or users group name is not valid"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:480
 
msgid "This is not a valid path"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:494
 
msgid "This e-mail address is already taken"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:507
 
msgid "This e-mail address doesn't exist."
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:530
 
msgid ""
 
"The LDAP Login attribute of the CN must be specified - this is the name "
 
"of the attribute that is equivalent to 'username'"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:549
 
msgid "Please enter a login"
 
msgstr ""
 
@@ -2881,307 +2881,198 @@ msgstr ""
 
msgid "following user"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:105
 
msgid "user"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:138
 
msgid "You are not following any users or repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal_data.html:47
 
msgid "No entries yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/public_journal.html:17
 
msgid "Public Journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/search/search.html:7
 
#: rhodecode/templates/search/search.html:26
 
msgid "in repository: "
 
msgstr ""
 

	
 
#: rhodecode/templates/search/search.html:9
 
#: rhodecode/templates/search/search.html:28
 
msgid "in all repositories"
 
msgstr ""
 

	
 
#: rhodecode/templates/search/search.html:42
 
msgid "Search term"
 
msgstr ""
 

	
 
#: rhodecode/templates/search/search.html:54
 
msgid "Search in"
 
msgstr ""
 

	
 
#: rhodecode/templates/search/search.html:57
 
msgid "File contents"
 
msgstr ""
 

	
 
#: rhodecode/templates/search/search.html:59
 
msgid "File names"
 
msgstr ""
 

	
 
#: rhodecode/templates/search/search_content.html:21
 
#: rhodecode/templates/search/search_path.html:15
 
msgid "Permission denied"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog.html:5
 
#: rhodecode/templates/summary/summary.html:209
 
msgid "Shortlog"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog.html:14
 
msgid "shortlog"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:7
 
msgid "age"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:18
 
msgid "No commit message"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:62
 
msgid "Add or upload files directly via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:71
 
msgid "Push new repo"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:79
 
msgid "Existing repository?"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:12
 
msgid "summary"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:44
 
#: rhodecode/templates/summary/summary.html:47
 
msgid "ATOM"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:77
 
#, python-format
 
msgid "Non changable ID %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:82
 
msgid "public"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:90
 
msgid "remote clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:121
 
msgid "Clone url"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:124
 
msgid "Show by Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:125
 
msgid "Show by ID"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:133
 
msgid "Trending files"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:141
 
#: rhodecode/templates/summary/summary.html:157
 
#: rhodecode/templates/summary/summary.html:185
 
msgid "enable"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:149
 
msgid "Download"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:153
 
msgid "There are no downloads yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:155
 
msgid "Downloads are disabled for this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:164
 
msgid "Check this to download archive with subrepos"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:164
 
msgid "with subrepos"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:177
 
msgid "Commit activity by day / author"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:188
 
msgid "Stats gathered: "
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:211
 
msgid "Quick start"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:281
 
#, python-format
 
msgid "Download %s as %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:638
 
msgid "commits"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:639
 
msgid "files added"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:640
 
msgid "files changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:641
 
msgid "files removed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:644
 
msgid "commit"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:645
 
msgid "file added"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:646
 
msgid "file changed"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:647
 
msgid "file removed"
 
msgstr ""
 

	
 
#~ msgid "Changeset is to big and was cut off, see raw changeset instead"
 
#~ msgstr ""
 

	
 
#~ msgid "Diff is to big and was cut off, see raw diff instead"
 
#~ msgstr ""
 

	
 
#~ msgid "There are no files yet"
 
#~ msgstr ""
 

	
 
#~ msgid "Binary file"
 
#~ msgstr ""
 

	
 
#~ msgid "year"
 
#~ msgstr ""
 

	
 
#~ msgid "month"
 
#~ msgstr ""
 

	
 
#~ msgid "day"
 
#~ msgstr ""
 

	
 
#~ msgid "hour"
 
#~ msgstr ""
 

	
 
#~ msgid "minute"
 
#~ msgstr ""
 

	
 
#~ msgid "second"
 
#~ msgstr ""
 

	
 
#~ msgid "ago"
 
#~ msgstr ""
 

	
 
#~ msgid ""
 
#~ "Group name may only contain alphanumeric"
 
#~ " characters underscores, periods or dashes"
 
#~ " and must begin with alphanumeric "
 
#~ "character"
 
#~ msgstr ""
 

	
 
#~ msgid "This repository already exists in group \"%s\""
 
#~ msgstr ""
 

	
 
#~ msgid "[RhodeCode] New User registration"
 
#~ msgstr ""
 

	
 
#~ msgid ""
 
#~ "This user still owns %s repositories "
 
#~ "and cannot be removed. Switch owners "
 
#~ "or remove those repositories"
 
#~ msgstr ""
 

	
 
#~ msgid "ADD NEW REPOSITORY"
 
#~ msgstr ""
 

	
 
#~ msgid "Percentage of stats gathered"
 
#~ "Changeset was to big and was cut"
 
#~ " off, use diff menu to display "
 
#~ "this diff"
 
#~ msgstr ""
 

	
 
#~ msgid "Number of repositories"
 
#~ msgstr ""
 

	
 
#~ msgid "Confirm to delete this group"
 
#~ msgstr ""
 

	
 
#~ msgid "My repositories"
 
#~ msgstr ""
 

	
 
#~ msgid "Confirm to delete this user"
 
#~ msgstr ""
 

	
 
#~ msgid "Login"
 
#~ msgstr ""
 

	
 
#~ msgid "links"
 
#~ msgstr ""
 

	
 
#~ msgid "changeset"
 
#~ msgstr ""
 

	
 
#~ msgid "showing "
 
#~ msgstr ""
 

	
 
#~ msgid "out of"
 
#~ msgstr ""
 

	
 
#~ msgid "%s files affected with %s additions and %s deletions."
 
#~ msgstr ""
 

	
 
#~ msgid "No changes in this file"
 
#~ msgstr ""
 

	
 
#~ msgid "Diff is to big to display"
 
#~ msgstr ""
 

	
 
#~ msgid "File annotate"
 
#~ msgstr ""
 

	
 
#~ msgid "annotate"
 
#~ msgstr ""
 

	
 
#~ msgid "Following"
 
#~ msgstr ""
 

	
 
#~ msgid "by"
 
#~ msgstr ""
 

	
 
#~ msgid "Trending source files"
 
#~ msgstr ""
 

	
 
#~ msgid "Feeds"
 
#~ msgstr ""
 

	
 
#~ msgid "Loaded in"
 
#~ msgstr ""
 

	
rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po
Show inline comments
 
# French translations for RhodeCode.
 
# Copyright (C) 2011 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.1.5\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-24 22:18+0200\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"PO-Revision-Date: 2012-05-20 11:36+0100\n"
 
"Last-Translator: Vincent Duvert <vincent@duvert.net>\n"
 
"Language-Team: fr <LL@li.org>\n"
 
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
msgid "All Branches"
 
msgstr "Toutes les branches"
 

	
 
#: rhodecode/controllers/changeset.py:79
 
msgid "show white space"
 
msgstr "afficher les espaces et tabulations"
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
msgid "ignore white space"
 
msgstr "ignorer les espaces et tabulations"
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#, python-format
 
msgid "%s line context"
 
msgstr "afficher %s lignes de contexte"
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr "fichier binaire"
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr "Accueil"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 
"Le serveur n’a pas pu interpréter la requête à cause d’une erreur de "
 
"syntaxe"
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr "Accès interdit à cet ressource"
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "Vous n’avez pas la permission de voir cette page"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr "Ressource introuvable"
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 
"La requête n’a pu être traitée en raison d’une erreur survenue sur le "
 
"serveur."
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr "Changements sur le dépôt %s"
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr "Flux %s de %s"
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr "ajouter un nouveau"
 

	
 
#: rhodecode/controllers/files.py:87
 
#, python-format
 
msgid "There are no files yet %s"
 
msgstr "Il n’y a pas encore de fichiers %s"
 

	
 
#: rhodecode/controllers/files.py:247
 
#, python-format
 
msgid "Edited %s via RhodeCode"
 
msgstr "%s édité via RhodeCode"
 

	
 
#: rhodecode/controllers/files.py:252
 
msgid "No changes"
 
msgstr "Aucun changement"
 

	
 
#: rhodecode/controllers/files.py:263 rhodecode/controllers/files.py:316
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr "Commit réalisé avec succès sur %s"
 

	
 
#: rhodecode/controllers/files.py:268 rhodecode/controllers/files.py:322
 
msgid "Error occurred during commit"
 
msgstr "Une erreur est survenue durant le commit"
 

	
 
#: rhodecode/controllers/files.py:288
 
#, python-format
 
msgid "Added %s via RhodeCode"
 
msgstr "%s ajouté par RhodeCode"
 

	
 
#: rhodecode/controllers/files.py:302
 
msgid "No content"
 
msgstr "Aucun contenu"
 

	
 
#: rhodecode/controllers/files.py:306
 
msgid "No filename"
 
msgstr "Aucun nom de fichier"
 

	
 
#: rhodecode/controllers/files.py:347
 
msgid "downloads disabled"
 
msgstr "Les téléchargements sont désactivés"
 

	
 
#: rhodecode/controllers/files.py:358
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr "Révision %s inconnue."
 

	
 
#: rhodecode/controllers/files.py:360
 
msgid "Empty repository"
 
msgstr "Dépôt vide."
 

	
 
#: rhodecode/controllers/files.py:362
 
msgid "Unknown archive type"
 
msgstr "Type d’archive inconnu"
 

	
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr "Changesets"
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr "Branches"
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr "Tags"
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"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."
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system 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."
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "dépôt %s forké en tant que %s"
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr "Une erreur est survenue durant le fork du dépôt %s."
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr "%s — Flux %s du journal public"
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr "Journal public"
 

	
 
#: rhodecode/controllers/login.py:116
 
@@ -463,487 +463,486 @@ msgstr "Une erreur est survenue durant l
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
msgstr "[Aucun dépôt]"
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr "Le dépôt %s a été marké comme fork de %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
msgid "An error occurred during this operation"
 
msgstr "Une erreur est survenue durant cette opération."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "Le groupe de dépôts %s a été créé."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr "Une erreur est survenue durant la création du groupe de dépôts %s."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "Le groupe de dépôts %s a été mis à jour."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr "Une erreur est survenue durant la mise à jour du groupe de dépôts %s."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr "Ce groupe contient %s dépôts et ne peut être supprimé."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr "Le groupe de dépôts %s a été supprimé."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr "Impossible de supprimer ce groupe : Il contient des sous-groupes."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr "Une erreur est survenue durant la suppression du groupe de dépôts %s."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr ""
 
"Une erreur est survenue durant la suppression de l’utilisateur du groupe "
 
"de dépôts."
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 
"Une erreur est survenue durant la suppression du groupe d’utilisateurs du"
 
" groupe de dépôts."
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr "Après re-scan : %s ajouté(s), %s enlevé(s)"
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr "La tâche de réindexation Whoosh a été planifiée."
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr "Réglages mis à jour"
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr "Une erreur est survenue durant la mise à jour des options."
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr "Réglages de Mercurial mis à jour"
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr "Le nouveau hook a été ajouté."
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr "Hooks mis à jour"
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr "Une erreur est survenue durant la création du hook."
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr "La tâche d’e-mail a été créée."
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 
"Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon"
 
" fonctionnement de l’application."
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
msgid "Your account was updated successfully"
 
msgstr "Votre compte a été mis à jour avec succès"
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr "Une erreur est survenue durant la mise à jour de l’utilisateur %s."
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#, python-format
 
msgid "created user %s"
 
msgstr "utilisateur %s créé"
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr "Une erreur est survenue durant la création de l’utilisateur %s."
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
msgid "User updated successfully"
 
msgstr "L’utilisateur a été mis à jour avec succès."
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
msgid "successfully deleted user"
 
msgstr "L’utilisateur a été supprimé avec succès."
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
msgid "An error occurred during deletion of user"
 
msgstr "Une erreur est survenue durant la suppression de l’utilisateur."
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
msgid "You can't edit this user"
 
msgstr "Vous ne pouvez pas éditer cet utilisateur"
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
msgid "Granted 'repository create' permission to user"
 
msgstr "La permission de création de dépôts a été accordée à l’utilisateur."
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
msgid "Revoked 'repository create' permission to user"
 
msgstr "La permission de création de dépôts a été révoquée à l’utilisateur."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#, python-format
 
msgid "created users group %s"
 
msgstr "Le groupe d’utilisateurs %s a été créé."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr "Une erreur est survenue durant la création du groupe d’utilisateurs %s."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#, python-format
 
msgid "updated users group %s"
 
msgstr "Le groupe d’utilisateurs %s a été mis à jour."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr "Une erreur est survenue durant la mise à jour du groupe d’utilisateurs %s."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
msgid "successfully deleted users group"
 
msgstr "Le groupe d’utilisateurs a été supprimé avec succès."
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
msgid "An error occurred during deletion of users group"
 
msgstr "Une erreur est survenue lors de la suppression du groupe d’utilisateurs."
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr "Vous devez être un utilisateur enregistré pour effectuer cette action."
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr "Vous devez être connecté pour visualiser cette page."
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was to big and was cut off, use diff menu to display this diff"
 
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."
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr "Aucun changement détecté."
 

	
 
#: rhodecode/lib/helpers.py:414
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr "Vrai"
 

	
 
#: rhodecode/lib/helpers.py:418
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr "Faux"
 

	
 
#: rhodecode/lib/helpers.py:462
 
#: rhodecode/lib/helpers.py:463
 
#, fuzzy
 
#| msgid "No changesets yet"
 
msgid "Changeset not found"
 
msgstr "Dépôt vide"
 

	
 
#: rhodecode/lib/helpers.py:485
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr "Afficher les changements combinés %s->%s"
 

	
 
#: rhodecode/lib/helpers.py:491
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr "vue de comparaison"
 

	
 
#: rhodecode/lib/helpers.py:511
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr "et"
 

	
 
#: rhodecode/lib/helpers.py:512
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr "%s de plus"
 

	
 
#: rhodecode/lib/helpers.py:513 rhodecode/templates/changelog/changelog.html:40
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr "révisions"
 

	
 
#: rhodecode/lib/helpers.py:536
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr "Nom du fork"
 

	
 
#: rhodecode/lib/helpers.py:539
 
#: rhodecode/lib/helpers.py:540
 
msgid "[deleted] repository"
 
msgstr "[a supprimé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:540 rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
msgid "[created] repository"
 
msgstr "[a créé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:541
 
#: rhodecode/lib/helpers.py:542
 
msgid "[created] repository as fork"
 
msgstr "[a créé] le dépôt en tant que fork"
 

	
 
#: rhodecode/lib/helpers.py:542 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
msgid "[forked] repository"
 
msgstr "[a forké] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
msgid "[updated] repository"
 
msgstr "[a mis à jour] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:544
 
#: rhodecode/lib/helpers.py:545
 
msgid "[delete] repository"
 
msgstr "[a supprimé] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:548
 
#: rhodecode/lib/helpers.py:549
 
msgid "[pushed] into"
 
msgstr "[a pushé] dans"
 

	
 
#: rhodecode/lib/helpers.py:549
 
#: rhodecode/lib/helpers.py:550
 
msgid "[committed via RhodeCode] into"
 
msgstr "[a commité via RhodeCode] dans"
 

	
 
#: rhodecode/lib/helpers.py:550
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled from remote] into"
 
msgstr "[a pullé depuis un site distant] dans"
 

	
 
#: rhodecode/lib/helpers.py:551
 
#: rhodecode/lib/helpers.py:552
 
msgid "[pulled] from"
 
msgstr "[a pullé] depuis"
 

	
 
#: rhodecode/lib/helpers.py:552
 
#: rhodecode/lib/helpers.py:553
 
msgid "[started following] repository"
 
msgstr "[suit maintenant] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:553
 
#: rhodecode/lib/helpers.py:554
 
msgid "[stopped following] repository"
 
msgstr "[ne suit plus] le dépôt"
 

	
 
#: rhodecode/lib/helpers.py:731
 
#: rhodecode/lib/helpers.py:732
 
#, python-format
 
msgid " and %s more"
 
msgstr "et %s de plus"
 

	
 
#: rhodecode/lib/helpers.py:735
 
#: rhodecode/lib/helpers.py:736
 
msgid "No Files"
 
msgstr "Aucun fichier"
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "%d an"
 
msgstr[1] "%d ans"
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "%d mois"
 
msgstr[1] "%d mois"
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "%d jour"
 
msgstr[1] "%d jours"
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "%d heure"
 
msgstr[1] "%d heures"
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "%d minute"
 
msgstr[1] "%d minutes"
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "%d seconde"
 
msgstr[1] "%d secondes"
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, python-format
 
msgid "%s ago"
 
msgstr "Il y a %s"
 

	
 
#: rhodecode/lib/utils2.py:357
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr "Il y a %s et %s"
 

	
 
#: rhodecode/lib/utils2.py:360
 
msgid "just now"
 
msgstr "à l’instant"
 

	
 
#: rhodecode/lib/celerylib/tasks.py:269
 
msgid "password reset link"
 
msgstr "Réinitialisation du mot de passe"
 

	
 
#: rhodecode/model/comment.py:85
 
#, python-format
 
msgid "on line %s"
 
msgstr "à la ligne %s"
 

	
 
#: rhodecode/model/comment.py:113
 
msgid "[Mention]"
 
msgstr "[Mention]"
 

	
 
#: rhodecode/model/forms.py:72
 
msgid "Invalid username"
 
msgstr "Nom d’utilisateur invalide"
 

	
 
#: rhodecode/model/forms.py:80
 
msgid "This username already exists"
 
msgstr "Ce nom d’utilisateur existe déjà"
 

	
 
#: rhodecode/model/forms.py:85
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or"
 
" dashes and must begin with alphanumeric character"
 
msgstr ""
 
"Le nom d’utilisateur peut contenir uniquement des caractères alpha-"
 
"numériques ainsi que les caractères suivants : « _ . - ». Il doit "
 
"commencer par un caractère alpha-numérique."
 

	
 
#: rhodecode/model/forms.py:101
 
msgid "Invalid group name"
 
msgstr "Nom de groupe invalide"
 

	
 
#: rhodecode/model/forms.py:111
 
msgid "This users group already exists"
 
msgstr "Ce groupe d’utilisateurs existe déjà."
 

	
 
#: rhodecode/model/forms.py:117
 
msgid ""
 
"RepoGroup name may only contain  alphanumeric characters underscores, "
 
"periods or dashes and must begin with alphanumeric character"
 
msgstr ""
 
"Le nom de groupe de dépôts peut contenir uniquement des caractères alpha-"
 
"numériques ainsi que les caractères suivants : « _ . - ». Il doit "
 
"commencer par un caractère alpha-numérique."
 

	
 
#: rhodecode/model/forms.py:145
 
msgid "Cannot assign this group as parent"
 
msgstr "Impossible d’assigner ce groupe en tant que parent."
 

	
 
#: rhodecode/model/forms.py:164
 
msgid "This group already exists"
 
msgstr "Ce groupe existe déjà."
 

	
 
#: rhodecode/model/forms.py:176
 
msgid "Repository with this name already exists"
 
msgstr "Un dépôt portant ce nom existe déjà."
 

	
 
#: rhodecode/model/forms.py:195 rhodecode/model/forms.py:204
 
#: rhodecode/model/forms.py:213
 
msgid "Invalid characters in password"
 
msgstr "Caractères incorrects dans le mot de passe"
 

	
 
#: rhodecode/model/forms.py:226
 
msgid "Passwords do not match"
 
msgstr "Les mots de passe ne correspondent pas."
 

	
 
#: rhodecode/model/forms.py:232
 
msgid "invalid password"
 
msgstr "mot de passe invalide"
 

	
 
#: rhodecode/model/forms.py:233
 
msgid "invalid user name"
 
msgstr "nom d’utilisateur invalide"
 

	
 
#: rhodecode/model/forms.py:234
 
msgid "Your account is disabled"
 
msgstr "Votre compte est désactivé"
 

	
 
#: rhodecode/model/forms.py:274
 
msgid "This username is not valid"
 
msgstr "Ce nom d’utilisateur n’est plus valide"
 

	
 
#: rhodecode/model/forms.py:287
 
msgid "This repository name is disallowed"
 
msgstr "Ce nom de dépôt est interdit"
 

	
 
#: rhodecode/model/forms.py:310
 
#, python-format
 
msgid "This repository already exists in a group \"%s\""
 
msgstr "Ce dépôt existe déjà dans le groupe « %s »."
 

	
 
#: rhodecode/model/forms.py:317
 
#, python-format
 
msgid "There is a group with this name already \"%s\""
 
msgstr "Un groupe portant le nom « %s » existe déjà."
 

	
 
#: rhodecode/model/forms.py:324
 
msgid "This repository already exists"
 
msgstr "Ce dépôt existe déjà"
 

	
 
#: rhodecode/model/forms.py:367
 
msgid "invalid clone url"
 
msgstr "URL de clonage invalide."
 

	
 
#: rhodecode/model/forms.py:384
 
msgid "Invalid clone url, provide a valid clone http\\s url"
 
msgstr ""
 
"URL à cloner invalide. Veuillez fournir une URL valide commençant par "
 
"http(s)."
 

	
 
#: rhodecode/model/forms.py:398
 
msgid "Fork have to be the same type as original"
 
msgstr "Le fork doit être du même type que l’original"
 

	
 
#: rhodecode/model/forms.py:414
 
msgid "This username or users group name is not valid"
 
msgstr "Ce nom d’utilisateur ou de groupe n’est pas valide."
 

	
 
#: rhodecode/model/forms.py:480
 
msgid "This is not a valid path"
 
msgstr "Ceci n’est pas un chemin valide"
 

	
 
#: rhodecode/model/forms.py:494
 
msgid "This e-mail address is already taken"
 
msgstr "Cette adresse e-mail est déjà enregistrée"
 

	
 
#: rhodecode/model/forms.py:507
 
msgid "This e-mail address doesn't exist."
 
msgstr "Cette adresse e-mail n’existe pas"
 

	
 
#: rhodecode/model/forms.py:530
rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.po
Show inline comments
 
# Portuguese (Brazil) translations for RhodeCode.
 
# Copyright (C) 2011-2012 Augusto Herrmann
 
# This file is distributed under the same license as the RhodeCode project.
 
# Augusto Herrmann <augusto.herrmann@gmail.com>, 2012.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.2.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-24 09:24-0300\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"PO-Revision-Date: 2012-05-22 16:47-0300\n"
 
"Last-Translator: Augusto Herrmann <augusto.herrmann@gmail.com>\n"
 
"Language-Team: pt_BR <LL@li.org>\n"
 
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
msgid "All Branches"
 
msgstr "Todos os Ramos"
 

	
 
#: rhodecode/controllers/changeset.py:79
 
msgid "show white space"
 
msgstr "mostrar espaços em branco"
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
msgid "ignore white space"
 
msgstr "ignorar espaços em branco"
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#, python-format
 
msgid "%s line context"
 
msgstr "contexto de %s linhas"
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr "arquivo binário"
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr "Página inicial"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 
"A requisição não pôde ser compreendida pelo servidor devido à sintaxe mal"
 
" formada"
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr "Acesso não autorizado ao recurso"
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "Você não tem permissão para ver esta página"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr "O recurso não pôde ser encontrado"
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 
"O servidor encontrou uma condição inesperada que o impediu de satisfazer "
 
"a requisição"
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr "Alterações no repositório %s"
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr "%s - feed %s"
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr "adicionar novo"
 

	
 
#: rhodecode/controllers/files.py:87
 
#, python-format
 
msgid "There are no files yet %s"
 
msgstr "Ainda não há arquivos %s"
 

	
 
#: rhodecode/controllers/files.py:247
 
#, python-format
 
msgid "Edited %s via RhodeCode"
 
msgstr "Editado %s via RhodeCode"
 

	
 
#: rhodecode/controllers/files.py:252
 
msgid "No changes"
 
msgstr "Sem alterações"
 

	
 
#: rhodecode/controllers/files.py:263 rhodecode/controllers/files.py:316
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr "Commit realizado com sucesso para %s"
 

	
 
#: rhodecode/controllers/files.py:268 rhodecode/controllers/files.py:322
 
msgid "Error occurred during commit"
 
msgstr "Ocorreu um erro ao realizar commit"
 

	
 
#: rhodecode/controllers/files.py:288
 
#, python-format
 
msgid "Added %s via RhodeCode"
 
msgstr "Adicionado %s via RhodeCode"
 

	
 
#: rhodecode/controllers/files.py:302
 
msgid "No content"
 
msgstr "Nenhum conteúdo"
 

	
 
#: rhodecode/controllers/files.py:306
 
msgid "No filename"
 
msgstr "Nenhum nomes de arquivo"
 

	
 
#: rhodecode/controllers/files.py:347
 
msgid "downloads disabled"
 
msgstr "downloads desabilitados"
 

	
 
#: rhodecode/controllers/files.py:358
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr "Revisão desconhecida %s"
 

	
 
#: rhodecode/controllers/files.py:360
 
msgid "Empty repository"
 
msgstr "Repositório vazio"
 

	
 
#: rhodecode/controllers/files.py:362
 
msgid "Unknown archive type"
 
msgstr "Arquivo de tipo desconhecido"
 

	
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr "Conjuntos de mudanças"
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr "Ramos"
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr "Etiquetas"
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"repositório %s não está mapeado ao bd. Talvez ele tenha sido criado ou "
 
"renomeado a partir do sistema de arquivos. Por favor execute a aplicação "
 
"outra vez para varrer novamente por repositórios"
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 
"repositório %s não está mapeado ao bd. Talvez ele tenha sido criado ou "
 
"renomeado a partir do sistema de arquivos. Por favor execute a aplicação "
 
"outra vez para varrer novamente por repositórios"
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "bifurcado repositório %s como %s"
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr "Ocorreu um erro ao bifurcar o repositório %s"
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr "diário público de %s - feed %s"
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr "Diário público"
 

	
 
#: rhodecode/controllers/login.py:116
 
@@ -451,485 +451,485 @@ msgid "Pulled from remote location"
 
msgstr "Realizado pull de localização remota"
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "An error occurred during pull from remote location"
 
msgstr "Ocorreu um erro ao realizar pull de localização remota"
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
msgstr "Nada"
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr "Marcado repositório %s como bifurcação de %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
msgid "An error occurred during this operation"
 
msgstr "Ocorreu um erro durante essa operação"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "criado grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr "ccorreu um erro ao criar grupo de repositório %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "atualizado grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr "ocorreu um erro ao atualizar grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr "Esse grupo contém %s repositórios e não pode ser excluído"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr "removido grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr "Nao é possível excluir este grupo pois ele ainda contém subgrupos"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr "ccorreu um erro ao excluir grupo de repositórios %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr "Ocorreu um erro ao excluir o usuário de grupo"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr "Ocorreu um erro ao excluir o grupo do grupo de usuários"
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr "Repositórios varridos com sucesso adicionados: %s, removidos: %s"
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr "Tarefa de reindexação do whoosh agendada"
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr "Configurações da aplicação atualizadas"
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr "ocorreu um erro ao atualizar as configurações da aplicação"
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr "Atualizadas as configurações do mercurial"
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr "Adicionado novo gancho"
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr "Atualizados os ganchos"
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr "ocorreu um erro ao criar gancho"
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr "Tarefa de e-mail criada"
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr "Você não pode editar esse usuário pois ele é crucial para toda a aplicação"
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
msgid "Your account was updated successfully"
 
msgstr "Sua conta foi atualizada com sucesso"
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr "ocorreu um erro ao atualizar o usuário %s"
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#, python-format
 
msgid "created user %s"
 
msgstr "usuário %s criado"
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr "ocorreu um erro ao criar o usuário %s"
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
msgid "User updated successfully"
 
msgstr "Usuário atualizado com sucesso"
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
msgid "successfully deleted user"
 
msgstr "usuário excluído com sucesso"
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
msgid "An error occurred during deletion of user"
 
msgstr "Ocorreu um erro ao excluir o usuário"
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
msgid "You can't edit this user"
 
msgstr "Você não pode editar esse usuário"
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
msgid "Granted 'repository create' permission to user"
 
msgstr "Concedida permissão de 'criar repositório' ao usuário"
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
msgid "Revoked 'repository create' permission to user"
 
msgstr "Revogada permissão de 'criar repositório' ao usuário"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#, python-format
 
msgid "created users group %s"
 
msgstr "criado grupo de usuários %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr "ocorreu um erro ao criar o grupo de usuários %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#, python-format
 
msgid "updated users group %s"
 
msgstr "grupo de usuários %s atualizado"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr "ocorreu um erro ao atualizar o grupo de usuários %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
msgid "successfully deleted users group"
 
msgstr "grupo de usuários excluído com sucesso"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
msgid "An error occurred during deletion of users group"
 
msgstr "Ocorreu um erro ao excluir o grupo de usuários"
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr "Você precisa ser um usuário registrado para realizar essa ação"
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr "Você precisa estar logado para ver essa página"
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was to big and was cut off, use diff menu to display this diff"
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 
"Conjunto de mudanças é grande demais e foi cortado, use o menu de "
 
"diferenças para ver as diferenças"
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr "Nenhuma alteração detectada"
 

	
 
#: rhodecode/lib/helpers.py:414
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr "Verdadeiro"
 

	
 
#: rhodecode/lib/helpers.py:418
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr "Falso"
 

	
 
#: rhodecode/lib/helpers.py:462
 
#: rhodecode/lib/helpers.py:463
 
msgid "Changeset not found"
 
msgstr "Conjunto de alterações não encontrado"
 

	
 
#: rhodecode/lib/helpers.py:485
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr "Ver todos os conjuntos de mudanças combinados %s->%s"
 

	
 
#: rhodecode/lib/helpers.py:491
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr "comparar exibir"
 

	
 
#: rhodecode/lib/helpers.py:511
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr "e"
 

	
 
#: rhodecode/lib/helpers.py:512
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr "%s mais"
 

	
 
#: rhodecode/lib/helpers.py:513 rhodecode/templates/changelog/changelog.html:40
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr "revisões"
 

	
 
#: rhodecode/lib/helpers.py:536
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr "nome da bifurcação"
 

	
 
#: rhodecode/lib/helpers.py:539
 
#: rhodecode/lib/helpers.py:540
 
msgid "[deleted] repository"
 
msgstr "repositório [excluído]"
 

	
 
#: rhodecode/lib/helpers.py:540 rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
msgid "[created] repository"
 
msgstr "repositório [criado]"
 

	
 
#: rhodecode/lib/helpers.py:541
 
#: rhodecode/lib/helpers.py:542
 
msgid "[created] repository as fork"
 
msgstr "repositório [criado] como uma bifurcação"
 

	
 
#: rhodecode/lib/helpers.py:542 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
msgid "[forked] repository"
 
msgstr "repositório [bifurcado]"
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
msgid "[updated] repository"
 
msgstr "repositório [atualizado]"
 

	
 
#: rhodecode/lib/helpers.py:544
 
#: rhodecode/lib/helpers.py:545
 
msgid "[delete] repository"
 
msgstr "[excluir] repositório"
 

	
 
#: rhodecode/lib/helpers.py:548
 
#: rhodecode/lib/helpers.py:549
 
msgid "[pushed] into"
 
msgstr "[realizado push] para"
 

	
 
#: rhodecode/lib/helpers.py:549
 
#: rhodecode/lib/helpers.py:550
 
msgid "[committed via RhodeCode] into"
 
msgstr "[realizado commit via RhodeCode] para"
 

	
 
#: rhodecode/lib/helpers.py:550
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled from remote] into"
 
msgstr "[realizado pull remoto] para"
 

	
 
#: rhodecode/lib/helpers.py:551
 
#: rhodecode/lib/helpers.py:552
 
msgid "[pulled] from"
 
msgstr "[realizado pull] a partir de"
 

	
 
#: rhodecode/lib/helpers.py:552
 
#: rhodecode/lib/helpers.py:553
 
msgid "[started following] repository"
 
msgstr "[passou a seguir] o repositório"
 

	
 
#: rhodecode/lib/helpers.py:553
 
#: rhodecode/lib/helpers.py:554
 
msgid "[stopped following] repository"
 
msgstr "[parou de seguir] o repositório"
 

	
 
#: rhodecode/lib/helpers.py:731
 
#: rhodecode/lib/helpers.py:732
 
#, python-format
 
msgid " and %s more"
 
msgstr " e mais %s"
 

	
 
#: rhodecode/lib/helpers.py:735
 
#: rhodecode/lib/helpers.py:736
 
msgid "No Files"
 
msgstr "Nenhum Arquivo"
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "%d ano"
 
msgstr[1] "%d anos"
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "%d mês"
 
msgstr[1] "%d meses"
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "%d dia"
 
msgstr[1] "%d dias"
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "%d hora"
 
msgstr[1] "%d horas"
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "%d minuto"
 
msgstr[1] "%d minutos"
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "%d segundo"
 
msgstr[1] "%d segundos"
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, python-format
 
msgid "%s ago"
 
msgstr "%s atrás"
 

	
 
#: rhodecode/lib/utils2.py:357
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr "%s e %s atrás"
 

	
 
#: rhodecode/lib/utils2.py:360
 
msgid "just now"
 
msgstr "agora há pouco"
 

	
 
#: rhodecode/lib/celerylib/tasks.py:269
 
msgid "password reset link"
 
msgstr "link de reinicialização de senha"
 

	
 
#: rhodecode/model/comment.py:85
 
#, python-format
 
msgid "on line %s"
 
msgstr "na linha %s"
 

	
 
#: rhodecode/model/comment.py:113
 
msgid "[Mention]"
 
msgstr "[Menção]"
 

	
 
#: rhodecode/model/forms.py:72
 
msgid "Invalid username"
 
msgstr "Nome de usuário inválido"
 

	
 
#: rhodecode/model/forms.py:80
 
msgid "This username already exists"
 
msgstr "Esse nome de usuário já existe"
 

	
 
#: rhodecode/model/forms.py:85
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or"
 
" dashes and must begin with alphanumeric character"
 
msgstr ""
 
"Nome de usuário pode conter somente caracteres alfanuméricos, sublinha, "
 
"pontos e hífens e deve iniciar com caractere alfanumérico"
 

	
 
#: rhodecode/model/forms.py:101
 
msgid "Invalid group name"
 
msgstr "Nome de grupo inválido"
 

	
 
#: rhodecode/model/forms.py:111
 
msgid "This users group already exists"
 
msgstr "Esse grupo de usuários já existe"
 

	
 
#: rhodecode/model/forms.py:117
 
msgid ""
 
"RepoGroup name may only contain  alphanumeric characters underscores, "
 
"periods or dashes and must begin with alphanumeric character"
 
msgstr ""
 
"Nome de grupo de repositório pode conter somente caracteres "
 
"alfanuméricos, sublinha, pontos e hífens e deve iniciar com caractere "
 
"alfanumérico"
 

	
 
#: rhodecode/model/forms.py:145
 
msgid "Cannot assign this group as parent"
 
msgstr "Não é possível associar esse grupo como progenitor"
 

	
 
#: rhodecode/model/forms.py:164
 
msgid "This group already exists"
 
msgstr "Esse grupo já existe"
 

	
 
#: rhodecode/model/forms.py:176
 
msgid "Repository with this name already exists"
 
msgstr "Já existe um repositório com esse nome"
 

	
 
#: rhodecode/model/forms.py:195 rhodecode/model/forms.py:204
 
#: rhodecode/model/forms.py:213
 
msgid "Invalid characters in password"
 
msgstr "Caracteres inválidos na senha"
 

	
 
#: rhodecode/model/forms.py:226
 
msgid "Passwords do not match"
 
msgstr "Senhas não conferem"
 

	
 
#: rhodecode/model/forms.py:232
 
msgid "invalid password"
 
msgstr "senha inválida"
 

	
 
#: rhodecode/model/forms.py:233
 
msgid "invalid user name"
 
msgstr "nome de usuário inválido"
 

	
 
#: rhodecode/model/forms.py:234
 
msgid "Your account is disabled"
 
msgstr "Sua conta está desabilitada"
 

	
 
#: rhodecode/model/forms.py:274
 
msgid "This username is not valid"
 
msgstr "Esse nome de usuário não é válido"
 

	
 
#: rhodecode/model/forms.py:287
 
msgid "This repository name is disallowed"
 
msgstr "Esse nome de repositório não é permitido"
 

	
 
#: rhodecode/model/forms.py:310
 
#, python-format
 
msgid "This repository already exists in a group \"%s\""
 
msgstr "Esse repositório já existe em um grupo \"%s\""
 

	
 
#: rhodecode/model/forms.py:317
 
#, python-format
 
msgid "There is a group with this name already \"%s\""
 
msgstr "Já existe um grupo com esse nome \"%s\""
 

	
 
#: rhodecode/model/forms.py:324
 
msgid "This repository already exists"
 
msgstr "Esse repositório já existe"
 

	
 
#: rhodecode/model/forms.py:367
 
msgid "invalid clone url"
 
msgstr "URL de clonagem inválida"
 

	
 
#: rhodecode/model/forms.py:384
 
msgid "Invalid clone url, provide a valid clone http\\s url"
 
msgstr "URL de clonagem inválida, forneça uma URL válida de clonagem http\\s"
 

	
 
#: rhodecode/model/forms.py:398
 
msgid "Fork have to be the same type as original"
 
msgstr "Bifurcação precisa ser do mesmo tipo que o original"
 

	
 
#: rhodecode/model/forms.py:414
 
msgid "This username or users group name is not valid"
 
msgstr "Esse nome de usuário ou nome de grupo de usuários não é válido"
 

	
 
#: rhodecode/model/forms.py:480
 
msgid "This is not a valid path"
 
msgstr "Esse não é um caminho válido"
 

	
 
#: rhodecode/model/forms.py:494
 
msgid "This e-mail address is already taken"
 
msgstr "Esse endereço de e-mail já está tomado"
 

	
 
#: rhodecode/model/forms.py:507
 
msgid "This e-mail address doesn't exist."
 
msgstr "Esse endereço de e-mail não existe."
 

	
 
#: rhodecode/model/forms.py:530
 
msgid ""
 
"The LDAP Login attribute of the CN must be specified - this is the name "
 
"of the attribute that is equivalent to 'username'"
rhodecode/i18n/rhodecode.pot
Show inline comments
 
# Translations template for RhodeCode.
 
# Copyright (C) 2012 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
 
#
 
#, fuzzy
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.4.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-24 22:18+0200\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 
"Language-Team: LANGUAGE <LL@li.org>\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
msgid "All Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:79
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
msgid "ignore white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#, python-format
 
msgid "%s line context"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:320 rhodecode/controllers/changeset.py:335
 
#: rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:87
 
#, python-format
 
msgid "There are no files yet %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:247
 
#, python-format
 
msgid "Edited %s via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:252
 
msgid "No changes"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:263 rhodecode/controllers/files.py:316
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:268 rhodecode/controllers/files.py:322
 
msgid "Error occurred during commit"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:288
 
#, python-format
 
msgid "Added %s via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:302
 
msgid "No content"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:306
 
msgid "No filename"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:347
 
msgid "downloads disabled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:358
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:360
 
msgid "Empty repository"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:362
 
msgid "Unknown archive type"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from the "
 
"filesystem please run the application again in order to rescan repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from the "
 
"file system please run the application again in order to rescan repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307 rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr ""
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid "Your password reset was successful, new password has been sent to your email"
 
msgstr ""
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr ""
 
@@ -423,483 +423,483 @@ msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "An error occurred during pull from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
msgid "An error occurred during this operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
msgid "Your account was updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#, python-format
 
msgid "created user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
msgid "User updated successfully"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
msgid "successfully deleted user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
msgid "An error occurred during deletion of user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
msgid "You can't edit this user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#, python-format
 
msgid "created users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#, python-format
 
msgid "updated users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
msgid "successfully deleted users group"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
msgid "An error occurred during deletion of users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was to big and was cut off, use diff menu to display this diff"
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:88
 
msgid "No changes detected"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:414
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:418
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:462
 
#: rhodecode/lib/helpers.py:463
 
msgid "Changeset not found"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:485
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:491
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:511
 
msgid "and"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513 rhodecode/templates/changelog/changelog.html:40
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:536
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:539
 
#: rhodecode/lib/helpers.py:540
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:540 rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
msgid "[created] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:541
 
#: rhodecode/lib/helpers.py:542
 
msgid "[created] repository as fork"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:542 rhodecode/lib/helpers.py:546
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544
 
#: rhodecode/lib/helpers.py:545
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:548
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:549
 
msgid "[committed via RhodeCode] into"
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[pulled from remote] into"
 
msgid "[committed via RhodeCode] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled] from"
 
msgid "[pulled from remote] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:552
 
msgid "[started following] repository"
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:553
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:554
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:731
 
#: rhodecode/lib/helpers.py:732
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:735
 
#: rhodecode/lib/helpers.py:736
 
msgid "No Files"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, python-format
 
msgid "%s ago"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:357
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:360
 
msgid "just now"
 
msgstr ""
 

	
 
#: rhodecode/lib/celerylib/tasks.py:269
 
msgid "password reset link"
 
msgstr ""
 

	
 
#: rhodecode/model/comment.py:85
 
#, python-format
 
msgid "on line %s"
 
msgstr ""
 

	
 
#: rhodecode/model/comment.py:113
 
msgid "[Mention]"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:72
 
msgid "Invalid username"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:80
 
msgid "This username already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:85
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or "
 
"dashes and must begin with alphanumeric character"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:101
 
msgid "Invalid group name"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:111
 
msgid "This users group already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:117
 
msgid ""
 
"RepoGroup name may only contain  alphanumeric characters underscores, periods"
 
" or dashes and must begin with alphanumeric character"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:145
 
msgid "Cannot assign this group as parent"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:164
 
msgid "This group already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:176
 
msgid "Repository with this name already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:195 rhodecode/model/forms.py:204
 
#: rhodecode/model/forms.py:213
 
msgid "Invalid characters in password"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:226
 
msgid "Passwords do not match"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:232
 
msgid "invalid password"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:233
 
msgid "invalid user name"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:234
 
msgid "Your account is disabled"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:274
 
msgid "This username is not valid"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:287
 
msgid "This repository name is disallowed"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:310
 
#, python-format
 
msgid "This repository already exists in a group \"%s\""
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:317
 
#, python-format
 
msgid "There is a group with this name already \"%s\""
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:324
 
msgid "This repository already exists"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:367
 
msgid "invalid clone url"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:384
 
msgid "Invalid clone url, provide a valid clone http\\s url"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:398
 
msgid "Fork have to be the same type as original"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:414
 
msgid "This username or users group name is not valid"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:480
 
msgid "This is not a valid path"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:494
 
msgid "This e-mail address is already taken"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:507
 
msgid "This e-mail address doesn't exist."
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:530
 
msgid ""
 
"The LDAP Login attribute of the CN must be specified - this is the name of "
 
"the attribute that is equivalent to 'username'"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:549
 
msgid "Please enter a login"
 
msgstr ""
rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po
Show inline comments
 
# Chinese (China) translations for RhodeCode.
 
# Copyright (C) 2011 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
 
# mikespook <mikespook@gmail.com>, 2012.
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.2.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-24 22:18+0200\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"PO-Revision-Date: 2012-04-05 17:37+0800\n"
 
"Last-Translator: mikespook <mikespook@gmail.com>\n"
 
"Language-Team: mikespook\n"
 
"Plural-Forms: nplurals=1; plural=0\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
#, fuzzy
 
#| msgid "branches"
 
msgid "All Branches"
 
msgstr "分支"
 

	
 
#: rhodecode/controllers/changeset.py:79
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
msgid "ignore white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#, fuzzy, python-format
 
#| msgid "File contents"
 
msgid "%s line context"
 
msgstr "文件内容"
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr "二进制文件"
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr "主页"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr "由于错误的语法,服务器无法对请求进行响应。"
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr "未授权的资源访问"
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "无权访问该页面"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr "资源未找到"
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr "服务进入非预期的混乱状态,这会阻止它对请求进行响应。"
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr "%s 库的修改"
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr "%s %s 订阅"
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr "新增"
 

	
 
#: rhodecode/controllers/files.py:87
 
#, fuzzy, python-format
 
#| msgid "There are no files yet"
 
msgid "There are no files yet %s"
 
msgstr "尚无文件"
 

	
 
#: rhodecode/controllers/files.py:247
 
#, python-format
 
msgid "Edited %s via RhodeCode"
 
msgstr "通过 RhodeCode 修改了 %s"
 

	
 
#: rhodecode/controllers/files.py:252
 
msgid "No changes"
 
msgstr "无变更"
 

	
 
#: rhodecode/controllers/files.py:263 rhodecode/controllers/files.py:316
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr "成功提交到 %s"
 

	
 
#: rhodecode/controllers/files.py:268 rhodecode/controllers/files.py:322
 
msgid "Error occurred during commit"
 
msgstr "提交时发生错误"
 

	
 
#: rhodecode/controllers/files.py:288
 
#, fuzzy, python-format
 
#| msgid "Edited %s via RhodeCode"
 
msgid "Added %s via RhodeCode"
 
msgstr "通过 RhodeCode 修改了 %s"
 

	
 
#: rhodecode/controllers/files.py:302
 
#, fuzzy
 
#| msgid "File contents"
 
msgid "No content"
 
msgstr "文件内容"
 

	
 
#: rhodecode/controllers/files.py:306
 
#, fuzzy
 
#| msgid "File names"
 
msgid "No filename"
 
msgstr "文件名"
 

	
 
#: rhodecode/controllers/files.py:347
 
msgid "downloads disabled"
 
msgstr "禁止下载"
 

	
 
#: rhodecode/controllers/files.py:358
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr "未知版本 %s"
 

	
 
#: rhodecode/controllers/files.py:360
 
msgid "Empty repository"
 
msgstr "空版本库"
 

	
 
#: rhodecode/controllers/files.py:362
 
msgid "Unknown archive type"
 
msgstr "未知包类型"
 

	
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr "变更集"
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr "分支"
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr "标签"
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "版本库 %s 被分支到 %s"
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr "公共日志 %s %s 订阅"
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr "公共日志"
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr "成功注册到 rhodecode"
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr "密码重置链接已经发送"
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgstr "密码已经成功重置,新密码已经发送到你的邮箱"
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr "错误的搜索。请尝试用引号包含它。"
 

	
 
#: rhodecode/controllers/search.py:119
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr "没有索引用于搜索。请运行 whoosh 索引器"
 

	
 
#: rhodecode/controllers/search.py:123
 
msgid "An error occurred during this search operation"
 
msgstr "在搜索操作中发生异常"
 

	
 
#: rhodecode/controllers/settings.py:103
 
#: rhodecode/controllers/admin/repos.py:211
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr "版本库 %s 成功更新"
 

	
 
#: rhodecode/controllers/settings.py:121
 
#: rhodecode/controllers/admin/repos.py:229
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:139
 
#: rhodecode/controllers/admin/repos.py:247
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:151
 
#: rhodecode/controllers/admin/repos.py:259
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr "已经删除版本库 %s"
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Statistics are disabled for this repository"
 
msgstr "该版本库统计功能已经禁用"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:55
 
msgid "NEVER"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:56
 
msgid "ALLOW"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:57
 
msgid "TRY"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:58
 
msgid "DEMAND"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:59
 
msgid "HARD"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:63
 
msgid "No encryption"
 
msgstr "未加密"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:64
 
msgid "LDAPS connection"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:65
 
msgid "START_TLS on LDAP connection"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:125
 
msgid "Ldap settings updated successfully"
 
msgstr "LDAP 设置已经成功更新"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:129
 
msgid "Unable to activate ldap. The \"python-ldap\" library is missing."
 
msgstr "无法启用 LDAP。库“python-ldap”缺失。"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:146
 
msgid "error occurred during update of ldap settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:59
 
msgid "None"
 
msgstr "无"
 

	
 
#: rhodecode/controllers/admin/permissions.py:60
 
msgid "Read"
 
msgstr "读"
 

	
 
#: rhodecode/controllers/admin/permissions.py:61
 
msgid "Write"
 
msgstr "写"
 

	
 
#: rhodecode/controllers/admin/permissions.py:62
 
#: rhodecode/templates/admin/ldap/ldap.html:9
 
#: rhodecode/templates/admin/permissions/permissions.html:9
 
#: rhodecode/templates/admin/repos/repo_add.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:9
 
#: rhodecode/templates/admin/repos/repos.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/admin/users/user_add.html:8
 
#: rhodecode/templates/admin/users/user_edit.html:9
 
#: rhodecode/templates/admin/users/user_edit.html:122
 
#: rhodecode/templates/admin/users/users.html:9
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:8
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 
#: rhodecode/templates/admin/users_groups/users_groups.html:9
 
#: rhodecode/templates/base/base.html:197
 
#: rhodecode/templates/base/base.html:326
 
#: rhodecode/templates/base/base.html:328
 
#: rhodecode/templates/base/base.html:330
 
msgid "Admin"
 
msgstr "管理"
 

	
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "disabled"
 
msgstr "禁用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr "允许手工启用帐号"
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
msgid "allowed with automatic account activation"
 
msgstr "允许自动启用帐号"
 

	
 
#: rhodecode/controllers/admin/permissions.py:71
 
msgid "Disabled"
 
msgstr "停用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:72
 
msgid "Enabled"
 
msgstr "启用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:106
 
msgid "Default permissions updated successfully"
 
msgstr "成功更新默认权限"
 

	
 
#: rhodecode/controllers/admin/permissions.py:123
 
msgid "error occurred during update of permissions"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:116
 
msgid "--REMOVE FORK--"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:144
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr "新版本库 %s 基于 %s 建立。"
 

	
 
#: rhodecode/controllers/admin/repos.py:148
 
#, python-format
 
msgid "created repository %s"
 
msgstr "建立版本库 %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:177
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:264
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:293
 
msgid "An error occurred during deletion of repository user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:312
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:329
 
msgid "An error occurred during deletion of repository stats"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:345
 
msgid "An error occurred during cache invalidation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:365
 
msgid "Updated repository visibility in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:369
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:387
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "An error occurred during pull from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
#, fuzzy, python-format
 
#| msgid "created repository %s from %s"
 
msgid "Marked repo %s as fork of %s"
 
msgstr "新版本库 %s 基于 %s 建立。"
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
#, fuzzy
 
#| msgid "An error occurred during this search operation"
 
msgid "An error occurred during this operation"
 
msgstr "在搜索操作中发生异常"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "建立版本库组 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "更新版本库组 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr "移除版本库组 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
#, fuzzy
 
#| msgid "An error occurred during this search operation"
 
msgid "An error occurred during deletion of group user"
 
msgstr "在搜索操作中发生异常"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr "Whoosh 重新索引任务调度"
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr "更新应用设置"
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr "更新 mercurial 设置"
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr "新增钩子"
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr "更新钩子"
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
msgid "Your account was updated successfully"
 
msgstr "你的帐号已经更新完成"
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#, python-format
 
msgid "created user %s"
 
msgstr "创建用户 %s"
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
msgid "User updated successfully"
 
msgstr "用户更新成功"
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
msgid "successfully deleted user"
 
msgstr "用户删除成功"
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
msgid "An error occurred during deletion of user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
msgid "You can't edit this user"
 
msgstr "无法编辑该用户"
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#, python-format
 
msgid "created users group %s"
 
msgstr "建立用户组 %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#, python-format
 
msgid "updated users group %s"
 
msgstr "更新用户组 %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
msgid "successfully deleted users group"
 
msgstr "删除用户组成功"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
msgid "An error occurred during deletion of users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr "必须是注册用户才能进行此操作"
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr "必须登录才能访问该页面"
 

	
 
#: rhodecode/lib/diffs.py:78
 
#, fuzzy
 
#| msgid "Changeset is to big and was cut off, see raw changeset instead"
 
msgid "Changeset was to big and was cut off, use diff menu to display this diff"
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr "变更集因过大而被截断,可查看原始变更集作为替代"
 

	
 
#: rhodecode/lib/diffs.py:88
 
#, fuzzy
 
#| msgid "No changesets yet"
 
msgid "No changes detected"
 
msgstr "尚无修订"
 

	
 
#: rhodecode/lib/helpers.py:414
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:418
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:462
 
#: rhodecode/lib/helpers.py:463
 
#, fuzzy
 
#| msgid "changeset"
 
msgid "Changeset not found"
 
msgstr "修改"
 

	
 
#: rhodecode/lib/helpers.py:485
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:491
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:511
 
msgid "and"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513 rhodecode/templates/changelog/changelog.html:40
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr "修订"
 

	
 
#: rhodecode/lib/helpers.py:536
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr "分支名称"
 

	
 
#: rhodecode/lib/helpers.py:539
 
#: rhodecode/lib/helpers.py:540
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:540 rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
msgid "[created] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:541
 
#, fuzzy, python-format
 
#| msgid "created repository %s"
 
#: rhodecode/lib/helpers.py:542
 
#, fuzzy
 
msgid "[created] repository as fork"
 
msgstr "建立版本库 %s"
 

	
 
#: rhodecode/lib/helpers.py:542 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544
 
#: rhodecode/lib/helpers.py:545
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:548
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:549
 
msgid "[committed via RhodeCode] into"
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[pulled from remote] into"
 
msgid "[committed via RhodeCode] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled] from"
 
msgid "[pulled from remote] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:552
 
msgid "[started following] repository"
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:553
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:554
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:731
 
#: rhodecode/lib/helpers.py:732
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:735
 
#: rhodecode/lib/helpers.py:736
 
msgid "No Files"
 
msgstr "没有文件"
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, fuzzy, python-format
 
#| msgid "year"
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "年"
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, fuzzy, python-format
 
#| msgid "month"
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "月"
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, fuzzy, python-format
 
#| msgid "day"
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "日"
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, fuzzy, python-format
 
#| msgid "hour"
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "时"
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, fuzzy, python-format
 
#| msgid "minute"
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "分"
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, fuzzy, python-format
 
#| msgid "second"
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "秒"
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, fuzzy, python-format
 
#| msgid "ago"
 
msgid "%s ago"
 
msgstr "之前"
 

	
 
#: rhodecode/lib/utils2.py:357
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:360
 
msgid "just now"
 
msgstr "现在"
 

	
 
#: rhodecode/lib/celerylib/tasks.py:269
 
#, fuzzy
 
#| msgid "Your password reset link was sent"
 
msgid "password reset link"
 
msgstr "密码重置链接已经发送"
 

	
 
#: rhodecode/model/comment.py:85
 
#, python-format
 
msgid "on line %s"
 
msgstr ""
 

	
 
#: rhodecode/model/comment.py:113
 
msgid "[Mention]"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:72
 
msgid "Invalid username"
 
msgstr "非法的用户名"
 

	
 
#: rhodecode/model/forms.py:80
 
msgid "This username already exists"
 
msgstr "该用户名已经存在"
 

	
 
#: rhodecode/model/forms.py:85
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or"
 
" dashes and must begin with alphanumeric character"
 
msgstr "只能使用字母、数字、下划线、小数点或减号作为用户名,且必须由数字或字母开头"
 

	
 
#: rhodecode/model/forms.py:101
 
msgid "Invalid group name"
 
msgstr "非法的用户组名称"
 

	
 
#: rhodecode/model/forms.py:111
 
msgid "This users group already exists"
 
msgstr "该用户组名称已经存在"
 

	
 
#: rhodecode/model/forms.py:117
 
#, fuzzy
 
#| msgid "" "Group name may only contain alphanumeric characters underscores,
 
#| periods " "or dashes and must begin with alphanumeric character"
 
msgid ""
 
"RepoGroup name may only contain  alphanumeric characters underscores, "
 
"periods or dashes and must begin with alphanumeric character"
 
msgstr "只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头"
 

	
 
#: rhodecode/model/forms.py:145
 
msgid "Cannot assign this group as parent"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:164
 
msgid "This group already exists"
 
msgstr "该组已经存在"
 

	
 
#: rhodecode/model/forms.py:176
 
#, fuzzy
 
#| msgid "This repository already exists"
 
msgid "Repository with this name already exists"
 
msgstr "这个版本库已经存在"
 

	
 
#: rhodecode/model/forms.py:195 rhodecode/model/forms.py:204
 
#: rhodecode/model/forms.py:213
 
msgid "Invalid characters in password"
 
msgstr "密码含有无效字符"
 

	
 
#: rhodecode/model/forms.py:226
 
msgid "Passwords do not match"
 
msgstr "密码不符"
 

	
 
#: rhodecode/model/forms.py:232
 
msgid "invalid password"
 
msgstr "无效密码"
 

	
 
#: rhodecode/model/forms.py:233
 
msgid "invalid user name"
 
msgstr "无效用户名"
 

	
 
#: rhodecode/model/forms.py:234
 
msgid "Your account is disabled"
 
msgstr "该帐号已被禁用"
 

	
 
#: rhodecode/model/forms.py:274
 
msgid "This username is not valid"
 
msgstr "该用户名不合法"
 

	
 
#: rhodecode/model/forms.py:287
 
msgid "This repository name is disallowed"
 
msgstr "该版本库名称被禁用"
 

	
 
#: rhodecode/model/forms.py:310
 
#, fuzzy, python-format
 
#| msgid "This repository already exists in group \"%s\""
 
msgid "This repository already exists in a group \"%s\""
 
msgstr "组中已经存在该版本库"
 

	
 
#: rhodecode/model/forms.py:317
 
#, python-format
 
msgid "There is a group with this name already \"%s\""
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:324
 
msgid "This repository already exists"
 
msgstr "这个版本库已经存在"
 

	
 
#: rhodecode/model/forms.py:367
 
msgid "invalid clone url"
 
msgstr "无效的 clone 地址"
 

	
 
#: rhodecode/model/forms.py:384
 
msgid "Invalid clone url, provide a valid clone http\\s url"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:398
 
msgid "Fork have to be the same type as original"
 
msgstr "分支必须使用相同的版本库类型"
 

	
 
#: rhodecode/model/forms.py:414
 
msgid "This username or users group name is not valid"
 
msgstr "用户或用户组名称无效"
 

	
 
#: rhodecode/model/forms.py:480
 
msgid "This is not a valid path"
 
msgstr "不是一个合法的路径"
 

	
 
#: rhodecode/model/forms.py:494
 
msgid "This e-mail address is already taken"
 
msgstr "该邮件地址已被使用"
 

	
 
#: rhodecode/model/forms.py:507
 
msgid "This e-mail address doesn't exist."
 
msgstr "该邮件地址不存在"
 

	
 
#: rhodecode/model/forms.py:530
 
msgid ""
 
"The LDAP Login attribute of the CN must be specified - this is the name "
 
"of the attribute that is equivalent to 'username'"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:549
 
msgid "Please enter a login"
 
msgstr "请登录"
 

	
 
#: rhodecode/model/forms.py:550
 
#, python-format
 
msgid "Enter a value %(min)i characters long or more"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:558
 
msgid "Please enter a password"
 
msgstr "请输入密码"
 

	
 
#: rhodecode/model/forms.py:559
 
#, python-format
 
msgid "Enter %(min)i characters or more"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:175
 
msgid "commented on commit"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:176
 
#, fuzzy
 
#| msgid "commit message"
 
msgid "sent message"
 
msgstr "提交信息"
 

	
 
#: rhodecode/model/notification.py:177
 
msgid "mentioned you"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:178
 
#, fuzzy
 
#| msgid "You have successfully registered into rhodecode"
 
msgid "registered in RhodeCode"
 
msgstr "成功注册到 rhodecode"
 

	
 
#: rhodecode/model/user.py:235
 
#, fuzzy
 
#| msgid "[RhodeCode] New User registration"
 
msgid "new user registration"
 
msgstr "[RhodeCode] 新用户注册"
 

	
 
#: rhodecode/model/user.py:259 rhodecode/model/user.py:279
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr "由于是系统帐号,无法编辑该用户"
 

	
 
#: rhodecode/model/user.py:300
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr "由于是系统帐号,无法删除该用户"
 

	
 
#: rhodecode/model/user.py:306
 
#, fuzzy, python-format
 
#| msgid "" "This user still owns %s repositories and cannot be removed. Switch
 
#| owners" " or remove those repositories"
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr "由于该用户拥有版本库 %s 因而无法删除,请变更版本库所有者或删除版本库"
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr "快速过滤..."
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr "个版本库"
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr "新增版本库"
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
msgstr "组名"
 

	
 
#: rhodecode/templates/index_base.html:30
 
#: rhodecode/templates/index_base.html:67
 
#: rhodecode/templates/index_base.html:132
 
#: rhodecode/templates/index_base.html:158
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr "描述"
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
msgid "Repositories group"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/index_base.html:66
 
#: rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr "名称"
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr "最后修改"
 

	
 
#: rhodecode/templates/index_base.html:69
 
#: rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr "所有者"
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:102
 
#: rhodecode/templates/index_base.html:104
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr "订阅 rss %s"
 

	
 
#: rhodecode/templates/index_base.html:109
 
#: rhodecode/templates/index_base.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr "订阅 atom %s"
 

	
 
#: rhodecode/templates/index_base.html:130
 
#, fuzzy
 
#| msgid "group name"
 
msgid "Group Name"
 
msgstr "组名"
 

	
 
#: rhodecode/templates/index_base.html:148
 
#: rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:149
 
#: rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
#, fuzzy
 
#| msgid "Last change"
 
msgid "Last Change"
 
msgstr "最后修改"
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
#, fuzzy
 
#| msgid "Loading file list..."
 
msgid "Loading..."
 
msgstr "加载文件列表..."
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr "登录"
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr "登录到"
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr "帐号"
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr "密码"
 

	
 
#: rhodecode/templates/login.html:50
 
#, fuzzy
 
#| msgid "member"
 
msgid "Remember me"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr "忘记了密码?"
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr "还没有帐号?"
 

	
 
#: rhodecode/templates/password_reset.html:5
 
msgid "Reset your password"
 
msgstr "重置密码"
 

	
 
#: rhodecode/templates/password_reset.html:11
 
msgid "Reset your password to"
 
msgstr "重置密码"
 

	
 
#: rhodecode/templates/password_reset.html:21
 
msgid "Email address"
 
msgstr "邮件地址"
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr "重置密码"
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr "密码重置地址已经发送到邮件"
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr "注册"
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr "注册"
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr "确认密码"
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
msgid "First Name"
 
msgstr "名"
 

	
 
#: rhodecode/templates/register.html:56
 
#: rhodecode/templates/admin/users/user_add.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:95
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:85
 
msgid "Last Name"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:94
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr "电子邮件"
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr "注册后,帐号将启用"
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr "管理员审核后,你注册的帐号将被启用"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr "私有版本库"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr "公共版本库"
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
#: rhodecode/templates/branches/branches.html:14
 
msgid "branches"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/switch_to_list.html:10
 
#: rhodecode/templates/branches/branches_data.html:51
 
msgid "There are no branches yet"
 
msgstr "没有任何分支"
 

	
 
#: rhodecode/templates/switch_to_list.html:15
 
#: rhodecode/templates/shortlog/shortlog_data.html:10
 
#: rhodecode/templates/tags/tags.html:15
 
msgid "tags"
 
msgstr "标签"
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
msgid "There are no tags yet"
 
msgstr "没有任何标签"
 

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
#, fuzzy
 
#| msgid "There are no forks yet"
 
msgid "There are no bookmarks yet"
 
msgstr "尚未有任何分支"
 

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr "管理员日志"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr "操作"
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
msgstr "版本库"
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:37
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr "日期"
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr "来源 IP"
 

	
 
#: rhodecode/templates/admin/admin_log.html:52
 
msgid "No actions yet"
 
msgstr "尚无操作"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr "LDAP 管理员"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr "连接设置"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr "启用 LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr "主机"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
msgid "Port"
 
msgstr "端口"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:42
 
msgid "Account"
 
msgstr "帐号"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:50
 
msgid "Connection security"
 
msgstr "连接安全"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:54
 
msgid "Certificate Checks"
 
msgstr "凭证确认"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:57
 
msgid "Search settings"
 
msgstr "搜索设置"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:59
 
msgid "Base DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:63
 
msgid "LDAP Filter"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:67
 
msgid "LDAP Search Scope"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:70
 
msgid "Attribute mappings"
 
msgstr "属性映射"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr "登录属性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr "名"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr "电子邮件属性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr "保存"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
#, fuzzy
 
#| msgid "No actions yet"
 
msgid "No notifications here yet"
 
msgstr "尚无操作"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
#, fuzzy
 
#| msgid "show annotation"
 
msgid "Show notification"
 
msgstr "显示注释"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
#, fuzzy
 
#| msgid "Location"
 
msgid "Notifications"
 
msgstr "位置"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:5
 
msgid "Permissions administration"
 
msgstr "权限管理"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
 
#: rhodecode/templates/admin/users/user_edit.html:139
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:100
 
#: rhodecode/templates/settings/repo_settings.html:77
 
msgid "Permissions"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:24
 
msgid "Default permissions"
 
msgstr "默认权限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:31
 
msgid "Anonymous access"
 
msgstr "匿名访问"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:41
 
msgid "Repository permission"
 
msgstr "版本库权限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:49
 
msgid ""
 
"All default permissions on each repository will be reset to choosen "
 
"permission, note that all custom default permission on repositories will "
 
"be lost"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:50
 
msgid "overwrite existing settings"
 
msgstr "覆盖已有设置"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:55
 
msgid "Registration"
 
msgstr "注册"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:63
 
msgid "Repository creation"
 
msgstr "建立版本库"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:71
 
#: rhodecode/templates/admin/repos/repo_edit.html:218
 
msgid "set"
 
msgstr "设置"
 

	
 
#: rhodecode/templates/admin/repos/repo_add.html:5
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
 
msgid "Add repository"
 
msgstr "添加版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_add.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:11
 
#: rhodecode/templates/admin/repos/repos.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
 
msgid "Repositories"
 
msgstr "版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:20
 
#: rhodecode/templates/summary/summary.html:90
 
#: rhodecode/templates/summary/summary.html:91
 
msgid "Clone from"
 
msgstr "clone 自"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:24
 
#: rhodecode/templates/admin/repos/repo_edit.html:44
 
#: rhodecode/templates/settings/repo_settings.html:43
 
msgid "Optional http[s] url from which repository should be cloned."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:29
 
#: rhodecode/templates/admin/repos/repo_edit.html:49
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
 
#: rhodecode/templates/forks/fork.html:41
 
#: rhodecode/templates/settings/repo_settings.html:48
 
msgid "Repository group"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:33
 
#: rhodecode/templates/admin/repos/repo_edit.html:53
 
#: rhodecode/templates/settings/repo_settings.html:52
 
msgid "Optional select a group to put this repository into."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr "类型"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:42
 
#, fuzzy
 
#| msgid "Repository creation"
 
msgid "Type of repository to create."
 
msgstr "建立版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:51
 
#: rhodecode/templates/admin/repos/repo_edit.html:70
 
#: rhodecode/templates/settings/repo_settings.html:61
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:60
 
#: rhodecode/templates/admin/repos/repo_edit.html:80
 
#: rhodecode/templates/settings/repo_settings.html:71
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr "新增版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr "编辑版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr "编辑"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr "clone 地址"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
msgid "Enable statistics"
 
msgstr "启用统计"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
msgid "Enable statistics window on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable downloads"
 
msgstr "启用下载"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable download menu on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:108
 
#, fuzzy, python-format
 
#| msgid "Changes on %s repository"
 
#, fuzzy
 
msgid "Change owner of this repository."
 
msgstr "%s 库的修改"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:134
 
msgid "Administration"
 
msgstr "管理"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:137
 
msgid "Statistics"
 
msgstr "统计"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Reset current statistics"
 
msgstr "重置统计"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Confirm to remove current statistics"
 
msgstr "确认移除当前统计"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:144
 
msgid "Fetched to rev"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:145
 
msgid "Stats gathered"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:153
 
msgid "Remote"
 
msgstr "远程"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:157
 
msgid "Pull changes from remote location"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:157
 
msgid "Confirm to pull changes from remote side"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:168
 
msgid "Cache"
 
msgstr "缓存"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:172
 
msgid "Invalidate repository cache"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:172
 
msgid "Confirm to invalidate repository cache"
 
msgstr "确认清除版本库缓存"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:183
 
msgid "Remove from public journal"
 
msgstr "从公共日志删除"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:185
 
msgid "Add to public journal"
 
msgstr "添加到公共日志"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:190
 
msgid ""
 
"All actions made on this repository will be accessible to everyone in "
 
"public journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:197
 
#: rhodecode/templates/changeset/changeset_file_comment.html:19
 
msgid "Delete"
 
msgstr "删除"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:201
 
msgid "Remove this repository"
 
msgstr "删除版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:201
 
msgid "Confirm to delete this repository"
 
msgstr "确认删除版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:205
 
msgid ""
 
"This repository will be renamed in a special way in order to be "
 
"unaccesible for RhodeCode and VCS systems.\n"
 
"                         If you need fully delete it from filesystem "
 
"please do it manually"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:213
 
msgid "Set as fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:222
 
msgid "Manually set this repository as a fork of another"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
msgid "none"
 
msgstr "无"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:4
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
 
msgid "read"
 
msgstr "读"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr "写"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr "管理员"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
 
msgid "member"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr "私有版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr "添加成员"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr "删除用户失败"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr "删除用户组失败"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr "组"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr "版本库管理员"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr "联系方式"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr "删除"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#, fuzzy, python-format
 
#| msgid "Confirm to delete this repository"
 
msgid "Confirm to delete this repository: %s"
 
msgstr "确认删除版本库"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
 
msgid "Groups"
 
msgstr "组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
msgid "with"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr "添加版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr "添加新版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr "上级组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
msgid "save"
 
msgstr "保存"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr "编辑版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr "编辑版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr "重置"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr "版本库管理员"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr "添加组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
#, fuzzy
 
#| msgid "Number of repositories"
 
msgid "Number of toplevel repositories"
 
msgstr "版本库数量"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr "操作"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#, fuzzy, python-format
 
#| msgid "Confirm to delete this group"
 
msgid "Confirm to delete this group: %s"
 
msgstr "确认删除该组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "There are no repositories groups yet"
 
msgstr "没有版本库组"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:5
 
#: rhodecode/templates/admin/settings/settings.html:5
 
msgid "Settings administration"
 
msgstr "设置管理员"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/settings/repo_settings.html:5
 
#: rhodecode/templates/settings/repo_settings.html:13
 
msgid "Settings"
 
msgstr "设置"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:24
 
msgid "Built in hooks - read only"
 
msgstr "内建钩子 - 只读"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:40
 
msgid "Custom hooks"
 
msgstr "自定义钩子"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:56
 
msgid "remove"
 
msgstr "删除"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:88
 
msgid "Failed to remove hook"
 
msgstr "移除钩子失败"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:24
 
msgid "Remap and rescan repositories"
 
msgstr "重新扫描并映射版本库"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:32
 
msgid "rescan option"
 
msgstr "重新扫描选项"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:38
 
msgid ""
 
"In case a repository was deleted from filesystem and there are leftovers "
 
"in the database check this option to scan obsolete data in database and "
 
"remove it."
 
msgstr "如果版本库已经从文件系统删除,但数据库仍然有遗留信息,请勾选该项进行清理"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:39
 
msgid "destroy old data"
 
msgstr "清理旧数据"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:45
 
msgid "Rescan repositories"
 
msgstr "重新扫描版本库"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:51
 
msgid "Whoosh indexing"
 
msgstr "Whoosh 索引"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:59
 
msgid "index build option"
 
msgstr "构建索引选项"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:64
 
msgid "build from scratch"
 
msgstr "重新建立"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:70
 
msgid "Reindex"
 
msgstr "重新索引"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:76
 
msgid "Global application settings"
 
msgstr "全局设置"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:85
 
msgid "Application name"
 
msgstr "应用名称"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:94
 
msgid "Realm text"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:103
 
msgid "GA code"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:111
 
#: rhodecode/templates/admin/settings/settings.html:176
 
msgid "Save settings"
 
msgstr "保存设置"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:118
 
msgid "Mercurial settings"
 
msgstr "Mercurial 设置"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:127
 
msgid "Web"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:132
 
msgid "require ssl for pushing"
 
msgstr "使用 SSL 推送"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:139
 
msgid "Hooks"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:144
 
msgid "Update repository after push (hg update)"
 
msgstr "推送后更新版本库(hg update)"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:148
 
msgid "Show repository size after push"
 
msgstr "推送后显示版本库大小"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:152
 
msgid "Log user push commands"
 
msgstr "记录用户推送命令"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:156
 
msgid "Log user pull commands"
 
msgstr "记录用户拉取命令"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:160
 
msgid "advanced setup"
 
msgstr "高级设置"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:165
 
msgid "Repositories location"
 
msgstr "版本库路径"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:170
 
msgid ""
 
"This a crucial application setting. If you are really sure you need to "
 
"change this, you must restart application in order to make this setting "
 
"take effect. Click this label to unlock."
 
msgstr "这是一个关键设置。如果确认修改该项设置,请重启服务以便设置生效。"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:171
 
msgid "unlock"
 
msgstr "解锁"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:191
 
msgid "Test Email"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:199
 
#, fuzzy
 
#| msgid "Email"
 
msgid "Email to"
 
msgstr "电子邮件"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:207
 
#, fuzzy
 
#| msgid "second"
 
msgid "Send"
 
msgstr "秒"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:213
 
msgid "System Info and Packages"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:216
 
#, fuzzy
 
#| msgid "Show"
 
msgid "show"
 
msgstr "显示"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:5
 
msgid "Add user"
 
msgstr "添加用户"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:10
 
#: rhodecode/templates/admin/users/user_edit.html:11
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr "用户"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr "添加新用户"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
#, fuzzy
 
#| msgid "Passwords do not match"
 
msgid "Password confirmation"
 
msgstr "密码不符"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr "启用"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr "编辑用户"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
msgid "Change your avatar at"
 
msgstr "修改你的头像"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
msgid "Using"
 
msgstr "使用中"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
msgid "API key"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
msgid "New password"
 
msgstr "新密码"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:67
 
msgid "New password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr "创建版本库"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr "我的账户"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr "我的账户"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/journal/journal.html:32
 
#, fuzzy
 
#| msgid "Empty repository"
 
msgid "My repos"
 
msgstr "空版本库"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#, fuzzy
 
#| msgid "permissions"
 
msgid "My permissions"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/journal/journal.html:37
 
#, fuzzy
 
#| msgid "add"
 
msgid "ADD"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr "修订"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr "私有"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr "没有任何版本库"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#, fuzzy
 
#| msgid "permissions"
 
msgid "Permission"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr "用户管理员"
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr "添加用户"
 

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr "用户名"
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr "名称"
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/admin/users/users.html:36
 
msgid "last login"
 
msgstr "最后登录"
 

	
 
#: rhodecode/templates/admin/users/users.html:37
 
#: rhodecode/templates/admin/users_groups/users_groups.html:34
 
msgid "active"
 
msgstr "启用"
 

	
 
#: rhodecode/templates/admin/users/users.html:39
 
#: rhodecode/templates/base/base.html:223
 
msgid "ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:56
 
#, fuzzy, python-format
 
#| msgid "Confirm to delete this user"
 
msgid "Confirm to delete this user: %s"
 
msgstr "确认删除该用户"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:5
 
msgid "Add users group"
 
msgstr "添加用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:10
 
#: rhodecode/templates/admin/users_groups/users_groups.html:9
 
msgid "Users groups"
 
msgstr "用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:12
 
msgid "add new users group"
 
msgstr "添加新用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:5
 
msgid "Edit users group"
 
msgstr "编辑用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:11
 
msgid "UsersGroups"
 
msgstr "用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:50
 
msgid "Members"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:58
 
msgid "Choosen group members"
 
msgstr "选择组成员"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:61
 
msgid "Remove all elements"
 
msgstr "移除全部项目"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr "启用成员"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr "添加全部项目"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
#, fuzzy
 
#| msgid "Choosen group members"
 
msgid "Group members"
 
msgstr "选择组成员"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr "用户组管理"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr "添加新用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr "组名"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, fuzzy, python-format
 
#| msgid "Confirm to delete this group"
 
msgid "Confirm to delete this users group: %s"
 
msgstr "确认删除该组"
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr "提交 bug"
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr "忘记密码?"
 

	
 
#: rhodecode/templates/base/base.html:107
 
#, fuzzy
 
#| msgid "Login"
 
msgid "Log In"
 
msgstr "登录"
 

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:289
 
#: rhodecode/templates/base/base.html:291
 
#: rhodecode/templates/base/base.html:293
 
msgid "Home"
 
msgstr "首页"
 

	
 
#: rhodecode/templates/base/base.html:123
 
#: rhodecode/templates/base/base.html:298
 
#: rhodecode/templates/base/base.html:300
 
#: rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:17
 
#: rhodecode/templates/journal/public_journal.html:4
 
msgid "Journal"
 
msgstr "日志"
 

	
 
#: rhodecode/templates/base/base.html:125
 
msgid "Log Out"
 
msgstr "退出"
 

	
 
#: rhodecode/templates/base/base.html:144
 
msgid "Switch repository"
 
msgstr "切换版本库"
 

	
 
#: rhodecode/templates/base/base.html:146
 
msgid "Products"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:152
 
#: rhodecode/templates/base/base.html:182
 
msgid "loading..."
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:158
 
#: rhodecode/templates/base/base.html:160
 
#: rhodecode/templates/base/base.html:162
 
#: rhodecode/templates/data_table/_dt_elements.html:9
 
#: rhodecode/templates/data_table/_dt_elements.html:11
 
#: rhodecode/templates/data_table/_dt_elements.html:13
 
#: rhodecode/templates/summary/summary.html:4
 
msgid "Summary"
 
msgstr "概况"
 

	
 
#: rhodecode/templates/base/base.html:166
 
#: rhodecode/templates/base/base.html:168
 
#: rhodecode/templates/base/base.html:170
 
#: rhodecode/templates/changelog/changelog.html:6
 
#: rhodecode/templates/changelog/changelog.html:15
 
#: rhodecode/templates/data_table/_dt_elements.html:17
 
#: rhodecode/templates/data_table/_dt_elements.html:19
 
#: rhodecode/templates/data_table/_dt_elements.html:21
 
msgid "Changelog"
 
msgstr "修改记录"
 

	
 
#: rhodecode/templates/base/base.html:175
 
#: rhodecode/templates/base/base.html:177
 
#: rhodecode/templates/base/base.html:179
 
msgid "Switch to"
 
msgstr "切换到"
 

	
 
#: rhodecode/templates/base/base.html:186
 
#: rhodecode/templates/base/base.html:188
 
#: rhodecode/templates/base/base.html:190
 
#: rhodecode/templates/data_table/_dt_elements.html:25
 
#: rhodecode/templates/data_table/_dt_elements.html:27
 
#: rhodecode/templates/data_table/_dt_elements.html:29
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:40
 
msgid "Files"
 
msgstr "档案"
 

	
 
#: rhodecode/templates/base/base.html:195
 
#: rhodecode/templates/base/base.html:199
 
msgid "Options"
 
msgstr "选项"
 

	
 
#: rhodecode/templates/base/base.html:204
 
#: rhodecode/templates/base/base.html:206
 
#: rhodecode/templates/base/base.html:224
 
msgid "settings"
 
msgstr "设置"
 

	
 
#: rhodecode/templates/base/base.html:209
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/forks/fork.html:13
 
msgid "fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:210
 
msgid "search"
 
msgstr "搜索"
 

	
 
#: rhodecode/templates/base/base.html:217
 
msgid "journal"
 
msgstr "日志"
 

	
 
#: rhodecode/templates/base/base.html:219
 
msgid "repositories groups"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/base/base.html:220
 
msgid "users"
 
msgstr "用户"
 

	
 
#: rhodecode/templates/base/base.html:221
 
msgid "users groups"
 
msgstr "用户组"
 

	
 
#: rhodecode/templates/base/base.html:222
 
msgid "permissions"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/base/base.html:235
 
#: rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr "跟随者"
 

	
 
#: rhodecode/templates/base/base.html:243
 
#: rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:316
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr "搜索"
 

	
 
#: rhodecode/templates/base/root.html:53
 
#, fuzzy
 
#| msgid "Add another member"
 
msgid "add another comment"
 
msgstr "添加成员"
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr "停止跟随该版本库"
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr "开始跟随该版本库"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/tags/tags_data.html:8
 
#, fuzzy
 
#| msgid "author"
 
msgid "Author"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr "日期"
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr "修订"
 

	
 
#: rhodecode/templates/changelog/changelog.html:15
 
#, python-format
 
msgid "showing %d out of %d revision"
 
msgid_plural "showing %d out of %d revisions"
 
msgstr[0] ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:38
 
msgid "Show"
 
msgstr "显示"
 

	
 
#: rhodecode/templates/changelog/changelog.html:64
 
#: rhodecode/templates/summary/summary.html:352
 
msgid "show more"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:68
 
msgid "Affected number of files, click to show more details"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:82
 
#: rhodecode/templates/changeset/changeset.html:72
 
msgid "Parent"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:88
 
#: rhodecode/templates/changeset/changeset.html:78
 
msgid "No parents"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:93
 
#: rhodecode/templates/changeset/changeset.html:82
 
msgid "merge"
 
msgstr "合并"
 

	
 
#: rhodecode/templates/changelog/changelog.html:96
 
#: rhodecode/templates/changeset/changeset.html:85
 
#: rhodecode/templates/files/files.html:29
 
#: rhodecode/templates/files/files_add.html:33
 
#: rhodecode/templates/files/files_edit.html:33
 
#: rhodecode/templates/shortlog/shortlog_data.html:9
 
msgid "branch"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/changelog/changelog.html:102
 
msgid "bookmark"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:108
 
#: rhodecode/templates/changeset/changeset.html:90
 
msgid "tag"
 
msgstr "标签"
 

	
 
#: rhodecode/templates/changelog/changelog.html:144
 
msgid "Show selected changes __S -> __E"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:235
 
msgid "There are no changes yet"
 
msgstr "没有任何变更"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:2
 
#: rhodecode/templates/changeset/changeset.html:60
 
msgid "removed"
 
msgstr "移除"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:3
 
#: rhodecode/templates/changeset/changeset.html:61
 
msgid "changed"
 
msgstr "修改"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:4
 
#: rhodecode/templates/changeset/changeset.html:62
 
msgid "added"
 
msgstr "添加"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:6
 
#: rhodecode/templates/changelog/changelog_details.html:7
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr "原始 diff"
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr "下载 diff"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#, fuzzy, python-format
 
#| msgid "commit"
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] "提交"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#, fuzzy
 
#| msgid "commit"
 
msgid "Comment"
 
msgstr "提交"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
msgid "Hide"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#, fuzzy
 
#| msgid "You need to be a signed in to view this page"
 
msgid "You need to be logged in to comment."
 
msgstr "必须登录才能访问该页面"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
msgid "Login now"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
msgid "Leave a comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr "比较显示"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
#, fuzzy
 
#| msgid "File contents"
 
msgid "show inline comments"
 
msgstr "文件内容"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:54
 
#: rhodecode/templates/journal/journal.html:117
 
#: rhodecode/templates/summary/summary.html:63
 
msgid "Mercurial repository"
 
msgstr "Mercurial 版本库"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:56
 
#: rhodecode/templates/journal/journal.html:119
 
#: rhodecode/templates/summary/summary.html:66
 
msgid "Git repository"
 
msgstr "Git 版本库"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:63
 
#: rhodecode/templates/journal/journal.html:125
 
#: rhodecode/templates/summary/summary.html:73
 
msgid "public repository"
 
msgstr "公共版本库"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/summary/summary.html:82
 
#: rhodecode/templates/summary/summary.html:83
 
msgid "Fork of"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:86
 
msgid "No changesets yet"
 
msgstr "尚无修订"
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
msgid "This is an notification from RhodeCode."
 
msgstr ""
 

	
 
#: rhodecode/templates/errors/error_document.html:44
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr "文件 diff"
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:328
 
msgid "files"
 
msgstr "文件"
 

	
 
#: rhodecode/templates/files/files.html:44
 
msgid "search truncated"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files.html:45
 
msgid "no matching files"
 
msgstr "没有符合的文件"
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
msgid "Edit file"
 
msgstr "编辑文件"
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
#, fuzzy
 
#| msgid "edit file"
 
msgid "add file"
 
msgstr "编辑文件"
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
#, fuzzy
 
#| msgid "add new user"
 
msgid "Add new file"
 
msgstr "添加新用户"
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
#, fuzzy
 
#| msgid "File names"
 
msgid "File Name"
 
msgstr "文件名"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
#, fuzzy
 
#| msgid "hour"
 
msgid "or"
 
msgstr "时"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
#, fuzzy
 
#| msgid "edit file"
 
msgid "Upload file"
 
msgstr "编辑文件"
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
#, fuzzy, python-format
 
#| msgid "created user %s"
 
#, fuzzy
 
msgid "Create new file"
 
msgstr "创建用户 %s"
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr "位置"
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr "提交信息"
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr "提交修改"
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr "显示"
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr "上一个修订"
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr "下一个修订"
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr "搜索文件列表"
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:65
 
#, fuzzy
 
#| msgid "add new user"
 
msgid "add new file"
 
msgstr "添加新用户"
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr "加载文件列表..."
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr "大小"
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
#, fuzzy
 
#| msgid "next revision"
 
msgid "Last Revision"
 
msgstr "下一个修订"
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr "最后修改"
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgstr "最后提交"
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr "编辑文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "show annotation"
 
msgstr "显示注释"
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:28
 
#: rhodecode/templates/files/files_source.html:56
 
msgid "show as raw"
 
msgstr "显示原始文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:29
 
msgid "download as raw"
 
msgstr "下载原始文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
#, fuzzy
 
#| msgid "show source"
 
msgid "source"
 
msgstr "显示代码"
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
#, fuzzy
 
#| msgid "edit file"
 
msgid "Editing file"
 
msgstr "编辑文件"
 

	
 
#: rhodecode/templates/files/files_source.html:2
 
msgid "History"
 
msgstr "历史"
 

	
 
#: rhodecode/templates/files/files_source.html:24
 
msgid "show source"
 
msgstr "显示代码"
 

	
 
#: rhodecode/templates/files/files_source.html:47
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr "二进制文件(%s)"
 

	
 
#: rhodecode/templates/files/files_source.html:56
 
msgid "File is too big to display"
 
msgstr "文件过大,不能显示"
 

	
 
#: rhodecode/templates/files/files_source.html:112
 
msgid "Selection link"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
#, fuzzy
 
#| msgid "show annotation"
 
msgid "annotation"
 
msgstr "显示注释"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr ""
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr "跟随者"
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
msgid "Started following"
 
msgstr "开始跟随"
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr "分支名"
 

	
 
#: rhodecode/templates/forks/fork.html:57
 
msgid "Private"
 
msgstr "私有"
 

	
 
#: rhodecode/templates/forks/fork.html:65
 
#, fuzzy
 
#| msgid "permissions"
 
msgid "Copy permissions"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/forks/fork.html:73
 
msgid "Update after clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:80
 
msgid "fork this repository"
 
msgstr "对该版本库建立分支"
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr "已有分支"
 

	
 
#: rhodecode/templates/forks/forks_data.html:34
 
msgid "There are no forks yet"
 
msgstr "尚未有任何分支"
 

	
 
#: rhodecode/templates/journal/journal.html:20
 
msgid "Refresh"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#, fuzzy
 
#| msgid "Cache"
 
msgid "Watched"
 
msgstr "缓存"
 

	
 
#: rhodecode/templates/journal/journal.html:105
 
msgid "following user"
 
msgstr "跟随中用户"
 

	
 
#: rhodecode/templates/journal/journal.html:105
 
msgid "user"
 
msgstr "用户"
 

	
 
#: rhodecode/templates/journal/journal.html:138
 
msgid "You are not following any users or repositories"
 
msgstr "尚未跟随任何用户或版本库"
 

	
 
#: rhodecode/templates/journal/journal_data.html:47
 
msgid "No entries yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/public_journal.html:17
 
msgid "Public Journal"
 
msgstr "公共日志"
 

	
 
#: rhodecode/templates/search/search.html:7
 
#: rhodecode/templates/search/search.html:26
 
msgid "in repository: "
 
msgstr "在版本库:"
 

	
 
#: rhodecode/templates/search/search.html:9
 
#: rhodecode/templates/search/search.html:28
 
msgid "in all repositories"
 
msgstr "在所有的版本库"
 

	
 
#: rhodecode/templates/search/search.html:42
 
msgid "Search term"
 
msgstr "搜索短语"
 

	
 
#: rhodecode/templates/search/search.html:54
 
msgid "Search in"
 
msgstr "搜索范围"
 

	
 
#: rhodecode/templates/search/search.html:57
 
msgid "File contents"
 
msgstr "文件内容"
 

	
 
#: rhodecode/templates/search/search.html:59
 
msgid "File names"
 
msgstr "文件名"
 

	
 
#: rhodecode/templates/search/search_content.html:21
 
#: rhodecode/templates/search/search_path.html:15
 
msgid "Permission denied"
 
msgstr "权限不足"
 

	
 
#: rhodecode/templates/shortlog/shortlog.html:5
 
#: rhodecode/templates/summary/summary.html:209
 
msgid "Shortlog"
 
msgstr "简短日志"
 

	
 
#: rhodecode/templates/shortlog/shortlog.html:14
 
msgid "shortlog"
 
msgstr "简短日志"
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:7
 
msgid "age"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:18
 
#, fuzzy
 
#| msgid "commit message"
 
msgid "No commit message"
 
msgstr "提交信息"
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:62
 
msgid "Add or upload files directly via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:71
 
msgid "Push new repo"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:79
 
#, fuzzy
 
#| msgid "Git repository"
 
msgid "Existing repository?"
 
msgstr "Git 版本库"
 

	
 
#: rhodecode/templates/summary/summary.html:12
 
msgid "summary"
 
msgstr "概要"
 

	
 
#: rhodecode/templates/summary/summary.html:44
 
#: rhodecode/templates/summary/summary.html:47
 
#, fuzzy
 
#| msgid "author"
 
msgid "ATOM"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/summary/summary.html:77
 
#, fuzzy, python-format
 
#| msgid "No changes"
 
msgid "Non changable ID %s"
 
msgstr "无变更"
 

	
 
#: rhodecode/templates/summary/summary.html:82
 
msgid "public"
 
msgstr "公共"
 

	
 
#: rhodecode/templates/summary/summary.html:90
 
msgid "remote clone"
 
msgstr "远程 clone"
 

	
 
#: rhodecode/templates/summary/summary.html:121
 
msgid "Clone url"
 
msgstr "clone 地址"
 

	
 
#: rhodecode/templates/summary/summary.html:124
 
msgid "Show by Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:125
 
msgid "Show by ID"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:133
 
#, fuzzy
 
#| msgid "edit file"
 
msgid "Trending files"
 
msgstr "编辑文件"
 

	
 
#: rhodecode/templates/summary/summary.html:141
 
#: rhodecode/templates/summary/summary.html:157
 
#: rhodecode/templates/summary/summary.html:185
 
msgid "enable"
 
msgstr "启用"
 

	
 
#: rhodecode/templates/summary/summary.html:149
 
msgid "Download"
 
msgstr "下载"
 

	
 
#: rhodecode/templates/summary/summary.html:153
 
msgid "There are no downloads yet"
 
msgstr "尚无任何下载"
 

	
 
#: rhodecode/templates/summary/summary.html:155
 
msgid "Downloads are disabled for this repository"
 
msgstr "这个版本库的下载已经禁用"
 

	
 
#: rhodecode/templates/summary/summary.html:164
 
msgid "Check this to download archive with subrepos"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:164
 
msgid "with subrepos"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:177
 
msgid "Commit activity by day / author"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:188
 
msgid "Stats gathered: "
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:211
 
#, fuzzy
 
#| msgid "quick filter..."
 
msgid "Quick start"
 
msgstr "快速过滤..."
 

	
 
#: rhodecode/templates/summary/summary.html:281
 
#, python-format
 
msgid "Download %s as %s"
 
msgstr "下载 %s 作为 %s"
 

	
 
#: rhodecode/templates/summary/summary.html:638
 
msgid "commits"
 
msgstr "提交"
 

	
 
#: rhodecode/templates/summary/summary.html:639
 
msgid "files added"
 
msgstr "文件已添加"
 

	
 
#: rhodecode/templates/summary/summary.html:640
 
msgid "files changed"
 
msgstr "文件已更改"
 

	
 
#: rhodecode/templates/summary/summary.html:641
 
msgid "files removed"
 
msgstr "文件已删除"
 

	
 
#: rhodecode/templates/summary/summary.html:644
 
msgid "commit"
 
msgstr "提交"
 

	
 
#: rhodecode/templates/summary/summary.html:645
 
msgid "file added"
 
msgstr "文件已添加"
 

	
 
#: rhodecode/templates/summary/summary.html:646
 
msgid "file changed"
 
msgstr "文件已更改"
 

	
 
#: rhodecode/templates/summary/summary.html:647
 
msgid "file removed"
 
msgstr "文件已删除"
 

	
 
#~ msgid "Diff is to big and was cut off, see raw diff instead"
 
#~ msgstr "差异比较因过大而被截断,可查看原始差异比较作为替代"
 

	
 
#~ msgid "Binary file"
 
#~ msgstr "二进制文件"
 

	
 
#~ msgid "ADD NEW REPOSITORY"
 
#~ msgstr "新增版本库"
 

	
 
#~ msgid "Percentage of stats gathered"
 
#~ msgstr ""
 

	
 
#~ msgid "My repositories"
 
#~ msgstr "我的版本库"
 

	
 
#~ msgid "links"
 
#~ msgstr "连接"
 

	
 
#~ msgid "showing "
 
#~ msgstr ""
 

	
 
#~ msgid "out of"
 
#~ msgstr ""
 

	
 
#~ msgid "%s files affected with %s additions and %s deletions."
 
#~ msgstr ""
 

	
 
#~ msgid "No changes in this file"
 
#~ msgstr "没有任何修改"
 

	
 
#~ msgid "Diff is to big to display"
 
#~ msgstr ""
 

	
 
#~ msgid "File annotate"
 
#~ msgstr "文件注释"
 

	
 
#~ msgid "annotate"
 
#~ msgstr "注释"
 

	
 
#~ msgid "Following"
 
#~ msgstr "跟随中"
 

	
 
#~ msgid "by"
 
#~ msgstr ""
 

	
 
#~ msgid "Trending source files"
 
#~ msgstr ""
 

	
 
#~ msgid "Feeds"
 
#~ msgstr "订阅"
 

	
 
#~ msgid "Loaded in"
 
#~ msgstr ""
 

	
rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po
Show inline comments
 
# Chinese (Taiwan) translations for RhodeCode.
 
# Copyright (C) 2011 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
 
#
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.2.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-05-24 22:18+0200\n"
 
"POT-Creation-Date: 2012-05-27 17:41+0200\n"
 
"PO-Revision-Date: 2012-05-09 22:23+0800\n"
 
"Last-Translator: Nansen <nansenat16@gmail.com>\n"
 
"Language-Team: zh_TW <LL@li.org>\n"
 
"Plural-Forms: nplurals=1; plural=0\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:96
 
#, fuzzy
 
#| msgid "branches"
 
msgid "All Branches"
 
msgstr "分支"
 

	
 
#: rhodecode/controllers/changeset.py:79
 
msgid "show white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:86 rhodecode/controllers/changeset.py:93
 
msgid "ignore white space"
 
msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:153
 
#, fuzzy, python-format
 
#| msgid "File contents"
 
msgid "%s line context"
 
msgstr "文件內容"
 

	
 
#: rhodecode/controllers/changeset.py:320
 
#: rhodecode/controllers/changeset.py:335 rhodecode/lib/diffs.py:62
 
msgid "binary file"
 
msgstr "二進位檔"
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr "首頁"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
msgstr ""
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "您沒有權限瀏覽這個頁面"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
msgstr "找不到這個資源"
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 

	
 
#: rhodecode/controllers/feed.py:48
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr "修改於版本庫 %s"
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "%s %s feed"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:86
 
#: rhodecode/templates/admin/repos/repo_add.html:13
 
msgid "add new"
 
msgstr "新增"
 

	
 
#: rhodecode/controllers/files.py:87
 
#, fuzzy, python-format
 
#| msgid "There are no files yet"
 
msgid "There are no files yet %s"
 
msgstr "尚未有任何檔案"
 

	
 
#: rhodecode/controllers/files.py:247
 
#, python-format
 
msgid "Edited %s via RhodeCode"
 
msgstr "使用 RhodeCode 編輯 %s"
 

	
 
#: rhodecode/controllers/files.py:252
 
msgid "No changes"
 
msgstr "沒有修改"
 

	
 
#: rhodecode/controllers/files.py:263 rhodecode/controllers/files.py:316
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr "成功遞交至 %s"
 

	
 
#: rhodecode/controllers/files.py:268 rhodecode/controllers/files.py:322
 
msgid "Error occurred during commit"
 
msgstr ""
 

	
 
#: rhodecode/controllers/files.py:288
 
#, fuzzy, python-format
 
#| msgid "Edited %s via RhodeCode"
 
msgid "Added %s via RhodeCode"
 
msgstr "使用 RhodeCode 編輯 %s"
 

	
 
#: rhodecode/controllers/files.py:302
 
#, fuzzy
 
#| msgid "File contents"
 
msgid "No content"
 
msgstr "文件內容"
 

	
 
#: rhodecode/controllers/files.py:306
 
#, fuzzy
 
#| msgid "File names"
 
msgid "No filename"
 
msgstr "檔案名稱"
 

	
 
#: rhodecode/controllers/files.py:347
 
msgid "downloads disabled"
 
msgstr "下載已關閉"
 

	
 
#: rhodecode/controllers/files.py:358
 
#, python-format
 
msgid "Unknown revision %s"
 
msgstr "未知修訂 %s"
 

	
 
#: rhodecode/controllers/files.py:360
 
msgid "Empty repository"
 
msgstr "空的版本庫"
 

	
 
#: rhodecode/controllers/files.py:362
 
msgid "Unknown archive type"
 
msgstr "未知的存檔類型"
 

	
 
#: rhodecode/controllers/files.py:461
 
#: rhodecode/templates/changeset/changeset_range.html:5
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr "變更"
 

	
 
#: rhodecode/controllers/files.py:462 rhodecode/controllers/summary.py:230
 
#: rhodecode/templates/branches/branches.html:5
 
msgid "Branches"
 
msgstr "分支"
 

	
 
#: rhodecode/controllers/files.py:463 rhodecode/controllers/summary.py:231
 
#: rhodecode/templates/tags/tags.html:5
 
msgid "Tags"
 
msgstr "標籤"
 

	
 
#: rhodecode/controllers/forks.py:69 rhodecode/controllers/admin/repos.py:86
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:128 rhodecode/controllers/settings.py:69
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was created or renamed from "
 
"the file system please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/forks.py:163
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "forked %s 版本庫為 %s"
 

	
 
#: rhodecode/controllers/forks.py:177
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/journal.py:53
 
#, python-format
 
msgid "%s public journal %s feed"
 
msgstr "%s 公開日誌 %s feed"
 

	
 
#: rhodecode/controllers/journal.py:190 rhodecode/controllers/journal.py:224
 
#: rhodecode/templates/admin/repos/repo_edit.html:177
 
#: rhodecode/templates/base/base.html:307
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
msgid "Public journal"
 
msgstr "公開日誌"
 

	
 
#: rhodecode/controllers/login.py:116
 
msgid "You have successfully registered into rhodecode"
 
msgstr "您已經成功註冊rhodecode"
 

	
 
#: rhodecode/controllers/login.py:137
 
msgid "Your password reset link was sent"
 
msgstr "您的密碼重設連結已寄出"
 

	
 
#: rhodecode/controllers/login.py:157
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgstr "您的密碼重設動作已完成,新的密碼已寄至您的信箱"
 

	
 
#: rhodecode/controllers/search.py:114
 
msgid "Invalid search query. Try quoting it."
 
msgstr "無效的查詢。請使用跳脫字元"
 

	
 
#: rhodecode/controllers/search.py:119
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr "沒有任何索引可以搜尋。請執行 whoosh 建立索引"
 

	
 
#: rhodecode/controllers/search.py:123
 
msgid "An error occurred during this search operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:103
 
#: rhodecode/controllers/admin/repos.py:211
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr "版本庫 %s 更新完成"
 

	
 
#: rhodecode/controllers/settings.py:121
 
#: rhodecode/controllers/admin/repos.py:229
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:139
 
#: rhodecode/controllers/admin/repos.py:247
 
#, python-format
 
msgid ""
 
"%s repository is not mapped to db perhaps it was moved or renamed  from "
 
"the filesystem please run the application again in order to rescan "
 
"repositories"
 
msgstr ""
 

	
 
#: rhodecode/controllers/settings.py:151
 
#: rhodecode/controllers/admin/repos.py:259
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr "刪除版本庫 %s"
 

	
 
#: rhodecode/controllers/settings.py:155
 
#: rhodecode/controllers/admin/repos.py:269
 
#: rhodecode/controllers/admin/repos.py:275
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr ""
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:139
 
msgid "Statistics are disabled for this repository"
 
msgstr "這個版本庫的統計功能已停用"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:49
 
msgid "BASE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "ONELEVEL"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:51
 
msgid "SUBTREE"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:55
 
msgid "NEVER"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:56
 
msgid "ALLOW"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:57
 
msgid "TRY"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:58
 
msgid "DEMAND"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:59
 
msgid "HARD"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:63
 
msgid "No encryption"
 
msgstr "無加密"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:64
 
msgid "LDAPS connection"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:65
 
msgid "START_TLS on LDAP connection"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:125
 
msgid "Ldap settings updated successfully"
 
msgstr "LDAP設定更新完成"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:129
 
msgid "Unable to activate ldap. The \"python-ldap\" library is missing."
 
msgstr "無法啟用LDAP。找不到python-ldap函式庫"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:146
 
msgid "error occurred during update of ldap settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/permissions.py:59
 
msgid "None"
 
msgstr "無"
 

	
 
#: rhodecode/controllers/admin/permissions.py:60
 
msgid "Read"
 
msgstr "讀"
 

	
 
#: rhodecode/controllers/admin/permissions.py:61
 
msgid "Write"
 
msgstr "寫"
 

	
 
#: rhodecode/controllers/admin/permissions.py:62
 
#: rhodecode/templates/admin/ldap/ldap.html:9
 
#: rhodecode/templates/admin/permissions/permissions.html:9
 
#: rhodecode/templates/admin/repos/repo_add.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:9
 
#: rhodecode/templates/admin/repos/repos.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/admin/users/user_add.html:8
 
#: rhodecode/templates/admin/users/user_edit.html:9
 
#: rhodecode/templates/admin/users/user_edit.html:122
 
#: rhodecode/templates/admin/users/users.html:9
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:8
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 
#: rhodecode/templates/admin/users_groups/users_groups.html:9
 
#: rhodecode/templates/base/base.html:197
 
#: rhodecode/templates/base/base.html:326
 
#: rhodecode/templates/base/base.html:328
 
#: rhodecode/templates/base/base.html:330
 
msgid "Admin"
 
msgstr "管理"
 

	
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "disabled"
 
msgstr "停用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr "允許手動啟用帳號"
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
msgid "allowed with automatic account activation"
 
msgstr "允許自動啟用帳號"
 

	
 
#: rhodecode/controllers/admin/permissions.py:71
 
msgid "Disabled"
 
msgstr "停用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:72
 
msgid "Enabled"
 
msgstr "啟用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:106
 
msgid "Default permissions updated successfully"
 
msgstr "預設權限更新完成"
 

	
 
#: rhodecode/controllers/admin/permissions.py:123
 
msgid "error occurred during update of permissions"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:116
 
msgid "--REMOVE FORK--"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:144
 
#, python-format
 
msgid "created repository %s from %s"
 
msgstr "建立版本庫 %s 到 %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:148
 
#, python-format
 
msgid "created repository %s"
 
msgstr "建立版本庫 %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:177
 
#, python-format
 
msgid "error occurred during creation of repository %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:264
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:293
 
msgid "An error occurred during deletion of repository user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:312
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:329
 
msgid "An error occurred during deletion of repository stats"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:345
 
msgid "An error occurred during cache invalidation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:365
 
msgid "Updated repository visibility in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:369
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:374 rhodecode/model/forms.py:54
 
msgid "Token mismatch"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:387
 
msgid "Pulled from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:389
 
msgid "An error occurred during pull from remote location"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:405
 
msgid "Nothing"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos.py:407
 
#, fuzzy, python-format
 
#| msgid "created repository %s from %s"
 
msgid "Marked repo %s as fork of %s"
 
msgstr "建立版本庫 %s 到 %s"
 

	
 
#: rhodecode/controllers/admin/repos.py:411
 
msgid "An error occurred during this operation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:119
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "建立版本庫群組 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:132
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:166
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "更新版本庫群組 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:179
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:198
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:205
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr "移除版本庫群組 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:210
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:215
 
#: rhodecode/controllers/admin/repos_groups.py:220
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:260
 
msgid "An error occurred during deletion of group users groups"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:120
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
msgid "Whoosh reindex task scheduled"
 
msgstr "Whoosh 重新索引工作排程"
 

	
 
#: rhodecode/controllers/admin/settings.py:154
 
msgid "Updated application settings"
 
msgstr "更新應用設定"
 

	
 
#: rhodecode/controllers/admin/settings.py:159
 
#: rhodecode/controllers/admin/settings.py:226
 
msgid "error occurred during updating application settings"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:221
 
msgid "Updated mercurial settings"
 
msgstr "更新 mercurial 設定"
 

	
 
#: rhodecode/controllers/admin/settings.py:246
 
msgid "Added new hook"
 
msgstr "新增hook"
 

	
 
#: rhodecode/controllers/admin/settings.py:258
 
msgid "Updated hooks"
 
msgstr "更新hook"
 

	
 
#: rhodecode/controllers/admin/settings.py:262
 
msgid "error occurred during hook creation"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:281
 
msgid "Email task created"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:336
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/settings.py:365
 
msgid "Your account was updated successfully"
 
msgstr "您的帳號已更新完成"
 

	
 
#: rhodecode/controllers/admin/settings.py:384
 
#: rhodecode/controllers/admin/users.py:132
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:79
 
#, python-format
 
msgid "created user %s"
 
msgstr "建立使用者 %s"
 

	
 
#: rhodecode/controllers/admin/users.py:92
 
#, python-format
 
msgid "error occurred during creation of user %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:118
 
msgid "User updated successfully"
 
msgstr "使用者更新完成"
 

	
 
#: rhodecode/controllers/admin/users.py:149
 
msgid "successfully deleted user"
 
msgstr "成功刪除使用者"
 

	
 
#: rhodecode/controllers/admin/users.py:154
 
msgid "An error occurred during deletion of user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:169
 
msgid "You can't edit this user"
 
msgstr "您無法編輯這位使用者"
 

	
 
#: rhodecode/controllers/admin/users.py:199
 
#: rhodecode/controllers/admin/users_groups.py:215
 
msgid "Granted 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users.py:208
 
#: rhodecode/controllers/admin/users_groups.py:225
 
msgid "Revoked 'repository create' permission to user"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:79
 
#, python-format
 
msgid "created users group %s"
 
msgstr "建立使用者群組 %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:92
 
#, python-format
 
msgid "error occurred during creation of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:128
 
#, python-format
 
msgid "updated users group %s"
 
msgstr "更新使用者群組 %s"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:148
 
#, python-format
 
msgid "error occurred during update of users group %s"
 
msgstr ""
 

	
 
#: rhodecode/controllers/admin/users_groups.py:165
 
msgid "successfully deleted users group"
 
msgstr "成功移除使用者群組"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:170
 
msgid "An error occurred during deletion of users group"
 
msgstr ""
 

	
 
#: rhodecode/lib/auth.py:497
 
msgid "You need to be a registered user to perform this action"
 
msgstr "您必須是註冊使用者才能執行這個動作"
 

	
 
#: rhodecode/lib/auth.py:538
 
msgid "You need to be a signed in to view this page"
 
msgstr "您必須登入後才能瀏覽這個頁面"
 

	
 
#: rhodecode/lib/diffs.py:78
 
msgid "Changeset was to big and was cut off, use diff menu to display this diff"
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 

	
 
#: rhodecode/lib/diffs.py:88
 
#, fuzzy
 
#| msgid "No changesets yet"
 
msgid "No changes detected"
 
msgstr "尚未有任何變更"
 

	
 
#: rhodecode/lib/helpers.py:414
 
#: rhodecode/lib/helpers.py:415
 
msgid "True"
 
msgstr "真"
 

	
 
#: rhodecode/lib/helpers.py:418
 
#: rhodecode/lib/helpers.py:419
 
msgid "False"
 
msgstr "假"
 

	
 
#: rhodecode/lib/helpers.py:462
 
#: rhodecode/lib/helpers.py:463
 
#, fuzzy
 
#| msgid "changeset"
 
msgid "Changeset not found"
 
msgstr "修改"
 

	
 
#: rhodecode/lib/helpers.py:485
 
#: rhodecode/lib/helpers.py:486
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:491
 
#: rhodecode/lib/helpers.py:492
 
msgid "compare view"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:511
 
#: rhodecode/lib/helpers.py:512
 
msgid "and"
 
msgstr "和"
 

	
 
#: rhodecode/lib/helpers.py:512
 
#: rhodecode/lib/helpers.py:513
 
#, python-format
 
msgid "%s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:513 rhodecode/templates/changelog/changelog.html:40
 
#: rhodecode/lib/helpers.py:514 rhodecode/templates/changelog/changelog.html:40
 
msgid "revisions"
 
msgstr "修訂"
 

	
 
#: rhodecode/lib/helpers.py:536
 
#: rhodecode/lib/helpers.py:537
 
msgid "fork name "
 
msgstr "fork 名稱"
 

	
 
#: rhodecode/lib/helpers.py:539
 
#: rhodecode/lib/helpers.py:540
 
msgid "[deleted] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:540 rhodecode/lib/helpers.py:545
 
#: rhodecode/lib/helpers.py:541 rhodecode/lib/helpers.py:546
 
msgid "[created] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:541
 
#, fuzzy, python-format
 
#| msgid "created repository %s"
 
#: rhodecode/lib/helpers.py:542
 
#, fuzzy
 
msgid "[created] repository as fork"
 
msgstr "建立版本庫 %s"
 

	
 
#: rhodecode/lib/helpers.py:542 rhodecode/lib/helpers.py:546
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
msgid "[forked] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:543 rhodecode/lib/helpers.py:547
 
#: rhodecode/lib/helpers.py:544 rhodecode/lib/helpers.py:548
 
msgid "[updated] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:544
 
#: rhodecode/lib/helpers.py:545
 
msgid "[delete] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:548
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:549
 
msgid "[committed via RhodeCode] into"
 
msgid "[pushed] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:550
 
msgid "[pulled from remote] into"
 
msgid "[committed via RhodeCode] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:551
 
msgid "[pulled] from"
 
msgid "[pulled from remote] into"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:552
 
msgid "[started following] repository"
 
msgid "[pulled] from"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:553
 
msgid "[started following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:554
 
msgid "[stopped following] repository"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:731
 
#: rhodecode/lib/helpers.py:732
 
#, python-format
 
msgid " and %s more"
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:735
 
#: rhodecode/lib/helpers.py:736
 
msgid "No Files"
 
msgstr "沒有檔案"
 

	
 
#: rhodecode/lib/utils2.py:335
 
#, fuzzy, python-format
 
#| msgid "year"
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "年"
 

	
 
#: rhodecode/lib/utils2.py:336
 
#, fuzzy, python-format
 
#| msgid "month"
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "月"
 

	
 
#: rhodecode/lib/utils2.py:337
 
#, fuzzy, python-format
 
#| msgid "day"
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "日"
 

	
 
#: rhodecode/lib/utils2.py:338
 
#, fuzzy, python-format
 
#| msgid "hour"
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "時"
 

	
 
#: rhodecode/lib/utils2.py:339
 
#, fuzzy, python-format
 
#| msgid "minute"
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "分"
 

	
 
#: rhodecode/lib/utils2.py:340
 
#, fuzzy, python-format
 
#| msgid "second"
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "秒"
 

	
 
#: rhodecode/lib/utils2.py:355
 
#, fuzzy, python-format
 
#| msgid "ago"
 
msgid "%s ago"
 
msgstr "之前"
 

	
 
#: rhodecode/lib/utils2.py:357
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:360
 
msgid "just now"
 
msgstr "現在"
 

	
 
#: rhodecode/lib/celerylib/tasks.py:269
 
#, fuzzy
 
#| msgid "Your password reset link was sent"
 
msgid "password reset link"
 
msgstr "您的密碼重設連結已寄出"
 

	
 
#: rhodecode/model/comment.py:85
 
#, python-format
 
msgid "on line %s"
 
msgstr ""
 

	
 
#: rhodecode/model/comment.py:113
 
msgid "[Mention]"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:72
 
msgid "Invalid username"
 
msgstr "無效的使用者名稱"
 

	
 
#: rhodecode/model/forms.py:80
 
msgid "This username already exists"
 
msgstr "使用者名稱已存在"
 

	
 
#: rhodecode/model/forms.py:85
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or"
 
" dashes and must begin with alphanumeric character"
 
msgstr "使用者名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭"
 

	
 
#: rhodecode/model/forms.py:101
 
msgid "Invalid group name"
 
msgstr "無效的群組名稱"
 

	
 
#: rhodecode/model/forms.py:111
 
msgid "This users group already exists"
 
msgstr "這個使用者群組已存在"
 

	
 
#: rhodecode/model/forms.py:117
 
#, fuzzy
 
#| msgid "" "Group name may only contain alphanumeric characters underscores,
 
#| periods " "or dashes and must begin with alphanumeric character"
 
msgid ""
 
"RepoGroup name may only contain  alphanumeric characters underscores, "
 
"periods or dashes and must begin with alphanumeric character"
 
msgstr "群組名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭"
 

	
 
#: rhodecode/model/forms.py:145
 
msgid "Cannot assign this group as parent"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:164
 
msgid "This group already exists"
 
msgstr "這個群組已存在"
 

	
 
#: rhodecode/model/forms.py:176
 
#, fuzzy
 
#| msgid "This repository already exists"
 
msgid "Repository with this name already exists"
 
msgstr "這個版本庫已經存在"
 

	
 
#: rhodecode/model/forms.py:195 rhodecode/model/forms.py:204
 
#: rhodecode/model/forms.py:213
 
msgid "Invalid characters in password"
 
msgstr "無效的字元在密碼中"
 

	
 
#: rhodecode/model/forms.py:226
 
msgid "Passwords do not match"
 
msgstr "密碼不相符"
 

	
 
#: rhodecode/model/forms.py:232
 
msgid "invalid password"
 
msgstr "無效的密碼"
 

	
 
#: rhodecode/model/forms.py:233
 
msgid "invalid user name"
 
msgstr "無效的使用者名稱"
 

	
 
#: rhodecode/model/forms.py:234
 
msgid "Your account is disabled"
 
msgstr "您的帳號已被停用"
 

	
 
#: rhodecode/model/forms.py:274
 
msgid "This username is not valid"
 
msgstr "無效的使用者名稱"
 

	
 
#: rhodecode/model/forms.py:287
 
msgid "This repository name is disallowed"
 
msgstr "不允許的版本庫名稱"
 

	
 
#: rhodecode/model/forms.py:310
 
#, fuzzy, python-format
 
#| msgid "This repository already exists in group \"%s\""
 
msgid "This repository already exists in a group \"%s\""
 
msgstr "這個版本庫已存在於群組 \"%s\""
 

	
 
#: rhodecode/model/forms.py:317
 
#, python-format
 
msgid "There is a group with this name already \"%s\""
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:324
 
msgid "This repository already exists"
 
msgstr "這個版本庫已經存在"
 

	
 
#: rhodecode/model/forms.py:367
 
msgid "invalid clone url"
 
msgstr "無效的複製URL"
 

	
 
#: rhodecode/model/forms.py:384
 
msgid "Invalid clone url, provide a valid clone http\\s url"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:398
 
msgid "Fork have to be the same type as original"
 
msgstr "Fork 必須使用相同的版本庫類型"
 

	
 
#: rhodecode/model/forms.py:414
 
msgid "This username or users group name is not valid"
 
msgstr "使用者名稱或群組名稱無效"
 

	
 
#: rhodecode/model/forms.py:480
 
msgid "This is not a valid path"
 
msgstr "不是一個有效的路徑"
 

	
 
#: rhodecode/model/forms.py:494
 
msgid "This e-mail address is already taken"
 
msgstr "這個郵件位址已經使用了"
 

	
 
#: rhodecode/model/forms.py:507
 
msgid "This e-mail address doesn't exist."
 
msgstr "這個郵件位址不存在"
 

	
 
#: rhodecode/model/forms.py:530
 
msgid ""
 
"The LDAP Login attribute of the CN must be specified - this is the name "
 
"of the attribute that is equivalent to 'username'"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:549
 
msgid "Please enter a login"
 
msgstr "請登入"
 

	
 
#: rhodecode/model/forms.py:550
 
#, python-format
 
msgid "Enter a value %(min)i characters long or more"
 
msgstr ""
 

	
 
#: rhodecode/model/forms.py:558
 
msgid "Please enter a password"
 
msgstr "請輸入密碼"
 

	
 
#: rhodecode/model/forms.py:559
 
#, python-format
 
msgid "Enter %(min)i characters or more"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:175
 
msgid "commented on commit"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:176
 
#, fuzzy
 
#| msgid "commit message"
 
msgid "sent message"
 
msgstr "遞交資訊"
 

	
 
#: rhodecode/model/notification.py:177
 
msgid "mentioned you"
 
msgstr ""
 

	
 
#: rhodecode/model/notification.py:178
 
#, fuzzy
 
#| msgid "You have successfully registered into rhodecode"
 
msgid "registered in RhodeCode"
 
msgstr "您已經成功註冊rhodecode"
 

	
 
#: rhodecode/model/user.py:235
 
#, fuzzy
 
#| msgid "[RhodeCode] New User registration"
 
msgid "new user registration"
 
msgstr "[RhodeCode] 新使用者註冊"
 

	
 
#: rhodecode/model/user.py:259 rhodecode/model/user.py:279
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr "您無法編輯這個使用者,因為他是系統帳號"
 

	
 
#: rhodecode/model/user.py:300
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr "您無法移除這個使用者,因為他是系統帳號"
 

	
 
#: rhodecode/model/user.py:306
 
#, fuzzy, python-format
 
#| msgid "" "This user still owns %s repositories and cannot be removed. Switch
 
#| owners" " or remove those repositories"
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr "這個使用者擁有 %s 個版本庫所以無法移除,請先變更版本庫擁有者或者刪除版本庫"
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr "儀表板"
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:115
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:31
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr "快速過濾..."
 

	
 
#: rhodecode/templates/index_base.html:6 rhodecode/templates/base/base.html:218
 
msgid "repositories"
 
msgstr "個版本庫"
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:22
 
msgid "ADD REPOSITORY"
 
msgstr "新增版本庫"
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
 
msgid "Group name"
 
msgstr "群組名稱"
 

	
 
#: rhodecode/templates/index_base.html:30
 
#: rhodecode/templates/index_base.html:67
 
#: rhodecode/templates/index_base.html:132
 
#: rhodecode/templates/index_base.html:158
 
#: rhodecode/templates/admin/repos/repo_add_base.html:47
 
#: rhodecode/templates/admin/repos/repo_edit.html:66
 
#: rhodecode/templates/admin/repos/repos.html:37
 
#: rhodecode/templates/admin/repos/repos.html:84
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
 
#: rhodecode/templates/forks/fork.html:49
 
#: rhodecode/templates/settings/repo_settings.html:57
 
#: rhodecode/templates/summary/summary.html:100
 
msgid "Description"
 
msgstr "描述"
 

	
 
#: rhodecode/templates/index_base.html:40
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
 
msgid "Repositories group"
 
msgstr "版本庫群組"
 

	
 
#: rhodecode/templates/index_base.html:66
 
#: rhodecode/templates/index_base.html:156
 
#: rhodecode/templates/admin/repos/repo_add_base.html:9
 
#: rhodecode/templates/admin/repos/repo_edit.html:32
 
#: rhodecode/templates/admin/repos/repos.html:36
 
#: rhodecode/templates/admin/repos/repos.html:82
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:133
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:183
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:249
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:284
 
#: rhodecode/templates/bookmarks/bookmarks.html:36
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:6
 
#: rhodecode/templates/branches/branches.html:36
 
#: rhodecode/templates/files/files_browser.html:47
 
#: rhodecode/templates/journal/journal.html:50
 
#: rhodecode/templates/journal/journal.html:98
 
#: rhodecode/templates/journal/journal.html:177
 
#: rhodecode/templates/settings/repo_settings.html:31
 
#: rhodecode/templates/summary/summary.html:38
 
#: rhodecode/templates/summary/summary.html:114
 
#: rhodecode/templates/tags/tags.html:36
 
#: rhodecode/templates/tags/tags_data.html:6
 
msgid "Name"
 
msgstr "名稱"
 

	
 
#: rhodecode/templates/index_base.html:68
 
#: rhodecode/templates/admin/repos/repos.html:38
 
msgid "Last change"
 
msgstr "最後修改"
 

	
 
#: rhodecode/templates/index_base.html:69
 
#: rhodecode/templates/index_base.html:161
 
#: rhodecode/templates/admin/repos/repos.html:39
 
#: rhodecode/templates/admin/repos/repos.html:87
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:251
 
#: rhodecode/templates/journal/journal.html:179
 
msgid "Tip"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:70
 
#: rhodecode/templates/index_base.html:163
 
#: rhodecode/templates/admin/repos/repo_edit.html:103
 
#: rhodecode/templates/admin/repos/repos.html:89
 
msgid "Owner"
 
msgstr "擁有者"
 

	
 
#: rhodecode/templates/index_base.html:71
 
#: rhodecode/templates/journal/public_journal.html:20
 
#: rhodecode/templates/summary/summary.html:43
 
#: rhodecode/templates/summary/summary.html:46
 
msgid "RSS"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:72
 
#: rhodecode/templates/journal/public_journal.html:23
 
msgid "Atom"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:102
 
#: rhodecode/templates/index_base.html:104
 
#, python-format
 
msgid "Subscribe to %s rss feed"
 
msgstr "訂閱 %s rss"
 

	
 
#: rhodecode/templates/index_base.html:109
 
#: rhodecode/templates/index_base.html:111
 
#, python-format
 
msgid "Subscribe to %s atom feed"
 
msgstr "訂閱 %s atom"
 

	
 
#: rhodecode/templates/index_base.html:130
 
#, fuzzy
 
#| msgid "group name"
 
msgid "Group Name"
 
msgstr "群組名稱"
 

	
 
#: rhodecode/templates/index_base.html:148
 
#: rhodecode/templates/index_base.html:188
 
#: rhodecode/templates/admin/repos/repos.html:112
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:270
 
#: rhodecode/templates/bookmarks/bookmarks.html:60
 
#: rhodecode/templates/branches/branches.html:60
 
#: rhodecode/templates/journal/journal.html:202
 
#: rhodecode/templates/tags/tags.html:60
 
msgid "Click to sort ascending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:149
 
#: rhodecode/templates/index_base.html:189
 
#: rhodecode/templates/admin/repos/repos.html:113
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:271
 
#: rhodecode/templates/bookmarks/bookmarks.html:61
 
#: rhodecode/templates/branches/branches.html:61
 
#: rhodecode/templates/journal/journal.html:203
 
#: rhodecode/templates/tags/tags.html:61
 
msgid "Click to sort descending"
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:159
 
#: rhodecode/templates/admin/repos/repos.html:85
 
#, fuzzy
 
#| msgid "Last change"
 
msgid "Last Change"
 
msgstr "最後修改"
 

	
 
#: rhodecode/templates/index_base.html:190
 
#: rhodecode/templates/admin/repos/repos.html:114
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:272
 
#: rhodecode/templates/bookmarks/bookmarks.html:62
 
#: rhodecode/templates/branches/branches.html:62
 
#: rhodecode/templates/journal/journal.html:204
 
#: rhodecode/templates/tags/tags.html:62
 
msgid "No records found."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:191
 
#: rhodecode/templates/admin/repos/repos.html:115
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:273
 
#: rhodecode/templates/bookmarks/bookmarks.html:63
 
#: rhodecode/templates/branches/branches.html:63
 
#: rhodecode/templates/journal/journal.html:205
 
#: rhodecode/templates/tags/tags.html:63
 
msgid "Data error."
 
msgstr ""
 

	
 
#: rhodecode/templates/index_base.html:192
 
#: rhodecode/templates/admin/repos/repos.html:116
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:274
 
#: rhodecode/templates/bookmarks/bookmarks.html:64
 
#: rhodecode/templates/branches/branches.html:64
 
#: rhodecode/templates/journal/journal.html:206
 
#: rhodecode/templates/tags/tags.html:64
 
#, fuzzy
 
#| msgid "loading..."
 
msgid "Loading..."
 
msgstr "載入中..."
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/login.html:21
 
msgid "Sign In to"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:49
 
#: rhodecode/templates/base/base.html:83
 
#: rhodecode/templates/summary/summary.html:113
 
msgid "Username"
 
msgstr "帳號"
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
msgid "Password"
 
msgstr "密碼"
 

	
 
#: rhodecode/templates/login.html:50
 
#, fuzzy
 
#| msgid "member"
 
msgid "Remember me"
 
msgstr "成員"
 

	
 
#: rhodecode/templates/login.html:60
 
msgid "Forgot your password ?"
 
msgstr "忘記您的密碼?"
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr "沒有帳號?"
 

	
 
#: rhodecode/templates/password_reset.html:5
 
msgid "Reset your password"
 
msgstr "重設您的密碼"
 

	
 
#: rhodecode/templates/password_reset.html:11
 
msgid "Reset your password to"
 
msgstr "重設您的密碼"
 

	
 
#: rhodecode/templates/password_reset.html:21
 
msgid "Email address"
 
msgstr "郵件位址"
 

	
 
#: rhodecode/templates/password_reset.html:30
 
msgid "Reset my password"
 
msgstr "重設我的密碼"
 

	
 
#: rhodecode/templates/password_reset.html:31
 
msgid "Password reset link will be send to matching email address"
 
msgstr "密碼重設連結已郵寄至您的信箱"
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/register.html:11
 
msgid "Sign Up to"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/register.html:38
 
msgid "Re-enter password"
 
msgstr "確認密碼"
 

	
 
#: rhodecode/templates/register.html:47
 
#: rhodecode/templates/admin/users/user_add.html:59
 
#: rhodecode/templates/admin/users/user_edit.html:86
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:76
 
msgid "First Name"
 
msgstr "名"
 

	
 
#: rhodecode/templates/register.html:56
 
#: rhodecode/templates/admin/users/user_add.html:68
 
#: rhodecode/templates/admin/users/user_edit.html:95
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:85
 
msgid "Last Name"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/register.html:65
 
#: rhodecode/templates/admin/users/user_add.html:77
 
#: rhodecode/templates/admin/users/user_edit.html:104
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:94
 
#: rhodecode/templates/summary/summary.html:115
 
msgid "Email"
 
msgstr "電子郵件"
 

	
 
#: rhodecode/templates/register.html:76
 
msgid "Your account will be activated right after registration"
 
msgstr "您的帳號註冊後將會啟用"
 

	
 
#: rhodecode/templates/register.html:78
 
msgid "Your account must wait for activation by administrator"
 
msgstr "您的帳號註冊後將等待管理員啟用"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:11
 
#: rhodecode/templates/admin/repos/repo_add_base.html:56
 
#: rhodecode/templates/admin/repos/repo_edit.html:76
 
#: rhodecode/templates/settings/repo_settings.html:67
 
msgid "Private repository"
 
msgstr "私有的版本庫"
 

	
 
#: rhodecode/templates/repo_switcher_list.html:16
 
msgid "Public repository"
 
msgstr "公開的版本庫"
 

	
 
#: rhodecode/templates/switch_to_list.html:3
 
#: rhodecode/templates/branches/branches.html:14
 
msgid "branches"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/switch_to_list.html:10
 
#: rhodecode/templates/branches/branches_data.html:51
 
msgid "There are no branches yet"
 
msgstr "沒有任何分支"
 

	
 
#: rhodecode/templates/switch_to_list.html:15
 
#: rhodecode/templates/shortlog/shortlog_data.html:10
 
#: rhodecode/templates/tags/tags.html:15
 
msgid "tags"
 
msgstr "標籤"
 

	
 
#: rhodecode/templates/switch_to_list.html:22
 
#: rhodecode/templates/tags/tags_data.html:33
 
msgid "There are no tags yet"
 
msgstr "沒有任何標籤"
 

	
 
#: rhodecode/templates/switch_to_list.html:28
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
#, fuzzy
 
#| msgid "There are no forks yet"
 
msgid "There are no bookmarks yet"
 
msgstr "尚未有任何 fork"
 

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr "管理員日誌"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:41
 
#: rhodecode/templates/admin/repos/repos.html:90
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:135
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:136
 
#: rhodecode/templates/journal/journal.html:52
 
#: rhodecode/templates/journal/journal.html:53
 
msgid "Action"
 
msgstr "動作"
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
msgstr "版本庫"
 

	
 
#: rhodecode/templates/admin/admin_log.html:8
 
#: rhodecode/templates/bookmarks/bookmarks.html:37
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:7
 
#: rhodecode/templates/branches/branches.html:37
 
#: rhodecode/templates/tags/tags.html:37
 
#: rhodecode/templates/tags/tags_data.html:7
 
msgid "Date"
 
msgstr "時間"
 

	
 
#: rhodecode/templates/admin/admin_log.html:9
 
msgid "From IP"
 
msgstr "來源IP"
 

	
 
#: rhodecode/templates/admin/admin_log.html:52
 
msgid "No actions yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:5
 
msgid "LDAP administration"
 
msgstr "LDAP管理者"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:11
 
msgid "Ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:28
 
msgid "Connection settings"
 
msgstr "連接設定"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:30
 
msgid "Enable LDAP"
 
msgstr "啟動LDAP"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:34
 
msgid "Host"
 
msgstr "主機"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:38
 
msgid "Port"
 
msgstr "連接埠"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:42
 
msgid "Account"
 
msgstr "帳號"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:50
 
msgid "Connection security"
 
msgstr "連接安全性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:54
 
msgid "Certificate Checks"
 
msgstr "憑證確認"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:57
 
msgid "Search settings"
 
msgstr "搜尋選項"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:59
 
msgid "Base DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:63
 
msgid "LDAP Filter"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:67
 
msgid "LDAP Search Scope"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:70
 
msgid "Attribute mappings"
 
msgstr "屬性對應"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:72
 
msgid "Login Attribute"
 
msgstr "登入屬性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:76
 
msgid "First Name Attribute"
 
msgstr "名"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:80
 
msgid "Last Name Attribute"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:84
 
msgid "E-mail Attribute"
 
msgstr "電子郵件屬性"
 

	
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
 
#: rhodecode/templates/admin/settings/hooks.html:73
 
#: rhodecode/templates/admin/users/user_edit.html:129
 
#: rhodecode/templates/admin/users/user_edit.html:154
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:102
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:115
 
#: rhodecode/templates/settings/repo_settings.html:84
 
msgid "Save"
 
msgstr "儲存"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:5
 
#: rhodecode/templates/admin/notifications/notifications.html:9
 
msgid "My Notifications"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "Mark all read"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:38
 
msgid "No notifications here yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
#: rhodecode/templates/admin/notifications/show_notification.html:11
 
#, fuzzy
 
#| msgid "show annotation"
 
msgid "Show notification"
 
msgstr "險是註釋"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:9
 
#, fuzzy
 
#| msgid "Location"
 
msgid "Notifications"
 
msgstr "位置"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:5
 
msgid "Permissions administration"
 
msgstr "權限管理員"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
 
#: rhodecode/templates/admin/users/user_edit.html:139
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:100
 
#: rhodecode/templates/settings/repo_settings.html:77
 
msgid "Permissions"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:24
 
msgid "Default permissions"
 
msgstr "預設權限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:31
 
msgid "Anonymous access"
 
msgstr "訪客權限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:41
 
msgid "Repository permission"
 
msgstr "版本庫權限"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:49
 
msgid ""
 
"All default permissions on each repository will be reset to choosen "
 
"permission, note that all custom default permission on repositories will "
 
"be lost"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:50
 
msgid "overwrite existing settings"
 
msgstr "複寫已存在設定"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:55
 
msgid "Registration"
 
msgstr "註冊"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:63
 
msgid "Repository creation"
 
msgstr "版本庫建立"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:71
 
#: rhodecode/templates/admin/repos/repo_edit.html:218
 
msgid "set"
 
msgstr "設定"
 

	
 
#: rhodecode/templates/admin/repos/repo_add.html:5
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
 
msgid "Add repository"
 
msgstr "新增版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_add.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:11
 
#: rhodecode/templates/admin/repos/repos.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
 
msgid "Repositories"
 
msgstr "版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:20
 
#: rhodecode/templates/summary/summary.html:90
 
#: rhodecode/templates/summary/summary.html:91
 
msgid "Clone from"
 
msgstr "複製由"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:24
 
#: rhodecode/templates/admin/repos/repo_edit.html:44
 
#: rhodecode/templates/settings/repo_settings.html:43
 
msgid "Optional http[s] url from which repository should be cloned."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:29
 
#: rhodecode/templates/admin/repos/repo_edit.html:49
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
 
#: rhodecode/templates/forks/fork.html:41
 
#: rhodecode/templates/settings/repo_settings.html:48
 
msgid "Repository group"
 
msgstr "版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:33
 
#: rhodecode/templates/admin/repos/repo_edit.html:53
 
#: rhodecode/templates/settings/repo_settings.html:52
 
msgid "Optional select a group to put this repository into."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
#: rhodecode/templates/admin/repos/repo_edit.html:58
 
msgid "Type"
 
msgstr "類型"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:42
 
#, fuzzy
 
#| msgid "Repository creation"
 
msgid "Type of repository to create."
 
msgstr "版本庫建立"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:51
 
#: rhodecode/templates/admin/repos/repo_edit.html:70
 
#: rhodecode/templates/settings/repo_settings.html:61
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:60
 
#: rhodecode/templates/admin/repos/repo_edit.html:80
 
#: rhodecode/templates/settings/repo_settings.html:71
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:64
 
msgid "add"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr "新增版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr "編輯版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit.html:13
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
 
#: rhodecode/templates/files/files_source.html:32
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "edit"
 
msgstr "編輯"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:40
 
#: rhodecode/templates/settings/repo_settings.html:39
 
msgid "Clone uri"
 
msgstr "複製URL"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:85
 
msgid "Enable statistics"
 
msgstr "啟用統計"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
msgid "Enable statistics window on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
msgid "Enable downloads"
 
msgstr "啟用下載"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:98
 
msgid "Enable download menu on summary page."
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:108
 
#, fuzzy, python-format
 
#| msgid "Changes on %s repository"
 
#, fuzzy
 
msgid "Change owner of this repository."
 
msgstr "修改於版本庫 %s"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:134
 
msgid "Administration"
 
msgstr "管理者"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:137
 
msgid "Statistics"
 
msgstr "統計"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Reset current statistics"
 
msgstr "重設目前的統計"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:141
 
msgid "Confirm to remove current statistics"
 
msgstr "確認移除目前的統計"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:144
 
msgid "Fetched to rev"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:145
 
msgid "Stats gathered"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:153
 
msgid "Remote"
 
msgstr "遠端"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:157
 
msgid "Pull changes from remote location"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:157
 
msgid "Confirm to pull changes from remote side"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:168
 
msgid "Cache"
 
msgstr "快取"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:172
 
msgid "Invalidate repository cache"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:172
 
msgid "Confirm to invalidate repository cache"
 
msgstr "確認廢止版本庫快取"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:183
 
msgid "Remove from public journal"
 
msgstr "從公開日誌移除"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:185
 
msgid "Add to public journal"
 
msgstr "新增至公開日誌"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:190
 
msgid ""
 
"All actions made on this repository will be accessible to everyone in "
 
"public journal"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:197
 
#: rhodecode/templates/changeset/changeset_file_comment.html:19
 
msgid "Delete"
 
msgstr "移除"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:201
 
msgid "Remove this repository"
 
msgstr "移除版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:201
 
msgid "Confirm to delete this repository"
 
msgstr "確認移除這個版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:205
 
msgid ""
 
"This repository will be renamed in a special way in order to be "
 
"unaccesible for RhodeCode and VCS systems.\n"
 
"                         If you need fully delete it from filesystem "
 
"please do it manually"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:213
 
msgid "Set as fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:222
 
msgid "Manually set this repository as a fork of another"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
msgid "none"
 
msgstr "無"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:4
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
 
msgid "read"
 
msgstr "讀"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr "寫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:38
 
#: rhodecode/templates/base/base.html:214
 
msgid "admin"
 
msgstr "管理員"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
 
msgid "member"
 
msgstr "成員"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:61
 
#: rhodecode/templates/journal/journal.html:123
 
#: rhodecode/templates/summary/summary.html:71
 
msgid "private repository"
 
msgstr "私有版本庫"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:64
 
msgid "Add another member"
 
msgstr "新增另ㄧ位成員"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:78
 
msgid "Failed to remove user"
 
msgstr "移除使用者失敗"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:93
 
msgid "Failed to remove users group"
 
msgstr "移除使用者群組失敗"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:123
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:112
 
msgid "Group"
 
msgstr "群組"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:124
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:113
 
#: rhodecode/templates/admin/users_groups/users_groups.html:33
 
msgid "members"
 
msgstr "成員"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr "版本庫管理員"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:40
 
#: rhodecode/templates/summary/summary.html:107
 
msgid "Contact"
 
msgstr "聯絡方式"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#: rhodecode/templates/admin/users/users.html:55
 
#: rhodecode/templates/admin/users_groups/users_groups.html:44
 
msgid "delete"
 
msgstr "刪除"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:158
 
#, fuzzy, python-format
 
#| msgid "Confirm to delete this repository"
 
msgid "Confirm to delete this repository: %s"
 
msgstr "確認移除這個版本庫"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
 
msgid "Groups"
 
msgstr "群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
msgid "with"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr "新增版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr "版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
 
msgid "add new repos group"
 
msgstr "新增版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
 
msgid "Group parent"
 
msgstr "父群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
 
#: rhodecode/templates/admin/users/user_add.html:94
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:49
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 
msgid "save"
 
msgstr "儲存"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
 
msgid "Edit repos group"
 
msgstr "編輯版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
 
msgid "edit repos group"
 
msgstr "編輯版本庫群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:67
 
#: rhodecode/templates/admin/settings/settings.html:112
 
#: rhodecode/templates/admin/settings/settings.html:177
 
#: rhodecode/templates/admin/users/user_edit.html:130
 
#: rhodecode/templates/admin/users/user_edit.html:155
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:103
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:116
 
#: rhodecode/templates/files/files_add.html:82
 
#: rhodecode/templates/files/files_edit.html:68
 
#: rhodecode/templates/settings/repo_settings.html:85
 
msgid "Reset"
 
msgstr "重設"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
msgstr "版本庫群組管理員"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
 
msgid "ADD NEW GROUP"
 
msgstr "新增群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
 
#, fuzzy
 
#| msgid "Number of repositories"
 
msgid "Number of toplevel repositories"
 
msgstr "版本庫數量"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
 
#: rhodecode/templates/admin/users/users.html:40
 
#: rhodecode/templates/admin/users_groups/users_groups.html:35
 
msgid "action"
 
msgstr "動作"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#, fuzzy, python-format
 
#| msgid "Confirm to delete this group"
 
msgid "Confirm to delete this group: %s"
 
msgstr "確認刪除這個群組"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "There are no repositories groups yet"
 
msgstr "沒有任何版本庫群組"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:5
 
#: rhodecode/templates/admin/settings/settings.html:5
 
msgid "Settings administration"
 
msgstr "設定管理員"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/settings/repo_settings.html:5
 
#: rhodecode/templates/settings/repo_settings.html:13
 
msgid "Settings"
 
msgstr "設定"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:24
 
msgid "Built in hooks - read only"
 
msgstr "內建hook - 唯讀"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:40
 
msgid "Custom hooks"
 
msgstr "自訂hook"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:56
 
msgid "remove"
 
msgstr "移除"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:88
 
msgid "Failed to remove hook"
 
msgstr "移除hook失敗"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:24
 
msgid "Remap and rescan repositories"
 
msgstr "重新對映與掃描版本庫"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:32
 
msgid "rescan option"
 
msgstr "重新掃描選項"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:38
 
msgid ""
 
"In case a repository was deleted from filesystem and there are leftovers "
 
"in the database check this option to scan obsolete data in database and "
 
"remove it."
 
msgstr "如果版本庫已從檔案系統中刪除,但是資料還留在資料庫,請勾選這個項目清理資料庫中舊的資料"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:39
 
msgid "destroy old data"
 
msgstr "移除舊資料"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:45
 
msgid "Rescan repositories"
 
msgstr "重新掃描版本庫"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:51
 
msgid "Whoosh indexing"
 
msgstr "Whoosh 索引"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:59
 
msgid "index build option"
 
msgstr "索引選項"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:64
 
msgid "build from scratch"
 
msgstr "重頭建立索引"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:70
 
msgid "Reindex"
 
msgstr "重新索引"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:76
 
msgid "Global application settings"
 
msgstr "全域設定"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:85
 
msgid "Application name"
 
msgstr "應用名稱"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:94
 
msgid "Realm text"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:103
 
msgid "GA code"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:111
 
#: rhodecode/templates/admin/settings/settings.html:176
 
msgid "Save settings"
 
msgstr "儲存設定"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:118
 
msgid "Mercurial settings"
 
msgstr "Mercurial 設定"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:127
 
msgid "Web"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:132
 
msgid "require ssl for pushing"
 
msgstr "推送時要求使用SSL"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:139
 
msgid "Hooks"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:144
 
msgid "Update repository after push (hg update)"
 
msgstr "push後更新版本庫 (hg update)"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:148
 
msgid "Show repository size after push"
 
msgstr "push 後顯示版本庫大小"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:152
 
msgid "Log user push commands"
 
msgstr "紀錄使用者推送命令"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:156
 
msgid "Log user pull commands"
 
msgstr "紀錄使用者抓取命令"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:160
 
msgid "advanced setup"
 
msgstr "進階設定"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:165
 
msgid "Repositories location"
 
msgstr "版本庫路徑"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:170
 
msgid ""
 
"This a crucial application setting. If you are really sure you need to "
 
"change this, you must restart application in order to make this setting "
 
"take effect. Click this label to unlock."
 
msgstr "這是一個關鍵的設定,如果您確定要修改這個設定,請重新啟動應用程式以套用設定"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:171
 
msgid "unlock"
 
msgstr "解鎖"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:191
 
msgid "Test Email"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:199
 
#, fuzzy
 
#| msgid "Email"
 
msgid "Email to"
 
msgstr "電子郵件"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:207
 
#, fuzzy
 
#| msgid "second"
 
msgid "Send"
 
msgstr "秒"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:213
 
msgid "System Info and Packages"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/settings/settings.html:216
 
#, fuzzy
 
#| msgid "Show"
 
msgid "show"
 
msgstr "顯示"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:5
 
msgid "Add user"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:10
 
#: rhodecode/templates/admin/users/user_edit.html:11
 
#: rhodecode/templates/admin/users/users.html:9
 
msgid "Users"
 
msgstr "使用者"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:12
 
msgid "add new user"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:50
 
#, fuzzy
 
#| msgid "Passwords do not match"
 
msgid "Password confirmation"
 
msgstr "密碼不相符"
 

	
 
#: rhodecode/templates/admin/users/user_add.html:86
 
#: rhodecode/templates/admin/users/user_edit.html:113
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:41
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
 
msgid "Active"
 
msgstr "啟用"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:5
 
msgid "Edit user"
 
msgstr "編輯使用者"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:34
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:33
 
msgid "Change your avatar at"
 
msgstr "修改您的頭像於"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:35
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:34
 
msgid "Using"
 
msgstr "使用中"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:43
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:43
 
msgid "API key"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:59
 
msgid "LDAP DN"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:68
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:58
 
msgid "New password"
 
msgstr "新密碼"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:77
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:67
 
msgid "New password confirmation"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:147
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 
msgid "Create repositories"
 
msgstr "建立版本庫"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:5
 
#: rhodecode/templates/base/base.html:124
 
msgid "My account"
 
msgstr "我的帳號"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:9
 
msgid "My Account"
 
msgstr "我的帳號"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#: rhodecode/templates/journal/journal.html:32
 
#, fuzzy
 
#| msgid "Empty repository"
 
msgid "My repos"
 
msgstr "空的版本庫"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:116
 
#, fuzzy
 
#| msgid "permissions"
 
msgid "My permissions"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:121
 
#: rhodecode/templates/journal/journal.html:37
 
#, fuzzy
 
#| msgid "add"
 
msgid "ADD"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:134
 
#: rhodecode/templates/bookmarks/bookmarks.html:40
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:9
 
#: rhodecode/templates/branches/branches.html:40
 
#: rhodecode/templates/journal/journal.html:51
 
#: rhodecode/templates/tags/tags.html:40
 
#: rhodecode/templates/tags/tags_data.html:9
 
msgid "Revision"
 
msgstr "修訂"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:155
 
#: rhodecode/templates/journal/journal.html:72
 
msgid "private"
 
msgstr "私有"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:165
 
#: rhodecode/templates/journal/journal.html:85
 
msgid "No repositories yet"
 
msgstr "沒有任何版本庫"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:167
 
#: rhodecode/templates/journal/journal.html:87
 
msgid "create one now"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:184
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:285
 
#, fuzzy
 
#| msgid "permissions"
 
msgid "Permission"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr "使用者管理員"
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/admin/users/users.html:33
 
msgid "username"
 
msgstr "使用者名稱"
 

	
 
#: rhodecode/templates/admin/users/users.html:34
 
#: rhodecode/templates/branches/branches_data.html:6
 
msgid "name"
 
msgstr "名字"
 

	
 
#: rhodecode/templates/admin/users/users.html:35
 
msgid "lastname"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/admin/users/users.html:36
 
msgid "last login"
 
msgstr "最後登入"
 

	
 
#: rhodecode/templates/admin/users/users.html:37
 
#: rhodecode/templates/admin/users_groups/users_groups.html:34
 
msgid "active"
 
msgstr "啟用"
 

	
 
#: rhodecode/templates/admin/users/users.html:39
 
#: rhodecode/templates/base/base.html:223
 
msgid "ldap"
 
msgstr ""
 

	
 
#: rhodecode/templates/admin/users/users.html:56
 
#, fuzzy, python-format
 
#| msgid "Confirm to delete this user"
 
msgid "Confirm to delete this user: %s"
 
msgstr "確認刪除這個使用者"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:5
 
msgid "Add users group"
 
msgstr "新增使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:10
 
#: rhodecode/templates/admin/users_groups/users_groups.html:9
 
msgid "Users groups"
 
msgstr "使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:12
 
msgid "add new users group"
 
msgstr "新增使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:5
 
msgid "Edit users group"
 
msgstr "編輯使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:11
 
msgid "UsersGroups"
 
msgstr "使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:50
 
msgid "Members"
 
msgstr "成員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:58
 
msgid "Choosen group members"
 
msgstr "選擇群組成員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:61
 
msgid "Remove all elements"
 
msgstr "移除所有元素"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:75
 
msgid "Available members"
 
msgstr "啟用的成員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:79
 
msgid "Add all elements"
 
msgstr "新增索有元素"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:126
 
#, fuzzy
 
#| msgid "Choosen group members"
 
msgid "Group members"
 
msgstr "選擇群組成員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
msgstr "使用者群組管理員"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:23
 
msgid "ADD NEW USER GROUP"
 
msgstr "建立新的使用者群組"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:32
 
msgid "group name"
 
msgstr "群組名稱"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:45
 
#, fuzzy, python-format
 
#| msgid "Confirm to delete this group"
 
msgid "Confirm to delete this users group: %s"
 
msgstr "確認刪除這個群組"
 

	
 
#: rhodecode/templates/base/base.html:41
 
msgid "Submit a bug"
 
msgstr "回報錯誤"
 

	
 
#: rhodecode/templates/base/base.html:77
 
msgid "Login to your account"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr "忘記密碼?"
 

	
 
#: rhodecode/templates/base/base.html:107
 
#, fuzzy
 
#| msgid "Login"
 
msgid "Log In"
 
msgstr "登入"
 

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:289
 
#: rhodecode/templates/base/base.html:291
 
#: rhodecode/templates/base/base.html:293
 
msgid "Home"
 
msgstr "首頁"
 

	
 
#: rhodecode/templates/base/base.html:123
 
#: rhodecode/templates/base/base.html:298
 
#: rhodecode/templates/base/base.html:300
 
#: rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:17
 
#: rhodecode/templates/journal/public_journal.html:4
 
msgid "Journal"
 
msgstr "日誌"
 

	
 
#: rhodecode/templates/base/base.html:125
 
msgid "Log Out"
 
msgstr "登出"
 

	
 
#: rhodecode/templates/base/base.html:144
 
msgid "Switch repository"
 
msgstr "切換版本庫"
 

	
 
#: rhodecode/templates/base/base.html:146
 
msgid "Products"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:152
 
#: rhodecode/templates/base/base.html:182
 
msgid "loading..."
 
msgstr "載入中..."
 

	
 
#: rhodecode/templates/base/base.html:158
 
#: rhodecode/templates/base/base.html:160
 
#: rhodecode/templates/base/base.html:162
 
#: rhodecode/templates/data_table/_dt_elements.html:9
 
#: rhodecode/templates/data_table/_dt_elements.html:11
 
#: rhodecode/templates/data_table/_dt_elements.html:13
 
#: rhodecode/templates/summary/summary.html:4
 
msgid "Summary"
 
msgstr "概況"
 

	
 
#: rhodecode/templates/base/base.html:166
 
#: rhodecode/templates/base/base.html:168
 
#: rhodecode/templates/base/base.html:170
 
#: rhodecode/templates/changelog/changelog.html:6
 
#: rhodecode/templates/changelog/changelog.html:15
 
#: rhodecode/templates/data_table/_dt_elements.html:17
 
#: rhodecode/templates/data_table/_dt_elements.html:19
 
#: rhodecode/templates/data_table/_dt_elements.html:21
 
msgid "Changelog"
 
msgstr "修改紀錄"
 

	
 
#: rhodecode/templates/base/base.html:175
 
#: rhodecode/templates/base/base.html:177
 
#: rhodecode/templates/base/base.html:179
 
msgid "Switch to"
 
msgstr "切換至"
 

	
 
#: rhodecode/templates/base/base.html:186
 
#: rhodecode/templates/base/base.html:188
 
#: rhodecode/templates/base/base.html:190
 
#: rhodecode/templates/data_table/_dt_elements.html:25
 
#: rhodecode/templates/data_table/_dt_elements.html:27
 
#: rhodecode/templates/data_table/_dt_elements.html:29
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:40
 
msgid "Files"
 
msgstr "檔案"
 

	
 
#: rhodecode/templates/base/base.html:195
 
#: rhodecode/templates/base/base.html:199
 
msgid "Options"
 
msgstr "選項"
 

	
 
#: rhodecode/templates/base/base.html:204
 
#: rhodecode/templates/base/base.html:206
 
#: rhodecode/templates/base/base.html:224
 
msgid "settings"
 
msgstr "設定"
 

	
 
#: rhodecode/templates/base/base.html:209
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/forks/fork.html:13
 
msgid "fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:210
 
msgid "search"
 
msgstr "搜尋"
 

	
 
#: rhodecode/templates/base/base.html:217
 
msgid "journal"
 
msgstr "日誌"
 

	
 
#: rhodecode/templates/base/base.html:219
 
msgid "repositories groups"
 
msgstr "版本庫群組"
 

	
 
#: rhodecode/templates/base/base.html:220
 
msgid "users"
 
msgstr "使用者"
 

	
 
#: rhodecode/templates/base/base.html:221
 
msgid "users groups"
 
msgstr "使用者群組"
 

	
 
#: rhodecode/templates/base/base.html:222
 
msgid "permissions"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/base/base.html:235
 
#: rhodecode/templates/base/base.html:237
 
#: rhodecode/templates/followers/followers.html:5
 
msgid "Followers"
 
msgstr "追蹤者"
 

	
 
#: rhodecode/templates/base/base.html:243
 
#: rhodecode/templates/base/base.html:245
 
#: rhodecode/templates/forks/forks.html:5
 
msgid "Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/base/base.html:316
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/search/search.html:4
 
#: rhodecode/templates/search/search.html:24
 
#: rhodecode/templates/search/search.html:46
 
msgid "Search"
 
msgstr "搜尋"
 

	
 
#: rhodecode/templates/base/root.html:53
 
#, fuzzy
 
#| msgid "Add another member"
 
msgid "add another comment"
 
msgstr "新增另ㄧ位成員"
 

	
 
#: rhodecode/templates/base/root.html:54
 
#: rhodecode/templates/journal/journal.html:111
 
#: rhodecode/templates/summary/summary.html:52
 
msgid "Stop following this repository"
 
msgstr "停止追蹤這個版本庫"
 

	
 
#: rhodecode/templates/base/root.html:55
 
#: rhodecode/templates/summary/summary.html:56
 
msgid "Start following this repository"
 
msgstr "開始追蹤這個版本庫"
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:5
 
msgid "Bookmarks"
 
msgstr ""
 

	
 
#: rhodecode/templates/bookmarks/bookmarks.html:39
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:8
 
#: rhodecode/templates/branches/branches.html:39
 
#: rhodecode/templates/tags/tags.html:39
 
#: rhodecode/templates/tags/tags_data.html:8
 
#, fuzzy
 
#| msgid "author"
 
msgid "Author"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/branches/branches_data.html:7
 
msgid "date"
 
msgstr "日期"
 

	
 
#: rhodecode/templates/branches/branches_data.html:8
 
#: rhodecode/templates/shortlog/shortlog_data.html:8
 
msgid "author"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/branches/branches_data.html:9
 
#: rhodecode/templates/shortlog/shortlog_data.html:5
 
msgid "revision"
 
msgstr "修訂"
 

	
 
#: rhodecode/templates/changelog/changelog.html:15
 
#, python-format
 
msgid "showing %d out of %d revision"
 
msgid_plural "showing %d out of %d revisions"
 
msgstr[0] ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:38
 
msgid "Show"
 
msgstr "顯示"
 

	
 
#: rhodecode/templates/changelog/changelog.html:64
 
#: rhodecode/templates/summary/summary.html:352
 
msgid "show more"
 
msgstr "顯示更多"
 

	
 
#: rhodecode/templates/changelog/changelog.html:68
 
msgid "Affected number of files, click to show more details"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:82
 
#: rhodecode/templates/changeset/changeset.html:72
 
msgid "Parent"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:88
 
#: rhodecode/templates/changeset/changeset.html:78
 
msgid "No parents"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:93
 
#: rhodecode/templates/changeset/changeset.html:82
 
msgid "merge"
 
msgstr "合併"
 

	
 
#: rhodecode/templates/changelog/changelog.html:96
 
#: rhodecode/templates/changeset/changeset.html:85
 
#: rhodecode/templates/files/files.html:29
 
#: rhodecode/templates/files/files_add.html:33
 
#: rhodecode/templates/files/files_edit.html:33
 
#: rhodecode/templates/shortlog/shortlog_data.html:9
 
msgid "branch"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/changelog/changelog.html:102
 
msgid "bookmark"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:108
 
#: rhodecode/templates/changeset/changeset.html:90
 
msgid "tag"
 
msgstr "標籤"
 

	
 
#: rhodecode/templates/changelog/changelog.html:144
 
msgid "Show selected changes __S -> __E"
 
msgstr ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:235
 
msgid "There are no changes yet"
 
msgstr "尚未有任何變更"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:2
 
#: rhodecode/templates/changeset/changeset.html:60
 
msgid "removed"
 
msgstr "移除"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:3
 
#: rhodecode/templates/changeset/changeset.html:61
 
msgid "changed"
 
msgstr "修改"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:4
 
#: rhodecode/templates/changeset/changeset.html:62
 
msgid "added"
 
msgstr "新增"
 

	
 
#: rhodecode/templates/changelog/changelog_details.html:6
 
#: rhodecode/templates/changelog/changelog_details.html:7
 
#: rhodecode/templates/changelog/changelog_details.html:8
 
#: rhodecode/templates/changeset/changeset.html:64
 
#: rhodecode/templates/changeset/changeset.html:65
 
#: rhodecode/templates/changeset/changeset.html:66
 
#, python-format
 
msgid "affected %s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:6
 
#: rhodecode/templates/changeset/changeset.html:14
 
msgid "Changeset"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:37
 
#: rhodecode/templates/changeset/diff_block.html:20
 
msgid "raw diff"
 
msgstr "原始差異"
 

	
 
#: rhodecode/templates/changeset/changeset.html:38
 
#: rhodecode/templates/changeset/diff_block.html:21
 
msgid "download diff"
 
msgstr "下載差異"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#, fuzzy, python-format
 
#| msgid "commit"
 
msgid "%d comment"
 
msgid_plural "%d comments"
 
msgstr[0] "遞交"
 

	
 
#: rhodecode/templates/changeset/changeset.html:42
 
#: rhodecode/templates/changeset/changeset_file_comment.html:69
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:97
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset.html:113
 
msgid "Changeset was too big and was cut off..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:35
 
msgid "Submitting..."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:38
 
msgid "Commenting on line {1}."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:39
 
#: rhodecode/templates/changeset/changeset_file_comment.html:100
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:41
 
#: rhodecode/templates/changeset/changeset_file_comment.html:102
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:47
 
#: rhodecode/templates/changeset/changeset_file_comment.html:107
 
#, fuzzy
 
#| msgid "commit"
 
msgid "Comment"
 
msgstr "遞交"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
msgid "Hide"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
#, fuzzy
 
#| msgid "You need to be a signed in to view this page"
 
msgid "You need to be logged in to comment."
 
msgstr "您必須登入後才能瀏覽這個頁面"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:55
 
msgid "Login now"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:97
 
msgid "Leave a comment"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
msgid "Compare View"
 
msgstr "比較顯示"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:49
 
msgid "Files affected"
 
msgstr ""
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "diff"
 
msgstr "差異"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
#, fuzzy
 
#| msgid "File contents"
 
msgid "show inline comments"
 
msgstr "文件內容"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
#: rhodecode/templates/data_table/_dt_elements.html:37
 
#: rhodecode/templates/forks/fork.html:5
 
msgid "Fork"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:54
 
#: rhodecode/templates/journal/journal.html:117
 
#: rhodecode/templates/summary/summary.html:63
 
msgid "Mercurial repository"
 
msgstr "Mercurial 版本庫"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:56
 
#: rhodecode/templates/journal/journal.html:119
 
#: rhodecode/templates/summary/summary.html:66
 
msgid "Git repository"
 
msgstr "Git 版本庫"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:63
 
#: rhodecode/templates/journal/journal.html:125
 
#: rhodecode/templates/summary/summary.html:73
 
msgid "public repository"
 
msgstr "公開版本庫"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:74
 
#: rhodecode/templates/summary/summary.html:82
 
#: rhodecode/templates/summary/summary.html:83
 
msgid "Fork of"
 
msgstr ""
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:86
 
msgid "No changesets yet"
 
msgstr "尚未有任何變更"
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
msgid "This is an notification from RhodeCode."
 
msgstr ""
 

	
 
#: rhodecode/templates/errors/error_document.html:44
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr "檔案差異"
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:328
 
msgid "files"
 
msgstr "檔案"
 

	
 
#: rhodecode/templates/files/files.html:44
 
msgid "search truncated"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files.html:45
 
msgid "no matching files"
 
msgstr "無符合的檔案"
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
msgid "Edit file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
#, fuzzy
 
#| msgid "edit file"
 
msgid "add file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
#, fuzzy
 
#| msgid "add new user"
 
msgid "Add new file"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
#, fuzzy
 
#| msgid "File names"
 
msgid "File Name"
 
msgstr "檔案名稱"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
#, fuzzy
 
#| msgid "hour"
 
msgid "or"
 
msgstr "時"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
#, fuzzy
 
#| msgid "edit file"
 
msgid "Upload file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
#, fuzzy, python-format
 
#| msgid "created user %s"
 
#, fuzzy
 
msgid "Create new file"
 
msgstr "建立使用者 %s"
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr "位置"
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr "遞交資訊"
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr "遞交修改"
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr "顯示"
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr "前一個修訂"
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr "下一個修訂"
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr "搜尋檔案列表"
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:65
 
#, fuzzy
 
#| msgid "add new user"
 
msgid "add new file"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr "載入檔案列表..."
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr "大小"
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
#, fuzzy
 
#| msgid "next revision"
 
msgid "Last Revision"
 
msgstr "下一個修訂"
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr "最後修改"
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgstr "最後的遞交者"
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "show annotation"
 
msgstr "險是註釋"
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:28
 
#: rhodecode/templates/files/files_source.html:56
 
msgid "show as raw"
 
msgstr "顯示原始文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:29
 
msgid "download as raw"
 
msgstr "下載原始文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
#, fuzzy
 
#| msgid "show source"
 
msgid "source"
 
msgstr "顯示原始碼"
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
#, fuzzy
 
#| msgid "edit file"
 
msgid "Editing file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_source.html:2
 
msgid "History"
 
msgstr "歷史"
 

	
 
#: rhodecode/templates/files/files_source.html:24
 
msgid "show source"
 
msgstr "顯示原始碼"
 

	
 
#: rhodecode/templates/files/files_source.html:47
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr "二進位檔 (%s)"
 

	
 
#: rhodecode/templates/files/files_source.html:56
 
msgid "File is too big to display"
 
msgstr "顯示的檔案太大"
 

	
 
#: rhodecode/templates/files/files_source.html:112
 
msgid "Selection link"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
#, fuzzy
 
#| msgid "show annotation"
 
msgid "annotation"
 
msgstr "險是註釋"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr ""
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr "追蹤者"
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
msgid "Started following"
 
msgstr "開始追蹤"
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr "分支名稱"
 

	
 
#: rhodecode/templates/forks/fork.html:57
 
msgid "Private"
 
msgstr "私有"
 

	
 
#: rhodecode/templates/forks/fork.html:65
 
#, fuzzy
 
#| msgid "permissions"
 
msgid "Copy permissions"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/forks/fork.html:73
 
msgid "Update after clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:80
 
msgid "fork this repository"
 
msgstr "fork 這個版本庫"
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr "已建立分支"
 

	
 
#: rhodecode/templates/forks/forks_data.html:34
 
msgid "There are no forks yet"
 
msgstr "尚未有任何 fork"
 

	
 
#: rhodecode/templates/journal/journal.html:20
 
msgid "Refresh"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#, fuzzy
 
#| msgid "Cache"
 
msgid "Watched"
 
msgstr "快取"
 

	
 
#: rhodecode/templates/journal/journal.html:105
 
msgid "following user"
 
msgstr "追蹤使用者"
 

	
 
#: rhodecode/templates/journal/journal.html:105
 
msgid "user"
 
msgstr "使用者"
 

	
 
#: rhodecode/templates/journal/journal.html:138
 
msgid "You are not following any users or repositories"
 
msgstr "您尚未追蹤任何使用者或版本庫"
 

	
 
#: rhodecode/templates/journal/journal_data.html:47
 
msgid "No entries yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/public_journal.html:17
 
msgid "Public Journal"
 
msgstr "開放日誌"
 

	
 
#: rhodecode/templates/search/search.html:7
 
#: rhodecode/templates/search/search.html:26
 
msgid "in repository: "
 
msgstr "於版本庫:"
 

	
 
#: rhodecode/templates/search/search.html:9
 
#: rhodecode/templates/search/search.html:28
 
msgid "in all repositories"
 
msgstr "於所有的版本庫"
 

	
 
#: rhodecode/templates/search/search.html:42
 
msgid "Search term"
 
msgstr "搜尋關鍵字"
 

	
 
#: rhodecode/templates/search/search.html:54
 
msgid "Search in"
 
msgstr "搜尋範圍"
 

	
 
#: rhodecode/templates/search/search.html:57
 
msgid "File contents"
 
msgstr "文件內容"
 

	
 
#: rhodecode/templates/search/search.html:59
 
msgid "File names"
 
msgstr "檔案名稱"
 

	
 
#: rhodecode/templates/search/search_content.html:21
 
#: rhodecode/templates/search/search_path.html:15
 
msgid "Permission denied"
 
msgstr "權限不足"
 

	
 
#: rhodecode/templates/shortlog/shortlog.html:5
 
#: rhodecode/templates/summary/summary.html:209
 
msgid "Shortlog"
 
msgstr "簡短紀錄"
 

	
 
#: rhodecode/templates/shortlog/shortlog.html:14
 
msgid "shortlog"
 
msgstr "簡短紀錄"
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:7
 
msgid "age"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:18
 
#, fuzzy
 
#| msgid "commit message"
 
msgid "No commit message"
 
msgstr "遞交資訊"
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:62
 
msgid "Add or upload files directly via RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:71
 
msgid "Push new repo"
 
msgstr ""
 

	
 
#: rhodecode/templates/shortlog/shortlog_data.html:79
 
#, fuzzy
 
#| msgid "Git repository"
 
msgid "Existing repository?"
 
msgstr "Git 版本庫"
 

	
 
#: rhodecode/templates/summary/summary.html:12
 
msgid "summary"
 
msgstr "概況"
 

	
 
#: rhodecode/templates/summary/summary.html:44
 
#: rhodecode/templates/summary/summary.html:47
 
#, fuzzy
 
#| msgid "author"
 
msgid "ATOM"
 
msgstr "作者"
 

	
 
#: rhodecode/templates/summary/summary.html:77
 
#, fuzzy, python-format
 
#| msgid "No changes"
 
msgid "Non changable ID %s"
 
msgstr "沒有修改"
 

	
 
#: rhodecode/templates/summary/summary.html:82
 
msgid "public"
 
msgstr "公開"
 

	
 
#: rhodecode/templates/summary/summary.html:90
 
msgid "remote clone"
 
msgstr "遠端複製"
 

	
 
#: rhodecode/templates/summary/summary.html:121
 
msgid "Clone url"
 
msgstr "複製連結"
 

	
 
#: rhodecode/templates/summary/summary.html:124
 
#, fuzzy
 
#| msgid "show more"
 
msgid "Show by Name"
 
msgstr "顯示更多"
 

	
 
#: rhodecode/templates/summary/summary.html:125
 
msgid "Show by ID"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:133
 
#, fuzzy
 
#| msgid "edit file"
 
msgid "Trending files"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/summary/summary.html:141
 
#: rhodecode/templates/summary/summary.html:157
 
#: rhodecode/templates/summary/summary.html:185
 
msgid "enable"
 
msgstr "啟用"
 

	
 
#: rhodecode/templates/summary/summary.html:149
 
msgid "Download"
 
msgstr "下載"
 

	
 
#: rhodecode/templates/summary/summary.html:153
 
msgid "There are no downloads yet"
 
msgstr "沒有任何下載"
 

	
 
#: rhodecode/templates/summary/summary.html:155
 
msgid "Downloads are disabled for this repository"
 
msgstr "這個版本庫的下載已停用"
 

	
 
#: rhodecode/templates/summary/summary.html:164
 
msgid "Check this to download archive with subrepos"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:164
 
msgid "with subrepos"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:177
 
msgid "Commit activity by day / author"
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:188
 
msgid "Stats gathered: "
 
msgstr ""
 

	
 
#: rhodecode/templates/summary/summary.html:211
 
#, fuzzy
 
#| msgid "quick filter..."
 
msgid "Quick start"
 
msgstr "快速過濾..."
 

	
 
#: rhodecode/templates/summary/summary.html:281
 
#, python-format
 
msgid "Download %s as %s"
 
msgstr "下載 %s 為 %s"
 

	
 
#: rhodecode/templates/summary/summary.html:638
 
msgid "commits"
 
msgstr "遞交"
 

	
 
#: rhodecode/templates/summary/summary.html:639
 
msgid "files added"
 
msgstr "多個檔案新增"
 

	
 
#: rhodecode/templates/summary/summary.html:640
 
msgid "files changed"
 
msgstr "多個檔案修改"
 

	
 
#: rhodecode/templates/summary/summary.html:641
 
msgid "files removed"
 
msgstr "移除多個檔案"
 

	
 
#: rhodecode/templates/summary/summary.html:644
 
msgid "commit"
 
msgstr "遞交"
 

	
 
#: rhodecode/templates/summary/summary.html:645
 
msgid "file added"
 
msgstr "檔案新增"
 

	
 
#: rhodecode/templates/summary/summary.html:646
 
msgid "file changed"
 
msgstr "檔案修改"
 

	
 
#: rhodecode/templates/summary/summary.html:647
 
msgid "file removed"
 
msgstr "移除檔案"
 

	
 
#~ msgid "Changeset is to big and was cut off, see raw changeset instead"
 
#~ msgstr ""
 

	
 
#~ msgid "Diff is to big and was cut off, see raw diff instead"
 
#~ msgstr ""
 

	
 
#~ msgid "Binary file"
 
#~ msgstr "二進位檔"
 

	
 
#~ msgid "ADD NEW REPOSITORY"
 
#~ msgstr "新增版本庫"
 

	
 
#~ msgid "Percentage of stats gathered"
 
#~ msgstr ""
 

	
 
#~ msgid "My repositories"
 
#~ msgstr "我的版本庫"
 

	
 
#~ msgid "links"
 
#~ msgstr "連結"
 

	
 
#~ msgid "showing "
 
#~ msgstr ""
 

	
 
#~ msgid "out of"
 
#~ msgstr ""
 

	
 
#~ msgid "%s files affected with %s additions and %s deletions."
 
#~ msgid ""
 
#~ "Changeset was to big and was cut"
 
#~ " off, use diff menu to display "
 
#~ "this diff"
 
#~ msgstr ""
 

	
 
#~ msgid "No changes in this file"
 
#~ msgstr "這個檔案沒有任何變更"
 

	
 
#~ msgid "Diff is to big to display"
 
#~ msgstr ""
 

	
 
#~ msgid "File annotate"
 
#~ msgstr "檔案註釋"
 

	
 
#~ msgid "annotate"
 
#~ msgstr "註釋"
 

	
 
#~ msgid "Following"
 
#~ msgstr "已追蹤"
 

	
 
#~ msgid "by"
 
#~ msgstr ""
 

	
 
#~ msgid "Trending source files"
 
#~ msgstr ""
 

	
 
#~ msgid "Feeds"
 
#~ msgstr ""
 

	
 
#~ msgid "Loaded in"
 
#~ msgstr ""
 

	
rhodecode/lib/celerylib/tasks.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.lib.celerylib.tasks
 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    RhodeCode task modules, containing all task that suppose to be run
 
    by celery daemon
 

	
 
    :created_on: Oct 6, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
from celery.decorators import task
 

	
 
import os
 
import traceback
 
import logging
 
from os.path import join as jn
 

	
 
from time import mktime
 
from operator import itemgetter
 
from string import lower
 

	
 
from pylons import config, url
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib.vcs import get_backend
 

	
 
from rhodecode import CELERY_ON, CELERY_EAGER
 
from rhodecode.lib.utils2 import safe_str
 
from rhodecode.lib.celerylib import run_task, locked_task, dbsession, \
 
    str2bool, __get_lockkey, LockHeld, DaemonLock, get_session
 
from rhodecode.lib.helpers import person
 
from rhodecode.lib.rcmail.smtp_mailer import SmtpMailer
 
from rhodecode.lib.utils import add_cache, action_logger
 
from rhodecode.lib.compat import json, OrderedDict
 
from rhodecode.lib.hooks import log_create_repository
 

	
 
from rhodecode.model.db import Statistics, Repository, User
 

	
 

	
 
add_cache(config)
 

	
 
__all__ = ['whoosh_index', 'get_commits_stats',
 
           'reset_user_password', 'send_email']
 

	
 

	
 
def get_logger(cls):
 
    if CELERY_ON:
 
        try:
 
            log = cls.get_logger()
 
        except:
 
            log = logging.getLogger(__name__)
 
    else:
 
        log = logging.getLogger(__name__)
 

	
 
    return log
 

	
 

	
 
@task(ignore_result=True)
 
@locked_task
 
@dbsession
 
def whoosh_index(repo_location, full_index):
 
    from rhodecode.lib.indexers.daemon import WhooshIndexingDaemon
 
    log = whoosh_index.get_logger(whoosh_index)
 
    log = get_logger(whoosh_index)
 
    DBS = get_session()
 

	
 
    index_location = config['index_dir']
 
    WhooshIndexingDaemon(index_location=index_location,
 
                         repo_location=repo_location, sa=DBS)\
 
                         .run(full_index=full_index)
 

	
 

	
 
@task(ignore_result=True)
 
@dbsession
 
def get_commits_stats(repo_name, ts_min_y, ts_max_y):
 
    log = get_logger(get_commits_stats)
 
    DBS = get_session()
 
    lockkey = __get_lockkey('get_commits_stats', repo_name, ts_min_y,
 
                            ts_max_y)
 
    lockkey_path = config['here']
 

	
 
    log.info('running task with lockkey %s' % lockkey)
 

	
 
    try:
 
        lock = l = DaemonLock(file_=jn(lockkey_path, lockkey))
 

	
 
        # for js data compatibility cleans the key for person from '
 
        akc = lambda k: person(k).replace('"', "")
 

	
 
        co_day_auth_aggr = {}
 
        commits_by_day_aggregate = {}
 
        repo = Repository.get_by_repo_name(repo_name)
 
        if repo is None:
 
            return True
 

	
 
        repo = repo.scm_instance
 
        repo_size = repo.count()
 
        # return if repo have no revisions
 
        if repo_size < 1:
 
            lock.release()
 
            return True
 

	
 
        skip_date_limit = True
 
        parse_limit = int(config['app_conf'].get('commit_parse_limit'))
 
        last_rev = None
 
        last_cs = None
 
        timegetter = itemgetter('time')
 

	
 
        dbrepo = DBS.query(Repository)\
 
            .filter(Repository.repo_name == repo_name).scalar()
 
        cur_stats = DBS.query(Statistics)\
 
            .filter(Statistics.repository == dbrepo).scalar()
 

	
 
        if cur_stats is not None:
 
            last_rev = cur_stats.stat_on_revision
 

	
 
        if last_rev == repo.get_changeset().revision and repo_size > 1:
 
            # pass silently without any work if we're not on first revision or
 
            # current state of parsing revision(from db marker) is the
 
            # last revision
 
            lock.release()
 
            return True
 

	
 
        if cur_stats:
 
            commits_by_day_aggregate = OrderedDict(json.loads(
 
                                        cur_stats.commit_activity_combined))
 
            co_day_auth_aggr = json.loads(cur_stats.commit_activity)
 

	
 
        log.debug('starting parsing %s' % parse_limit)
 
        lmktime = mktime
 

	
 
        last_rev = last_rev + 1 if last_rev >= 0 else 0
 
        log.debug('Getting revisions from %s to %s' % (
 
             last_rev, last_rev + parse_limit)
 
        )
 
        for cs in repo[last_rev:last_rev + parse_limit]:
 
            log.debug('parsing %s' % cs)
 
            last_cs = cs  # remember last parsed changeset
 
            k = lmktime([cs.date.timetuple()[0], cs.date.timetuple()[1],
 
                          cs.date.timetuple()[2], 0, 0, 0, 0, 0, 0])
 

	
 
            if akc(cs.author) in co_day_auth_aggr:
 
                try:
 
                    l = [timegetter(x) for x in
 
                         co_day_auth_aggr[akc(cs.author)]['data']]
 
                    time_pos = l.index(k)
 
                except ValueError:
 
                    time_pos = False
 

	
 
                if time_pos >= 0 and time_pos is not False:
 

	
 
                    datadict = \
 
                        co_day_auth_aggr[akc(cs.author)]['data'][time_pos]
 

	
 
                    datadict["commits"] += 1
 
                    datadict["added"] += len(cs.added)
 
                    datadict["changed"] += len(cs.changed)
 
                    datadict["removed"] += len(cs.removed)
 

	
 
                else:
 
                    if k >= ts_min_y and k <= ts_max_y or skip_date_limit:
 

	
 
                        datadict = {"time": k,
 
                                    "commits": 1,
 
                                    "added": len(cs.added),
 
                                    "changed": len(cs.changed),
 
                                    "removed": len(cs.removed),
 
                                   }
 
                        co_day_auth_aggr[akc(cs.author)]['data']\
 
                            .append(datadict)
 

	
 
            else:
 
                if k >= ts_min_y and k <= ts_max_y or skip_date_limit:
 
                    co_day_auth_aggr[akc(cs.author)] = {
 
                                        "label": akc(cs.author),
 
                                        "data": [{"time":k,
 
                                                 "commits":1,
 
                                                 "added":len(cs.added),
 
                                                 "changed":len(cs.changed),
 
                                                 "removed":len(cs.removed),
 
                                                 }],
 
                                        "schema": ["commits"],
 
                                        }
 

	
 
            #gather all data by day
 
            if k in commits_by_day_aggregate:
 
                commits_by_day_aggregate[k] += 1
 
            else:
 
                commits_by_day_aggregate[k] = 1
 

	
 
        overview_data = sorted(commits_by_day_aggregate.items(),
 
                               key=itemgetter(0))
 

	
 
        if not co_day_auth_aggr:
 
            co_day_auth_aggr[akc(repo.contact)] = {
 
                "label": akc(repo.contact),
 
                "data": [0, 1],
 
                "schema": ["commits"],
 
            }
 

	
 
        stats = cur_stats if cur_stats else Statistics()
 
        stats.commit_activity = json.dumps(co_day_auth_aggr)
 
        stats.commit_activity_combined = json.dumps(overview_data)
 

	
 
        log.debug('last revison %s' % last_rev)
 
        leftovers = len(repo.revisions[last_rev:])
 
        log.debug('revisions to parse %s' % leftovers)
 

	
 
        if last_rev == 0 or leftovers < parse_limit:
 
            log.debug('getting code trending stats')
 
            stats.languages = json.dumps(__get_codes_stats(repo_name))
 

	
 
        try:
 
            stats.repository = dbrepo
 
            stats.stat_on_revision = last_cs.revision if last_cs else 0
 
            DBS.add(stats)
 
            DBS.commit()
 
        except:
 
            log.error(traceback.format_exc())
 
            DBS.rollback()
 
            lock.release()
 
            return False
 

	
 
        # final release
 
        lock.release()
 

	
 
        # execute another task if celery is enabled
 
        if len(repo.revisions) > 1 and CELERY_ON:
 
            run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y)
 
        return True
 
    except LockHeld:
 
        log.info('LockHeld')
 
        return 'Task with key %s already running' % lockkey
 

	
 
@task(ignore_result=True)
 
@dbsession
 
def send_password_link(user_email):
 
    from rhodecode.model.notification import EmailNotificationModel
 

	
 
    log = get_logger(send_password_link)
 
    DBS = get_session()
 

	
 
    try:
 
        user = User.get_by_email(user_email)
 
        if user:
 
            log.debug('password reset user found %s' % user)
 
            link = url('reset_password_confirmation', key=user.api_key,
 
                       qualified=True)
 
            reg_type = EmailNotificationModel.TYPE_PASSWORD_RESET
 
            body = EmailNotificationModel().get_email_tmpl(reg_type,
 
                                                **{'user':user.short_contact,
 
                                                   'reset_url':link})
 
            log.debug('sending email')
 
            run_task(send_email, user_email,
 
                     _("password reset link"), body)
 
            log.info('send new password mail to %s' % user_email)
rhodecode/lib/diffs.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.lib.diffs
 
    ~~~~~~~~~~~~~~~~~~~
 

	
 
    Set of diffing helpers, previously part of vcs
 

	
 

	
 
    :created_on: Dec 4, 2011
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :original copyright: 2007-2008 by Armin Ronacher
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import re
 
import difflib
 
import markupsafe
 
from itertools import tee, imap
 

	
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib.vcs.exceptions import VCSError
 
from rhodecode.lib.vcs.nodes import FileNode, SubModuleNode
 
from rhodecode.lib.helpers import escape
 
from rhodecode.lib.utils import EmptyChangeset
 

	
 

	
 
def wrap_to_table(str_):
 
    return '''<table class="code-difftable">
 
                <tr class="line no-comment">
 
                <td class="lineno new"></td>
 
                <td class="code no-comment"><pre>%s</pre></td>
 
                </tr>
 
              </table>''' % str_
 

	
 

	
 
def wrapped_diff(filenode_old, filenode_new, cut_off_limit=None,
 
                ignore_whitespace=True, line_context=3,
 
                enable_comments=False):
 
    """
 
    returns a wrapped diff into a table, checks for cut_off_limit and presents
 
    proper message
 
    """
 

	
 
    if filenode_old is None:
 
        filenode_old = FileNode(filenode_new.path, '', EmptyChangeset())
 

	
 
    if filenode_old.is_binary or filenode_new.is_binary:
 
        diff = wrap_to_table(_('binary file'))
 
        stats = (0, 0)
 
        size = 0
 

	
 
    elif cut_off_limit != -1 and (cut_off_limit is None or
 
    (filenode_old.size < cut_off_limit and filenode_new.size < cut_off_limit)):
 

	
 
        f_gitdiff = get_gitdiff(filenode_old, filenode_new,
 
                                ignore_whitespace=ignore_whitespace,
 
                                context=line_context)
 
        diff_processor = DiffProcessor(f_gitdiff, format='gitdiff')
 

	
 
        diff = diff_processor.as_html(enable_comments=enable_comments)
 
        stats = diff_processor.stat()
 
        size = len(diff or '')
 
    else:
 
        diff = wrap_to_table(_('Changeset was to big and was cut off, use '
 
        diff = wrap_to_table(_('Changeset was too big and was cut off, use '
 
                               'diff menu to display this diff'))
 
        stats = (0, 0)
 
        size = 0
 
    if not diff:
 
        submodules = filter(lambda o: isinstance(o, SubModuleNode),
 
                            [filenode_new, filenode_old])
 
        if submodules:
 
            diff = wrap_to_table(escape('Submodule %r' % submodules[0]))
 
        else:
 
            diff = wrap_to_table(_('No changes detected'))
 

	
 
    cs1 = filenode_old.changeset.raw_id
 
    cs2 = filenode_new.changeset.raw_id
 

	
 
    return size, cs1, cs2, diff, stats
 

	
 

	
 
def get_gitdiff(filenode_old, filenode_new, ignore_whitespace=True, context=3):
 
    """
 
    Returns git style diff between given ``filenode_old`` and ``filenode_new``.
 

	
 
    :param ignore_whitespace: ignore whitespaces in diff
 
    """
 
    # make sure we pass in default context
 
    context = context or 3
 
    submodules = filter(lambda o: isinstance(o, SubModuleNode),
 
                        [filenode_new, filenode_old])
 
    if submodules:
 
        return ''
 

	
 
    for filenode in (filenode_old, filenode_new):
 
        if not isinstance(filenode, FileNode):
 
            raise VCSError("Given object should be FileNode object, not %s"
 
                % filenode.__class__)
 

	
 
    repo = filenode_new.changeset.repository
 
    old_raw_id = getattr(filenode_old.changeset, 'raw_id', repo.EMPTY_CHANGESET)
 
    new_raw_id = getattr(filenode_new.changeset, 'raw_id', repo.EMPTY_CHANGESET)
 

	
 
    vcs_gitdiff = repo.get_diff(old_raw_id, new_raw_id, filenode_new.path,
 
                                 ignore_whitespace, context)
 
    return vcs_gitdiff
 

	
 

	
 
class DiffProcessor(object):
 
    """
 
    Give it a unified diff and it returns a list of the files that were
 
    mentioned in the diff together with a dict of meta information that
 
    can be used to render it in a HTML template.
 
    """
 
    _chunk_re = re.compile(r'@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)')
 

	
 
    def __init__(self, diff, differ='diff', format='udiff'):
 
        """
 
        :param diff:   a text in diff format or generator
 
        :param format: format of diff passed, `udiff` or `gitdiff`
 
        """
 
        if isinstance(diff, basestring):
 
            diff = [diff]
 

	
 
        self.__udiff = diff
 
        self.__format = format
 
        self.adds = 0
 
        self.removes = 0
 

	
 
        if isinstance(self.__udiff, basestring):
 
            self.lines = iter(self.__udiff.splitlines(1))
 

	
 
        elif self.__format == 'gitdiff':
 
            udiff_copy = self.copy_iterator()
 
            self.lines = imap(self.escaper, self._parse_gitdiff(udiff_copy))
 
        else:
 
            udiff_copy = self.copy_iterator()
 
            self.lines = imap(self.escaper, udiff_copy)
 

	
 
        # Select a differ.
 
        if differ == 'difflib':
 
            self.differ = self._highlight_line_difflib
 
        else:
 
            self.differ = self._highlight_line_udiff
 

	
 
    def escaper(self, string):
 
        return markupsafe.escape(string)
 

	
 
    def copy_iterator(self):
 
        """
 
        make a fresh copy of generator, we should not iterate thru
 
        an original as it's needed for repeating operations on
 
        this instance of DiffProcessor
 
        """
 
        self.__udiff, iterator_copy = tee(self.__udiff)
 
        return iterator_copy
 

	
 
    def _extract_rev(self, line1, line2):
 
        """
 
        Extract the filename and revision hint from a line.
 
        """
 

	
 
        try:
 
            if line1.startswith('--- ') and line2.startswith('+++ '):
 
                l1 = line1[4:].split(None, 1)
 
                old_filename = (l1[0].replace('a/', '', 1)
 
                                if len(l1) >= 1 else None)
 
                old_rev = l1[1] if len(l1) == 2 else 'old'
 

	
 
                l2 = line2[4:].split(None, 1)
 
                new_filename = (l2[0].replace('b/', '', 1)
 
                                if len(l1) >= 1 else None)
 
                new_rev = l2[1] if len(l2) == 2 else 'new'
 

	
 
                filename = (old_filename
 
                            if old_filename != '/dev/null' else new_filename)
 

	
 
                return filename, new_rev, old_rev
 
        except (ValueError, IndexError):
 
            pass
 

	
 
        return None, None, None
 

	
 
    def _parse_gitdiff(self, diffiterator):
 
        def line_decoder(l):
 
            if l.startswith('+') and not l.startswith('+++'):
 
                self.adds += 1
 
            elif l.startswith('-') and not l.startswith('---'):
 
                self.removes += 1
 
            return l.decode('utf8', 'replace')
 

	
 
        output = list(diffiterator)
 
        size = len(output)
 

	
 
        if size == 2:
 
            l = []
 
            l.extend([output[0]])
 
            l.extend(output[1].splitlines(1))
 
            return map(line_decoder, l)
 
        elif size == 1:
 
            return  map(line_decoder, output[0].splitlines(1))
 
        elif size == 0:
 
            return []
 

	
 
        raise Exception('wrong size of diff %s' % size)
 

	
 
    def _highlight_line_difflib(self, line, next_):
 
        """
 
        Highlight inline changes in both lines.
 
        """
 

	
 
        if line['action'] == 'del':
 
            old, new = line, next_
 
        else:
 
            old, new = next_, line
 

	
 
        oldwords = re.split(r'(\W)', old['line'])
 
        newwords = re.split(r'(\W)', new['line'])
 

	
 
        sequence = difflib.SequenceMatcher(None, oldwords, newwords)
 

	
 
        oldfragments, newfragments = [], []
 
        for tag, i1, i2, j1, j2 in sequence.get_opcodes():
 
            oldfrag = ''.join(oldwords[i1:i2])
 
            newfrag = ''.join(newwords[j1:j2])
 
            if tag != 'equal':
 
                if oldfrag:
 
                    oldfrag = '<del>%s</del>' % oldfrag
 
                if newfrag:
 
                    newfrag = '<ins>%s</ins>' % newfrag
 
            oldfragments.append(oldfrag)
 
            newfragments.append(newfrag)
 

	
 
        old['line'] = "".join(oldfragments)
 
        new['line'] = "".join(newfragments)
 

	
 
    def _highlight_line_udiff(self, line, next_):
 
        """
 
        Highlight inline changes in both lines.
 
        """
 
        start = 0
 
        limit = min(len(line['line']), len(next_['line']))
 
        while start < limit and line['line'][start] == next_['line'][start]:
 
            start += 1
 
        end = -1
 
        limit -= start
 
        while -end <= limit and line['line'][end] == next_['line'][end]:
 
            end -= 1
 
        end += 1
 
        if start or end:
 
            def do(l):
 
                last = end + len(l['line'])
 
                if l['action'] == 'add':
 
                    tag = 'ins'
 
                else:
 
                    tag = 'del'
rhodecode/lib/helpers.py
Show inline comments
 
"""Helper functions
 

	
 
Consists of functions to typically be used within templates, but also
 
available to Controllers. This module is available to both as 'h'.
 
"""
 
import random
 
import hashlib
 
import StringIO
 
import urllib
 
import math
 
import logging
 

	
 
from datetime import datetime
 
from pygments.formatters.html import HtmlFormatter
 
from pygments import highlight as code_highlight
 
from pylons import url, request, config
 
from pylons.i18n.translation import _, ungettext
 
from hashlib import md5
 

	
 
from webhelpers.html import literal, HTML, escape
 
from webhelpers.html.tools import *
 
from webhelpers.html.builder import make_tag
 
from webhelpers.html.tags import auto_discovery_link, checkbox, css_classes, \
 
    end_form, file, form, hidden, image, javascript_link, link_to, \
 
    link_to_if, link_to_unless, ol, required_legend, select, stylesheet_link, \
 
    submit, text, password, textarea, title, ul, xml_declaration, radio
 
from webhelpers.html.tools import auto_link, button_to, highlight, \
 
    js_obfuscate, mail_to, strip_links, strip_tags, tag_re
 
from webhelpers.number import format_byte_size, format_bit_size
 
from webhelpers.pylonslib import Flash as _Flash
 
from webhelpers.pylonslib.secure_form import secure_form
 
from webhelpers.text import chop_at, collapse, convert_accented_entities, \
 
    convert_misc_entities, lchop, plural, rchop, remove_formatting, \
 
    replace_whitespace, urlify, truncate, wrap_paragraphs
 
from webhelpers.date import time_ago_in_words
 
from webhelpers.paginate import Page
 
from webhelpers.html.tags import _set_input_attrs, _set_id_attr, \
 
    convert_boolean_attrs, NotGiven, _make_safe_id_component
 

	
 
from rhodecode.lib.annotate import annotate_highlight
 
from rhodecode.lib.utils import repo_name_slug
 
from rhodecode.lib.utils2 import str2bool, safe_unicode, safe_str, \
 
    get_changeset_safe
 
from rhodecode.lib.markup_renderer import MarkupRenderer
 
from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError
 
from rhodecode.lib.vcs.backends.base import BaseChangeset
 
from rhodecode.model.changeset_status import ChangesetStatusModel
 
from rhodecode.model.db import URL_SEP
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
def shorter(text, size=20):
 
    postfix = '...'
 
    if len(text) > size:
 
        return text[:size - len(postfix)] + postfix
 
    return text
 

	
 

	
 
def _reset(name, value=None, id=NotGiven, type="reset", **attrs):
 
    """
 
    Reset button
 
    """
 
    _set_input_attrs(attrs, type, name, value)
 
    _set_id_attr(attrs, id, name)
 
    convert_boolean_attrs(attrs, ["disabled"])
 
    return HTML.input(**attrs)
 

	
 
reset = _reset
 
safeid = _make_safe_id_component
 

	
 

	
 
def FID(raw_id, path):
 
    """
 
    Creates a uniqe ID for filenode based on it's hash of path and revision
 
    it's safe to use in urls
 

	
 
    :param raw_id:
 
    :param path:
 
    """
 

	
 
    return 'C-%s-%s' % (short_id(raw_id), md5(safe_str(path)).hexdigest()[:12])
 

	
 

	
 
def get_token():
 
    """Return the current authentication token, creating one if one doesn't
 
    already exist.
 
    """
 
    token_key = "_authentication_token"
 
    from pylons import session
 
    if not token_key in session:
 
        try:
 
            token = hashlib.sha1(str(random.getrandbits(128))).hexdigest()
 
        except AttributeError:  # Python < 2.4
 
            token = hashlib.sha1(str(random.randrange(2 ** 128))).hexdigest()
 
        session[token_key] = token
 
        if hasattr(session, 'save'):
 
            session.save()
 
    return session[token_key]
 

	
 

	
 
class _GetError(object):
 
    """Get error from form_errors, and represent it as span wrapped error
 
    message
 

	
 
    :param field_name: field to fetch errors for
 
    :param form_errors: form errors dict
 
    """
 

	
 
    def __call__(self, field_name, form_errors):
 
        tmpl = """<span class="error_msg">%s</span>"""
 
        if form_errors and form_errors.has_key(field_name):
 
            return literal(tmpl % form_errors.get(field_name))
 

	
 
get_error = _GetError()
 

	
 

	
 
class _ToolTip(object):
 

	
 
    def __call__(self, tooltip_title, trim_at=50):
 
        """Special function just to wrap our text into nice formatted
 
        autowrapped text
 

	
 
        :param tooltip_title:
 
        """
 
        return escape(tooltip_title)
 
tooltip = _ToolTip()
 

	
 

	
 
class _FilesBreadCrumbs(object):
 

	
 
    def __call__(self, repo_name, rev, paths):
 
        if isinstance(paths, str):
 
            paths = safe_unicode(paths)
 
        url_l = [link_to(repo_name, url('files_home',
 
                                        repo_name=repo_name,
 
                                        revision=rev, f_path=''))]
 
        paths_l = paths.split('/')
 
        for cnt, p in enumerate(paths_l):
 
            if p != '':
 
                url_l.append(link_to(p,
 
                                     url('files_home',
 
                                         repo_name=repo_name,
 
                                         revision=rev,
 
                                         f_path='/'.join(paths_l[:cnt + 1])
 
                                         )
 
                                     )
 
                             )
 

	
 
        return literal('/'.join(url_l))
 

	
 
files_breadcrumbs = _FilesBreadCrumbs()
 

	
 

	
 
class CodeHtmlFormatter(HtmlFormatter):
 
    """
 
    My code Html Formatter for source codes
 
    """
 

	
 
    def wrap(self, source, outfile):
 
        return self._wrap_div(self._wrap_pre(self._wrap_code(source)))
 

	
 
    def _wrap_code(self, source):
 
        for cnt, it in enumerate(source):
 
            i, t = it
 
            t = '<div id="L%s">%s</div>' % (cnt + 1, t)
 
            yield i, t
 

	
 
    def _wrap_tablelinenos(self, inner):
 
        dummyoutfile = StringIO.StringIO()
 
        lncount = 0
 
        for t, line in inner:
 
            if t:
 
                lncount += 1
 
            dummyoutfile.write(line)
 

	
 
        fl = self.linenostart
 
        mw = len(str(lncount + fl - 1))
 
        sp = self.linenospecial
 
        st = self.linenostep
 
        la = self.lineanchors
 
        aln = self.anchorlinenos
 
        nocls = self.noclasses
 
        if sp:
 
            lines = []
 

	
 
            for i in range(fl, fl + lncount):
 
                if i % st == 0:
 
                    if i % sp == 0:
 
                        if aln:
 
                            lines.append('<a href="#%s%d" class="special">%*d</a>' %
 
                                         (la, i, mw, i))
 
                        else:
 
                            lines.append('<span class="special">%*d</span>' % (mw, i))
 
                    else:
 
                        if aln:
 
                            lines.append('<a href="#%s%d">%*d</a>' % (la, i, mw, i))
 
                        else:
 
                            lines.append('%*d' % (mw, i))
 
                else:
 
                    lines.append('')
 
            ls = '\n'.join(lines)
 
        else:
 
            lines = []
 
            for i in range(fl, fl + lncount):
 
                if i % st == 0:
 
                    if aln:
 
                        lines.append('<a href="#%s%d">%*d</a>' % (la, i, mw, i))
 
                    else:
 
                        lines.append('%*d' % (mw, i))
 
                else:
 
                    lines.append('')
 
            ls = '\n'.join(lines)
 

	
 
        # in case you wonder about the seemingly redundant <div> here: since the
 
        # content in the other cell also is wrapped in a div, some browsers in
 
        # some configurations seem to mess up the formatting...
 
        if nocls:
 
            yield 0, ('<table class="%stable">' % self.cssclass +
 
                      '<tr><td><div class="linenodiv" '
 
                      'style="background-color: #f0f0f0; padding-right: 10px">'
 
                      '<pre style="line-height: 125%">' +
 
                      ls + '</pre></div></td><td id="hlcode" class="code">')
 
        else:
 
            yield 0, ('<table class="%stable">' % self.cssclass +
 
                      '<tr><td class="linenos"><div class="linenodiv"><pre>' +
 
                      ls + '</pre></div></td><td id="hlcode" class="code">')
 
        yield 0, dummyoutfile.getvalue()
 
        yield 0, '</td></tr></table>'
 

	
 

	
 
def pygmentize(filenode, **kwargs):
 
    """pygmentize function using pygments
 

	
 
    :param filenode:
 
    """
 

	
 
    return literal(code_highlight(filenode.content,
 
                                  filenode.lexer, CodeHtmlFormatter(**kwargs)))
 

	
 
@@ -723,237 +724,238 @@ def changed_tooltip(nodes):
 
    Generates a html string for changed nodes in changeset page.
 
    It limits the output to 30 entries
 

	
 
    :param nodes: LazyNodesGenerator
 
    """
 
    if nodes:
 
        pref = ': <br/> '
 
        suf = ''
 
        if len(nodes) > 30:
 
            suf = '<br/>' + _(' and %s more') % (len(nodes) - 30)
 
        return literal(pref + '<br/> '.join([safe_unicode(x.path)
 
                                             for x in nodes[:30]]) + suf)
 
    else:
 
        return ': ' + _('No Files')
 

	
 

	
 
def repo_link(groups_and_repos):
 
    """
 
    Makes a breadcrumbs link to repo within a group
 
    joins &raquo; on each group to create a fancy link
 

	
 
    ex::
 
        group >> subgroup >> repo
 

	
 
    :param groups_and_repos:
 
    """
 
    groups, repo_name = groups_and_repos
 

	
 
    if not groups:
 
        return repo_name
 
    else:
 
        def make_link(group):
 
            return link_to(group.name, url('repos_group_home',
 
                                           group_name=group.group_name))
 
        return literal(' &raquo; '.join(map(make_link, groups)) + \
 
                       " &raquo; " + repo_name)
 

	
 

	
 
def fancy_file_stats(stats):
 
    """
 
    Displays a fancy two colored bar for number of added/deleted
 
    lines of code on file
 

	
 
    :param stats: two element list of added/deleted lines of code
 
    """
 

	
 
    a, d, t = stats[0], stats[1], stats[0] + stats[1]
 
    width = 100
 
    unit = float(width) / (t or 1)
 

	
 
    # needs > 9% of width to be visible or 0 to be hidden
 
    a_p = max(9, unit * a) if a > 0 else 0
 
    d_p = max(9, unit * d) if d > 0 else 0
 
    p_sum = a_p + d_p
 

	
 
    if p_sum > width:
 
        #adjust the percentage to be == 100% since we adjusted to 9
 
        if a_p > d_p:
 
            a_p = a_p - (p_sum - width)
 
        else:
 
            d_p = d_p - (p_sum - width)
 

	
 
    a_v = a if a > 0 else ''
 
    d_v = d if d > 0 else ''
 

	
 
    def cgen(l_type):
 
        mapping = {'tr': 'top-right-rounded-corner-mid',
 
                   'tl': 'top-left-rounded-corner-mid',
 
                   'br': 'bottom-right-rounded-corner-mid',
 
                   'bl': 'bottom-left-rounded-corner-mid'}
 
        map_getter = lambda x: mapping[x]
 

	
 
        if l_type == 'a' and d_v:
 
            #case when added and deleted are present
 
            return ' '.join(map(map_getter, ['tl', 'bl']))
 

	
 
        if l_type == 'a' and not d_v:
 
            return ' '.join(map(map_getter, ['tr', 'br', 'tl', 'bl']))
 

	
 
        if l_type == 'd' and a_v:
 
            return ' '.join(map(map_getter, ['tr', 'br']))
 

	
 
        if l_type == 'd' and not a_v:
 
            return ' '.join(map(map_getter, ['tr', 'br', 'tl', 'bl']))
 

	
 
    d_a = '<div class="added %s" style="width:%s%%">%s</div>' % (
 
        cgen('a'), a_p, a_v
 
    )
 
    d_d = '<div class="deleted %s" style="width:%s%%">%s</div>' % (
 
        cgen('d'), d_p, d_v
 
    )
 
    return literal('<div style="width:%spx">%s%s</div>' % (width, d_a, d_d))
 

	
 

	
 
def urlify_text(text_):
 
    import re
 

	
 
    url_pat = re.compile(r'''(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]'''
 
                         '''|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)''')
 

	
 
    def url_func(match_obj):
 
        url_full = match_obj.groups()[0]
 
        return '<a href="%(url)s">%(url)s</a>' % ({'url': url_full})
 

	
 
    return literal(url_pat.sub(url_func, text_))
 

	
 

	
 
def urlify_changesets(text_, repository):
 
    """
 
    Extract revision ids from changeset and make link from them
 

	
 
    :param text_:
 
    :param repository:
 
    """
 
    import re
 
    URL_PAT = re.compile(r'([0-9a-fA-F]{12,})')
 

	
 
    def url_func(match_obj):
 
        rev = match_obj.groups()[0]
 
        pref = ''
 
        if match_obj.group().startswith(' '):
 
            pref = ' '
 
        tmpl = (
 
        '%(pref)s<a class="%(cls)s" href="%(url)s">'
 
        '%(rev)s'
 
        '</a>'
 
        )
 
        return tmpl % {
 
         'pref': pref,
 
         'cls': 'revision-link',
 
         'url': url('changeset_home', repo_name=repository, revision=rev),
 
         'rev': rev,
 
        }
 

	
 
    newtext = URL_PAT.sub(url_func, text_)
 

	
 
    return newtext
 

	
 

	
 
def urlify_commit(text_, repository=None, link_=None):
 
    """
 
    Parses given text message and makes proper links.
 
    issues are linked to given issue-server, and rest is a changeset link
 
    if link_ is given, in other case it's a plain text
 

	
 
    :param text_:
 
    :param repository:
 
    :param link_: changeset link
 
    """
 
    import re
 
    import traceback
 

	
 
    def escaper(string):
 
        return string.replace('<', '&lt;').replace('>', '&gt;')
 

	
 
    def linkify_others(t, l):
 
        urls = re.compile(r'(\<a.*?\<\/a\>)',)
 
        links = []
 
        for e in urls.split(t):
 
            if not urls.match(e):
 
                links.append('<a class="message-link" href="%s">%s</a>' % (l, e))
 
            else:
 
                links.append(e)
 

	
 
        return ''.join(links)
 

	
 
    # urlify changesets - extrac revisions and make link out of them
 
    text_ = urlify_changesets(escaper(text_), repository)
 

	
 
    try:
 
        conf = config['app_conf']
 

	
 
        URL_PAT = re.compile(r'%s' % conf.get('issue_pat'))
 

	
 
        if URL_PAT:
 
            ISSUE_SERVER_LNK = conf.get('issue_server_link')
 
            ISSUE_PREFIX = conf.get('issue_prefix')
 

	
 
            def url_func(match_obj):
 
                pref = ''
 
                if match_obj.group().startswith(' '):
 
                    pref = ' '
 

	
 
                issue_id = ''.join(match_obj.groups())
 
                tmpl = (
 
                '%(pref)s<a class="%(cls)s" href="%(url)s">'
 
                '%(issue-prefix)s%(id-repr)s'
 
                '</a>'
 
                )
 
                url = ISSUE_SERVER_LNK.replace('{id}', issue_id)
 
                if repository:
 
                    url = url.replace('{repo}', repository)
 

	
 
                    repo_name = repository.split(URL_SEP)[-1]
 
                    url = url.replace('{repo_name}', repo_name)
 
                return tmpl % {
 
                     'pref': pref,
 
                     'cls': 'issue-tracker-link',
 
                     'url': url,
 
                     'id-repr': issue_id,
 
                     'issue-prefix': ISSUE_PREFIX,
 
                     'serv': ISSUE_SERVER_LNK,
 
                }
 

	
 
            newtext = URL_PAT.sub(url_func, text_)
 

	
 
            if link_:
 
                # wrap not links into final link => link_
 
                newtext = linkify_others(newtext, link_)
 

	
 
            return literal(newtext)
 
    except:
 
        log.error(traceback.format_exc())
 
        pass
 

	
 
    return text_
 

	
 

	
 
def rst(source):
 
    return literal('<div class="rst-block">%s</div>' %
 
                   MarkupRenderer.rst(source))
 

	
 

	
 
def rst_w_mentions(source):
 
    """
 
    Wrapped rst renderer with @mention highlighting
 

	
 
    :param source:
 
    """
 
    return literal('<div class="rst-block">%s</div>' %
 
                   MarkupRenderer.rst_with_mentions(source))
 

	
 

	
 
def changeset_status(repo, revision):
 
    return ChangesetStatusModel().get_status(repo, revision)
 

	
 

	
 
def changeset_status_lbl(changeset_status):
 
    return dict(ChangesetStatus.STATUSES).get(changeset_status)
rhodecode/model/db.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.model.db
 
    ~~~~~~~~~~~~~~~~~~
 

	
 
    Database Models for RhodeCode
 

	
 
    :created_on: Apr 08, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import os
 
import logging
 
import datetime
 
import traceback
 
from collections import defaultdict
 

	
 
from sqlalchemy import *
 
from sqlalchemy.ext.hybrid import hybrid_property
 
from sqlalchemy.orm import relationship, joinedload, class_mapper, validates
 
from beaker.cache import cache_region, region_invalidate
 

	
 
from pylons.i18n.translation import lazy_ugettext as _
 

	
 
from rhodecode.lib.vcs import get_backend
 
from rhodecode.lib.vcs.utils.helpers import get_scm
 
from rhodecode.lib.vcs.exceptions import VCSError
 
from rhodecode.lib.vcs.utils.lazy import LazyProperty
 

	
 
from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \
 
    safe_unicode
 
from rhodecode.lib.compat import json
 
from rhodecode.lib.caching_query import FromCache
 

	
 
from rhodecode.model.meta import Base, Session
 
import hashlib
 
from sqlalchemy.exc import DatabaseError
 

	
 

	
 
URL_SEP = '/'
 
log = logging.getLogger(__name__)
 

	
 
#==============================================================================
 
# BASE CLASSES
 
#==============================================================================
 

	
 
_hash_key = lambda k: hashlib.md5(safe_str(k)).hexdigest()
 

	
 

	
 
class ModelSerializer(json.JSONEncoder):
 
    """
 
    Simple Serializer for JSON,
 

	
 
    usage::
 

	
 
        to make object customized for serialization implement a __json__
 
        method that will return a dict for serialization into json
 

	
 
    example::
 

	
 
        class Task(object):
 

	
 
            def __init__(self, name, value):
 
                self.name = name
 
                self.value = value
 

	
 
            def __json__(self):
 
                return dict(name=self.name,
 
                            value=self.value)
 

	
 
    """
 

	
 
    def default(self, obj):
 

	
 
        if hasattr(obj, '__json__'):
 
            return obj.__json__()
 
        else:
 
            return json.JSONEncoder.default(self, obj)
 

	
 

	
 
class BaseModel(object):
 
    """
 
    Base Model for all classess
 
    """
 

	
 
    @classmethod
 
    def _get_keys(cls):
 
        """return column names for this model """
 
        return class_mapper(cls).c.keys()
 

	
 
    def get_dict(self):
 
        """
 
        return dict with keys and values corresponding
 
        to this model data """
 

	
 
        d = {}
 
        for k in self._get_keys():
 
            d[k] = getattr(self, k)
 

	
 
        # also use __json__() if present to get additional fields
 
        for k, val in getattr(self, '__json__', lambda: {})().iteritems():
 
            d[k] = val
 
        return d
 

	
 
    def get_appstruct(self):
 
        """return list with keys and values tupples corresponding
 
        to this model data """
 

	
 
        l = []
 
        for k in self._get_keys():
 
            l.append((k, getattr(self, k),))
 
        return l
 

	
 
    def populate_obj(self, populate_dict):
 
        """populate model with data from given populate_dict"""
 

	
 
        for k in self._get_keys():
 
            if k in populate_dict:
 
                setattr(self, k, populate_dict[k])
 

	
 
    @classmethod
 
    def query(cls):
 
        return Session.query(cls)
 

	
 
    @classmethod
 
    def get(cls, id_):
 
        if id_:
 
            return cls.query().get(id_)
 

	
 
    @classmethod
 
    def getAll(cls):
 
        return cls.query().all()
 

	
 
    @classmethod
 
    def delete(cls, id_):
 
        obj = cls.query().get(id_)
 
        Session.delete(obj)
 

	
 
    def __repr__(self):
 
        if hasattr(self, '__unicode__'):
 
            # python repr needs to return str
 
            return safe_str(self.__unicode__())
 
        return '<DB:%s>' % (self.__class__.__name__)
 

	
 
class RhodeCodeSetting(Base, BaseModel):
 
    __tablename__ = 'rhodecode_settings'
 
    __table_args__ = (
 
        UniqueConstraint('app_settings_name'),
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'}
 
    )
 
    app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    app_settings_name = Column("app_settings_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
    _app_settings_value = Column("app_settings_value", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 

	
 
    def __init__(self, k='', v=''):
 
        self.app_settings_name = k
 
        self.app_settings_value = v
 

	
 
    @validates('_app_settings_value')
 
    def validate_settings_value(self, key, val):
 
        assert type(val) == unicode
 
        return val
 

	
 
    @hybrid_property
 
    def app_settings_value(self):
 
        v = self._app_settings_value
 
        if self.app_settings_name == 'ldap_active':
 
            v = str2bool(v)
 
        return v
 

	
 
    @app_settings_value.setter
 
    def app_settings_value(self, val):
 
        """
 
        Setter that will always make sure we use unicode in app_settings_value
 

	
 
        :param val:
 
        """
 
        self._app_settings_value = safe_unicode(val)
 

	
 
    def __unicode__(self):
 
        return u"<%s('%s:%s')>" % (
 
            self.__class__.__name__,
 
            self.app_settings_name, self.app_settings_value
 
        )
 

	
 
    @classmethod
 
    def get_by_name(cls, ldap_key):
 
        return cls.query()\
 
            .filter(cls.app_settings_name == ldap_key).scalar()
 

	
 
    @classmethod
 
    def get_app_settings(cls, cache=False):
 

	
 
        ret = cls.query()
 

	
 
        if cache:
 
            ret = ret.options(FromCache("sql_cache_short", "get_hg_settings"))
 

	
 
        if not ret:
 
            raise Exception('Could not get application settings !')
 
        settings = {}
 
        for each in ret:
 
            settings['rhodecode_' + each.app_settings_name] = \
 
                each.app_settings_value
 

	
 
        return settings
 

	
 
    @classmethod
 
    def get_ldap_settings(cls, cache=False):
 
        ret = cls.query()\
 
                .filter(cls.app_settings_name.startswith('ldap_')).all()
 
        fd = {}
 
        for row in ret:
 
            fd.update({row.app_settings_name:row.app_settings_value})
 

	
 
        return fd
 

	
 

	
 
class RhodeCodeUi(Base, BaseModel):
 
    __tablename__ = 'rhodecode_ui'
 
    __table_args__ = (
 
        UniqueConstraint('ui_key'),
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'}
 
    )
 

	
 
    HOOK_UPDATE = 'changegroup.update'
 
    HOOK_REPO_SIZE = 'changegroup.repo_size'
 
    HOOK_PUSH = 'pretxnchangegroup.push_logger'
 
    HOOK_PULL = 'preoutgoing.pull_logger'
 

	
 
@@ -384,656 +384,656 @@ class User(Base, BaseModel):
 
            q = q.options(FromCache("sql_cache_short",
 
                                    "get_email_key_%s" % email))
 

	
 
        ret = q.scalar()
 
        if ret is None:
 
            q = UserEmailMap.query()
 
            # try fetching in alternate email map
 
            if case_insensitive:
 
                q = q.filter(UserEmailMap.email.ilike(email))
 
            else:
 
                q = q.filter(UserEmailMap.email == email)
 
            q = q.options(joinedload(UserEmailMap.user))
 
            if cache:
 
                q = q.options(FromCache("sql_cache_short",
 
                                        "get_email_map_key_%s" % email))
 
            ret = getattr(q.scalar(), 'user', None)
 

	
 
        return ret
 

	
 
    def update_lastlogin(self):
 
        """Update user lastlogin"""
 
        self.last_login = datetime.datetime.now()
 
        Session.add(self)
 
        log.debug('updated user %s lastlogin' % self.username)
 

	
 
    def __json__(self):
 
        return dict(
 
            user_id=self.user_id,
 
            first_name=self.name,
 
            last_name=self.lastname,
 
            email=self.email,
 
            full_name=self.full_name,
 
            full_name_or_username=self.full_name_or_username,
 
            short_contact=self.short_contact,
 
            full_contact=self.full_contact
 
        )
 

	
 

	
 
class UserEmailMap(Base, BaseModel):
 
    __tablename__ = 'user_email_map'
 
    __table_args__ = (
 
        UniqueConstraint('email'),
 
        {'extend_existing': True, 'mysql_engine':'InnoDB',
 
         'mysql_charset': 'utf8'}
 
    )
 
    __mapper_args__ = {}
 

	
 
    email_id = Column("email_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
 
    _email = Column("email", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
 

	
 
    user = relationship('User')
 

	
 
    @validates('_email')
 
    def validate_email(self, key, email):
 
        # check if this email is not main one
 
        main_email = Session.query(User).filter(User.email == email).scalar()
 
        if main_email is not None:
 
            raise AttributeError('email %s is present is user table' % email)
 
        return email
 

	
 
    @hybrid_property
 
    def email(self):
 
        return self._email
 

	
 
    @email.setter
 
    def email(self, val):
 
        self._email = val.lower() if val else None
 

	
 

	
 
class UserLog(Base, BaseModel):
 
    __tablename__ = 'user_logs'
 
    __table_args__ = (
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'},
 
    )
 
    user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 
    repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True)
 
    repository_name = Column("repository_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
    user_ip = Column("user_ip", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
    action = Column("action", UnicodeText(length=1200000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
    action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None)
 

	
 
    @property
 
    def action_as_day(self):
 
        return datetime.date(*self.action_date.timetuple()[:3])
 

	
 
    user = relationship('User')
 
    repository = relationship('Repository', cascade='')
 

	
 

	
 
class UsersGroup(Base, BaseModel):
 
    __tablename__ = 'users_groups'
 
    __table_args__ = (
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'},
 
    )
 

	
 
    users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    users_group_name = Column("users_group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
 
    users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
 

	
 
    members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
 
    users_group_to_perm = relationship('UsersGroupToPerm', cascade='all')
 
    users_group_repo_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
 

	
 
    def __unicode__(self):
 
        return u'<userGroup(%s)>' % (self.users_group_name)
 

	
 
    @classmethod
 
    def get_by_group_name(cls, group_name, cache=False,
 
                          case_insensitive=False):
 
        if case_insensitive:
 
            q = cls.query().filter(cls.users_group_name.ilike(group_name))
 
        else:
 
            q = cls.query().filter(cls.users_group_name == group_name)
 
        if cache:
 
            q = q.options(FromCache(
 
                            "sql_cache_short",
 
                            "get_user_%s" % _hash_key(group_name)
 
                          )
 
            )
 
        return q.scalar()
 

	
 
    @classmethod
 
    def get(cls, users_group_id, cache=False):
 
        users_group = cls.query()
 
        if cache:
 
            users_group = users_group.options(FromCache("sql_cache_short",
 
                                    "get_users_group_%s" % users_group_id))
 
        return users_group.get(users_group_id)
 

	
 

	
 
class UsersGroupMember(Base, BaseModel):
 
    __tablename__ = 'users_groups_members'
 
    __table_args__ = (
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'},
 
    )
 

	
 
    users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
 
    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 

	
 
    user = relationship('User', lazy='joined')
 
    users_group = relationship('UsersGroup')
 

	
 
    def __init__(self, gr_id='', u_id=''):
 
        self.users_group_id = gr_id
 
        self.user_id = u_id
 

	
 

	
 
class Repository(Base, BaseModel):
 
    __tablename__ = 'repositories'
 
    __table_args__ = (
 
        UniqueConstraint('repo_name'),
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'},
 
    )
 

	
 
    repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    repo_name = Column("repo_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
 
    clone_uri = Column("clone_uri", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
 
    repo_type = Column("repo_type", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default='hg')
 
    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
 
    private = Column("private", Boolean(), nullable=True, unique=None, default=None)
 
    enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True)
 
    enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True)
 
    description = Column("description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
    created_on = Column('created_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now)
 

	
 
    fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
 
    group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None)
 

	
 
    user = relationship('User')
 
    fork = relationship('Repository', remote_side=repo_id)
 
    group = relationship('RepoGroup')
 
    repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
 
    users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
 
    stats = relationship('Statistics', cascade='all', uselist=False)
 

	
 
    followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
 

	
 
    logs = relationship('UserLog')
 

	
 
    def __unicode__(self):
 
        return u"<%s('%s:%s')>" % (self.__class__.__name__,self.repo_id,
 
                                   self.repo_name)
 

	
 
    @classmethod
 
    def url_sep(cls):
 
        return '/'
 
        return URL_SEP
 

	
 
    @classmethod
 
    def get_by_repo_name(cls, repo_name):
 
        q = Session.query(cls).filter(cls.repo_name == repo_name)
 
        q = q.options(joinedload(Repository.fork))\
 
                .options(joinedload(Repository.user))\
 
                .options(joinedload(Repository.group))
 
        return q.scalar()
 

	
 
    @classmethod
 
    def get_repo_forks(cls, repo_id):
 
        return cls.query().filter(Repository.fork_id == repo_id)
 

	
 
    @classmethod
 
    def base_path(cls):
 
        """
 
        Returns base path when all repos are stored
 

	
 
        :param cls:
 
        """
 
        q = Session.query(RhodeCodeUi)\
 
            .filter(RhodeCodeUi.ui_key == cls.url_sep())
 
        q = q.options(FromCache("sql_cache_short", "repository_repo_path"))
 
        return q.one().ui_value
 

	
 
    @property
 
    def just_name(self):
 
        return self.repo_name.split(Repository.url_sep())[-1]
 

	
 
    @property
 
    def groups_with_parents(self):
 
        groups = []
 
        if self.group is None:
 
            return groups
 

	
 
        cur_gr = self.group
 
        groups.insert(0, cur_gr)
 
        while 1:
 
            gr = getattr(cur_gr, 'parent_group', None)
 
            cur_gr = cur_gr.parent_group
 
            if gr is None:
 
                break
 
            groups.insert(0, gr)
 

	
 
        return groups
 

	
 
    @property
 
    def groups_and_repo(self):
 
        return self.groups_with_parents, self.just_name
 

	
 
    @LazyProperty
 
    def repo_path(self):
 
        """
 
        Returns base full path for that repository means where it actually
 
        exists on a filesystem
 
        """
 
        q = Session.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key ==
 
                                              Repository.url_sep())
 
        q = q.options(FromCache("sql_cache_short", "repository_repo_path"))
 
        return q.one().ui_value
 

	
 
    @property
 
    def repo_full_path(self):
 
        p = [self.repo_path]
 
        # we need to split the name by / since this is how we store the
 
        # names in the database, but that eventually needs to be converted
 
        # into a valid system path
 
        p += self.repo_name.split(Repository.url_sep())
 
        return os.path.join(*p)
 

	
 
    def get_new_name(self, repo_name):
 
        """
 
        returns new full repository name based on assigned group and new new
 

	
 
        :param group_name:
 
        """
 
        path_prefix = self.group.full_path_splitted if self.group else []
 
        return Repository.url_sep().join(path_prefix + [repo_name])
 

	
 
    @property
 
    def _ui(self):
 
        """
 
        Creates an db based ui object for this repository
 
        """
 
        from mercurial import ui
 
        from mercurial import config
 
        baseui = ui.ui()
 

	
 
        #clean the baseui object
 
        baseui._ocfg = config.config()
 
        baseui._ucfg = config.config()
 
        baseui._tcfg = config.config()
 

	
 
        ret = RhodeCodeUi.query()\
 
            .options(FromCache("sql_cache_short", "repository_repo_ui")).all()
 

	
 
        hg_ui = ret
 
        for ui_ in hg_ui:
 
            if ui_.ui_active:
 
                log.debug('settings ui from db[%s]%s:%s', ui_.ui_section,
 
                          ui_.ui_key, ui_.ui_value)
 
                baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.ui_value)
 

	
 
        return baseui
 

	
 
    @classmethod
 
    def is_valid(cls, repo_name):
 
        """
 
        returns True if given repo name is a valid filesystem repository
 

	
 
        :param cls:
 
        :param repo_name:
 
        """
 
        from rhodecode.lib.utils import is_valid_repo
 

	
 
        return is_valid_repo(repo_name, cls.base_path())
 

	
 
    #==========================================================================
 
    # SCM PROPERTIES
 
    #==========================================================================
 

	
 
    def get_changeset(self, rev=None):
 
        return get_changeset_safe(self.scm_instance, rev)
 

	
 
    @property
 
    def tip(self):
 
        return self.get_changeset('tip')
 

	
 
    @property
 
    def author(self):
 
        return self.tip.author
 

	
 
    @property
 
    def last_change(self):
 
        return self.scm_instance.last_change
 

	
 
    def comments(self, revisions=None):
 
        """
 
        Returns comments for this repository grouped by revisions
 

	
 
        :param revisions: filter query by revisions only
 
        """
 
        cmts = ChangesetComment.query()\
 
            .filter(ChangesetComment.repo == self)
 
        if revisions:
 
            cmts = cmts.filter(ChangesetComment.revision.in_(revisions))
 
        grouped = defaultdict(list)
 
        for cmt in cmts.all():
 
            grouped[cmt.revision].append(cmt)
 
        return grouped
 

	
 
    def statuses(self, revisions=None):
 
        """
 
        Returns statuses for this repository
 

	
 
        :param revisions: list of revisions to get statuses for
 
        :type revisions: list
 
        """
 

	
 
        statuses = ChangesetStatus.query()\
 
            .filter(ChangesetStatus.repo == self)\
 
            .filter(ChangesetStatus.version == 0)
 
        if revisions:
 
            statuses = statuses.filter(ChangesetStatus.revision.in_(revisions))
 
        grouped = {}
 
        for stat in statuses.all():
 
            grouped[stat.revision] = [str(stat.status), stat.status_lbl]
 
        return grouped
 

	
 
    #==========================================================================
 
    # SCM CACHE INSTANCE
 
    #==========================================================================
 

	
 
    @property
 
    def invalidate(self):
 
        return CacheInvalidation.invalidate(self.repo_name)
 

	
 
    def set_invalidate(self):
 
        """
 
        set a cache for invalidation for this instance
 
        """
 
        CacheInvalidation.set_invalidate(self.repo_name)
 

	
 
    @LazyProperty
 
    def scm_instance(self):
 
        return self.__get_instance()
 

	
 
    @property
 
    def scm_instance_cached(self):
 
        @cache_region('long_term')
 
        def _c(repo_name):
 
            return self.__get_instance()
 
        rn = self.repo_name
 
        log.debug('Getting cached instance of repo')
 
        inv = self.invalidate
 
        if inv is not None:
 
            region_invalidate(_c, None, rn)
 
            # update our cache
 
            CacheInvalidation.set_valid(inv.cache_key)
 
        return _c(rn)
 

	
 
    def __get_instance(self):
 
        repo_full_path = self.repo_full_path
 
        try:
 
            alias = get_scm(repo_full_path)[0]
 
            log.debug('Creating instance of %s repository' % alias)
 
            backend = get_backend(alias)
 
        except VCSError:
 
            log.error(traceback.format_exc())
 
            log.error('Perhaps this repository is in db and not in '
 
                      'filesystem run rescan repositories with '
 
                      '"destroy old data " option from admin panel')
 
            return
 

	
 
        if alias == 'hg':
 

	
 
            repo = backend(safe_str(repo_full_path), create=False,
 
                           baseui=self._ui)
 
            # skip hidden web repository
 
            if repo._get_hidden():
 
                return
 
        else:
 
            repo = backend(repo_full_path, create=False)
 

	
 
        return repo
 

	
 

	
 
class RepoGroup(Base, BaseModel):
 
    __tablename__ = 'groups'
 
    __table_args__ = (
 
        UniqueConstraint('group_name', 'group_parent_id'),
 
        CheckConstraint('group_id != group_parent_id'),
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'},
 
    )
 
    __mapper_args__ = {'order_by': 'group_name'}
 

	
 
    group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    group_name = Column("group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
 
    group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None)
 
    group_description = Column("group_description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 

	
 
    repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id')
 
    users_group_to_perm = relationship('UsersGroupRepoGroupToPerm', cascade='all')
 

	
 
    parent_group = relationship('RepoGroup', remote_side=group_id)
 

	
 
    def __init__(self, group_name='', parent_group=None):
 
        self.group_name = group_name
 
        self.parent_group = parent_group
 

	
 
    def __unicode__(self):
 
        return u"<%s('%s:%s')>" % (self.__class__.__name__, self.group_id,
 
                                  self.group_name)
 

	
 
    @classmethod
 
    def groups_choices(cls):
 
        from webhelpers.html import literal as _literal
 
        repo_groups = [('', '')]
 
        sep = ' &raquo; '
 
        _name = lambda k: _literal(sep.join(k))
 

	
 
        repo_groups.extend([(x.group_id, _name(x.full_path_splitted))
 
                              for x in cls.query().all()])
 

	
 
        repo_groups = sorted(repo_groups, key=lambda t: t[1].split(sep)[0])
 
        return repo_groups
 

	
 
    @classmethod
 
    def url_sep(cls):
 
        return '/'
 
        return URL_SEP
 

	
 
    @classmethod
 
    def get_by_group_name(cls, group_name, cache=False, case_insensitive=False):
 
        if case_insensitive:
 
            gr = cls.query()\
 
                .filter(cls.group_name.ilike(group_name))
 
        else:
 
            gr = cls.query()\
 
                .filter(cls.group_name == group_name)
 
        if cache:
 
            gr = gr.options(FromCache(
 
                            "sql_cache_short",
 
                            "get_group_%s" % _hash_key(group_name)
 
                            )
 
            )
 
        return gr.scalar()
 

	
 
    @property
 
    def parents(self):
 
        parents_recursion_limit = 5
 
        groups = []
 
        if self.parent_group is None:
 
            return groups
 
        cur_gr = self.parent_group
 
        groups.insert(0, cur_gr)
 
        cnt = 0
 
        while 1:
 
            cnt += 1
 
            gr = getattr(cur_gr, 'parent_group', None)
 
            cur_gr = cur_gr.parent_group
 
            if gr is None:
 
                break
 
            if cnt == parents_recursion_limit:
 
                # this will prevent accidental infinit loops
 
                log.error('group nested more than %s' %
 
                          parents_recursion_limit)
 
                break
 

	
 
            groups.insert(0, gr)
 
        return groups
 

	
 
    @property
 
    def children(self):
 
        return RepoGroup.query().filter(RepoGroup.parent_group == self)
 

	
 
    @property
 
    def name(self):
 
        return self.group_name.split(RepoGroup.url_sep())[-1]
 

	
 
    @property
 
    def full_path(self):
 
        return self.group_name
 

	
 
    @property
 
    def full_path_splitted(self):
 
        return self.group_name.split(RepoGroup.url_sep())
 

	
 
    @property
 
    def repositories(self):
 
        return Repository.query()\
 
                .filter(Repository.group == self)\
 
                .order_by(Repository.repo_name)
 

	
 
    @property
 
    def repositories_recursive_count(self):
 
        cnt = self.repositories.count()
 

	
 
        def children_count(group):
 
            cnt = 0
 
            for child in group.children:
 
                cnt += child.repositories.count()
 
                cnt += children_count(child)
 
            return cnt
 

	
 
        return cnt + children_count(self)
 

	
 
    def get_new_name(self, group_name):
 
        """
 
        returns new full group name based on parent and new name
 

	
 
        :param group_name:
 
        """
 
        path_prefix = (self.parent_group.full_path_splitted if
 
                       self.parent_group else [])
 
        return RepoGroup.url_sep().join(path_prefix + [group_name])
 

	
 

	
 
class Permission(Base, BaseModel):
 
    __tablename__ = 'permissions'
 
    __table_args__ = (
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'},
 
    )
 
    permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    permission_name = Column("permission_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
    permission_longname = Column("permission_longname", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 

	
 
    def __unicode__(self):
 
        return u"<%s('%s:%s')>" % (
 
            self.__class__.__name__, self.permission_id, self.permission_name
 
        )
 

	
 
    @classmethod
 
    def get_by_key(cls, key):
 
        return cls.query().filter(cls.permission_name == key).scalar()
 

	
 
    @classmethod
 
    def get_default_perms(cls, default_user_id):
 
        q = Session.query(UserRepoToPerm, Repository, cls)\
 
         .join((Repository, UserRepoToPerm.repository_id == Repository.repo_id))\
 
         .join((cls, UserRepoToPerm.permission_id == cls.permission_id))\
 
         .filter(UserRepoToPerm.user_id == default_user_id)
 

	
 
        return q.all()
 

	
 
    @classmethod
 
    def get_default_group_perms(cls, default_user_id):
 
        q = Session.query(UserRepoGroupToPerm, RepoGroup, cls)\
 
         .join((RepoGroup, UserRepoGroupToPerm.group_id == RepoGroup.group_id))\
 
         .join((cls, UserRepoGroupToPerm.permission_id == cls.permission_id))\
 
         .filter(UserRepoGroupToPerm.user_id == default_user_id)
 

	
 
        return q.all()
 

	
 

	
 
class UserRepoToPerm(Base, BaseModel):
 
    __tablename__ = 'repo_to_perm'
 
    __table_args__ = (
 
        UniqueConstraint('user_id', 'repository_id', 'permission_id'),
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'}
 
    )
 
    repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 
    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
    repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
 

	
 
    user = relationship('User')
 
    repository = relationship('Repository')
 
    permission = relationship('Permission')
 

	
 
    @classmethod
 
    def create(cls, user, repository, permission):
 
        n = cls()
 
        n.user = user
 
        n.repository = repository
 
        n.permission = permission
 
        Session.add(n)
 
        return n
 

	
 
    def __unicode__(self):
 
        return u'<user:%s => %s >' % (self.user, self.repository)
 

	
 

	
 
class UserToPerm(Base, BaseModel):
 
    __tablename__ = 'user_to_perm'
 
    __table_args__ = (
 
        UniqueConstraint('user_id', 'permission_id'),
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'}
 
    )
 
    user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 
    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 

	
 
    user = relationship('User')
 
    permission = relationship('Permission', lazy='joined')
 

	
 

	
 
class UsersGroupRepoToPerm(Base, BaseModel):
 
    __tablename__ = 'users_group_repo_to_perm'
 
    __table_args__ = (
 
        UniqueConstraint('repository_id', 'users_group_id', 'permission_id'),
 
        {'extend_existing': True, 'mysql_engine': 'InnoDB',
 
         'mysql_charset': 'utf8'}
 
    )
 
    users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
 
    users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
 
    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
    repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
 

	
 
    users_group = relationship('UsersGroup')
 
    permission = relationship('Permission')
 
    repository = relationship('Repository')
 

	
 
    @classmethod
 
    def create(cls, users_group, repository, permission):
 
        n = cls()
 
        n.users_group = users_group
 
        n.repository = repository
 
        n.permission = permission
 
        Session.add(n)
rhodecode/templates/changelog/changelog.html
Show inline comments
 
## -*- coding: utf-8 -*-
 

	
 
<%inherit file="/base/base.html"/>
 

	
 
<%def name="title()">
 
${c.repo_name} ${_('Changelog')} - ${c.rhodecode_name}
 
</%def>
 

	
 
<%def name="breadcrumbs_links()">
 
    ${h.link_to(u'Home',h.url('/'))}
 
    &raquo;
 
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
 
    &raquo;
 
    <% size = c.size if c.size <= c.total_cs else c.total_cs %>
 
    ${_('Changelog')} - ${ungettext('showing %d out of %d revision', 'showing %d out of %d revisions', size) % (size, c.total_cs)}
 
</%def>
 

	
 
<%def name="page_nav()">
 
	${self.menu('changelog')}
 
</%def>
 

	
 
<%def name="main()">
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 
    <div class="table">
 
		% if c.pagination:
 
			<div id="graph">
 
				<div id="graph_nodes">
 
					<canvas id="graph_canvas"></canvas>
 
				</div>
 
				<div id="graph_content">
 
                    <div class="info_box" style="clear: both;padding: 10px 6px;vertical-align: right;text-align: right;"><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}" class="ui-btn small">${_('Open new pull request')}</a></div>
 
					<div class="container_header">
 
				        ${h.form(h.url.current(),method='get')}
 
				        <div class="info_box" style="float:left">
 
				          ${h.submit('set',_('Show'),class_="ui-btn")}
 
				          ${h.text('size',size=1,value=c.size)}
 
				          ${_('revisions')}
 
				        </div>
 
				        ${h.end_form()}
 
					<div id="rev_range_container" style="display:none"></div>
 
                    <div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div>
 
					</div>
 

	
 
				%for cnt,cs in enumerate(c.pagination):
 
					<div id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
 
						<div class="left">
 
							<div>
 
							${h.checkbox(cs.short_id,class_="changeset_range")}
 
							<span class="tooltip" title="${h.age(cs.date)}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"><span class="changeset_id">${cs.revision}:<span class="changeset_hash">${h.short_id(cs.raw_id)}</span></span></a></span>
 
							</div>
 
							<div class="author">
 
								<div class="gravatar">
 
									<img alt="gravatar" src="${h.gravatar_url(h.email(cs.author),16)}"/>
 
								</div>
 
								<div title="${cs.author}" class="user">${h.person(cs.author)}</div>
 
								<div title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</div>
 
							</div>
 
                            <div class="date">${cs.date}</div>
 
						</div>
 
						<div class="mid">
 
                            <div class="message">${h.urlify_commit(h.wrap_paragraphs(cs.message),c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
 
                            <div class="expand"><span class="expandtext">&darr; ${_('show more')} &darr;</span></div>
 
						</div>
 
						<div class="right">
 
									<div class="changes">
 
                                        <div id="${cs.raw_id}"  style="float:right;" class="changed_total tooltip" title="${_('Affected number of files, click to show more details')}">${len(cs.affected_files)}</div>
 
                                        <div class="comments-container">
 
                                        %if len(c.comments.get(cs.raw_id,[])) > 0:
 
                                            <div class="comments-cnt" title="${('comments')}">
 
                                              <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}">
 
                                               <div class="comments-cnt">${len(c.comments[cs.raw_id])}</div>
 
                                               <img src="${h.url('/images/icons/comments.png')}">
 
                                              </a>
 
                                            </div>
 
                                        %endif
 
                                        </div>
 
                                        <div class="changeset-status-container">
 
                                            %if c.statuses.get(cs.raw_id):
 
                                              <div title="${_('Changeset status')}" class="changeset-status-lbl">${c.statuses.get(cs.raw_id)[1]}</div>
 
                                              <div class="changeset-status-ico"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses.get(cs.raw_id)[0])}" /></div>
 
                                            %endif
 
                                        </div>
 
									</div>
 
								   %if cs.parents:
 
									%for p_cs in reversed(cs.parents):
 
										<div class="parent">${_('Parent')}
 
											<span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
 
											h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
 
										</div>
 
									%endfor
 
								   %else:
 
                                        <div class="parent">${_('No parents')}</div>
 
                                   %endif
 

	
 
								<span class="logtags">
 
									%if len(cs.parents)>1:
 
									<span class="merge">${_('merge')}</span>
 
									%endif
 
									%if cs.branch:
 
									<span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}">
 
									   ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
 
                                    </span>
 
									%endif
 
                                    %if h.is_hg(c.rhodecode_repo):
 
                                      %for book in cs.bookmarks:
 
                                      <span class="bookbook" title="${'%s %s' % (_('bookmark'),book)}">
 
                                         ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
 
                                      </span>
 
                                      %endfor
 
                                    %endif
 
									%for tag in cs.tags:
 
										<span class="tagtag"  title="${'%s %s' % (_('tag'),tag)}">
 
										${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
 
									%endfor
 
								</span>
 
						</div>
 
					</div>
 

	
 
				%endfor
 
				<div class="pagination-wh pagination-left">
 
					${c.pagination.pager('$link_previous ~2~ $link_next')}
 
				</div>
 
				</div>
 
			</div>
 

	
 
			<script type="text/javascript" src="${h.url('/js/graph.js')}"></script>
 
			<script type="text/javascript">
 
				YAHOO.util.Event.onDOMReady(function(){
 

	
 
                    //Monitor range checkboxes and build a link to changesets
 
                    //ranges
 
                    var checkboxes = YUD.getElementsByClassName('changeset_range');
 
                    var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}";
 
                    YUE.on(checkboxes,'click',function(e){
 
                        var checked_checkboxes = [];
 
                        for (pos in checkboxes){
 
                            if(checkboxes[pos].checked){
 
                                checked_checkboxes.push(checkboxes[pos]);
 
                            }
 
                        }
 
                        if(checked_checkboxes.length>1){
 
                        	var rev_end = checked_checkboxes[0].name;
 
                        	var rev_start = checked_checkboxes[checked_checkboxes.length-1].name;
 

	
 
                            var url = url_tmpl.replace('__REVRANGE__',
 
                            		rev_start+'...'+rev_end);
 

	
 
                        var link = "<a href="+url+">${_('Show selected changes __S -> __E')}</a>"
 
                        link = link.replace('__S',rev_start);
 
                        link = link.replace('__E',rev_end);
 
                        YUD.get('rev_range_container').innerHTML = link;
 
                        YUD.setStyle('rev_range_container','display','');
 
                        }
 
                        else{
 
                        	YUD.setStyle('rev_range_container','display','none');
 

	
 
                        }
 
                    });
 

	
 
                    var msgs = YUQ('.message');
 
                    // get first element height
 
                    var el = YUQ('#graph_content .container')[0];
 
                    var row_h = el.clientHeight;
 
                    for(var i=0;i<msgs.length;i++){
 
                    	var m = msgs[i];
 

	
 
                    	var h = m.clientHeight;
 
                    	var pad = YUD.getStyle(m,'padding');
 
                    	if(h > row_h){
 
                    		var offset = row_h - (h+12);
 
                    		YUD.setStyle(m.nextElementSibling,'display','block');
 
                    		YUD.setStyle(m.nextElementSibling,'margin-top',offset+'px');
 
                    	};
 
                    }
 
                    YUE.on(YUQ('.expand'),'click',function(e){
 
                    	var elem = e.currentTarget.parentNode.parentNode;
 
                    	YUD.setStyle(e.currentTarget,'display','none');
 
                    	YUD.setStyle(elem,'height','auto');
 

	
 
                    	//redraw the graph, max_w and jsdata are global vars
 
                        set_canvas(max_w);
 

	
 
                        var r = new BranchRenderer();
 
                        r.render(jsdata,max_w);
 

	
 
                    })
 

	
 
                    // Fetch changeset details
 
                    YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){
 
                    	var id = e.currentTarget.id
 
                    	var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}"
 
                    	var url = url.replace('__CS__',id);
 
                    	ypjax(url,id,function(){tooltip_activate()});
 
                    });
 

	
 
                    // change branch filter
 
                    YUE.on(YUD.get('branch_filter'),'change',function(e){
 
                    	var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value;
 
                    	var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}";
 
                    	var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}";
 
                    	var url = url.replace('__BRANCH__',selected_branch);
 
                    	if(selected_branch != ''){
 
                    		window.location = url;
 
                    	}else{
 
                    		window.location = url_main;
 
                    	}
 

	
 
                    });
 

	
 
					function set_canvas(heads) {
 
						var c = document.getElementById('graph_nodes');
 
						var t = document.getElementById('graph_content');
 
						canvas = document.getElementById('graph_canvas');
 
						var div_h = t.clientHeight;
 
						c.style.height=div_h+'px';
 
						canvas.setAttribute('height',div_h);
 
						c.style.height=max_w+'px';
 
						canvas.setAttribute('width',max_w);
 
					};
 
					var heads = 1;
 
					var max_heads = 0;
 
					var jsdata = ${c.jsdata|n};
 

	
 
					for( var i=0;i<jsdata.length;i++){
 
					    var m = Math.max.apply(Math, jsdata[i][1]);
 
					    if (m>max_heads){
 
					        max_heads = m;
 
					    }
 
					}
 
					var max_w = Math.max(100,max_heads*25);
 
					set_canvas(max_w);
 

	
 
					var r = new BranchRenderer();
 
					r.render(jsdata,max_w);
 

	
 
				});
 
			</script>
 
		%else:
 
			${_('There are no changes yet')}
 
		%endif
 
    </div>
 
</div>
 
</%def>
0 comments (0 inline, 0 general)