changeset 2280:c9e3ea5bb59a codereview

merge beta into codereview
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 16 May 2012 13:29:40 +0200
parents 85f31a1b69dc (current diff) 24095abde696 (diff)
children 1e617a418b19
files rhodecode/__init__.py rhodecode/model/db.py rhodecode/public/css/style.css rhodecode/templates/changelog/changelog.html
diffstat 24 files changed, 2696 insertions(+), 110 deletions(-) [+]
line wrap: on
line diff
--- a/CONTRIBUTORS	Tue May 08 21:53:36 2012 +0200
+++ b/CONTRIBUTORS	Wed May 16 13:29:40 2012 +0200
@@ -3,10 +3,10 @@
     Lukasz Balcerzak <lukaszbalcerzak@gmail.com>
     Jason Harris <jason@jasonfharris.com>
     Thayne Harbaugh  <thayne@fusionio.com>
-    cejones
+    cejones <>
     Thomas Waldmann <tw-public@gmx.de>
     Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it>
-    Dmitri Kuznetsov
+    Dmitri Kuznetsov <>
     Jared Bunting <jared.bunting@peachjean.com>
     Steve Romanow <slestak989@gmail.com>
     Augosto Hermann <augusto.herrmann@planejamento.gov.br>    
@@ -17,4 +17,5 @@
     Matt Zuba <matt.zuba@goodwillaz.org>
     Aras Pranckevicius <aras@unity3d.com>
     Tony Bussieres <t.bussieres@gmail.com>
-    Erwin Kroon <e.kroon@smartmetersolutions.nl>
\ No newline at end of file
+    Erwin Kroon <e.kroon@smartmetersolutions.nl>
+    nansenat16 <nansenat16@null.tw>
\ No newline at end of file
--- a/README.rst	Tue May 08 21:53:36 2012 +0200
+++ b/README.rst	Wed May 16 13:29:40 2012 +0200
@@ -15,7 +15,7 @@
 however RhodeCode can be run as standalone hosted application on your own server.
 It is open source and donation ware and focuses more on providing a customized, 
 self administered interface for Mercurial_ and GIT_  repositories. 
-RhodeCode works on *nix systems and Windows it is powered by a vcs_ library 
+RhodeCode works on \*nix systems and Windows it is powered by a vcs_ library 
 that Lukasz Balcerzak and Marcin Kuzminski created to handle multiple 
 different version control systems.
 
--- a/docs/changelog.rst	Tue May 08 21:53:36 2012 +0200
+++ b/docs/changelog.rst	Wed May 16 13:29:40 2012 +0200
@@ -4,7 +4,7 @@
 Changelog
 =========
 
-1.3.5 (**2012-XX-XX**)
+1.4.0 (**2012-XX-XX**)
 ----------------------
 
 :status: in-progress
@@ -13,6 +13,31 @@
 news
 ++++
 
+fixes
++++++
+
+1.3.6 (**2012-05-16**)
+----------------------
+
+news
+++++
+
+- chinese traditional translation
+
+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
+
+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
@@ -26,6 +51,7 @@
 - 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
 +++++
@@ -37,6 +63,8 @@
 - 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**)
 ----------------------
--- a/rhodecode/__init__.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/__init__.py	Wed May 16 13:29:40 2012 +0200
@@ -46,6 +46,9 @@
 PLATFORM_WIN = ('Windows')
 PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD', 'OpenBSD', 'SunOS')
 
+is_windows = __platform__ in PLATFORM_WIN
+is_unix = __platform__ in PLATFORM_OTHERS
+
 requirements = [
     "Pylons==1.0.0",
     "Beaker==1.6.3",
@@ -62,13 +65,13 @@
     "webob==1.0.8",
     "markdown==2.1.1",
     "docutils==0.8.1",
+    "simplejson==2.5.2",
 ]
 
 if __py_version__ < (2, 6):
-    requirements.append("simplejson")
     requirements.append("pysqlite")
 
-if __platform__ in PLATFORM_WIN:
+if is_windows:
     requirements.append("mercurial>=2.2.1,<2.3")
 else:
     requirements.append("py-bcrypt")
--- a/rhodecode/config/rcextensions/make_rcextensions.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/config/rcextensions/make_rcextensions.py	Wed May 16 13:29:40 2012 +0200
@@ -22,6 +22,8 @@
 #
 # 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 __future__ import with_statement
+
 import os
 import sys
 import pkg_resources
--- a/rhodecode/controllers/files.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/controllers/files.py	Wed May 16 13:29:40 2012 +0200
@@ -26,6 +26,7 @@
 import os
 import logging
 import traceback
+import tempfile
 
 from pylons import request, response, tmpl_context as c, url
 from pylons.i18n.translation import _
@@ -48,6 +49,7 @@
 
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.scm import ScmModel
+from rhodecode.model.db import Repository
 
 from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\
     _context_url, get_line_ctx, get_ignore_ws
@@ -168,7 +170,7 @@
         file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path)
 
         response.content_disposition = 'attachment; filename=%s' % \
-            safe_str(f_path.split(os.sep)[-1])
+            safe_str(f_path.split(Repository.url_sep())[-1])
 
         response.content_type = file_node.mimetype
         return file_node.content
@@ -358,25 +360,23 @@
         except (ImproperArchiveTypeError, KeyError):
             return _('Unknown archive type')
 
+        archive = tempfile.NamedTemporaryFile(mode='w+r+b', delete=False)
+        cs.fill_archive(stream=archive, kind=fileformat, subrepos=subrepos)
+        archive.close()
         response.content_type = content_type
         response.content_disposition = 'attachment; filename=%s-%s%s' \
-            % (repo_name, revision, ext)
-
-        import tempfile
-        archive = tempfile.mkstemp()[1]
-        t = open(archive, 'wb')
-        cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
+            % (repo_name, revision[:12], ext)
+        response.content_length = str(os.path.getsize(archive.name))
 
-        def get_chunked_archive(archive):
-            stream = open(archive, 'rb')
+        def get_chunked_archive(tmpfile):
             while True:
-                data = stream.read(4096)
+                data = tmpfile.read(16 * 1024)
                 if not data:
-                    os.remove(archive)
+                    tmpfile.close()
+                    os.unlink(tmpfile.name)
                     break
                 yield data
-
-        return get_chunked_archive(archive)
+        return get_chunked_archive(tmpfile=open(archive.name,'rb'))
 
     @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
                                    'repository.admin')
--- a/rhodecode/controllers/summary.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/controllers/summary.py	Wed May 16 13:29:40 2012 +0200
@@ -179,10 +179,12 @@
         if c.enable_downloads:
             c.download_options = self._get_download_links(c.rhodecode_repo)
 
-        c.readme_data, c.readme_file = self.__get_readme_data(c.rhodecode_db_repo)
+        c.readme_data, c.readme_file = self.__get_readme_data(
+            c.rhodecode_db_repo.repo_name, c.rhodecode_repo
+        )
         return render('summary/summary.html')
 
-    def __get_readme_data(self, repo):
+    def __get_readme_data(self, repo_name, repo):
 
         @cache_region('long_term')
         def _get_readme_from_cache(key):
@@ -190,7 +192,7 @@
             readme_file = None
             log.debug('Fetching readme file')
             try:
-                cs = repo.get_changeset('tip')
+                cs = repo.get_changeset()  # fetches TIP
                 renderer = MarkupRenderer()
                 for f in README_FILES:
                     try:
@@ -202,6 +204,7 @@
                     except NodeDoesNotExistError:
                         continue
             except ChangesetError:
+                log.error(traceback.format_exc())
                 pass
             except EmptyRepositoryError:
                 pass
@@ -210,7 +213,7 @@
 
             return readme_data, readme_file
 
-        key = repo.repo_name + '_README'
+        key = repo_name + '_README'
         inv = CacheInvalidation.invalidate(key)
         if inv is not None:
             region_invalidate(_get_readme_from_cache, None, key)
Binary file rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po	Wed May 16 13:29:40 2012 +0200
@@ -0,0 +1,2532 @@
+# Translations template 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: 2011-09-14 15:50-0300\n"
+"PO-Revision-Date: 2012-05-09 22:23+0800\n"
+"Last-Translator: Nansen <nansenat16@gmail.com>\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"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-Country: TAIWAN\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: rhodecode/controllers/changeset.py:108
+#: rhodecode/controllers/changeset.py:149
+#: rhodecode/controllers/changeset.py:216
+#: rhodecode/controllers/changeset.py:229
+msgid "binary file"
+msgstr "二進位檔"
+
+#: rhodecode/controllers/changeset.py:123
+#: rhodecode/controllers/changeset.py:168
+msgid "Changeset is to big and was cut off, see raw changeset instead"
+msgstr ""
+
+#: rhodecode/controllers/changeset.py:159
+msgid "Diff is to big and was cut off, see raw diff instead"
+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:72
+msgid "There are no files yet"
+msgstr "尚未有任何檔案"
+
+#: rhodecode/controllers/files.py:262
+#, python-format
+msgid "Edited %s via RhodeCode"
+msgstr "使用 RhodeCode 編輯 %s"
+
+#: rhodecode/controllers/files.py:267
+#: rhodecode/templates/files/file_diff.html:40
+msgid "No changes"
+msgstr "沒有修改"
+
+#: rhodecode/controllers/files.py:278
+#, python-format
+msgid "Successfully committed to %s"
+msgstr "成功遞交至 %s"
+
+#: rhodecode/controllers/files.py:283
+msgid "Error occurred during commit"
+msgstr ""
+
+#: rhodecode/controllers/files.py:308
+msgid "downloads disabled"
+msgstr "下載已關閉"
+
+#: rhodecode/controllers/files.py:313
+#, python-format
+msgid "Unknown revision %s"
+msgstr "未知修訂 %s"
+
+#: rhodecode/controllers/files.py:315
+msgid "Empty repository"
+msgstr "空的版本庫"
+
+#: rhodecode/controllers/files.py:317
+msgid "Unknown archive type"
+msgstr "未知的存檔類型"
+
+#: rhodecode/controllers/files.py:385
+#: rhodecode/controllers/files.py:398
+msgid "Binary file"
+msgstr "二進位檔"
+
+#: rhodecode/controllers/files.py:417
+#: rhodecode/templates/changeset/changeset_range.html:4
+#: rhodecode/templates/changeset/changeset_range.html:12
+#: rhodecode/templates/changeset/changeset_range.html:29
+msgid "Changesets"
+msgstr "變更"
+
+#: rhodecode/controllers/files.py:418
+#: rhodecode/controllers/summary.py:175
+#: rhodecode/templates/branches/branches.html:5
+#: rhodecode/templates/summary/summary.html:690
+msgid "Branches"
+msgstr "分支"
+
+#: rhodecode/controllers/files.py:419
+#: rhodecode/controllers/summary.py:176
+#: rhodecode/templates/summary/summary.html:679
+#: rhodecode/templates/tags/tags.html:5
+msgid "Tags"
+msgstr "標籤"
+
+#: rhodecode/controllers/journal.py:50
+#, python-format
+msgid "%s public journal %s feed"
+msgstr "%s 公開日誌 %s feed"
+
+#: rhodecode/controllers/journal.py:178
+#: rhodecode/controllers/journal.py:212
+#: rhodecode/templates/admin/repos/repo_edit.html:171
+#: rhodecode/templates/base/base.html:50
+msgid "Public journal"
+msgstr "公開日誌"
+
+#: rhodecode/controllers/login.py:111
+msgid "You have successfully registered into rhodecode"
+msgstr "您已經成功註冊rhodecode"
+
+#: rhodecode/controllers/login.py:133
+msgid "Your password reset link was sent"
+msgstr "您的密碼重設連結已寄出"
+
+#: rhodecode/controllers/login.py:155
+msgid "Your password reset was successful, new password has been sent to your email"
+msgstr "您的密碼重設動作已完成,新的密碼已寄至您的信箱"
+
+#: rhodecode/controllers/search.py:109
+msgid "Invalid search query. Try quoting it."
+msgstr "無效的查詢。請使用跳脫字元"
+
+#: rhodecode/controllers/search.py:114
+msgid "There is no index to search in. Please run whoosh indexer"
+msgstr "沒有任何索引可以搜尋。請執行 whoosh 建立索引"
+
+#: rhodecode/controllers/search.py:118
+msgid "An error occurred during this search operation"
+msgstr ""
+
+#: rhodecode/controllers/settings.py:61
+#: rhodecode/controllers/settings.py:171
+#, 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/settings.py:109
+#: rhodecode/controllers/admin/repos.py:239
+#, python-format
+msgid "Repository %s updated successfully"
+msgstr "版本庫 %s 更新完成"
+
+#: rhodecode/controllers/settings.py:126
+#: rhodecode/controllers/admin/repos.py:257
+#, python-format
+msgid "error occurred during update of repository %s"
+msgstr ""
+
+#: rhodecode/controllers/settings.py:144
+#: rhodecode/controllers/admin/repos.py:275
+#, 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:156
+#: rhodecode/controllers/admin/repos.py:287
+#, python-format
+msgid "deleted repository %s"
+msgstr "刪除版本庫 %s"
+
+#: rhodecode/controllers/settings.py:159
+#: rhodecode/controllers/admin/repos.py:297
+#: rhodecode/controllers/admin/repos.py:303
+#, python-format
+msgid "An error occurred during deletion of %s"
+msgstr ""
+
+#: rhodecode/controllers/settings.py:193
+#, python-format
+msgid "forked %s repository as %s"
+msgstr "forked %s 版本庫為 %s"
+
+#: rhodecode/controllers/settings.py:211
+#, python-format
+msgid "An error occurred during repository forking %s"
+msgstr ""
+
+#: rhodecode/controllers/summary.py:123
+msgid "No data loaded yet"
+msgstr ""
+
+#: rhodecode/controllers/summary.py:126
+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:115
+msgid "Ldap settings updated successfully"
+msgstr "LDAP設定更新完成"
+
+#: rhodecode/controllers/admin/ldap_settings.py:120
+msgid "Unable to activate ldap. The \"python-ldap\" library is missing."
+msgstr "無法啟用LDAP。找不到python-ldap函式庫"
+
+#: rhodecode/controllers/admin/ldap_settings.py:134
+msgid "error occurred during update of ldap settings"
+msgstr ""
+
+#: rhodecode/controllers/admin/permissions.py:56
+msgid "None"
+msgstr "無"
+
+#: rhodecode/controllers/admin/permissions.py:57
+msgid "Read"
+msgstr "讀"
+
+#: rhodecode/controllers/admin/permissions.py:58
+msgid "Write"
+msgstr "寫"
+
+#: rhodecode/controllers/admin/permissions.py:59
+#: 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:110
+#: 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:279
+#: rhodecode/templates/base/base.html:366
+#: rhodecode/templates/base/base.html:368
+#: rhodecode/templates/base/base.html:370
+msgid "Admin"
+msgstr "管理"
+
+#: rhodecode/controllers/admin/permissions.py:62
+msgid "disabled"
+msgstr "停用"
+
+#: rhodecode/controllers/admin/permissions.py:64
+msgid "allowed with manual account activation"
+msgstr "允許手動啟用帳號"
+
+#: rhodecode/controllers/admin/permissions.py:66
+msgid "allowed with automatic account activation"
+msgstr "允許自動啟用帳號"
+
+#: rhodecode/controllers/admin/permissions.py:68
+msgid "Disabled"
+msgstr "停用"
+
+#: rhodecode/controllers/admin/permissions.py:69
+msgid "Enabled"
+msgstr "啟用"
+
+#: rhodecode/controllers/admin/permissions.py:102
+msgid "Default permissions updated successfully"
+msgstr "預設權限更新完成"
+
+#: rhodecode/controllers/admin/permissions.py:119
+msgid "error occurred during update of permissions"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:96
+#, 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/admin/repos.py:172
+#, python-format
+msgid "created repository %s from %s"
+msgstr "建立版本庫 %s 到 %s"
+
+#: rhodecode/controllers/admin/repos.py:176
+#, python-format
+msgid "created repository %s"
+msgstr "建立版本庫 %s"
+
+#: rhodecode/controllers/admin/repos.py:205
+#, python-format
+msgid "error occurred during creation of repository %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:292
+#, python-format
+msgid "Cannot delete %s it still contains attached forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:320
+msgid "An error occurred during deletion of repository user"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:335
+msgid "An error occurred during deletion of repository users groups"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:352
+msgid "An error occurred during deletion of repository stats"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:367
+msgid "An error occurred during cache invalidation"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:387
+msgid "Updated repository visibility in public journal"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:390
+msgid "An error occurred during setting this repository in public journal"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:395
+#: rhodecode/model/forms.py:53
+msgid "Token mismatch"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:408
+msgid "Pulled from remote location"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:410
+msgid "An error occurred during pull from remote location"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:83
+#, python-format
+msgid "created repos group %s"
+msgstr "建立版本庫群組 %s"
+
+#: rhodecode/controllers/admin/repos_groups.py:96
+#, python-format
+msgid "error occurred during creation of repos group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:130
+#, python-format
+msgid "updated repos group %s"
+msgstr "更新版本庫群組 %s"
+
+#: rhodecode/controllers/admin/repos_groups.py:143
+#, python-format
+msgid "error occurred during update of repos group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:164
+#, python-format
+msgid "This group contains %s repositores and cannot be deleted"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:171
+#, python-format
+msgid "removed repos group %s"
+msgstr "移除版本庫群組 %s"
+
+#: rhodecode/controllers/admin/repos_groups.py:175
+#, python-format
+msgid "error occurred during deletion of repos group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:109
+#, python-format
+msgid "Repositories successfully rescanned added: %s,removed: %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:118
+msgid "Whoosh reindex task scheduled"
+msgstr "Whoosh 重新索引工作排程"
+
+#: rhodecode/controllers/admin/settings.py:143
+msgid "Updated application settings"
+msgstr "更新應用設定"
+
+#: rhodecode/controllers/admin/settings.py:148
+#: rhodecode/controllers/admin/settings.py:215
+msgid "error occurred during updating application settings"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:210
+msgid "Updated mercurial settings"
+msgstr "更新 mercurial 設定"
+
+#: rhodecode/controllers/admin/settings.py:236
+msgid "Added new hook"
+msgstr "新增hook"
+
+#: rhodecode/controllers/admin/settings.py:247
+msgid "Updated hooks"
+msgstr "更新hook"
+
+#: rhodecode/controllers/admin/settings.py:251
+msgid "error occurred during hook creation"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:310
+msgid "You can't edit this user since it's crucial for entire application"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:339
+msgid "Your account was updated successfully"
+msgstr "您的帳號已更新完成"
+
+#: rhodecode/controllers/admin/settings.py:359
+#: rhodecode/controllers/admin/users.py:130
+#, python-format
+msgid "error occurred during update of user %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:78
+#, python-format
+msgid "created user %s"
+msgstr "建立使用者 %s"
+
+#: rhodecode/controllers/admin/users.py:90
+#, python-format
+msgid "error occurred during creation of user %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:116
+msgid "User updated successfully"
+msgstr "使用者更新完成"
+
+#: rhodecode/controllers/admin/users.py:146
+msgid "successfully deleted user"
+msgstr "成功刪除使用者"
+
+#: rhodecode/controllers/admin/users.py:150
+msgid "An error occurred during deletion of user"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:166
+msgid "You can't edit this user"
+msgstr "您無法編輯這位使用者"
+
+#: rhodecode/controllers/admin/users.py:195
+#: rhodecode/controllers/admin/users_groups.py:202
+msgid "Granted 'repository create' permission to user"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:204
+#: rhodecode/controllers/admin/users_groups.py:211
+msgid "Revoked 'repository create' permission to user"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:74
+#, python-format
+msgid "created users group %s"
+msgstr "建立使用者群組 %s"
+
+#: rhodecode/controllers/admin/users_groups.py:86
+#, python-format
+msgid "error occurred during creation of users group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:119
+#, python-format
+msgid "updated users group %s"
+msgstr "更新使用者群組 %s"
+
+#: rhodecode/controllers/admin/users_groups.py:138
+#, python-format
+msgid "error occurred during update of users group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:154
+msgid "successfully deleted users group"
+msgstr "成功移除使用者群組"
+
+#: rhodecode/controllers/admin/users_groups.py:158
+msgid "An error occurred during deletion of users group"
+msgstr ""
+
+#: rhodecode/lib/__init__.py:279
+msgid "year"
+msgstr "年"
+
+#: rhodecode/lib/__init__.py:280
+msgid "month"
+msgstr "月"
+
+#: rhodecode/lib/__init__.py:281
+msgid "day"
+msgstr "日"
+
+#: rhodecode/lib/__init__.py:282
+msgid "hour"
+msgstr "時"
+
+#: rhodecode/lib/__init__.py:283
+msgid "minute"
+msgstr "分"
+
+#: rhodecode/lib/__init__.py:284
+msgid "second"
+msgstr "秒"
+
+#: rhodecode/lib/__init__.py:293
+msgid "ago"
+msgstr "之前"
+
+#: rhodecode/lib/__init__.py:296
+msgid "just now"
+msgstr "現在"
+
+#: rhodecode/lib/auth.py:377
+msgid "You need to be a registered user to perform this action"
+msgstr "您必須是註冊使用者才能執行這個動作"
+
+#: rhodecode/lib/auth.py:421
+msgid "You need to be a signed in to view this page"
+msgstr "您必須登入後才能瀏覽這個頁面"
+
+#: rhodecode/lib/helpers.py:307
+msgid "True"
+msgstr "真"
+
+#: rhodecode/lib/helpers.py:311
+msgid "False"
+msgstr "假"
+
+#: rhodecode/lib/helpers.py:352
+#, python-format
+msgid "Show all combined changesets %s->%s"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:356
+msgid "compare view"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:365
+msgid "and"
+msgstr "和"
+
+#: rhodecode/lib/helpers.py:365
+#, python-format
+msgid "%s more"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:367
+#: rhodecode/templates/changelog/changelog.html:14
+#: rhodecode/templates/changelog/changelog.html:39
+msgid "revisions"
+msgstr "修訂"
+
+#: rhodecode/lib/helpers.py:385
+msgid "fork name "
+msgstr "fork 名稱"
+
+#: rhodecode/lib/helpers.py:388
+msgid "[deleted] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:389
+#: rhodecode/lib/helpers.py:393
+msgid "[created] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:390
+#: rhodecode/lib/helpers.py:394
+msgid "[forked] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:391
+#: rhodecode/lib/helpers.py:395
+msgid "[updated] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:392
+msgid "[delete] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:396
+msgid "[pushed] into"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:397
+msgid "[committed via RhodeCode] into"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:398
+msgid "[pulled from remote] into"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:399
+msgid "[pulled] from"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:400
+msgid "[started following] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:401
+msgid "[stopped following] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:577
+#, python-format
+msgid " and %s more"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:581
+msgid "No Files"
+msgstr "沒有檔案"
+
+#: rhodecode/model/forms.py:66
+msgid "Invalid username"
+msgstr "無效的使用者名稱"
+
+#: rhodecode/model/forms.py:75
+msgid "This username already exists"
+msgstr "使用者名稱已存在"
+
+#: rhodecode/model/forms.py:79
+msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character"
+msgstr "使用者名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭"
+
+#: rhodecode/model/forms.py:94
+msgid "Invalid group name"
+msgstr "無效的群組名稱"
+
+#: rhodecode/model/forms.py:104
+msgid "This users group already exists"
+msgstr "這個使用者群組已存在"
+
+#: rhodecode/model/forms.py:110
+msgid "Group name may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character"
+msgstr "群組名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭"
+
+#: rhodecode/model/forms.py:132
+msgid "Cannot assign this group as parent"
+msgstr ""
+
+#: rhodecode/model/forms.py:148
+msgid "This group already exists"
+msgstr "這個群組已存在"
+
+#: rhodecode/model/forms.py:164
+#: rhodecode/model/forms.py:172
+#: rhodecode/model/forms.py:180
+msgid "Invalid characters in password"
+msgstr "無效的字元在密碼中"
+
+#: rhodecode/model/forms.py:191
+msgid "Passwords do not match"
+msgstr "密碼不相符"
+
+#: rhodecode/model/forms.py:196
+msgid "invalid password"
+msgstr "無效的密碼"
+
+#: rhodecode/model/forms.py:197
+msgid "invalid user name"
+msgstr "無效的使用者名稱"
+
+#: rhodecode/model/forms.py:198
+msgid "Your account is disabled"
+msgstr "您的帳號已被停用"
+
+#: rhodecode/model/forms.py:233
+msgid "This username is not valid"
+msgstr "無效的使用者名稱"
+
+#: rhodecode/model/forms.py:245
+msgid "This repository name is disallowed"
+msgstr "不允許的版本庫名稱"
+
+#: rhodecode/model/forms.py:266
+#, python-format
+msgid "This repository already exists in group \"%s\""
+msgstr "這個版本庫已存在於群組 \"%s\""
+
+#: rhodecode/model/forms.py:274
+msgid "This repository already exists"
+msgstr "這個版本庫已經存在"
+
+#: rhodecode/model/forms.py:312
+#: rhodecode/model/forms.py:319
+msgid "invalid clone url"
+msgstr "無效的複製URL"
+
+#: rhodecode/model/forms.py:322
+msgid "Invalid clone url, provide a valid clone http\\s url"
+msgstr ""
+
+#: rhodecode/model/forms.py:334
+msgid "Fork have to be the same type as original"
+msgstr "Fork 必須使用相同的版本庫類型"
+
+#: rhodecode/model/forms.py:341
+msgid "This username or users group name is not valid"
+msgstr "使用者名稱或群組名稱無效"
+
+#: rhodecode/model/forms.py:403
+msgid "This is not a valid path"
+msgstr "不是一個有效的路徑"
+
+#: rhodecode/model/forms.py:416
+msgid "This e-mail address is already taken"
+msgstr "這個郵件位址已經使用了"
+
+#: rhodecode/model/forms.py:427
+msgid "This e-mail address doesn't exist."
+msgstr "這個郵件位址不存在"
+
+#: rhodecode/model/forms.py:447
+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:466
+msgid "Please enter a login"
+msgstr "請登入"
+
+#: rhodecode/model/forms.py:467
+#, python-format
+msgid "Enter a value %(min)i characters long or more"
+msgstr ""
+
+#: rhodecode/model/forms.py:475
+msgid "Please enter a password"
+msgstr "請輸入密碼"
+
+#: rhodecode/model/forms.py:476
+#, python-format
+msgid "Enter %(min)i characters or more"
+msgstr ""
+
+#: rhodecode/model/user.py:145
+msgid "[RhodeCode] New User registration"
+msgstr "[RhodeCode] 新使用者註冊"
+
+#: rhodecode/model/user.py:157
+#: rhodecode/model/user.py:179
+msgid "You can't Edit this user since it's crucial for entire application"
+msgstr "您無法編輯這個使用者,因為他是系統帳號"
+
+#: rhodecode/model/user.py:201
+msgid "You can't remove this user since it's crucial for entire application"
+msgstr "您無法移除這個使用者,因為他是系統帳號"
+
+#: rhodecode/model/user.py:204
+#, python-format
+msgid "This user still owns %s repositories and cannot be removed. Switch owners or remove those repositories"
+msgstr "這個使用者擁有 %s 個版本庫所以無法移除,請先變更版本庫擁有者或者刪除版本庫"
+
+#: rhodecode/templates/index.html:4
+msgid "Dashboard"
+msgstr "儀表板"
+
+#: rhodecode/templates/index_base.html:22
+#: rhodecode/templates/admin/users/user_edit_my_account.html:102
+msgid "quick filter..."
+msgstr "快速過濾..."
+
+#: rhodecode/templates/index_base.html:23
+#: rhodecode/templates/base/base.html:300
+msgid "repositories"
+msgstr "個版本庫"
+
+#: rhodecode/templates/index_base.html:29
+#: rhodecode/templates/admin/repos/repos.html:22
+msgid "ADD NEW REPOSITORY"
+msgstr "新增版本庫"
+
+#: rhodecode/templates/index_base.html:41
+#: 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:42
+#: rhodecode/templates/index_base.html:73
+#: rhodecode/templates/admin/repos/repo_add_base.html:44
+#: rhodecode/templates/admin/repos/repo_edit.html:64
+#: rhodecode/templates/admin/repos/repos.html:31
+#: 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/settings/repo_fork.html:40
+#: rhodecode/templates/settings/repo_settings.html:40
+#: rhodecode/templates/summary/summary.html:92
+msgid "Description"
+msgstr "描述"
+
+#: rhodecode/templates/index_base.html:53
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
+msgid "Repositories group"
+msgstr "版本庫群組"
+
+#: rhodecode/templates/index_base.html:72
+#: rhodecode/templates/admin/repos/repo_add_base.html:9
+#: rhodecode/templates/admin/repos/repo_edit.html:32
+#: rhodecode/templates/admin/repos/repos.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account.html:117
+#: rhodecode/templates/files/files_browser.html:157
+#: rhodecode/templates/settings/repo_settings.html:31
+#: rhodecode/templates/summary/summary.html:31
+#: rhodecode/templates/summary/summary.html:107
+msgid "Name"
+msgstr "名稱"
+
+#: rhodecode/templates/index_base.html:74
+#: rhodecode/templates/admin/repos/repos.html:32
+#: rhodecode/templates/summary/summary.html:114
+msgid "Last change"
+msgstr "最後修改"
+
+#: rhodecode/templates/index_base.html:75
+#: rhodecode/templates/admin/repos/repos.html:33
+msgid "Tip"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:76
+#: rhodecode/templates/admin/repos/repo_edit.html:97
+msgid "Owner"
+msgstr "擁有者"
+
+#: rhodecode/templates/index_base.html:77
+#: rhodecode/templates/journal/public_journal.html:20
+#: rhodecode/templates/summary/summary.html:180
+#: rhodecode/templates/summary/summary.html:183
+msgid "RSS"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:78
+#: rhodecode/templates/journal/public_journal.html:23
+#: rhodecode/templates/summary/summary.html:181
+#: rhodecode/templates/summary/summary.html:184
+msgid "Atom"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:87
+#: rhodecode/templates/index_base.html:89
+#: rhodecode/templates/index_base.html:91
+#: rhodecode/templates/base/base.html:209
+#: rhodecode/templates/base/base.html:211
+#: rhodecode/templates/base/base.html:213
+#: rhodecode/templates/summary/summary.html:4
+msgid "Summary"
+msgstr "概況"
+
+#: rhodecode/templates/index_base.html:95
+#: rhodecode/templates/index_base.html:97
+#: rhodecode/templates/index_base.html:99
+#: rhodecode/templates/base/base.html:225
+#: rhodecode/templates/base/base.html:227
+#: rhodecode/templates/base/base.html:229
+#: rhodecode/templates/changelog/changelog.html:6
+#: rhodecode/templates/changelog/changelog.html:14
+msgid "Changelog"
+msgstr "修改紀錄"
+
+#: rhodecode/templates/index_base.html:103
+#: rhodecode/templates/index_base.html:105
+#: rhodecode/templates/index_base.html:107
+#: rhodecode/templates/base/base.html:268
+#: rhodecode/templates/base/base.html:270
+#: rhodecode/templates/base/base.html:272
+#: rhodecode/templates/files/files.html:4
+msgid "Files"
+msgstr "檔案"
+
+#: rhodecode/templates/index_base.html:116
+#: rhodecode/templates/admin/repos/repos.html:42
+#: rhodecode/templates/admin/users/user_edit_my_account.html:127
+#: rhodecode/templates/summary/summary.html:48
+msgid "Mercurial repository"
+msgstr "Mercurial 版本庫"
+
+#: rhodecode/templates/index_base.html:118
+#: rhodecode/templates/admin/repos/repos.html:44
+#: rhodecode/templates/admin/users/user_edit_my_account.html:129
+#: rhodecode/templates/summary/summary.html:51
+msgid "Git repository"
+msgstr "Git 版本庫"
+
+#: rhodecode/templates/index_base.html:123
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
+#: rhodecode/templates/journal/journal.html:53
+#: rhodecode/templates/summary/summary.html:56
+msgid "private repository"
+msgstr "私有版本庫"
+
+#: rhodecode/templates/index_base.html:125
+#: rhodecode/templates/journal/journal.html:55
+#: rhodecode/templates/summary/summary.html:58
+msgid "public repository"
+msgstr "公開版本庫"
+
+#: rhodecode/templates/index_base.html:133
+#: rhodecode/templates/base/base.html:291
+#: rhodecode/templates/settings/repo_fork.html:13
+msgid "fork"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:134
+#: rhodecode/templates/admin/repos/repos.html:60
+#: rhodecode/templates/admin/users/user_edit_my_account.html:143
+#: rhodecode/templates/summary/summary.html:69
+#: rhodecode/templates/summary/summary.html:71
+msgid "Fork of"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:155
+#: rhodecode/templates/admin/repos/repos.html:73
+msgid "No changesets yet"
+msgstr "尚未有任何變更"
+
+#: rhodecode/templates/index_base.html:161
+#: rhodecode/templates/index_base.html:163
+#, python-format
+msgid "Subscribe to %s rss feed"
+msgstr "訂閱 %s rss"
+
+#: rhodecode/templates/index_base.html:168
+#: rhodecode/templates/index_base.html:170
+#, python-format
+msgid "Subscribe to %s atom feed"
+msgstr "訂閱 %s atom"
+
+#: rhodecode/templates/login.html:5
+#: rhodecode/templates/login.html:54
+#: rhodecode/templates/base/base.html:38
+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:47
+#: rhodecode/templates/admin/users/user_edit_my_account.html:45
+#: rhodecode/templates/base/base.html:15
+#: rhodecode/templates/summary/summary.html:106
+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:24
+msgid "Password"
+msgstr "密碼"
+
+#: rhodecode/templates/login.html:60
+msgid "Forgot your password ?"
+msgstr "忘記您的密碼?"
+
+#: rhodecode/templates/login.html:63
+#: rhodecode/templates/base/base.html:35
+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:50
+#: rhodecode/templates/admin/users/user_edit.html:74
+#: rhodecode/templates/admin/users/user_edit_my_account.html:63
+msgid "First Name"
+msgstr "名"
+
+#: rhodecode/templates/register.html:56
+#: rhodecode/templates/admin/users/user_add.html:59
+#: rhodecode/templates/admin/users/user_edit.html:83
+#: rhodecode/templates/admin/users/user_edit_my_account.html:72
+msgid "Last Name"
+msgstr "姓"
+
+#: rhodecode/templates/register.html:65
+#: rhodecode/templates/admin/users/user_add.html:68
+#: rhodecode/templates/admin/users/user_edit.html:92
+#: rhodecode/templates/admin/users/user_edit_my_account.html:81
+#: rhodecode/templates/summary/summary.html:108
+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:14
+msgid "Private repository"
+msgstr "私有的版本庫"
+
+#: rhodecode/templates/repo_switcher_list.html:19
+msgid "Public repository"
+msgstr "公開的版本庫"
+
+#: rhodecode/templates/admin/admin.html:5
+#: rhodecode/templates/admin/admin.html:9
+msgid "Admin journal"
+msgstr "管理員日誌"
+
+#: rhodecode/templates/admin/admin_log.html:6
+msgid "Action"
+msgstr "動作"
+
+#: rhodecode/templates/admin/admin_log.html:7
+msgid "Repository"
+msgstr "版本庫"
+
+#: rhodecode/templates/admin/admin_log.html:8
+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/settings/hooks.html:73
+#: rhodecode/templates/admin/users/user_edit.html:117
+#: rhodecode/templates/admin/users/user_edit.html:142
+#: rhodecode/templates/admin/users/user_edit_my_account.html:89
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:263
+msgid "Save"
+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:109
+#: rhodecode/templates/admin/users/user_edit.html:127
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:248
+#: rhodecode/templates/settings/repo_settings.html:58
+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
+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.html:13
+msgid "add new"
+msgstr "新增"
+
+#: rhodecode/templates/admin/repos/repo_add_base.html:20
+#: rhodecode/templates/summary/summary.html:80
+#: rhodecode/templates/summary/summary.html:82
+msgid "Clone from"
+msgstr "複製由"
+
+#: rhodecode/templates/admin/repos/repo_add_base.html:28
+#: rhodecode/templates/admin/repos/repo_edit.html:48
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
+msgid "Repository group"
+msgstr "版本庫群組"
+
+#: rhodecode/templates/admin/repos/repo_add_base.html:36
+#: rhodecode/templates/admin/repos/repo_edit.html:56
+msgid "Type"
+msgstr "類型"
+
+#: rhodecode/templates/admin/repos/repo_add_base.html:52
+#: rhodecode/templates/admin/repos/repo_edit.html:73
+#: rhodecode/templates/settings/repo_fork.html:48
+#: rhodecode/templates/settings/repo_settings.html:49
+msgid "Private"
+msgstr "私有"
+
+#: rhodecode/templates/admin/repos/repo_add_base.html:59
+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:148
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
+#: rhodecode/templates/files/files_annotate.html:49
+#: rhodecode/templates/files/files_source.html:20
+msgid "edit"
+msgstr "編輯"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:40
+msgid "Clone uri"
+msgstr "複製URL"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:81
+msgid "Enable statistics"
+msgstr "啟用統計"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:89
+msgid "Enable downloads"
+msgstr "啟用下載"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:127
+msgid "Administration"
+msgstr "管理者"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:130
+msgid "Statistics"
+msgstr "統計"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:134
+msgid "Reset current statistics"
+msgstr "重設目前的統計"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:134
+msgid "Confirm to remove current statistics"
+msgstr "確認移除目前的統計"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:137
+msgid "Fetched to rev"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:138
+msgid "Percentage of stats gathered"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:147
+msgid "Remote"
+msgstr "遠端"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:151
+msgid "Pull changes from remote location"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:151
+msgid "Confirm to pull changes from remote side"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:162
+msgid "Cache"
+msgstr "快取"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:166
+msgid "Invalidate repository cache"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:166
+msgid "Confirm to invalidate repository cache"
+msgstr "確認廢止版本庫快取"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:177
+msgid "Remove from public journal"
+msgstr "從公開日誌移除"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:179
+msgid "Add to public journal"
+msgstr "新增至公開日誌"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:185
+msgid "Delete"
+msgstr "移除"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:189
+msgid "Remove this repository"
+msgstr "移除版本庫"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:189
+#: rhodecode/templates/admin/repos/repos.html:79
+msgid "Confirm to delete this repository"
+msgstr "確認移除這個版本庫"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
+msgid "none"
+msgstr "無"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:4
+msgid "read"
+msgstr "讀"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
+msgid "write"
+msgstr "寫"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
+#: rhodecode/templates/admin/users/users.html:38
+#: rhodecode/templates/base/base.html:296
+msgid "admin"
+msgstr "管理員"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
+msgid "member"
+msgstr "成員"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:33
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:53
+msgid "revoke"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:75
+msgid "Add another member"
+msgstr "新增另ㄧ位成員"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:89
+msgid "Failed to remove user"
+msgstr "移除使用者失敗"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:104
+msgid "Failed to remove users group"
+msgstr "移除使用者群組失敗"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:205
+msgid "Group"
+msgstr "群組"
+
+#: rhodecode/templates/admin/repos/repo_edit_perms.html:206
+#: 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:34
+#: rhodecode/templates/summary/summary.html:100
+msgid "Contact"
+msgstr "聯絡方式"
+
+#: rhodecode/templates/admin/repos/repos.html:35
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
+#: rhodecode/templates/admin/users/user_edit_my_account.html:119
+#: rhodecode/templates/admin/users/users.html:40
+#: rhodecode/templates/admin/users_groups/users_groups.html:35
+msgid "action"
+msgstr "動作"
+
+#: rhodecode/templates/admin/repos/repos.html:51
+#: rhodecode/templates/admin/users/user_edit_my_account.html:134
+#: rhodecode/templates/admin/users/user_edit_my_account.html:148
+msgid "private"
+msgstr "私有"
+
+#: rhodecode/templates/admin/repos/repos.html:53
+#: rhodecode/templates/admin/repos/repos.html:59
+#: rhodecode/templates/admin/users/user_edit_my_account.html:136
+#: rhodecode/templates/admin/users/user_edit_my_account.html:142
+#: rhodecode/templates/summary/summary.html:68
+msgid "public"
+msgstr "公開"
+
+#: rhodecode/templates/admin/repos/repos.html:79
+#: rhodecode/templates/admin/users/users.html:55
+msgid "delete"
+msgstr "刪除"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
+msgid "Groups"
+msgstr "群組"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:13
+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/repos_groups/repos_groups_edit.html:58
+#: rhodecode/templates/admin/users/user_add.html:85
+#: 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_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
+msgid "Number of repositories"
+msgstr "版本庫數量"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
+msgid "Confirm to delete this group"
+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:177
+msgid "Save settings"
+msgstr "儲存設定"
+
+#: rhodecode/templates/admin/settings/settings.html:112
+#: rhodecode/templates/admin/settings/settings.html:178
+#: rhodecode/templates/admin/users/user_edit.html:118
+#: rhodecode/templates/admin/users/user_edit.html:143
+#: rhodecode/templates/admin/users/user_edit_my_account.html:90
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:264
+#: rhodecode/templates/files/files_edit.html:50
+msgid "Reset"
+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:142
+msgid "advanced setup"
+msgstr "進階設定"
+
+#: rhodecode/templates/admin/settings/settings.html:147
+msgid "Update repository after push (hg update)"
+msgstr "push後更新版本庫 (hg update)"
+
+#: rhodecode/templates/admin/settings/settings.html:151
+msgid "Show repository size after push"
+msgstr "push 後顯示版本庫大小"
+
+#: rhodecode/templates/admin/settings/settings.html:155
+msgid "Log user push commands"
+msgstr "紀錄使用者推送命令"
+
+#: rhodecode/templates/admin/settings/settings.html:159
+msgid "Log user pull commands"
+msgstr "紀錄使用者抓取命令"
+
+#: rhodecode/templates/admin/settings/settings.html:166
+msgid "Repositories location"
+msgstr "版本庫路徑"
+
+#: rhodecode/templates/admin/settings/settings.html:171
+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:172
+msgid "unlock"
+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:77
+#: rhodecode/templates/admin/users/user_edit.html:101
+#: 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:33
+#: rhodecode/templates/admin/users/user_edit_my_account.html:32
+msgid "Change your avatar at"
+msgstr "修改您的頭像於"
+
+#: rhodecode/templates/admin/users/user_edit.html:34
+#: rhodecode/templates/admin/users/user_edit_my_account.html:33
+msgid "Using"
+msgstr "使用中"
+
+#: rhodecode/templates/admin/users/user_edit.html:40
+#: rhodecode/templates/admin/users/user_edit_my_account.html:39
+msgid "API key"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit.html:56
+msgid "LDAP DN"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit.html:65
+#: rhodecode/templates/admin/users/user_edit_my_account.html:54
+msgid "New password"
+msgstr "新密碼"
+
+#: rhodecode/templates/admin/users/user_edit.html:135
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:256
+msgid "Create repositories"
+msgstr "建立版本庫"
+
+#: rhodecode/templates/admin/users/user_edit_my_account.html:5
+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:101
+msgid "My repositories"
+msgstr "我的版本庫"
+
+#: rhodecode/templates/admin/users/user_edit_my_account.html:107
+msgid "ADD REPOSITORY"
+msgstr "新增版本庫"
+
+#: rhodecode/templates/admin/users/user_edit_my_account.html:118
+#: rhodecode/templates/branches/branches_data.html:7
+#: rhodecode/templates/shortlog/shortlog_data.html:8
+#: rhodecode/templates/tags/tags_data.html:7
+msgid "revision"
+msgstr "修訂"
+
+#: rhodecode/templates/admin/users/user_edit_my_account.html:157
+msgid "No repositories yet"
+msgstr "沒有任何版本庫"
+
+#: rhodecode/templates/admin/users/user_edit_my_account.html:159
+msgid "create one now"
+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:5
+#: rhodecode/templates/tags/tags_data.html:5
+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:305
+msgid "ldap"
+msgstr ""
+
+#: rhodecode/templates/admin/users/users.html:56
+msgid "Confirm to delete this user"
+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_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/base/base.html:32
+msgid "Forgot password ?"
+msgstr "忘記密碼?"
+
+#: rhodecode/templates/base/base.html:57
+#: rhodecode/templates/base/base.html:338
+#: rhodecode/templates/base/base.html:340
+#: rhodecode/templates/base/base.html:342
+msgid "Home"
+msgstr "首頁"
+
+#: rhodecode/templates/base/base.html:61
+#: rhodecode/templates/base/base.html:347
+#: rhodecode/templates/base/base.html:349
+#: rhodecode/templates/base/base.html:351
+#: 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:66
+msgid "Login"
+msgstr "登入"
+
+#: rhodecode/templates/base/base.html:68
+msgid "Log Out"
+msgstr "登出"
+
+#: rhodecode/templates/base/base.html:107
+msgid "Submit a bug"
+msgstr "回報錯誤"
+
+#: rhodecode/templates/base/base.html:141
+msgid "Switch repository"
+msgstr "切換版本庫"
+
+#: rhodecode/templates/base/base.html:143
+msgid "Products"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:149
+msgid "loading..."
+msgstr "載入中..."
+
+#: rhodecode/templates/base/base.html:234
+#: rhodecode/templates/base/base.html:236
+#: rhodecode/templates/base/base.html:238
+msgid "Switch to"
+msgstr "切換至"
+
+#: rhodecode/templates/base/base.html:242
+#: rhodecode/templates/branches/branches.html:13
+msgid "branches"
+msgstr "分支"
+
+#: rhodecode/templates/base/base.html:249
+#: rhodecode/templates/branches/branches_data.html:52
+msgid "There are no branches yet"
+msgstr "沒有任何分支"
+
+#: rhodecode/templates/base/base.html:254
+#: rhodecode/templates/shortlog/shortlog_data.html:10
+#: rhodecode/templates/tags/tags.html:14
+msgid "tags"
+msgstr "標籤"
+
+#: rhodecode/templates/base/base.html:261
+#: rhodecode/templates/tags/tags_data.html:32
+msgid "There are no tags yet"
+msgstr "沒有任何標籤"
+
+#: rhodecode/templates/base/base.html:277
+#: rhodecode/templates/base/base.html:281
+#: rhodecode/templates/files/files_annotate.html:40
+#: rhodecode/templates/files/files_source.html:11
+msgid "Options"
+msgstr "選項"
+
+#: rhodecode/templates/base/base.html:286
+#: rhodecode/templates/base/base.html:288
+#: rhodecode/templates/base/base.html:306
+msgid "settings"
+msgstr "設定"
+
+#: rhodecode/templates/base/base.html:292
+msgid "search"
+msgstr "搜尋"
+
+#: rhodecode/templates/base/base.html:299
+msgid "journal"
+msgstr "日誌"
+
+#: rhodecode/templates/base/base.html:301
+msgid "repositories groups"
+msgstr "版本庫群組"
+
+#: rhodecode/templates/base/base.html:302
+msgid "users"
+msgstr "使用者"
+
+#: rhodecode/templates/base/base.html:303
+msgid "users groups"
+msgstr "使用者群組"
+
+#: rhodecode/templates/base/base.html:304
+msgid "permissions"
+msgstr "權限"
+
+#: rhodecode/templates/base/base.html:317
+#: rhodecode/templates/base/base.html:319
+#: rhodecode/templates/followers/followers.html:5
+msgid "Followers"
+msgstr "追蹤者"
+
+#: rhodecode/templates/base/base.html:325
+#: rhodecode/templates/base/base.html:327
+#: rhodecode/templates/forks/forks.html:5
+msgid "Forks"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:356
+#: rhodecode/templates/base/base.html:358
+#: rhodecode/templates/base/base.html:360
+#: 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:57
+#: rhodecode/templates/journal/journal.html:48
+#: rhodecode/templates/summary/summary.html:36
+msgid "Stop following this repository"
+msgstr "停止追蹤這個版本庫"
+
+#: rhodecode/templates/base/root.html:66
+#: rhodecode/templates/summary/summary.html:40
+msgid "Start following this repository"
+msgstr "開始追蹤這個版本庫"
+
+#: rhodecode/templates/branches/branches_data.html:4
+#: rhodecode/templates/tags/tags_data.html:4
+msgid "date"
+msgstr "日期"
+
+#: rhodecode/templates/branches/branches_data.html:6
+#: rhodecode/templates/shortlog/shortlog_data.html:7
+#: rhodecode/templates/tags/tags_data.html:6
+msgid "author"
+msgstr "作者"
+
+#: rhodecode/templates/branches/branches_data.html:8
+#: rhodecode/templates/shortlog/shortlog_data.html:11
+#: rhodecode/templates/tags/tags_data.html:8
+msgid "links"
+msgstr "連結"
+
+#: rhodecode/templates/branches/branches_data.html:23
+#: rhodecode/templates/branches/branches_data.html:43
+#: rhodecode/templates/shortlog/shortlog_data.html:39
+#: rhodecode/templates/tags/tags_data.html:24
+msgid "changeset"
+msgstr "修改"
+
+#: rhodecode/templates/branches/branches_data.html:25
+#: rhodecode/templates/branches/branches_data.html:45
+#: rhodecode/templates/files/files.html:12
+#: rhodecode/templates/shortlog/shortlog_data.html:41
+#: rhodecode/templates/summary/summary.html:233
+#: rhodecode/templates/tags/tags_data.html:26
+msgid "files"
+msgstr "檔案"
+
+#: rhodecode/templates/changelog/changelog.html:14
+msgid "showing "
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:14
+msgid "out of"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:37
+msgid "Show"
+msgstr "顯示"
+
+#: rhodecode/templates/changelog/changelog.html:50
+#: rhodecode/templates/changeset/changeset.html:42
+#: rhodecode/templates/summary/summary.html:609
+msgid "commit"
+msgstr "遞交"
+
+#: rhodecode/templates/changelog/changelog.html:63
+msgid "Affected number of files, click to show more details"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:67
+#: rhodecode/templates/changeset/changeset.html:66
+msgid "merge"
+msgstr "合併"
+
+#: rhodecode/templates/changelog/changelog.html:72
+#: rhodecode/templates/changeset/changeset.html:72
+msgid "Parent"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:77
+#: rhodecode/templates/changeset/changeset.html:77
+msgid "No parents"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:82
+#: rhodecode/templates/changeset/changeset.html:80
+#: rhodecode/templates/files/files.html:29
+#: rhodecode/templates/files/files_annotate.html:25
+#: rhodecode/templates/files/files_edit.html:33
+#: rhodecode/templates/shortlog/shortlog_data.html:9
+msgid "branch"
+msgstr "分支"
+
+#: rhodecode/templates/changelog/changelog.html:86
+#: rhodecode/templates/changeset/changeset.html:83
+msgid "tag"
+msgstr "標籤"
+
+#: rhodecode/templates/changelog/changelog.html:122
+msgid "Show selected changes __S -> __E"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:172
+#: rhodecode/templates/shortlog/shortlog_data.html:61
+msgid "There are no changes yet"
+msgstr "尚未有任何變更"
+
+#: rhodecode/templates/changelog/changelog_details.html:2
+#: rhodecode/templates/changeset/changeset.html:55
+msgid "removed"
+msgstr "移除"
+
+#: rhodecode/templates/changelog/changelog_details.html:3
+#: rhodecode/templates/changeset/changeset.html:56
+msgid "changed"
+msgstr "修改"
+
+#: rhodecode/templates/changelog/changelog_details.html:4
+#: rhodecode/templates/changeset/changeset.html:57
+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:59
+#: rhodecode/templates/changeset/changeset.html:60
+#: rhodecode/templates/changeset/changeset.html:61
+#, python-format
+msgid "affected %s files"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:6
+#: rhodecode/templates/changeset/changeset.html:14
+#: rhodecode/templates/changeset/changeset.html:31
+msgid "Changeset"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:32
+#: rhodecode/templates/changeset/changeset.html:121
+#: rhodecode/templates/changeset/changeset_range.html:78
+#: rhodecode/templates/files/file_diff.html:32
+#: rhodecode/templates/files/file_diff.html:42
+msgid "raw diff"
+msgstr "原始差異"
+
+#: rhodecode/templates/changeset/changeset.html:34
+#: rhodecode/templates/changeset/changeset.html:123
+#: rhodecode/templates/changeset/changeset_range.html:80
+#: rhodecode/templates/files/file_diff.html:34
+msgid "download diff"
+msgstr "下載差異"
+
+#: rhodecode/templates/changeset/changeset.html:90
+#, python-format
+msgid "%s files affected with %s additions and %s deletions."
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:101
+msgid "Changeset was too big and was cut off..."
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:119
+#: rhodecode/templates/changeset/changeset_range.html:76
+#: rhodecode/templates/files/file_diff.html:30
+msgid "diff"
+msgstr "差異"
+
+#: rhodecode/templates/changeset/changeset.html:132
+#: rhodecode/templates/changeset/changeset_range.html:89
+msgid "No changes in this file"
+msgstr "這個檔案沒有任何變更"
+
+#: rhodecode/templates/changeset/changeset_range.html:30
+msgid "Compare View"
+msgstr "比較顯示"
+
+#: rhodecode/templates/changeset/changeset_range.html:52
+msgid "Files affected"
+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/file_diff.html:42
+msgid "Diff is to big to display"
+msgstr ""
+
+#: rhodecode/templates/files/files.html:37
+#: rhodecode/templates/files/files_annotate.html:31
+#: rhodecode/templates/files/files_edit.html:39
+msgid "Location"
+msgstr "位置"
+
+#: rhodecode/templates/files/files.html:46
+msgid "Go back"
+msgstr ""
+
+#: rhodecode/templates/files/files.html:47
+msgid "No files at given path"
+msgstr ""
+
+#: rhodecode/templates/files/files_annotate.html:4
+msgid "File annotate"
+msgstr "檔案註釋"
+
+#: rhodecode/templates/files/files_annotate.html:12
+msgid "annotate"
+msgstr "註釋"
+
+#: rhodecode/templates/files/files_annotate.html:33
+#: rhodecode/templates/files/files_browser.html:160
+#: rhodecode/templates/files/files_source.html:2
+msgid "Revision"
+msgstr "修訂"
+
+#: rhodecode/templates/files/files_annotate.html:36
+#: rhodecode/templates/files/files_browser.html:158
+#: rhodecode/templates/files/files_source.html:7
+msgid "Size"
+msgstr "大小"
+
+#: rhodecode/templates/files/files_annotate.html:38
+#: rhodecode/templates/files/files_browser.html:159
+#: rhodecode/templates/files/files_source.html:9
+msgid "Mimetype"
+msgstr ""
+
+#: rhodecode/templates/files/files_annotate.html:41
+msgid "show source"
+msgstr "顯示原始碼"
+
+#: rhodecode/templates/files/files_annotate.html:43
+#: rhodecode/templates/files/files_annotate.html:78
+#: rhodecode/templates/files/files_source.html:14
+#: rhodecode/templates/files/files_source.html:51
+msgid "show as raw"
+msgstr "顯示原始文件"
+
+#: rhodecode/templates/files/files_annotate.html:45
+#: rhodecode/templates/files/files_source.html:16
+msgid "download as raw"
+msgstr "下載原始文件"
+
+#: rhodecode/templates/files/files_annotate.html:54
+#: rhodecode/templates/files/files_source.html:25
+msgid "History"
+msgstr "歷史"
+
+#: rhodecode/templates/files/files_annotate.html:73
+#: rhodecode/templates/files/files_source.html:46
+#, python-format
+msgid "Binary file (%s)"
+msgstr "二進位檔 (%s)"
+
+#: rhodecode/templates/files/files_annotate.html:78
+#: rhodecode/templates/files/files_source.html:51
+msgid "File is too big to display"
+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:32
+msgid "Loading file list..."
+msgstr "載入檔案列表..."
+
+#: rhodecode/templates/files/files_browser.html:111
+msgid "search truncated"
+msgstr ""
+
+#: rhodecode/templates/files/files_browser.html:122
+msgid "no matching files"
+msgstr "無符合的檔案"
+
+#: rhodecode/templates/files/files_browser.html:161
+msgid "Last modified"
+msgstr "最後修改"
+
+#: rhodecode/templates/files/files_browser.html:162
+msgid "Last commiter"
+msgstr "最後的遞交者"
+
+#: rhodecode/templates/files/files_edit.html:4
+msgid "Edit file"
+msgstr "編輯檔案"
+
+#: rhodecode/templates/files/files_edit.html:19
+msgid "edit file"
+msgstr "編輯檔案"
+
+#: rhodecode/templates/files/files_edit.html:45
+#: rhodecode/templates/shortlog/shortlog_data.html:5
+msgid "commit message"
+msgstr "遞交資訊"
+
+#: rhodecode/templates/files/files_edit.html:51
+msgid "Commit changes"
+msgstr "遞交修改"
+
+#: rhodecode/templates/files/files_source.html:12
+msgid "show annotation"
+msgstr "險是註釋"
+
+#: rhodecode/templates/files/files_source.html:153
+msgid "Selection link"
+msgstr ""
+
+#: rhodecode/templates/followers/followers.html:13
+msgid "followers"
+msgstr "追蹤者"
+
+#: rhodecode/templates/followers/followers_data.html:12
+msgid "Started following"
+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 "尚未有任何 fork"
+
+#: rhodecode/templates/journal/journal.html:34
+msgid "Following"
+msgstr "已追蹤"
+
+#: rhodecode/templates/journal/journal.html:41
+msgid "following user"
+msgstr "追蹤使用者"
+
+#: rhodecode/templates/journal/journal.html:41
+msgid "user"
+msgstr "使用者"
+
+#: rhodecode/templates/journal/journal.html:65
+msgid "You are not following any users or repositories"
+msgstr "您尚未追蹤任何使用者或版本庫"
+
+#: rhodecode/templates/journal/journal_data.html:46
+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:20
+#: rhodecode/templates/search/search_path.html:15
+msgid "Permission denied"
+msgstr "權限不足"
+
+#: rhodecode/templates/settings/repo_fork.html:5
+msgid "Fork"
+msgstr "分支"
+
+#: rhodecode/templates/settings/repo_fork.html:31
+msgid "Fork name"
+msgstr "分支名稱"
+
+#: rhodecode/templates/settings/repo_fork.html:55
+msgid "fork this repository"
+msgstr "fork 這個版本庫"
+
+#: rhodecode/templates/shortlog/shortlog.html:5
+#: rhodecode/templates/summary/summary.html:666
+msgid "Shortlog"
+msgstr "簡短紀錄"
+
+#: rhodecode/templates/shortlog/shortlog.html:14
+msgid "shortlog"
+msgstr "簡短紀錄"
+
+#: rhodecode/templates/shortlog/shortlog_data.html:6
+msgid "age"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:12
+msgid "summary"
+msgstr "概況"
+
+#: rhodecode/templates/summary/summary.html:79
+msgid "remote clone"
+msgstr "遠端複製"
+
+#: rhodecode/templates/summary/summary.html:121
+msgid "by"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:128
+msgid "Clone url"
+msgstr "複製連結"
+
+#: rhodecode/templates/summary/summary.html:137
+msgid "Trending source files"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:146
+msgid "Download"
+msgstr "下載"
+
+#: rhodecode/templates/summary/summary.html:150
+msgid "There are no downloads yet"
+msgstr "沒有任何下載"
+
+#: rhodecode/templates/summary/summary.html:152
+msgid "Downloads are disabled for this repository"
+msgstr "這個版本庫的下載已停用"
+
+#: rhodecode/templates/summary/summary.html:154
+#: rhodecode/templates/summary/summary.html:320
+msgid "enable"
+msgstr "啟用"
+
+#: rhodecode/templates/summary/summary.html:162
+#: rhodecode/templates/summary/summary.html:297
+#, python-format
+msgid "Download %s as %s"
+msgstr "下載 %s 為 %s"
+
+#: rhodecode/templates/summary/summary.html:168
+msgid "Check this to download archive with subrepos"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:168
+msgid "with subrepos"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:176
+msgid "Feeds"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:257
+#: rhodecode/templates/summary/summary.html:684
+#: rhodecode/templates/summary/summary.html:695
+msgid "show more"
+msgstr "顯示更多"
+
+#: rhodecode/templates/summary/summary.html:312
+msgid "Commit activity by day / author"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:324
+msgid "Loaded in"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:603
+msgid "commits"
+msgstr "遞交"
+
+#: rhodecode/templates/summary/summary.html:604
+msgid "files added"
+msgstr "多個檔案新增"
+
+#: rhodecode/templates/summary/summary.html:605
+msgid "files changed"
+msgstr "多個檔案修改"
+
+#: rhodecode/templates/summary/summary.html:606
+msgid "files removed"
+msgstr "移除多個檔案"
+
+#: rhodecode/templates/summary/summary.html:610
+msgid "file added"
+msgstr "檔案新增"
+
+#: rhodecode/templates/summary/summary.html:611
+msgid "file changed"
+msgstr "檔案修改"
+
+#: rhodecode/templates/summary/summary.html:612
+msgid "file removed"
+msgstr "移除檔案"
+
--- a/rhodecode/lib/auth.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/lib/auth.py	Wed May 16 13:29:40 2012 +0200
@@ -64,7 +64,7 @@
         passwd_gen = PasswordGenerator()
         #print 8-letter password containing only big and small letters
             of alphabet
-        print passwd_gen.gen_password(8, passwd_gen.ALPHABETS_BIG_SMALL)
+        passwd_gen.gen_password(8, passwd_gen.ALPHABETS_BIG_SMALL)
     """
     ALPHABETS_NUM = r'''1234567890'''
     ALPHABETS_SMALL = r'''qwertyuiopasdfghjklzxcvbnm'''
--- a/rhodecode/lib/ext_json.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/lib/ext_json.py	Wed May 16 13:29:40 2012 +0200
@@ -81,22 +81,24 @@
     _sj = None
 
 
-# simplejson not found try out regular json module
-import json as _json
-
+try:
+    # simplejson not found try out regular json module
+    import json as _json
 
-# extended JSON encoder for json
-class ExtendedEncoder(_json.JSONEncoder):
-    def default(self, obj):
-        try:
-            return _obj_dump(obj)
-        except NotImplementedError:
-            pass
-        return _json.JSONEncoder.default(self, obj)
-# monkey-patch JSON encoder to use extended version
-_json.dumps = functools.partial(_json.dumps, cls=ExtendedEncoder)
-_json.dump = functools.partial(_json.dump, cls=ExtendedEncoder)
-stdlib = _json
+    # extended JSON encoder for json
+    class ExtendedEncoder(_json.JSONEncoder):
+        def default(self, obj):
+            try:
+                return _obj_dump(obj)
+            except NotImplementedError:
+                pass
+            return _json.JSONEncoder.default(self, obj)
+    # monkey-patch JSON encoder to use extended version
+    _json.dumps = functools.partial(_json.dumps, cls=ExtendedEncoder)
+    _json.dump = functools.partial(_json.dump, cls=ExtendedEncoder)
+    stdlib = _json
+except ImportError:
+    _json = None
 
 # set all available json modules
 simplejson = _sj
--- a/rhodecode/lib/utils.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/lib/utils.py	Wed May 16 13:29:40 2012 +0200
@@ -150,7 +150,7 @@
 
         user_log = UserLog()
         user_log.user_id = user_obj.user_id
-        user_log.action = action
+        user_log.action = safe_unicode(action)
 
         user_log.repository_id = repo_obj.repo_id
         user_log.repository_name = repo_name
--- a/rhodecode/lib/utils2.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/lib/utils2.py	Wed May 16 13:29:40 2012 +0200
@@ -215,7 +215,6 @@
     try:
         import chardet
         encoding = chardet.detect(unicode_)['encoding']
-        print encoding
         if encoding is None:
             raise UnicodeEncodeError()
 
--- a/rhodecode/lib/vcs/backends/git/changeset.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/lib/vcs/backends/git/changeset.py	Wed May 16 13:29:40 2012 +0200
@@ -240,11 +240,11 @@
         which is generally not good. Should be replaced with algorithm
         iterating commits.
         """
-        cmd = 'log --pretty="format: %%H" --name-status -p %s -- "%s"' % (
+        cmd = 'log --pretty="format: %%H" -s -p %s -- "%s"' % (
                   self.id, path
                )
         so, se = self.repository.run_git_command(cmd)
-        ids = re.findall(r'\w{40}', so)
+        ids = re.findall(r'[0-9a-fA-F]{40}', so)
         return [self.repository.get_changeset(id) for id in ids]
 
     def get_file_annotate(self, path):
--- a/rhodecode/lib/vcs/backends/hg/changeset.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/lib/vcs/backends/hg/changeset.py	Wed May 16 13:29:40 2012 +0200
@@ -37,6 +37,10 @@
         return  safe_unicode(self._ctx.branch())
 
     @LazyProperty
+    def bookmarks(self):
+        return map(safe_unicode, self._ctx.bookmarks())
+
+    @LazyProperty
     def message(self):
         return safe_unicode(self._ctx.description())
 
@@ -259,8 +263,6 @@
         archival.archive(self.repository._repo, stream, self.raw_id,
                          kind, prefix=prefix, subrepos=subrepos)
 
-        #stream.close()
-
         if stream.closed and hasattr(stream, 'name'):
             stream = open(stream.name, 'rb')
         elif hasattr(stream, 'mode') and 'r' not in stream.mode:
--- a/rhodecode/lib/vcs/utils/__init__.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/lib/vcs/utils/__init__.py	Wed May 16 13:29:40 2012 +0200
@@ -90,7 +90,6 @@
     try:
         import chardet
         encoding = chardet.detect(unicode_)['encoding']
-        print encoding
         if encoding is None:
             raise UnicodeEncodeError()
 
--- a/rhodecode/model/db.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/model/db.py	Wed May 16 13:29:40 2012 +0200
@@ -647,7 +647,7 @@
     # SCM PROPERTIES
     #==========================================================================
 
-    def get_changeset(self, rev):
+    def get_changeset(self, rev=None):
         return get_changeset_safe(self.scm_instance, rev)
 
     @property
@@ -1297,7 +1297,8 @@
     @property
     def recipients(self):
         return [x.user for x in UserNotification.query()\
-                .filter(UserNotification.notification == self).all()]
+                .filter(UserNotification.notification == self)\
+                .order_by(UserNotification.user).all()]
 
     @classmethod
     def create(cls, created_by, subject, body, recipients, type_=None):
--- a/rhodecode/model/user.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/model/user.py	Wed May 16 13:29:40 2012 +0200
@@ -225,10 +225,8 @@
         from rhodecode.model.notification import NotificationModel
 
         try:
-            new_user = User()
-            for k, v in form_data.items():
-                if k != 'admin':
-                    setattr(new_user, k, v)
+            form_data['admin'] = False
+            new_user = self.create(form_data)
 
             self.sa.add(new_user)
             self.sa.flush()
@@ -533,7 +531,6 @@
 
         for perm in user_repo_group_perms_from_users_groups:
             g_k = perm.UsersGroupRepoGroupToPerm.group.group_name
-            print perm, g_k
             p = perm.Permission.permission_name
             cur_perm = user.permissions[GK][g_k]
             # overwrite permission only if it's greater than permission
--- a/rhodecode/public/css/style.css	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/public/css/style.css	Wed May 16 13:29:40 2012 +0200
@@ -2545,6 +2545,10 @@
 .right .logtags{
 	padding: 2px 2px 2px 2px;
 }
+.right .logtags .branchtag,.right .logtags .tagtag,.right .logtags .booktag{
+    margin: 0px 2px;
+}
+
 .right .logtags .branchtag,.logtags .branchtag {
   padding: 1px 3px 1px 3px;
   background-color: #bfbfbf;
@@ -2583,10 +2587,10 @@
     text-decoration: none;
     color: #ffffff;
 }
-.right .logbooks .bookbook,.logbooks .bookbook {
-  padding: 1px 3px 2px;
+.right .logbooks .bookbook,.logbooks .bookbook,.right .logtags .bookbook,.logtags .bookbook {
+  padding: 1px 3px 1px 3px;
   background-color: #46A546;
-  font-size: 9.75px;
+  font-size: 10px;
   font-weight: bold;
   color: #ffffff;
   text-transform: uppercase;
@@ -2595,10 +2599,10 @@
   -moz-border-radius: 3px;
   border-radius: 3px;
 }
-.right .logbooks .bookbook,.logbooks .bookbook a{
+.right .logbooks .bookbook,.logbooks .bookbook a,.right .logtags .bookbook,.logtags .bookbook a{
 	color: #ffffff;
 }
-.right .logbooks .bookbook,.logbooks .bookbook a:hover{
+.right .logbooks .bookbook,.logbooks .bookbook a:hover,.right .logtags .bookbook,.logtags .bookbook a:hover{
     text-decoration: none;
     color: #ffffff;
 }
--- a/rhodecode/templates/changelog/changelog.html	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/templates/changelog/changelog.html	Wed May 16 13:29:40 2012 +0200
@@ -100,8 +100,16 @@
 									%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>
+									   ${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>
--- a/rhodecode/tests/__init__.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/tests/__init__.py	Wed May 16 13:29:40 2012 +0200
@@ -21,13 +21,15 @@
 from routes.util import URLGenerator
 from webtest import TestApp
 
+from rhodecode import is_windows
 from rhodecode.model.meta import Session
 from rhodecode.model.db import User
 
 import pylons.test
 
 os.environ['TZ'] = 'UTC'
-time.tzset()
+if not is_windows:
+    time.tzset()
 
 log = logging.getLogger(__name__)
 
@@ -71,6 +73,7 @@
 HG_FORK = 'vcs_test_hg_fork'
 GIT_FORK = 'vcs_test_git_fork'
 
+
 class TestController(TestCase):
 
     def __init__(self, *args, **kwargs):
--- a/rhodecode/tests/functional/test_files.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/tests/functional/test_files.py	Wed May 16 13:29:40 2012 +0200
@@ -190,18 +190,22 @@
         self.log_user()
 
         for arch_ext, info in ARCHIVE_SPECS.items():
+            short = '27cd5cce30c9%s' % arch_ext
             fname = '27cd5cce30c96924232dffcd24178a07ffeb5dfc%s' % arch_ext
-            filename = '%s-%s' % (HG_REPO, fname)
-
-            response = self.app.get(url(controller='files', action='archivefile',
+            filename = '%s-%s' % (HG_REPO, short)
+            response = self.app.get(url(controller='files', 
+                                        action='archivefile',
                                         repo_name=HG_REPO,
                                         fname=fname))
 
-            assert response.status == '200 OK', 'wrong response code'
-            assert response.response._headers.items() == [('Pragma', 'no-cache'),
-                                                  ('Cache-Control', 'no-cache'),
-                                                  ('Content-Type', '%s; charset=utf-8' % info[0]),
-                                                  ('Content-Disposition', 'attachment; filename=%s' % filename), ], 'wrong headers'
+            self.assertEqual(response.status, '200 OK')
+            self.assertEqual(response.response._headers.items(),
+             [('Pragma', 'no-cache'),
+              ('Cache-Control', 'no-cache'),
+              ('Content-Type', '%s; charset=utf-8' % info[0]),
+              ('Content-Disposition', 'attachment; filename=%s' % filename),
+             ]
+            )
 
     def test_archival_wrong_ext(self):
         self.log_user()
@@ -212,8 +216,7 @@
             response = self.app.get(url(controller='files', action='archivefile',
                                         repo_name=HG_REPO,
                                         fname=fname))
-            assert 'Unknown archive type' in response.body
-
+            response.mustcontain('Unknown archive type')
 
     def test_archival_wrong_revision(self):
         self.log_user()
@@ -224,7 +227,7 @@
             response = self.app.get(url(controller='files', action='archivefile',
                                         repo_name=HG_REPO,
                                         fname=fname))
-            assert 'Unknown revision' in response.body
+            response.mustcontain('Unknown revision')
 
     #==========================================================================
     # RAW FILE
@@ -236,8 +239,8 @@
                                     revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
                                     f_path='vcs/nodes.py'))
 
-        assert response.content_disposition == "attachment; filename=nodes.py"
-        assert response.content_type == "text/x-python"
+        self.assertEqual(response.content_disposition, "attachment; filename=nodes.py")
+        self.assertEqual(response.content_type, "text/x-python")
 
     def test_raw_file_wrong_cs(self):
         self.log_user()
@@ -277,7 +280,7 @@
                                     revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
                                     f_path='vcs/nodes.py'))
 
-        assert response.content_type == "text/plain"
+        self.assertEqual(response.content_type, "text/plain")
 
     def test_raw_wrong_cs(self):
         self.log_user()
--- a/rhodecode/tests/functional/test_login.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/tests/functional/test_login.py	Wed May 16 13:29:40 2012 +0200
@@ -54,7 +54,6 @@
         self.assertEqual(response.status, '200 OK')
         self.assertTrue('Users administration' in response.body)
 
-
     def test_login_short_password(self):
         response = self.app.post(url(controller='login', action='index'),
                                  {'username':'test_admin',
@@ -101,7 +100,7 @@
                                              'lastname':'test'})
 
         self.assertEqual(response.status , '200 OK')
-        assert 'This e-mail address is already taken' in response.body
+        response.mustcontain('This e-mail address is already taken')
 
     def test_register_err_same_email_case_sensitive(self):
         response = self.app.post(url(controller='login', action='register'),
@@ -112,7 +111,7 @@
                                              'name':'test',
                                              'lastname':'test'})
         self.assertEqual(response.status , '200 OK')
-        assert 'This e-mail address is already taken' in response.body
+        response.mustcontain('This e-mail address is already taken')
 
     def test_register_err_wrong_data(self):
         response = self.app.post(url(controller='login', action='register'),
@@ -123,9 +122,8 @@
                                              'name':'test',
                                              'lastname':'test'})
         self.assertEqual(response.status , '200 OK')
-        assert 'An email address must contain a single @' in response.body
-        assert 'Enter a value 6 characters long or more' in response.body
-
+        response.mustcontain('An email address must contain a single @')
+        response.mustcontain('Enter a value 6 characters long or more')
 
     def test_register_err_username(self):
         response = self.app.post(url(controller='login', action='register'),
@@ -137,11 +135,11 @@
                                              'lastname':'test'})
 
         self.assertEqual(response.status , '200 OK')
-        assert 'An email address must contain a single @' in response.body
-        assert ('Username may only contain '
+        response.mustcontain('An email address must contain a single @')
+        response.mustcontain('Username may only contain '
                 'alphanumeric characters underscores, '
                 'periods or dashes and must begin with '
-                'alphanumeric character') in response.body
+                'alphanumeric character')
 
     def test_register_err_case_sensitive(self):
         response = self.app.post(url(controller='login', action='register'),
@@ -156,8 +154,6 @@
         self.assertTrue('An email address must contain a single @' in response.body)
         self.assertTrue('This username already exists' in response.body)
 
-
-
     def test_register_special_chars(self):
         response = self.app.post(url(controller='login', action='register'),
                                             {'username':'xxxaxn',
@@ -170,7 +166,6 @@
         self.assertEqual(response.status , '200 OK')
         self.assertTrue('Invalid characters in password' in response.body)
 
-
     def test_register_password_mismatch(self):
         response = self.app.post(url(controller='login', action='register'),
                                             {'username':'xs',
@@ -180,8 +175,8 @@
                                              'name':'test',
                                              'lastname':'test'})
 
-        self.assertEqual(response.status , '200 OK')
-        assert 'Passwords do not match' in response.body
+        self.assertEqual(response.status, '200 OK')
+        response.mustcontain('Passwords do not match')
 
     def test_register_ok(self):
         username = 'test_regular4'
@@ -196,28 +191,32 @@
                                              'password_confirmation':password,
                                              'email':email,
                                              'name':name,
-                                             'lastname':lastname})
-        self.assertEqual(response.status , '302 Found')
-        assert 'You have successfully registered into rhodecode' in response.session['flash'][0], 'No flash message about user registration'
+                                             'lastname':lastname,
+                                             'admin':True}) # This should be overriden
+        self.assertEqual(response.status, '302 Found')
+        self.checkSessionFlash(response, 'You have successfully registered into rhodecode')
 
         ret = self.Session.query(User).filter(User.username == 'test_regular4').one()
-        assert ret.username == username , 'field mismatch %s %s' % (ret.username, username)
-        assert check_password(password, ret.password) == True , 'password mismatch'
-        assert ret.email == email , 'field mismatch %s %s' % (ret.email, email)
-        assert ret.name == name , 'field mismatch %s %s' % (ret.name, name)
-        assert ret.lastname == lastname , 'field mismatch %s %s' % (ret.lastname, lastname)
-
+        self.assertEqual(ret.username, username)
+        self.assertEqual(check_password(password, ret.password), True)
+        self.assertEqual(ret.email, email)
+        self.assertEqual(ret.name, name)
+        self.assertEqual(ret.lastname, lastname)
+        self.assertNotEqual(ret.api_key, None)
+        self.assertEqual(ret.admin, False)
 
     def test_forgot_password_wrong_mail(self):
-        response = self.app.post(url(controller='login', action='password_reset'),
-                                            {'email':'marcin@wrongmail.org', })
+        response = self.app.post(
+                        url(controller='login', action='password_reset'),
+                            {'email': 'marcin@wrongmail.org',}
+        )
 
-        assert "This e-mail address doesn't exist" in response.body, 'Missing error message about wrong email'
+        response.mustcontain("This e-mail address doesn't exist")
 
     def test_forgot_password(self):
         response = self.app.get(url(controller='login',
                                     action='password_reset'))
-        self.assertEqual(response.status , '200 OK')
+        self.assertEqual(response.status, '200 OK')
 
         username = 'test_password_reset_1'
         password = 'qweqwe'
--- a/rhodecode/tests/test_models.py	Tue May 08 21:53:36 2012 +0200
+++ b/rhodecode/tests/test_models.py	Wed May 16 13:29:40 2012 +0200
@@ -5,7 +5,8 @@
 from rhodecode.model.repos_group import ReposGroupModel
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.db import RepoGroup, User, Notification, UserNotification, \
-    UsersGroup, UsersGroupMember, Permission, UsersGroupRepoGroupToPerm
+    UsersGroup, UsersGroupMember, Permission, UsersGroupRepoGroupToPerm,\
+    Repository
 from sqlalchemy.exc import IntegrityError
 from rhodecode.model.user import UserModel
 
@@ -153,24 +154,23 @@
         self.assertTrue(self.__check_path('g2', 'g1'))
 
         # test repo
-        self.assertEqual(r.repo_name, os.path.join('g2', 'g1', r.just_name))
-
+        self.assertEqual(r.repo_name, RepoGroup.url_sep().join(['g2', 'g1', r.just_name]))
 
     def test_move_to_root(self):
         g1 = _make_group('t11')
         Session.commit()
-        g2 = _make_group('t22',parent_id=g1.group_id)
+        g2 = _make_group('t22', parent_id=g1.group_id)
         Session.commit()
 
-        self.assertEqual(g2.full_path,'t11/t22')
+        self.assertEqual(g2.full_path, 't11/t22')
         self.assertTrue(self.__check_path('t11', 't22'))
 
         g2 = self.__update_group(g2.group_id, 'g22', parent_id=None)
         Session.commit()
 
-        self.assertEqual(g2.group_name,'g22')
+        self.assertEqual(g2.group_name, 'g22')
         # we moved out group from t1 to '' so it's full path should be 'g2'
-        self.assertEqual(g2.full_path,'g22')
+        self.assertEqual(g2.full_path, 'g22')
         self.assertFalse(self.__check_path('t11', 't22'))
         self.assertTrue(self.__check_path('g22'))
 
@@ -620,7 +620,7 @@
         # add repo to group
         form_data = {
             'repo_name':HG_REPO,
-            'repo_name_full':os.path.join(self.g1.group_name,HG_REPO),
+            'repo_name_full':RepoGroup.url_sep().join([self.g1.group_name,HG_REPO]),
             'repo_type':'hg',
             'clone_uri':'',
             'repo_group':self.g1.group_id,