From 1077e4e2e2e7d73958ad1cb965fe8cbe63f200c4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 24 Oct 2011 22:55:16 -0400 Subject: [PATCH 001/220] Improved appearance of the document tag widget --- apps/main/templates/base.html | 60 +++++++++++++++++++++++++++++++++++ apps/tags/widgets.py | 16 +++++----- 2 files changed, 68 insertions(+), 8 deletions(-) diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index bce7da29e6..d611749921 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -41,6 +41,66 @@ right: 20px; left: auto; } + + .tags { + margin: 0; + padding: 0; + right: 24px; + bottom: -12px; + list-style: none; + } + + .tags li { + float:left; + height: 18px; + line-height: 18px; + position:relative; + font-size: 11px; + margin-left: 15px; + padding: 0 5px 0 15px; + background: #0089e0; + color: black; + text-decoration: none; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + + border-top-left-radius: 12px; + -moz-border-radius-topleft: 12px; + -webkit-border-top-left-radius: 12px; + + border-bottom-left-radius: 12px; + -moz-border-radius-bottomleft: 12px; + -webkit-border-bottom-left-radius: 12px; + + /*border:1px solid #ccc;*/ + border: 1px solid rgba(0, 0, 0, 0.4); + -moz-box-shadow: 1px 1px 2px #888; + -webkit-box-shadow: 1px 1px 2px #888; + box-shadow: 1px 1px 2px #888; + + text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #fff, 0 0 40px #fff, 0 0 70px #fff, 0 0 80px #fff, 0 0 100px #fff, 0 0 150px #fff; + } + + .tags li:after { + content: ""; + position: absolute; + top: 7px; + left: 5px; + float: left; + width: 4px; + height: 4px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + background: #fff; + -moz-box-shadow: -1px -1px 2px #004977; + -webkit-box-shadow: -1px -1px 2px #004977; + box-shadow: -1px -1px 2px #004977; + } {% block stylesheets %}{% endblock %} {% endblock %} diff --git a/apps/tags/widgets.py b/apps/tags/widgets.py index b73184dac3..571a462d8e 100644 --- a/apps/tags/widgets.py +++ b/apps/tags/widgets.py @@ -7,7 +7,6 @@ def get_tags_inline_widget(document): A tag widget that includes the total tag count for a given document """ tags_template = [] - tag_block_template = u'
%s
' tag_count = document.tags.count() if tag_count: tags_template.append(u'
') @@ -15,8 +14,9 @@ def get_tags_inline_widget(document): 'tag_string': _(u'Tags'), 'tag_count': tag_count}) for tag in document.tags.all(): - tags_template.append(tag_block_template % (tag.tagproperties_set.get().get_color_code(), tag.name)) - + tags_template.append(u'' % (tag.tagproperties_set.get().get_color_code(), tag.name)) + + tags_template.append(u'
') tags_template.append(u'
') return mark_safe(u''.join(tags_template)) @@ -27,15 +27,15 @@ def get_tags_inline_widget_simple(document): given document """ tags_template = [] - tag_block_template = u'
%s
' + tag_count = document.tags.count() if tag_count: - tags_template.append(u'
') - + tags_template.append('') - tags_template.append(u'
') return mark_safe(u''.join(tags_template)) From 773f0061c48f46a9f44abd5f9c5e445c0fa3dd1c Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 24 Oct 2011 22:59:50 -0400 Subject: [PATCH 002/220] Added a bit of bottom margin to the new tag widgets --- apps/main/templates/base.html | 1 + apps/tags/widgets.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index d611749921..1a656df0d7 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -83,6 +83,7 @@ box-shadow: 1px 1px 2px #888; text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #fff, 0 0 40px #fff, 0 0 70px #fff, 0 0 80px #fff, 0 0 100px #fff, 0 0 150px #fff; + margin-bottom: 2px; } .tags li:after { diff --git a/apps/tags/widgets.py b/apps/tags/widgets.py index 571a462d8e..d201516255 100644 --- a/apps/tags/widgets.py +++ b/apps/tags/widgets.py @@ -14,7 +14,7 @@ def get_tags_inline_widget(document): 'tag_string': _(u'Tags'), 'tag_count': tag_count}) for tag in document.tags.all(): - tags_template.append(u'' % (tag.tagproperties_set.get().get_color_code(), tag.name)) + tags_template.append(u'' % (tag.tagproperties_set.get().get_color_code(), tag.name)) tags_template.append(u'
') tags_template.append(u'') From 672c2557bf32e1715b7b487c8bfcd8077e20620e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 24 Oct 2011 23:02:35 -0400 Subject: [PATCH 003/220] Updated Changelog --- docs/changelog.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 6c349b6ffc..81f24d507c 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,4 +1,9 @@ +2011-10-24 +---------- +* Improved appearance of the document tag widget + 2011-10-18 +---------- * Added django_compress and cssmin to the requirements files and enabled django_compress for CSS and JS files From d01a57491f595c4ffd42ae4513f134647a076f11 Mon Sep 17 00:00:00 2001 From: Meurig Freeman Date: Sun, 30 Oct 2011 17:33:35 +0000 Subject: [PATCH 004/220] No longer hard code admin and sentry urls --- apps/main/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 8a8aead28e..0e4943a2d9 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -15,8 +15,8 @@ def is_superuser(context): maintenance_menu = {'text': _(u'maintenance'), 'view': 'maintenance_menu', 'famfam': 'wrench', 'icon': 'wrench.png'} statistics = {'text': _(u'statistics'), 'view': 'statistics', 'famfam': 'table', 'icon': 'blackboard_sum.png'} diagnostics = {'text': _(u'diagnostics'), 'view': 'diagnostics', 'famfam': 'pill', 'icon': 'pill.png'} -sentry = {'text': _(u'sentry'), 'url': '/sentry', 'famfam': 'bug', 'icon': 'bug.png', 'condition': is_superuser} -admin_site = {'text': _(u'admin site'), 'url': '/admin', 'famfam': 'keyboard', 'icon': 'keyboard.png', 'condition': is_superuser} +sentry = {'text': _(u'sentry'), 'view': 'sentry', 'famfam': 'bug', 'icon': 'bug.png', 'condition': is_superuser} +admin_site = {'text': _(u'admin site'), 'view': 'admin:index', 'famfam': 'keyboard', 'icon': 'keyboard.png', 'condition': is_superuser} __version_info__ = { 'major': 0, From 01e7cb4f8efb055664a744e66ea060a9324b339a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 30 Oct 2011 19:53:20 -0400 Subject: [PATCH 005/220] Bumped version to 0.8.3-hotfix2 --- apps/main/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 0e4943a2d9..9aaab50940 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -22,8 +22,8 @@ __version_info__ = { 'major': 0, 'minor': 8, 'micro': 3, - 'releaselevel': 'final', - 'serial': 0 + 'releaselevel': 'hotfix', + 'serial': 2 } if not DISABLE_HOME_VIEW: From 73ec5665b7ad84a837ca0528e7eca93f35c7f492 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 30 Oct 2011 20:04:25 -0400 Subject: [PATCH 006/220] Updated the changelog --- docs/changelog.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 81f24d507c..6f5a6888a8 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,3 +1,7 @@ +2011-10-30 +---------- +* The admin and sentry links are no longer hard-coded (Meurig Freeman) + 2011-10-24 ---------- * Improved appearance of the document tag widget From d2d7eeff510f7ee067159e5617dac809d7b0bc0f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 30 Oct 2011 20:04:35 -0400 Subject: [PATCH 007/220] Added Meurig Freeman to the contributors file --- docs/contributors.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/contributors.rst b/docs/contributors.rst index a62373808a..367645d292 100644 --- a/docs/contributors.rst +++ b/docs/contributors.rst @@ -28,3 +28,7 @@ Translations Suggestions ----------- * Cezar Jenkins (https://twitter.com/#!/emperorcezar) + +Patches +------- +* Meurig Freeman (https://github.com/meurig) From 0f8fb7c788f8adc5d1f553eb92e3a02872f2fa19 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:18:02 -0400 Subject: [PATCH 008/220] Added missing resources to the transifex resource file --- .tx/config | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.tx/config b/.tx/config index 2e26fa3eff..3bd7886fb3 100644 --- a/.tx/config +++ b/.tx/config @@ -2,16 +2,19 @@ source_file = apps/converter/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/converter/locale/es/LC_MESSAGES/django.po +trans.pt = apps/converter/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-common] source_file = apps/common/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/common/locale/es/LC_MESSAGES/django.po +trans.pt = apps/common/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-permissions] source_file = apps/permissions/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/permissions/locale/es/LC_MESSAGES/django.po +trans.pt = apps/permissions/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-sources] source_file = apps/sources/locale/en/LC_MESSAGES/django.po @@ -23,26 +26,31 @@ trans.pt = apps/sources/locale/pt/LC_MESSAGES/django.po source_file = apps/document_indexing/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/document_indexing/locale/es/LC_MESSAGES/django.po +trans.pt = apps/document_indexing/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-user_management] source_file = apps/user_management/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/user_management/locale/es/LC_MESSAGES/django.po +trans.pt = apps/user_management/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-main] source_file = apps/main/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/main/locale/es/LC_MESSAGES/django.po +trans.pt = apps/main/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-ocr] source_file = apps/ocr/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/ocr/locale/es/LC_MESSAGES/django.po +trans.pt = apps/ocr/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-project_setup] source_file = apps/project_setup/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/project_setup/locale/es/LC_MESSAGES/django.po +trans.pt = apps/project_setup/locale/pt/LC_MESSAGES/django.po [main] host = https://www.transifex.net @@ -51,31 +59,37 @@ host = https://www.transifex.net source_file = apps/folders/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/folders/locale/es/LC_MESSAGES/django.po +trans.pt = apps/folders/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-history] source_file = apps/history/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/history/locale/es/LC_MESSAGES/django.po +trans.pt = apps/history/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-dynamic_search] source_file = apps/dynamic_search/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/dynamic_search/locale/es/LC_MESSAGES/django.po +trans.pt = apps/dynamic_search/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-smart_settings] source_file = apps/smart_settings/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/smart_settings/locale/es/LC_MESSAGES/django.po +trans.pt = apps/smart_settings/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-navigation] source_file = apps/navigation/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/navigation/locale/es/LC_MESSAGES/django.po +trans.pt = apps/navigation/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-tags] source_file = apps/tags/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/tags/locale/es/LC_MESSAGES/django.po +trans.pt = apps/tags/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-documents] source_file = apps/documents/locale/en/LC_MESSAGES/django.po @@ -87,11 +101,13 @@ trans.pt = apps/documents/locale/pt/LC_MESSAGES/django.po source_file = apps/project_tools/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/project_tools/locale/es/LC_MESSAGES/django.po +trans.pt = apps/project_tools/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-grouping] source_file = apps/grouping/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/grouping/locale/es/LC_MESSAGES/django.po +trans.pt = apps/grouping/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-document_comments] source_file = apps/document_comments/locale/en/LC_MESSAGES/django.po @@ -103,4 +119,11 @@ trans.pt = apps/document_comments/locale/pt/LC_MESSAGES/django.po source_file = apps/metadata/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/metadata/locale/es/LC_MESSAGES/django.po +trans.pt = apps/metadata/locale/pt/LC_MESSAGES/django.po + +[mayan-edms.apps-web_theme] +source_file = apps/web_theme/locale/en/LC_MESSAGES/django.po +source_lang = en +trans.es = apps/web_theme/locale/es/LC_MESSAGES/django.po +trans.pt = apps/web_theme/locale/pt/LC_MESSAGES/django.po From fd92a1cd78133c59ed1eb9d0bed4744685a03d2f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:19:55 -0400 Subject: [PATCH 009/220] Portuguese translation updates --- apps/common/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 5385 bytes apps/common/locale/pt/LC_MESSAGES/django.po | 339 +++++++ .../converter/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 10303 bytes .../converter/locale/pt/LC_MESSAGES/django.po | 932 ++++++++++++++++++ .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 4192 bytes .../locale/pt/LC_MESSAGES/django.po | 215 ++++ .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 2173 bytes .../locale/pt/LC_MESSAGES/django.po | 120 +++ apps/folders/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 4254 bytes apps/folders/locale/pt/LC_MESSAGES/django.po | 222 +++++ apps/grouping/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 3760 bytes apps/grouping/locale/pt/LC_MESSAGES/django.po | 206 ++++ apps/history/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 1475 bytes apps/history/locale/pt/LC_MESSAGES/django.po | 107 ++ apps/main/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 2563 bytes apps/main/locale/pt/LC_MESSAGES/django.po | 149 +++ apps/metadata/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 6192 bytes apps/metadata/locale/pt/LC_MESSAGES/django.po | 464 +++++++++ .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 679 bytes .../locale/pt/LC_MESSAGES/django.po | 33 + apps/ocr/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 9087 bytes apps/ocr/locale/pt/LC_MESSAGES/django.po | 463 +++++++++ .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 3213 bytes .../locale/pt/LC_MESSAGES/django.po | 188 ++++ .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 611 bytes .../locale/pt/LC_MESSAGES/django.po | 29 + .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 558 bytes .../locale/pt/LC_MESSAGES/django.po | 25 + .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 659 bytes .../locale/pt/LC_MESSAGES/django.po | 37 + apps/sources/locale/pt/LC_MESSAGES/django.mo | Bin 4125 -> 8265 bytes apps/sources/locale/pt/LC_MESSAGES/django.po | 100 +- apps/tags/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 4183 bytes apps/tags/locale/pt/LC_MESSAGES/django.po | 268 +++++ .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 4722 bytes .../locale/pt/LC_MESSAGES/django.po | 261 +++++ .../web_theme/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 420 bytes .../web_theme/locale/pt/LC_MESSAGES/django.po | 75 ++ 38 files changed, 4186 insertions(+), 47 deletions(-) create mode 100644 apps/common/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/common/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/converter/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/converter/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/document_indexing/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/document_indexing/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/dynamic_search/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/dynamic_search/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/folders/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/folders/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/grouping/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/grouping/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/history/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/history/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/main/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/main/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/metadata/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/metadata/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/navigation/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/navigation/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/ocr/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/ocr/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/permissions/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/permissions/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/project_setup/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/project_setup/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/project_tools/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/project_tools/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/smart_settings/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/smart_settings/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/tags/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/tags/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/user_management/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/user_management/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/web_theme/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/web_theme/locale/pt/LC_MESSAGES/django.po diff --git a/apps/common/locale/pt/LC_MESSAGES/django.mo b/apps/common/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..059d5b191c8eb4ff17feeaae780ec25264e80ab7 GIT binary patch literal 5385 zcmb7{U5sQ!6~{{jlu<-*6$Qasb=eu1?wMJ3b!qm4*_m0{WM`S|3=rbRwWe=%_l4W{ zwzqE2?5+l5!jr!E!UM)=2pS>@8Y3oRj4>HZM2#QM8UvCTAAB&z2bF~Q``>$ewr4*= zyqW6X{ir&1>eM->&iwi2Yo0P(i?ol>4!zwN2hUu?57(>L8gmrB1{dJ&>x`j`@iluj zABXSYeF_i398SaU!`tAWpvL{X<{OYd^Cmyn!)xDZ41eZEe%=djfh+J%sD7L9R`>+` zD0~|3g)hNd;A>DS{|9~mz6nv;?0T0m6Yy5}A-D%>z9Ud_AAsujVEz0MWT-gY4-$4G%ANZMr ze}wve1Ij-QcR{WDd+@{Xw{SoF8*sI7T|B=C zCGQpZ9{4&`zkfjK|6eG3T+c`8eG^o_Tlx9b+t>qmgy(8t@CG4{`)fA3txkG!|UHy z?c)I`d#*tF%Omx322tH?K-u9*sCmB$wa(|DhSIkOKLMYF>i6CH`%6&$ ze+Q+<>ri_C9r9=X#SiXbFw6FJl)Deo_S4i?>u=C>$%p1>chR&Tx;|B*^atH4esyVI zwIpiqtn&Ln@H)(rmTDLCgrI;RFvM26c?sE&y(57j!??KxAG{VbR8t!SP zXj-!__?_nY|xWvru-zwi} zJ=50rUCfNRr*93L`ps?K>SddSVV)zi9Jx23NWr*Zhl5CyG|giDqLby9jvcqcc)uO* zm!h~Z`nhbhSt?aL5ot-C*yrX%8it)t+>WKtz~}uK%d$3e(xp*oyMZ?+eblArN#At| zzeS;kxb4%xHyp}l9VQAz9uEdS8oAflr_mlws+Y?PoVCFSpGMqe!&*R*6)u?yQ+9I2 zb>%Aqa5f$G*L|*jnxyP=Rv!XAuRO&_jyaiik6BACyi5YH$rA zD#QDW9`nn~M(-^8{VvrqTQ@A*ZFC? zj_o8c_n#m7AP1Fc&}5iIR*J9tO82H&9j^Bgx90nUEO+^N8^zK#D5)yS(!GW4VO};e8+Lo+L4fgc%)o3Jq2UztO^wPgZeh;_mgm!*iMR3) z{K&22-==!p9#lUoDYX-Pq}n4wIGFZWY8WL3;}yzR|5E1~+yt4&69v92<5+V=Zgh zUQrBMGc(;7Cs}W{v;It;1((NJKGWCO8PW(YIkEEKTBA&eh;1yA-dc9w?A%;q_TI)l zvvzj2bzpyEcK_@w9UG@{F-E=t z2{VIgO${IQ!%TsInL#l#HL-kRdFi6b=9;q;I!j0gjkWUw7Fzgo2uWO=-lvq22VWe1 zXzh68;KhELujBK^QrgZU0;6RQuE)i;wk)C8nH8`88W++RBjNIm;j400?x5KSx z2nW>(N=`f@B}j%OWzINi3N7%IPdQedm76`w zNvpG}3Q{_h-^|L^GZZe)rt09y3>2sYv6(O3Q>6xlLeHs2upPI-FP4pQI(nCTV5JH@ zs*VTVF($MLPQv+gBNysQ8@?U}U5>iQ$607*93e3c-j<~T}d50e39Zy(=u zc2H{_GL9P@C8`%N*m|*?DIZ%(RgUl$n(fi^ zO1`%wztsMa$3j6TwvC#^ReR06vBlD1>xB(ZNY>d@xo*5fsS?IjQu1otHxFm+t>-Im zK*3RcQijx6KviN;13yr)QtpxrUAs%EO_kx;8l4AQ&!3BntZ72Fo_kY$y69b0Czs{K zvRYB0H1f%^W>Ni7rWYk0YNfGkRF*F6T, 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-30 00:54-0400\n" +"PO-Revision-Date: 2011-11-02 02:18+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:17 +msgid "change password" +msgstr "alterar a senha" + +#: __init__.py:18 +msgid "user details" +msgstr "detalhes do usuário" + +#: __init__.py:19 +msgid "edit details" +msgstr "editar detalhes" + +#: __init__.py:23 __init__.py:29 +msgid "about" +msgstr "sobre" + +#: __init__.py:24 +msgid "changelog" +msgstr "log de alterações" + +#: __init__.py:25 +msgid "license" +msgstr "licença" + +#: forms.py:99 +msgid "Selection" +msgstr "Seleção" + +#: forms.py:131 +msgid "Email" +msgstr "E-mail" + +#: forms.py:142 +msgid "" +"Please enter a correct email and password. Note that the password fields is " +"case-sensitive." +msgstr "" +"Por favor insira o e-mail e senha corretos. Note que os campos de senha são " +"case-sensitive." + +#: forms.py:144 +msgid "This account is inactive." +msgstr "Esta conta está inativa." + +#: literals.py:24 +msgid "A5" +msgstr "A5" + +#: literals.py:25 +msgid "A4" +msgstr "A4" + +#: literals.py:26 +msgid "A3" +msgstr "A3" + +#: literals.py:27 +msgid "B5" +msgstr "B5" + +#: literals.py:28 +msgid "B4" +msgstr "B4" + +#: literals.py:29 +msgid "Letter" +msgstr "Carta" + +#: literals.py:30 +msgid "Legal" +msgstr "Legal" + +#: literals.py:31 +msgid "Ledger" +msgstr "Livro-razão" + +#: literals.py:38 +msgid "Portrait" +msgstr "Retrato" + +#: literals.py:39 +msgid "Landscape" +msgstr "Paisagem" + +#: utils.py:289 +msgid "function found" +msgstr "função encontrada" + +#: utils.py:291 utils.py:293 +#, python-format +msgid "class found: %s" +msgstr "classe encontrada: %s" + +#: views.py:23 templates/password_change_done.html:5 +msgid "Your password has been successfully changed." +msgstr "Sua senha foi alterada com êxito." + +#: views.py:39 +msgid "No action selected." +msgstr "Nenhuma ação selecionada." + +#: views.py:43 +msgid "Must select at least one item." +msgstr "Deve selecionar pelo menos um item." + +#: views.py:76 +#, python-format +msgid "%(selection)s added successfully added to %(right_list_title)s." +msgstr "%(selection)s adicionadas com sucesso a %(right_list_title)s ." + +#: views.py:79 views.py:96 +#, python-format +msgid "Unable to add %(selection)s to %(right_list_title)s." +msgstr "Não foi possível adicionar %(selection)s para %(right_list_title)s ." + +#: views.py:93 +#, python-format +msgid "%(selection)s added successfully removed from %(right_list_title)s." +msgstr "" +" %(selection)s adicionado com sucesso removidos %(right_list_title)s." + +#: views.py:111 +msgid "Add" +msgstr "Adicionar" + +#: views.py:122 +msgid "Remove" +msgstr "Remover" + +#: views.py:145 +msgid "current user details" +msgstr "detalhes atuais do usuário" + +#: views.py:162 +msgid "Current user's details updated." +msgstr "Detalhes do usuário atual atualizados." + +#: views.py:171 +msgid "edit current user details" +msgstr "editar os detalhes do usuário atual" + +#: views.py:197 +msgid "Changelog" +msgstr "Log de alterações" + +#: views.py:210 +msgid "License" +msgstr "Licença" + +#: widgets.py:58 +msgid "None" +msgstr "Nenhum" + +#: conf/settings.py:15 +msgid "" +"Temporary directory used site wide to store thumbnails, previews and " +"temporary files. If none is specified, one will be created using " +"tempfile.mkdtemp()" +msgstr "" +"Diretório temporário usado para armazenar miniaturas, previews e arquivos " +"temporários. Se nenhum for especificado, um será criado usando " +"tempfile.mkdtemp()" + +#: conf/settings.py:65 +msgid "" +"Controls the mechanism used to authenticated user. Options are: username, " +"email" +msgstr "" +"Controla o mecanismo usado para usuário autenticado. As opções são: e-mail, " +"nome de usuário," + +#: templates/403.html:3 templates/403.html.py:7 +msgid "Insufficient permissions" +msgstr "Permissões insuficientes" + +#: templates/403.html:9 +msgid "You don't have enough permissions for this operation." +msgstr "Você não tem permissões suficientes para esta operação." + +#: templates/404.html:3 templates/404.html.py:7 +msgid "Page not found" +msgstr "Página não encontrada" + +#: templates/404.html:9 +msgid "Sorry, but the requested page could not be found." +msgstr "Desculpe, mas a página solicitada não pôde ser encontrada." + +#: templates/calculate_form_title.html:11 +#, python-format +msgid "Details for %(object_name)s: %(object)s" +msgstr "Detalhes para %(object_name)s : %(object)s " + +#: templates/calculate_form_title.html:13 +#, python-format +msgid "Details for: %(object)s" +msgstr "Detalhes para: %(object)s " + +#: templates/calculate_form_title.html:18 +#, python-format +msgid "Edit %(object_name)s:" +msgstr "Editar %(object_name)s:" + +#: templates/calculate_form_title.html:20 +msgid "Edit" +msgstr "Editar" + +#: templates/calculate_form_title.html:24 +#, python-format +msgid "Create new %(object_name)s" +msgstr "Criar novas %(object_name)s " + +#: templates/calculate_form_title.html:26 +msgid "Create" +msgstr "Criar" + +#: templates/generic_assign_remove.html:3 +#, python-format +msgid "Assign %(title)s %(object)s" +msgstr "Atribuir %(title)s %(object)s " + +#: templates/generic_confirm.html:3 templates/generic_confirm.html.py:18 +msgid "Confirm" +msgstr "Confirmar" + +#: templates/generic_confirm.html:16 +msgid "Confirm delete" +msgstr "Confirmar exclusão" + +#: templates/generic_confirm.html:28 +msgid "form icon" +msgstr "ícone de formulário" + +#: templates/generic_confirm.html:36 +#, python-format +msgid "Are you sure you wish to delete %(object_name)s: %(object)s?" +msgstr "Tem certeza de que deseja excluir %(object_name)s: %(object)s ?" + +#: templates/generic_confirm.html:38 +#, python-format +msgid "Are you sure you wish to delete: %(object)s?" +msgstr "Tem certeza de que deseja excluir: %(object)s ?" + +#: templates/generic_confirm.html:46 +msgid "Yes" +msgstr "Sim" + +#: templates/generic_confirm.html:50 +msgid "No" +msgstr "Não" + +#: templates/generic_form_instance.html:37 +#: templates/generic_form_subtemplate.html:52 +msgid "required" +msgstr "exigido" + +#: templates/generic_form_subtemplate.html:76 +#: templates/generic_form_subtemplate.html:78 +#: templates/generic_list_horizontal_subtemplate.html:51 +#: templates/generic_list_horizontal_subtemplate.html:178 +#: templates/generic_list_subtemplate.html:51 +#: templates/generic_list_subtemplate.html:171 +msgid "Save" +msgstr "Salvar" + +#: templates/generic_form_subtemplate.html:76 +#: templates/generic_form_subtemplate.html:78 +#: templates/generic_list_horizontal_subtemplate.html:51 +#: templates/generic_list_horizontal_subtemplate.html:178 +#: templates/generic_list_subtemplate.html:51 +#: templates/generic_list_subtemplate.html:171 +msgid "Submit" +msgstr "Submeter" + +#: templates/generic_form_subtemplate.html:82 +msgid "Cancel" +msgstr "Cancelar" + +#: templates/generic_list.html:6 templates/generic_list_horizontal.html:6 +#, python-format +msgid "List of %(stripped_title)s" +msgstr "Lista de %(stripped_title)s " + +#: templates/generic_list_horizontal_subtemplate.html:23 +#: templates/generic_list_subtemplate.html:23 +#, python-format +msgid "" +"List of %(title)s (%(start)s - %(end)s out of %(total)s) (Page " +"%(page_number)s of %(total_pages)s)" +msgstr "" +"Lista de %(title)s (%(start)s - %(end)s de %(total)s) (Page %(page_number)s " +"of %(total_pages)s)" + +#: templates/generic_list_horizontal_subtemplate.html:25 +#: templates/generic_list_subtemplate.html:25 +#, python-format +msgid "List of %(title)s (%(total)s)" +msgstr "Lista de %(title)s (%(total)s)" + +#: templates/generic_list_horizontal_subtemplate.html:72 +#: templates/generic_list_subtemplate.html:71 +msgid "Identifier" +msgstr "Identificador" + +#: templates/generic_list_horizontal_subtemplate.html:146 +#: templates/generic_list_subtemplate.html:145 +#, python-format +msgid "There are no %(stripped_title)s" +msgstr "Não há %(stripped_title)s " + +#: templates/login.html:5 +msgid "Login" +msgstr "Login" + +#: templates/password_change_done.html:3 templates/password_change_form.html:3 +#: templates/password_change_form.html:5 +msgid "Password change" +msgstr "Alterar a senha" + + diff --git a/apps/converter/locale/pt/LC_MESSAGES/django.mo b/apps/converter/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cf7113ae63246d6ff0a23852bf8f5f8edb10bad2 GIT binary patch literal 10303 zcmeI1du(LaS-{V>N!q%F=0Rv1XgLW`Z0hm&m0hosEuEe5tS7NI6WiI{q$%|H&avml z_c6H-ze_-0t)&-crB_)ge{<1m6%_*?LH_$BxQ@ayp1@WflF8xF&FKm&gaeh8k1 zPs2Oli%{x+8Qu)v`aMc%sNuU{4NAX1Sn|X0?Y#d6{89KBI03%`Z-H|N z8cxGUOMV>A^8UwARB+<01>XcE-!1S>unDD|Hk5XJDE<2w{2};6$uB?|-`_(1sqgS- z1P+n;jc^*G5_JaN30oyMpw$0SDCIr{8G`yv z`u`;;dU^ti-aZe9;a``$@z&yf49YxRgnUvdl=43ZHT)!${{A79d3hd6zy1cwc>Wp6 zc>fhjJ2%rQ>0cFoA6$kScA<>#7hw}V1!bJygwn59ptO4zg=9Q4Q0n^ttiqp$ zN&N+sb^Hw|`n?I|iM~%kRHD|Q=<~z;5&eAv&cH7~8P_XN*70o^+i7?Yq$-s|ssC4? z==0N1!_PsP*RMeSsh3OMPA9}ZCZVja`{610c$xkTq$%|r6#aY+PQw#aCOipe;RX~v zeG1CD{T(Rt`nmG`U!b(}GW>CP3yW9g`CcgR=b^0U9sbDpJ^^LEKLe#-dr<8Dn^4xp zx8a@eyCtOTvm-1|#zKulbH2u{F{L0Kn%1SS3JQ0)E{DC2tsELZd^Z$(t-v?HQ}6`rA`c)rBKgF|&m-~} zn~3O5bae@l$3q@OL=W=FJf1;@_|V~9oMnMT%-4J1Xx-o@7Y&lEpG zq+KS=z>DQ?f!M3q_`UMNGl$5Ul&6l|g~*ybhsatKJAOTKGomJ^E31B{m(HEl?ephG zb=)(L=T^s2u%m|qf3+8_>xr?+vFXWChv`whOR`Iw8k=&7Q)AO3YHG4yQLU&cwV|IS zCQ5rIv5~iKQ!xB)jIL2)eV2$ z&rG1t+jW!qoBiau$TPh(4@@Q&ug6>ViqAxDk7KXroLw2U}RMn>Ns`mcByY`c+&d zo4!(y_Uk{QjQ*EvZTgD&uG)6%=uEV`aTcfDxTmq@(Dce-4t6r|O0N2y-(1B~V1 zW9!JrvrA1~Tdp%FXA|QGG*a3`-9&M;Z+UeS+QjH3v!z>NnEiRJ7j~3&txjwj2f4JX zhkZM%8|~JJ(^i~k^3mV*qxCUW_ajS|vKHxI-A}z(x7xbbjU#(_-1RsN$vs)=_?S~l z)D_YcmT9}rO zma*oM@0D}sM|#nAd}h4ViE8XU^Vr@KdNWsZ;cDV{v>^677N1kDv&$A%l9^SybopwW z>!m1SsdjO{*tWl>JEfQLin%VGS;u5XH3PftOHIYJtvJ6agIwN8GaIUA{+O@p^+rYN zJXg$uZp!4IYc00*YLa8K&KUXF$(h5RNmCg(_8#KStxmh9V|5mziWqZBl&fab-{nV~ z_wgOE=1Qe5_2fy01NVt};13KCUk;_VspOjHMOrl(whm zwtF_o(xOlLzGkag8mb;XIXR;4k2_}LKUr3yvm#G3Flo2#Zx?!7#7?{o-4-K8<+NHi z9;?oGtFc_Oi@uk{X}p%{THf*F>IFX)T|18-SiDO|9b~EJNs8xgd5rBKwc#h$%fz!_ z$jO@V?7+v1>~`^1+FyXK?W=s&{be_Ktr@4(Vjg6EMcPJnjI?LG4e>d{&BWSFmK7WR z7|LunmuK}v$_(VIfuCYE+Ra`q$yB>_skWpOgR+uBg>9*$PK8Mv=mq9ImmRikf>1Xw z@>P?T_I-gpjzZ;yu~uthw@+^p<(?PPmTt~T(nt}hgW=!t)3IZ{$P$|=#R4h;k?bZ z;$#E+Eq&>A9kcd3V4@wTuzt0Ne6}8DePYex^|rcxW|_)<#sRU87SIvd5<`n_;^zHv;yuVs(oTlH98S z2jIcXk}%5NXKggKeO0hjZjzRQ}F zql{Hc4r6L5&NzRU(5pK-(j7~QG#yjRi|v&;J$Z6wQ8tb#J=|zt!gr02sO5*wbC?p} zUZWW!W5BXBTz5uG@yq%Wci-Pgh;(Sf0YA5ky^tRIKR4x=}v03(6v8lPn;_}dvm19$7F%2+jOY?z)Gc_phlKS1$WK? zbaH%RqB4HEGI?50%*;+tSH`Eu$H`b(B8rit;9x$kr>+d{P$ zFrD{k0=p!&*_nq{nw6P@d~#r0vq^>XVcg-|HLGXv$osvW)xB(}9ps4#DzYJ@vpVXz z*YwQfJ-YaLW;oJ!p3xH{L$CF)JS-!){we;t;_`#AuUsy%Y!gKw-yse<2wlonE<4lr z!~82oqW>S458hH7ME(bg?+4)jcjNL}z}8|CHV`>_2KnBn_nwXq;_^|=^_T3E`%$&* zC-HuCUP}mXH)D3PBH{~QdqH}KaP+?vria%Orx&Mgr{I2Y9=pwA@5#&$1|5RxXO+;} z1@3B2qIC|Ddrz_t${f+xI4$FMpC3khdr!%Q&HrHF-X^Z*ND#^;i;LiCHxCKeLr%S1 z4ROnp#Kh-B4gae_`-0^(iU#<%M)?2Q4cpyq2B$T5<*3|_&2sfev=YC%<9pLdWEJ$1y=N*e()T;@@gaW0 zIpV%+#uHn2%PLX7s)bxEa3AHOG8cWTRuS5>Ie(Ur0^>4e*w5CByB{cm?>D=7a5QC9 z7AehGVQ7OcoA}|DC{|{2aCyjXf;DqEXRV*pWhu)X&f@vp&K{FA5Z9ZK_$ZL6cP4O6 znMaGflyO%8ZtFc51Y_qCe0Q+7B)MUy1J(D_xJzIl0}44dPhVT2i6e?FKboV}i)u_- zG||`4(!en)!7CgbsuH;#=ok{^uV#60JHY;#|2OXj7M&#}?7v16%5ul+@0#L>CrNJp z5+9FJ-VcXzQ(*lp=B6Om$K4d{JGg!cXMcyT1qSZ|2CosWc3n`6y1WX&I^FnH*`Qk@ WrZ{aX6J+>7B?aVeAy%blRQ~}Kt{hYV literal 0 HcmV?d00001 diff --git a/apps/converter/locale/pt/LC_MESSAGES/django.po b/apps/converter/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..97c665d018 --- /dev/null +++ b/apps/converter/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,932 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +# Renata Oliveira , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"PO-Revision-Date: 2011-11-03 16:45+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:10 +msgid "file formats" +msgstr "formatos de arquivo" + +#: literals.py:18 +msgid "Resize" +msgstr "Redimensionar" + +#: literals.py:19 +msgid "Resize." +msgstr "Redimensionar." + +#: literals.py:21 literals.py:36 +msgid "width" +msgstr "largura" + +#: literals.py:22 literals.py:37 +msgid "height" +msgstr "altura" + +#: literals.py:26 +msgid "Rotate" +msgstr "Rodar" + +#: literals.py:27 +msgid "Rotate by n degress." +msgstr "Rodar por n graus." + +#: literals.py:29 +msgid "degrees" +msgstr "graus" + +#: literals.py:33 +msgid "Density" +msgstr "Densidade" + +#: literals.py:34 +msgid "Change the resolution (ie: DPI) without resizing." +msgstr "Alterar a resolução (ie: DPI), sem redimensionamento." + +#: literals.py:41 +msgid "Zoom" +msgstr "Zoom" + +#: literals.py:42 +msgid "Zoom by n percent." +msgstr "Zoom por n percento." + +#: literals.py:44 +msgid "percent" +msgstr "por cento" + +#: literals.py:50 +msgid "Hasselblad Photo RAW, CFV/H3D39II" +msgstr "Hasselblad Photo RAW, CFV/H3D39II" + +#: literals.py:51 literals.py:52 +msgid "Photoshop resource format" +msgstr "Recurso de formato do Photoshop" + +#: literals.py:53 +msgid "Photoshop resource text format" +msgstr "Recurso de formato de texto do Photoshop" + +#: literals.py:54 +msgid "Photoshop resource wide text format" +msgstr "Recurso de formato de texto de largura do Photoshop" + +#: literals.py:56 +msgid "Raw alpha samples" +msgstr "Amostras Raw alpha" + +#: literals.py:57 +msgid "Adobe Illustrator CS2" +msgstr "Adobe Illustrator CS2" + +#: literals.py:58 +msgid "Raw application information" +msgstr "Informações do aplicativo RAW" + +#: literals.py:59 +msgid "Raw JPEG binary data" +msgstr "Dados binários de RAW JPEG" + +#: literals.py:60 +msgid "PFS: 1st Publisher Clip Art" +msgstr "PFS: 1st Publisher Clip Art" + +#: literals.py:61 +msgid "Sony Alpha DSLR Raw Image Format" +msgstr "Sony Alpha DSLR formato de imagem RAW" + +#: literals.py:62 +msgid "Microsoft Audio/Visual Interleaved" +msgstr "Microsoft Audio/Visual Interleaved" + +#: literals.py:63 +msgid "AVS X image" +msgstr "AVS X imagem" + +#: literals.py:65 +msgid "Raw blue samples" +msgstr "Amostras RAW azul" + +#: literals.py:66 +msgid "Raw blue, green, and red samples" +msgstr "Amostras RAW azul, verde e vermelho." + +#: literals.py:67 +msgid "Raw blue, green, red and alpha samples" +msgstr "Amostras Raw azul, verde, vermelho e alfa" + +#: literals.py:68 +msgid "Microsoft Windows bitmap image" +msgstr "Imagem bitmap do Microsoft Windows" + +#: literals.py:69 +msgid "Microsoft Windows bitmap image version 2" +msgstr "Imagem bitmap Microsoft Windows versão 2 " + +#: literals.py:70 +msgid "Microsoft Windows bitmap image version 3" +msgstr "Imagem bitmap Microsoft Windows versão 3" + +#: literals.py:71 +msgid "BRF ASCII Braille format" +msgstr "BRF ASCII Braille format" + +#: literals.py:72 +msgid "Raw blue, red, and green samples" +msgstr "Amostras Raw Azul, vermelho, verde" + +#: literals.py:74 +msgid "Raw cyan samples" +msgstr "Amostras Raw ciano" + +#: literals.py:75 literals.py:180 +msgid "Magick Persistent Cache image format" +msgstr "Magick Persistent Cache image format" + +#: literals.py:76 literals.py:77 +msgid "Continuous Acquisition and Life-cycle Support Type 1 image" +msgstr "Continuous Acquisition and Life-cycle Support Type 1 image" + +#: literals.py:78 +msgid "Image caption" +msgstr "Legenda da foto" + +#: literals.py:79 +msgid "Cineon Image File" +msgstr "Cineon Arquivo de Imagem" + +#: literals.py:80 +msgid "Cisco IP phone image format" +msgstr "Cisco IP phone image format" + +#: literals.py:81 +msgid "Image Clip Mask" +msgstr "Image Clip Mask" + +#: literals.py:82 +msgid "Raw cyan, magenta, yellow, and black samples" +msgstr "Amostras Raw ciano, magenta, amarelo e preto" + +#: literals.py:83 +msgid "Raw cyan, magenta, yellow, black, and opacity samples" +msgstr "Amostras Raw ciano, magenta, amarelo, preto e opacidade" + +#: literals.py:84 literals.py:85 +msgid "Canon Digital Camera Raw Image Format" +msgstr "Canon Digital Camera Raw Image Format" + +#: literals.py:86 +msgid "Microsoft Cursor Icon" +msgstr "Microsoft Cursor Icon" + +#: literals.py:87 +msgid "DR Halo" +msgstr "DR Halo" + +#: literals.py:89 +msgid "Digital Imaging and Communications in Medicine image" +msgstr "Digital Imaging and Communications in Medicine imagem" + +#: literals.py:90 +msgid "Kodak Digital Camera Raw Image File" +msgstr "Kodak Digital Camera Raw Image File" + +#: literals.py:91 +msgid "ZSoft IBM PC multi-page Paintbrush" +msgstr "ZSoft IBM PC multi-page Paintbrush" + +#: literals.py:92 +msgid "Microsoft DirectDraw Surface" +msgstr "Microsoft DirectDraw Surface" + +#: literals.py:93 +msgid "Multi-face font package (Freetype 2.4.2)" +msgstr "Multi-face font package (Freetype 2.4.2)" + +#: literals.py:94 +msgid "Déjà vu" +msgstr "Déjà vu" + +#: literals.py:95 +msgid "Adobe Digital Negative" +msgstr "Adobe Digital Negative" + +#: literals.py:96 +msgid "Graphviz" +msgstr "Graphviz" + +#: literals.py:97 +msgid "SMPTE 268M-2003 (DPX 2.0)" +msgstr "SMPTE 268M-2003 (DPX 2.0)" + +#: literals.py:99 +msgid "Encapsulated Portable Document Format" +msgstr "Formato de Documento Portátil encapsulado" + +#: literals.py:100 literals.py:105 +msgid "Adobe Encapsulated PostScript Interchange format" +msgstr "Adobe PostScript formato encapsulado Interchange" + +#: literals.py:101 literals.py:104 +msgid "Adobe Encapsulated PostScript" +msgstr "Adobe Encapsulated PostScript" + +#: literals.py:102 +msgid "Adobe Level II Encapsulated PostScript" +msgstr "Adobe Level II Encapsulated PostScript" + +#: literals.py:103 +msgid "Adobe Level III Encapsulated PostScript" +msgstr "Adobe Level III Encapsulated PostScript" + +#: literals.py:106 +msgid "Adobe Encapsulated PostScript with TIFF preview" +msgstr "Adobe Encapsulated PostScript with TIFF preview" + +#: literals.py:107 +msgid "Adobe Level II Encapsulated PostScript with TIFF preview" +msgstr "Adobe Level II Encapsulated PostScript with TIFF preview" + +#: literals.py:108 +msgid "Adobe Level III Encapsulated PostScript with TIFF preview" +msgstr "Adobe Level III Encapsulated PostScript with TIFF preview" + +#: literals.py:109 +msgid "Epson RAW Format" +msgstr "Formato RAW Epson" + +#: literals.py:110 +msgid "Exif digital camera binary data" +msgstr "Exif binário de dados digitais da câmera" + +#: literals.py:111 +msgid "High Dynamic-range (HDR)" +msgstr "High Dynamic-range (HDR)" + +#: literals.py:113 +msgid "Group 3 FAX (Not TIFF Group3 FAX)" +msgstr "Group 3 FAX (Not TIFF Group3 FAX)" + +#: literals.py:114 +msgid "Autodesk FLI animations file" +msgstr "Autodesk FLI animations file" + +#: literals.py:115 +msgid "Autodesk FLC animations file" +msgstr "Autodesk FLC animations file" + +#: literals.py:116 literals.py:119 +msgid "Flexible Image Transport System" +msgstr "Flexible Image Transport System" + +#: literals.py:117 +msgid "Kodak FlashPix file" +msgstr "Kodak FlashPix file" + +#: literals.py:118 literals.py:224 +msgid "Plasma fractal image" +msgstr "Plasma fractal image" + +#: literals.py:121 +msgid "Raw green samples" +msgstr "Amostras RAW verdes" + +#: literals.py:122 +msgid "Group 3 FAX" +msgstr "Group 3 FAX" + +#: literals.py:123 +msgid "Raw green, blue, and red samples" +msgstr "Amostras RAW verde, azul e vermelho" + +#: literals.py:124 +msgid "GIMP brush file" +msgstr "GIMP brush file" + +#: literals.py:125 +msgid "CompuServe graphics interchange format (version 89a)" +msgstr "CompuServe graphics interchange format (version 89a)" + +#: literals.py:126 +msgid "CompuServe graphics interchange format (version 87a)" +msgstr "CompuServe graphics interchange format (version 87a)" + +#: literals.py:127 +msgid "Gradual passing from one shade to another" +msgstr "Passagem gradual de um tom para outro" + +#: literals.py:128 +msgid "Raw gray samples" +msgstr "Amostras RAW cinza" + +#: literals.py:129 +msgid "Raw green, red, and blue samples" +msgstr "Amostras RAW verde, vermelho e azul" + +#: literals.py:130 +msgid "Raw CCITT Group4" +msgstr "" + +#: literals.py:132 +msgid "Histogram of the image" +msgstr "" + +#: literals.py:133 +msgid "HRZ: Slow scan TV" +msgstr "" + +#: literals.py:134 literals.py:135 literals.py:254 +msgid "Hypertext Markup Language and a client-side image map" +msgstr "" + +#: literals.py:137 literals.py:263 literals.py:278 literals.py:282 +msgid "Truevision Targa image" +msgstr "" + +#: literals.py:138 literals.py:139 +msgid "ICC Color Profile" +msgstr "" + +#: literals.py:140 literals.py:141 +msgid "Microsoft Icon" +msgstr "" + +#: literals.py:142 +msgid "Hald CLUT identity image" +msgstr "" + +#: literals.py:143 +msgid "LabEye image format" +msgstr "" + +#: literals.py:144 +msgid "GraphicsMagick Embedded Image" +msgstr "" + +#: literals.py:145 +msgid "The image format and characteristics" +msgstr "" + +#: literals.py:146 +msgid "Base64-encoded inline images" +msgstr "" + +#: literals.py:147 +msgid "IPL Image Sequence" +msgstr "" + +#: literals.py:148 +msgid "IPTC Newsphoto" +msgstr "" + +#: literals.py:149 literals.py:150 +msgid "IPTC Newsphoto text format" +msgstr "" + +#: literals.py:151 +msgid "ISO/TR 11548-1 format" +msgstr "" + +#: literals.py:153 literals.py:156 +msgid "JPEG-2000 Code Stream Syntax" +msgstr "" + +#: literals.py:154 +msgid "JPEG Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" + +#: literals.py:155 +msgid "JPEG-2000 JP2 File Format Syntax" +msgstr "" + +#: literals.py:157 literals.py:158 +msgid "Joint Photographic Experts Group JFIF format (IJG JPEG 62)" +msgstr "" + +#: literals.py:159 +msgid "JPEG-2000 File Format Syntax" +msgstr "" + +#: literals.py:161 +msgid "Raw black samples" +msgstr "" + +#: literals.py:162 literals.py:163 +msgid "Kodak Digital Camera Raw Image Format" +msgstr "" + +#: literals.py:165 +msgid "Image label" +msgstr "" + +#: literals.py:167 +msgid "Raw magenta samples" +msgstr "" + +#: literals.py:168 literals.py:178 literals.py:181 literals.py:182 +msgid "MPEG Video Stream" +msgstr "" + +#: literals.py:169 +msgid "Raw MPEG-4 Video" +msgstr "" + +#: literals.py:170 +msgid "Colormap intensities and indices" +msgstr "" + +#: literals.py:171 +msgid "MATLAB image format" +msgstr "" + +#: literals.py:172 +msgid "MATTE raw opacity format" +msgstr "" + +#: literals.py:173 +msgid "8-bit McIdas area file" +msgstr "" + +#: literals.py:174 +msgid "Microsoft Image Composer (MIC) file" +msgstr "" + +#: literals.py:175 +msgid "Magick Image File Format" +msgstr "" + +#: literals.py:176 +msgid "" +"Multiple-image Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" + +#: literals.py:177 +msgid "Raw Bi-level bitmap in least-significant-byte first order" +msgstr "" + +#: literals.py:179 +msgid "MPEG-4 Video Stream" +msgstr "" + +#: literals.py:183 +msgid "Sony (Minolta) Raw Image File" +msgstr "" + +#: literals.py:184 +msgid "Magick Scripting Language" +msgstr "" + +#: literals.py:185 +msgid "Windows 1 and 2 MSP file format" +msgstr "" + +#: literals.py:186 +msgid "ImageMagick's own SVG internal renderer" +msgstr "" + +#: literals.py:187 +msgid "MTV Raytracing image format" +msgstr "" + +#: literals.py:188 +msgid "Magick Vector Graphics" +msgstr "" + +#: literals.py:190 +msgid "Nikon Digital SLR Camera Raw Image File" +msgstr "" + +#: literals.py:191 +msgid "Constant image of uniform color" +msgstr "" + +#: literals.py:193 +msgid "Raw opacity samples" +msgstr "" + +#: literals.py:194 +msgid "Olympus Digital Camera Raw Image File" +msgstr "" + +#: literals.py:195 +msgid "On-the-air bitmap" +msgstr "" + +#: literals.py:196 +msgid "Open Type font (Freetype 2.4.2)" +msgstr "" + +#: literals.py:198 +msgid "Xv thumbnail format" +msgstr "" + +#: literals.py:199 literals.py:276 +msgid "16bit/pixel interleaved YUV" +msgstr "" + +#: literals.py:200 +msgid "Palm pixmap" +msgstr "Palm pixmap" + +#: literals.py:201 +msgid "Common 2-dimensional bitmap format" +msgstr "Common 2-dimensional bitmap format" + +#: literals.py:202 +msgid "Predefined pattern" +msgstr "Padrão pré-definido" + +#: literals.py:203 +msgid "Portable bitmap format (black and white)" +msgstr "Formato bitmap portátil (preto e branco)" + +#: literals.py:204 literals.py:205 +msgid "Photo CD" +msgstr "Photo CD" + +#: literals.py:206 +msgid "Page Control Language" +msgstr "Page Control Language" + +#: literals.py:207 literals.py:220 +msgid "Apple Macintosh QuickDraw/PICT" +msgstr "Apple Macintosh QuickDraw/PICT" + +#: literals.py:208 +msgid "ZSoft IBM PC Paintbrush" +msgstr "ZSoft IBM PC Paintbrush" + +#: literals.py:209 +msgid "Palm Database ImageViewer Format" +msgstr "Palm Database ImageViewer Format" + +#: literals.py:210 +msgid "Portable Document Format" +msgstr "Portable Document Format" + +#: literals.py:211 +msgid "Portable Document Archive Format" +msgstr "Portable Document Archive Format" + +#: literals.py:212 +msgid "Pentax Electronic File" +msgstr "Pentax Electronic File" + +#: literals.py:213 +msgid "Embrid Embroidery Format" +msgstr "Embrid Embroidery Format" + +#: literals.py:214 +msgid "Postscript Type 1 font (ASCII) (Freetype 2.4.2)" +msgstr "Postscript Type 1 font (ASCII) (Freetype 2.4.2)" + +#: literals.py:215 +msgid "Postscript Type 1 font (binary) (Freetype 2.4.2)" +msgstr "Postscript Type 1 font (binary) (Freetype 2.4.2)" + +#: literals.py:216 +msgid "Portable float format" +msgstr "Portable float format" + +#: literals.py:217 +msgid "Portable graymap format (gray scale)" +msgstr "Portable graymap format (gray scale)" + +#: literals.py:218 +msgid "JPEG-2000 VM Format" +msgstr "JPEG-2000 VM Format" + +#: literals.py:219 +msgid "Personal Icon" +msgstr "Ícone pessoal" + +#: literals.py:221 +msgid "Alias/Wavefront RLE image format" +msgstr "Alias/Wavefront RLE image format" + +#: literals.py:222 +msgid "PIXAR raster file" +msgstr "PIXAR raster file" + +#: literals.py:223 +msgid "Joint Photographic Experts Group JFIF format (62)" +msgstr "Joint Photographic Experts Group JFIF format (62)" + +#: literals.py:225 +msgid "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" +"Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" + +#: literals.py:226 +msgid "" +"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" +"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" + +#: literals.py:227 +msgid "" +"32-bit RGBA PNG, semitransparency OK (libpng 1.2.42,1.2.44, zlib " +"1.2.3.3,1.2.3.4)" +msgstr "" +"32-bit RGBA PNG, semitransparency OK (libpng 1.2.42,1.2.44, zlib " +"1.2.3.3,1.2.3.4)" + +#: literals.py:228 +msgid "" +"8-bit indexed PNG, binary transparency only (libpng 1.2.42,1.2.44, zlib " +"1.2.3.3,1.2.3.4)" +msgstr "" +"8-bit indexed PNG, binary transparency only (libpng 1.2.42,1.2.44, zlib " +"1.2.3.3,1.2.3.4)" + +#: literals.py:229 +msgid "Portable anymap" +msgstr "Portable anymap" + +#: literals.py:230 +msgid "Portable pixmap format (color)" +msgstr "Portable pixmap format (color)" + +#: literals.py:231 +msgid "Show a preview an image enhancement, effect, or f/x" +msgstr "Mostrar uma visualização uma melhoria de imagem, efeito, ou f/x" + +#: literals.py:232 +msgid "Adobe PostScript" +msgstr "Adobe PostScript" + +#: literals.py:233 +msgid "Adobe Level II PostScript" +msgstr "Adobe Level II PostScript" + +#: literals.py:234 +msgid "Adobe Level III PostScript" +msgstr "Adobe Level III PostScript" + +#: literals.py:235 +msgid "Adobe Large Document Format" +msgstr "Adobe Large Document Format" + +#: literals.py:236 +msgid "Adobe Photoshop bitmap" +msgstr "Adobe Photoshop bitmap" + +#: literals.py:237 +msgid "Pyramid encoded TIFF" +msgstr "Pyramid encoded TIFF" + +#: literals.py:238 literals.py:252 +msgid "Seattle Film Works" +msgstr "Seattle Film Works" + +#: literals.py:240 +msgid "Raw red samples" +msgstr "Amostras RAW vermelhas" + +#: literals.py:241 +msgid "Fuji CCD-RAW Graphic File" +msgstr "Fuji CCD-RAW Graphic File" + +#: literals.py:242 literals.py:258 +msgid "SUN Rasterfile" +msgstr "SUN Rasterfile" + +#: literals.py:243 +msgid "Raw red, blue, and green samples" +msgstr "Amostras RAW vermelhas, azul, verde" + +#: literals.py:244 +msgid "Raw red, green, and blue samples" +msgstr "" + +#: literals.py:245 +msgid "Raw red, green, blue, and matte samples" +msgstr "" + +#: literals.py:246 +msgid "Raw red, green, blue, and opacity samples" +msgstr "" + +#: literals.py:247 +msgid "Alias/Wavefront image" +msgstr "" + +#: literals.py:248 +msgid "Utah Run length encoded image" +msgstr "" + +#: literals.py:250 +msgid "ZX-Spectrum SCREEN$" +msgstr "" + +#: literals.py:251 +msgid "Scitex HandShake" +msgstr "" + +#: literals.py:253 +msgid "Irix RGB image" +msgstr "" + +#: literals.py:255 +msgid "Sony Raw Format 2" +msgstr "" + +#: literals.py:256 +msgid "Sony Raw Format" +msgstr "" + +#: literals.py:257 +msgid "Steganographic image" +msgstr "" + +#: literals.py:259 +msgid "Scalable Vector Graphics (XML 2.7.6, RSVG 2.32.0)" +msgstr "" + +#: literals.py:260 +msgid "Scalable Vector Graphics (ZIP compressed) (XML 2.7.6, RSVG 2.32.0)" +msgstr "" + +#: literals.py:262 literals.py:272 +msgid "Text" +msgstr "" + +#: literals.py:264 +msgid "EXIF Profile Thumbnail" +msgstr "" + +#: literals.py:265 +msgid "Tagged Image File Format (LIBTIFF, Version 3.9.4)" +msgstr "" + +#: literals.py:266 +msgid "Tagged Image File Format (64-bit) (LIBTIFF, Version 3.9.4)" +msgstr "" + +#: literals.py:267 +msgid "Tile image with a texture" +msgstr "" + +#: literals.py:268 +msgid "PSX TIM" +msgstr "" + +#: literals.py:269 +msgid "TOPOL X Image" +msgstr "" + +#: literals.py:270 +msgid "TrueType font collection (Freetype 2.4.2)" +msgstr "" + +#: literals.py:271 +msgid "TrueType font (Freetype 2.4.2)" +msgstr "" + +#: literals.py:274 +msgid "Unicode Text format" +msgstr "" + +#: literals.py:275 +msgid "X-Motif UIL table" +msgstr "" + +#: literals.py:279 +msgid "VICAR rasterfile format" +msgstr "" + +#: literals.py:280 +msgid "Visual Image Directory" +msgstr "" + +#: literals.py:281 literals.py:298 +msgid "Khoros Visualization image" +msgstr "" + +#: literals.py:284 +msgid "Wireless Bitmap (level 0) image" +msgstr "" + +#: literals.py:285 +msgid "Windows Meta File" +msgstr "" + +#: literals.py:286 +msgid "Word Perfect Graphics" +msgstr "" + +#: literals.py:287 +msgid "Windows Media Video" +msgstr "" + +#: literals.py:288 +msgid "Compressed Windows Meta File" +msgstr "" + +#: literals.py:290 +msgid "X Window System" +msgstr "" + +#: literals.py:291 +msgid "Foveon X3 (Sigma/Polaroid) Raw picture file" +msgstr "" + +#: literals.py:292 +msgid "X Windows system bitmap (black and white)" +msgstr "" + +#: literals.py:293 +msgid "Constant image uniform color" +msgstr "" + +#: literals.py:294 +msgid "GIMP image" +msgstr "" + +#: literals.py:295 +msgid "Adobe XML metadata" +msgstr "" + +#: literals.py:296 +msgid "X Windows system pixmap (color)" +msgstr "" + +#: literals.py:297 +msgid "Microsoft XML Paper Specification" +msgstr "" + +#: literals.py:299 +msgid "XV thumbnail file" +msgstr "" + +#: literals.py:300 +msgid "X Windows system window dump (color)" +msgstr "" + +#: literals.py:302 +msgid "Raw yellow samples" +msgstr "" + +#: literals.py:303 +msgid "CCIR 601 4:1:1 or 4:2:2 (8-bit only)" +msgstr "" + +#: views.py:15 +msgid "suported file formats" +msgstr "" + +#: views.py:20 +msgid "name" +msgstr "" + +#: views.py:24 +msgid "description" +msgstr "" + +#: conf/settings.py:10 +msgid "File path to imagemagick's convert program." +msgstr "" + +#: conf/settings.py:11 +msgid "File path to imagemagick's identify program." +msgstr "" + +#: conf/settings.py:12 +msgid "File path to graphicsmagick's program." +msgstr "" + +#: conf/settings.py:14 +msgid "" +"Graphics conversion backend to use. Options are: " +"converter.backends.imagemagick, converter.backends.graphicsmagick and " +"converter.backends.python." +msgstr "" + +#: templates/converter_file_formats_help.html:3 +msgid "Help" +msgstr "" + +#: templates/converter_file_formats_help.html:4 +#, python-format +msgid "" +"These are the file formats supported by the currently selected converter " +"backend. In this case: '%(backend)s'" +msgstr "" + + diff --git a/apps/document_indexing/locale/pt/LC_MESSAGES/django.mo b/apps/document_indexing/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5c371fea1752438828c2744ad45322bb6ae2aeb3 GIT binary patch literal 4192 zcmb7`O^h5z6~`-I1Qy5_1Onls0vLO-XJ^;MV9&DHPHYp4EMCkyNCbguyK86K>FMfp zRqxj&Cj>bl1r*N6LI?%P;$V;iH#8SyAt7->LP8vfxN-mvNCXy5Gryjm zs#mYx``3H(r$_Gnf#N#K`$N3LT}my&-`>p!*X#Ev)q%f+?}vYdJ@_BE0DJc;^+lM& zXW;Ab5WMTYX8d7zKi^NoGw=)W?eIJBWAJ1U4b(1c_{X-LPDZ;+TUM-w}|n#;7OjZVEl3TGCU1` z47>0R_)YleJC*u6tl>QTJv;>Oc~`T)S@rd%TsOgTxUgUx2!*{&Tg12H*2}o>vfTY%oV<;4|#RY<~CTbO_A!PvPSOL zD>u|WsZ2-)(MlLtow}qR+9Hfi&Z+Z7u$4Bt+zta*XdkMq=xe)GR@QqK5MS1;wi_m| zv70iZs$7MEea2*3U8aoLGaK)Y?An_3i}8D6OYwcyx3=OmnLq8`vH!!+MG4U)Xo(w^ z5|Na+CJ7r^uk(C+PEC)pvXL0S_}u#DcVgGCTwPAQ@obhT7#%8Wb)LOo^&qpAsggmK zm|S93CxHaE3$PQlY__stO#9rq?r+X16jQT4}i&MHViIBGRb2R5C2%N)rZ?{F2$*e3-KR*0UP( zlN{`Bp>V0)=l%Y%Q%fB@HXfO0Psb_MdY8#Y(bk>-;nd@w~~+pjt4 zYHsnob(rOfV6uV@M?c4p$5Y#Z5|7=}sr!h%Rn7$^#lfnT%3VcW zor`JbIa^8b=;>v%Z3=z<-11juF5A*op|kA!S=xE3?)%QF>*+xVWv|=qXJJsU&2ezM zmGh>`T-8PXrs!tg*VfOhTw3isEu{^!opV%~o<2Umu+W)5)j57jFP!W>d7?A_it+~R6ZrKFJcgto^9h(k) zH(;P!hVJal^2O!zyCGYco1b~Q(N|}6yJVxmZeb)Rfr~mBn9AF*bY=BI=j84TyL6<`Pb}$$*%`HJhdQxU zuseo>u3xO>ynB1q5GAxE6)&qOMyaD-c|E#bq#1Sgw7O6iqo0g^K`l!&U%Fy+ooL1; zrPcYZB(F1#_^Zsso@1(jnbheWTe;iK$Z8&6O6Klul zAFVaK*l%0!YmA!W-p0A{dXH6}6UWi@)Nrhadi2w+ED)VHpTJycb@AknzT0G~X?0{_ z;vglyU)80Nl#+dk^5|N%;V647L;aDkOXBHtCN@BRezB$lwr!6;A5ML_Hbux%!G)i zgU;!WY5pllTsEXrQ;P|{E@aiX1yQJ#b3p#03J&O<`VL<1TTOKIKU#>Z5*JRu=*GS+ zPQ^(6r1=9}*fp@v2|XqBx14?FK+`#PQ#a+8Xp6r`USc^_b2t#ej(#PwiFzQxO+AW= zp9owXtO%J+Js-+ilzjea9Z(C@#EMsUm_XHQ|6n_>24*eGvw)nHuh)n?s*Uw9AA6!u zE`L;`;9BQsx1xM}89x|%J)Y!aGq)VJxV_c{D^I3)?8d+E5~*n|OHVJPr}w9hK3$z% RwN-txU}dr$Y3;63{{?sb_Iv;U literal 0 HcmV?d00001 diff --git a/apps/document_indexing/locale/pt/LC_MESSAGES/django.po b/apps/document_indexing/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..6503982432 --- /dev/null +++ b/apps/document_indexing/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,215 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Renata Oliveira , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"PO-Revision-Date: 2011-11-03 02:59+0000\n" +"Last-Translator: renataoliveira \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:12 +msgid "View document indexes" +msgstr "Ver índices de documento" + +#: __init__.py:13 +msgid "Rebuild document indexes" +msgstr "Reconstruir índices de documento" + +#: __init__.py:15 +msgid "Indexing" +msgstr "Indexando" + +#: __init__.py:19 +msgid "index list" +msgstr "lista de índice" + +#: __init__.py:20 +msgid "go up one level" +msgstr "subir um nível" + +#: __init__.py:21 __init__.py:23 models.py:26 +msgid "indexes" +msgstr "índices" + +#: __init__.py:25 +msgid "rebuild indexes" +msgstr "reconstruir índices" + +#: __init__.py:25 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Exclui e criar a partir do zero todos os índices de documento." + +#: __init__.py:27 +msgid "Indexes" +msgstr "Índices" + +#: api.py:83 +msgid "root" +msgstr "raiz" + +#: api.py:139 +#, python-format +msgid "Maximum suffix (%s) count reached." +msgstr "Quantidade máxima do sufixo (%s) alcançada." + +#: api.py:175 +#, python-format +msgid "" +"Error in document indexing update expression: %(expression)s; %(exception)s" +msgstr "" +"Erro de atualização na expressão de indexação do documento: %(expression)s; " +"%(exception)s " + +#: api.py:178 +#, python-format +msgid "" +"Error updating document index, expression: %(expression)s; %(exception)s" +msgstr "" +"Erro de atualização de índice do documento, a expressão: %(expression)s ; " +"%(exception)s " + +#: api.py:209 +#, python-format +msgid "Unable to delete document indexing node; %s" +msgstr "Não é possível excluir o nó de indexação de documentos; %s" + +#: filesystem.py:34 +#, python-format +msgid "Unable to create indexing directory; %s" +msgstr "Não é possível criar o diretório de indexação; %s" + +#: filesystem.py:52 +#, python-format +msgid "" +"Unable to create symbolic link, file exists and could not be deleted: " +"%(filepath)s; %(exc)s" +msgstr "" +"Não é possível criar o link simbólico, o arquivo existe e não pode ser " +"excluído: %(filepath)s; %(exc)s " + +#: filesystem.py:54 +#, python-format +msgid "Unable to create symbolic link: %(filepath)s; %(exc)s" +msgstr "Não é possível criar o link simbólico: %(filepath)s; %(exc)s " + +#: filesystem.py:71 +#, python-format +msgid "Unable to delete document symbolic link; %s" +msgstr "Não é possível excluir o link simbólico do documento; %s" + +#: filesystem.py:83 +#, python-format +msgid "Unable to delete indexing directory; %s" +msgstr "Não é possível excluir o diretório de indexação; %s" + +#: models.py:11 +#, python-format +msgid "Available functions: %s" +msgstr "Funções disponíveis: %s " + +#: models.py:16 +msgid "indexing expression" +msgstr "expressão de indexação" + +#: models.py:16 +msgid "Enter a python string expression to be evaluated." +msgstr "Digite uma expressão python para ser avaliada." + +#: models.py:18 +msgid "enabled" +msgstr "habilitado" + +#: models.py:19 +msgid "link documents" +msgstr "ligar documentos" + +#: models.py:25 models.py:31 views.py:56 +msgid "index" +msgstr "índice" + +#: models.py:32 +msgid "value" +msgstr "valor" + +#: models.py:33 +msgid "documents" +msgstr "documentos" + +#: models.py:46 models.py:51 +msgid "index instance" +msgstr "exemplo de índice" + +#: models.py:47 +msgid "indexes instances" +msgstr "exemplos de índices" + +#: models.py:52 +msgid "document" +msgstr "documento" + +#: models.py:59 +msgid "document rename count" +msgstr "contagem de renomeação do documento" + +#: models.py:60 +msgid "documents rename count" +msgstr "contagem de renomeação dos documentos" + +#: utils.py:19 +msgid "document indexes" +msgstr "índices de documento" + +#: views.py:38 +#, python-format +msgid "contents for index: %s" +msgstr "conteúdos para o índice: %s" + +#: views.py:60 +msgid "items" +msgstr "itens" + +#: views.py:82 +msgid "Are you sure you wish to rebuild all indexes?" +msgstr "Tem certeza de que deseja reconstruir todos os índices?" + +#: views.py:83 +msgid "On large databases this operation may take some time to execute." +msgstr "" +"Em grandes bases de dados esta operação pode levar algum tempo para " +"executar." + +#: views.py:89 +msgid "Index rebuild completed successfully." +msgstr "Reconstrução de índice concluída com êxito." + +#: views.py:94 +#, python-format +msgid "Index rebuild error: %s" +msgstr "Reconstrução de índice de erro: %s" + +#: views.py:109 +#, python-format +msgid "indexes containing: %s" +msgstr "índices contendo: %s" + +#: templates/indexing_help.html:3 +msgid "What are indexes?" +msgstr "Quais são os índices?" + +#: templates/indexing_help.html:4 +msgid "Indexes group documents into a tree like hierarchical structure." +msgstr "" +"Indexar documentos agrupados em uma árvore como uma estrutura hierárquica." + + diff --git a/apps/dynamic_search/locale/pt/LC_MESSAGES/django.mo b/apps/dynamic_search/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..31bf49eb597ca51c88abea66b9eab03ac7a9a5a7 GIT binary patch literal 2173 zcmai!&u<(x6vqt|(k{Q#@>2*Nh)NrkncbuXwbKSs+60P78`1y=4v}}p*>#w)r?zJ| zd*lokg!lt0P48RA$0(=zoAg}ujWIw(H7r-CDb?_&U&tYTUcLC&mPBeTD{1v{x2(~f* z7dHP2T!ayya|^rx-T~M7J$MxC;*b;IIq+%lD!2%$hWp^N7=I4pC%(lW+uZ><-XB3; z{|opE_&eAF{|4U!7qFPuZ{hDa_zB2<+h#t1EcsLDd>5<*`^$}Wd=ed@*V=I0+~B%^ z>~(|ryy3{&C!XL~_#AHRAD_*Baje`PMnA?6Yq>1F$|&eUC3LdQ+{siPL%E zPOb|ba7Z(zkmZ1qO*C%Kh7hFiLS{p0 z(zzZYg9NM~rB1OLg54B+?pQdLs=5FF9w~qKnA$}XHrzj%E#ZBw+KjJJ+YjtWn?6}q z8R}wa8gX}0mI~V1DscQK+f(z|{F0d7MFWz3sf`HZQVG^VY&yHA(hyzAqK}mG+M0wm zlG7`v zx@fKUr4P}zlg8&V@TK8yowvqYiLmKHriO7d^;W;Y$HmUQ2{Y5LWM4(wN)`!iBBZJh z2NkuOP)4Is9C%;7tM+4~LZ_Sx<2&UvrbuOl?*wenDMM$ewQ*%*?Le~SxZAp9kvj(d zLEMCb+Q%k2)ILw?Ksv9&>WACw(b!Dv=IZxBa)wZFRS7~{vCAL*jTBL1iozoev=|3snuS{mWxU6w=$UaY{%;nHY zAHl;RQeIN2{EbR`$?325Bxa`hp7Cmn1S&`&=_j{sOczUKFm0)r+(hEq|4V#{!(kny zn|uRDk;K+az8@;>V{vh>%B1+9k|yX(W~$j!66%Zhu;Zdbhy3eRK9!EJ(0be)vij=e zXM7C@-e42dG|nYBiNQRydMjLhj=BKLXv4*;E*sd-STXk~QksMMB z+B^7hc(s@xhbm_#w;`oK3P^Z7um}a#snZY=S_uC1;U#Pw?kLCu<7p{T^9e4ZTwG8` zW(OQh-J_JSw@o$SM--H)X80ILPVev@MFpzeT~KIge(?Okk+DNruv;SN(xS9X)fE2# D?JRIi literal 0 HcmV?d00001 diff --git a/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po b/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..8f0cb6d4e2 --- /dev/null +++ b/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"PO-Revision-Date: 2011-11-03 02:32+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:5 +msgid "search" +msgstr "pesquisa" + +#: __init__.py:6 views.py:72 +msgid "advanced search" +msgstr "pesquisa avançada" + +#: __init__.py:7 +msgid "search again" +msgstr "pesquisar novamente" + +#: forms.py:8 +msgid "Search terms" +msgstr "Termos de pesquisa" + +#: models.py:18 +msgid "user" +msgstr "usuário" + +#: models.py:19 +msgid "query" +msgstr "pergunta" + +#: models.py:20 +msgid "datetime created" +msgstr "Data e hora da criação" + +#: models.py:21 +msgid "hits" +msgstr "visitas" + +#: models.py:59 +msgid "recent search" +msgstr "pesquisa recente" + +#: models.py:60 +msgid "recent searches" +msgstr "pesquisas recentes" + +#: views.py:33 +#, python-format +msgid "results, (showing only %(shown_result_count)s out of %(result_count)s)" +msgstr "" +"resultados, (mostrando apenas %(shown_result_count)s de %(result_count)s )" + +#: views.py:37 +msgid "results" +msgstr "resultados" + +#: views.py:56 +#, python-format +msgid "Search error: %s" +msgstr "Erro de pesquisa: %s" + +#: views.py:60 +msgid "type" +msgstr "tipo" + +#: views.py:76 views.py:86 views.py:88 templatetags/search_tags.py:19 +#: templatetags/search_tags.py:20 +msgid "Search" +msgstr "Pesquisa" + +#: conf/settings.py:12 +msgid "Maximum amount search hits to fetch and display." +msgstr "Quantidade máxima acessos para a pesquisa buscar e mostrar." + +#: conf/settings.py:13 +msgid "Maximum number of search queries to remember per user." +msgstr "Número máximo de consultas de pesquisa para se lembrar por usuário." + +#: templates/search_help.html:3 +msgid "Help" +msgstr "Ajuda" + +#: templates/search_help.html:4 +#, python-format +msgid "" +"Enter the desired search keywords separated by space. Only the top " +"%(search_results_limit)s results will be available." +msgstr "" +"Digite as palavras-chave da pesquisa desejada separadas por um espaço. " +"Apenas o máximo %(search_results_limit)s resultados estarão disponíveis." + +#: templates/search_results.html:3 +msgid "Search results" +msgstr "Resultados da pesquisa" + +#: templates/search_results.html:19 +#, python-format +msgid "Elapsed time: %(time_delta)s seconds" +msgstr "Tempo decorrido: %(time_delta)s segundos" + +#: templatetags/search_tags.py:33 +#, python-format +msgid "recent searches (maximum of %d)" +msgstr "pesquisas recentes (maximum of %d)" + + diff --git a/apps/folders/locale/pt/LC_MESSAGES/django.mo b/apps/folders/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..539af2adda3e79808bb6754850b23871627bad78 GIT binary patch literal 4254 zcmbW3No*WN6ov~3n^^*ZK-epW5Idn~>^Mly7!yKl3s6ih7_fAfPopUoTbf)%)vJ zz5ag7rV|XuZk%`Gw3je80iL}Se>gtAjIn#cPrz;9ci^+&Z{YLb;Z2Oy!S}&Oz;D4C zc*o_8je}2sgW$^`^?wJv0sIW);8)-s;4k3q;B{9pwhJ5rIXLg{Eg0bbb#MUu68sDN z8oZHsC1ZDiKY^RUtFD4Aa2tq6?0%5^)G(M~1O5t*fsJb!+XpI;`o9N~u4h5=`y)s?{O+G`g$TFdz6O$hkAe4qOCZhL zNpLUt1xUL72~J{sS6t87R@_fPgdO1XAl<(NVkqn+NV>cQlK)d6>2Mk(Jd{t-MWd33~G97A>%0w?oZacE< z2-8D_kzvDIsZQK`?|yK{P<}OR2KWCb!=~S|`9G$u8*?aQY4b7XBOx*Nvnd~VzZWxME- z&bSOC8>zN8GJz=BG|hDN%&?g}DF%0#LEc0*SOnW2R?*;}-jSaRccXZV+2$7$A|C=x zf^V{R1T{9B8Oyt=UW!7=h2^mnc%YT^k(H_Eo0_g{My*w(uae6}8|Wcap6L`nde_*K z4+SI`*wMw9?9o zNMVF%hgS*gtDTmMR!cSkh2D6at{FXCm&3r)f2IRrDH0#teul&^8*rB&{W}7^?Z5XS z=DnHE78W9(Y?R0%wOF15tk@sQ3sYS|K0gRb2}a4~{`wz!H#y2tvUT^Scn~A${dMuI zR1L}C{N#O+f_@t?%dq+mlFgPNYB68o~j+&0~k+H_u*zOS=1Bb9; zf`wEl6AMfGP%4$MLdVe(a#HYz^7};@n@8G-h+-Pt!|0~knP|&kL5ifo=MYlX#sDQB z@}Vp*FV`&DjaqW0rlhT7p^`AB-pykQWSE$`g@Jn4)`tgXAD^ABBpa=b3>-xMqT&P# zt6cu$~Do(Y~`P7W!)eUgt351=%5A&WI{CMVe4tY%YEgB2I%q?WXni|PNZw2eD+%Hib|Aoye zVfBXk_}|USm1dk_kMhGI8LGm#VbsEF5^6(QI1wqbe6gT*lAtIiD3Q7&x7 zP+1oJC6bpla($nCYK+AMscNj1P{S0(2t9gLrQXZ{F z0-2Xgk`OBCTv#gZC_q{7O>B2HJ{{w&>AkI;>qIEG4WUU_rU^bFt*+Q`h{+o1PR7iJAldZ(55NV9pVXoUJY`bS#0a2HG>D0Z`9hSGJz0W@MS-$w;OjDS9aHI zGgT|$lyhEDZ=)iC-F2v`^a{k$(b(N7_t3%#!TcI$r5e>$RfQ?kYGLJ7Sfs8F7mg?$ zS?=EbljN1njgJhYGVC@-_tJMR;53#hq@`Xy>o-{xWTclL8MD0)Y!+))%p3a~2Xxp! literal 0 HcmV?d00001 diff --git a/apps/folders/locale/pt/LC_MESSAGES/django.po b/apps/folders/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..7e938f3a56 --- /dev/null +++ b/apps/folders/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,222 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Renata Oliveira , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"PO-Revision-Date: 2011-11-03 03:33+0000\n" +"Last-Translator: renataoliveira \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:10 +msgid "folder list" +msgstr "lista de pastas" + +#: __init__.py:11 views.py:53 +msgid "create folder" +msgstr "criar pasta" + +#: __init__.py:12 +msgid "edit" +msgstr "editar" + +#: __init__.py:13 +msgid "delete" +msgstr "excluir" + +#: __init__.py:14 +msgid "remove from folder" +msgstr "remover da pasta" + +#: __init__.py:15 +msgid "folder documents" +msgstr "pasta de documentos" + +#: __init__.py:16 +msgid "add to a folder" +msgstr "adicionar a uma pasta" + +#: __init__.py:17 __init__.py:25 models.py:31 views.py:21 +msgid "folders" +msgstr "pastas" + +#: forms.py:20 +msgid "Existing folders" +msgstr "Pastas existentes" + +#: forms.py:22 +msgid "New folder" +msgstr "Nova pasta" + +#: models.py:11 +msgid "title" +msgstr "título" + +#: models.py:12 +msgid "user" +msgstr "usuário" + +#: models.py:13 +msgid "datetime created" +msgstr "data e hora da criação" + +#: models.py:30 models.py:35 views.py:82 views.py:109 views.py:134 +msgid "folder" +msgstr "pasta" + +#: models.py:36 +msgid "document" +msgstr "documento" + +#: models.py:42 views.py:257 +msgid "folder document" +msgstr "pasta de documento" + +#: models.py:43 +msgid "folders documents" +msgstr "pastas de documentos" + +#: views.py:24 +msgid "created" +msgstr "criado" + +#: views.py:25 +msgid "documents" +msgstr "documentos" + +#: views.py:45 views.py:152 +msgid "Folder created successfully" +msgstr "Pasta criada com sucesso" + +#: views.py:48 views.py:154 views.py:188 +#, python-format +msgid "A folder named: %s, already exists." +msgstr "A pasta com o nome: %s, já existe." + +#: views.py:71 +msgid "Folder edited successfully" +msgstr "Pasta editada com sucesso" + +#: views.py:74 +#, python-format +msgid "Error editing folder; %s" +msgstr "Erro ao editar pasta; %s" + +#: views.py:79 +#, python-format +msgid "edit folder: %s" +msgstr "editar pasta: %s" + +#: views.py:101 +#, python-format +msgid "Folder: %s deleted successfully." +msgstr "Pasta: %s removido com sucesso." + +#: views.py:103 +#, python-format +msgid "Folder: %(folder)s delete error: %(error)s" +msgstr "Pasta: %(folder)s erro ao deletar: %(error)s " + +#: views.py:114 +#, python-format +msgid "Are you sure you with to delete the folder: %s?" +msgstr "Tem certeza de que deseja excluir a pasta: %s?" + +#: views.py:131 +#, python-format +msgid "documents in folder: %s" +msgstr "documentos na pasta: %s" + +#: views.py:157 views.py:191 +msgid "Must specify a new folder or an existing one." +msgstr "Deve especificar uma nova pasta ou um já existente." + +#: views.py:162 views.py:196 +#, python-format +msgid "Document: %(document)s added to folder: %(folder)s successfully." +msgstr "Documento: %(document)s adicionados à pasta: %(folder)s com sucesso." + +#: views.py:165 views.py:199 +#, python-format +msgid "Document: %(document)s is already in folder: %(folder)s." +msgstr "Documento: %(document)s já está na pasta: %(folder)s ." + +#: views.py:186 +#, python-format +msgid "Folder \"%s\" created successfully" +msgstr "Pasta \"%s\" criada com sucesso" + +#: views.py:207 +#, python-format +msgid "add document \"%s\" to a folder" +msgstr "adicionar documento \"%s\" à uma pasta" + +#: views.py:223 +#, python-format +msgid "folders containing: %s" +msgstr "pastas contendo: %s" + +#: views.py:239 +msgid "Must provide at least one folder document." +msgstr "Deve fornecer pelo menos um documento da pasta." + +#: views.py:249 +#, python-format +msgid "Document: %s removed successfully." +msgstr "Documento: %s removido com sucesso." + +#: views.py:251 +#, python-format +msgid "Document: %(document)s delete error: %(error)s" +msgstr "Documento: %(document)s erro ao deletar: %(error)s " + +#: views.py:265 +#, python-format +msgid "" +"Are you sure you wish to remove the document: %(document)s from the folder " +"\"%(folder)s\"?" +msgstr "" +"Tem certeza de que deseja remover o documento: %(document)s da pasta " +"\"%(folder)s\"?" + +#: views.py:268 +#, python-format +msgid "" +"Are you sure you wish to remove the documents: %(documents)s from the folder" +" \"%(folder)s\"?" +msgstr "" +"Tem certeza de que deseja remover os documentos: %(documents)s da pasta " +"\"%(folder)s\"?" + +#: templates/folders_help.html:3 +msgid "What are folders?" +msgstr "Quais são as pastas?" + +#: templates/folders_help.html:4 +msgid "" +"These folders can also be described as user folders. They are a way to let " +"individual users create their own document organization methods. Folders " +"created by one user and the documents contained by them don't affect any " +"other user folders or documents." +msgstr "" +"Estas pastas também podem ser descritas como pastas de usuário. Elas são uma" +" maneira de permitir que os usuários individuais criem os seus próprios " +"métodos de organização do documento. Pastas criadas por um usuário e os " +"documentos contidos nelas não afetam todas as pastas de outros usuários ou " +"documentos." + +#: templatetags/folder_tags.py:17 +msgid "Add document to a folder" +msgstr "Adicionar documento à uma pasta" + + diff --git a/apps/grouping/locale/pt/LC_MESSAGES/django.mo b/apps/grouping/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..35b5bd5ea866d41121433e06598e6a4f2e93c892 GIT binary patch literal 3760 zcmaKuO^h7H6~_w$29^+rA%H^&&n8QDvAbv1!qPJKk`S+vEU|b63q%}XYo}{_D|A;i zRn@aLN+chUP!x$oNaT`BY$85{I3eJGI1LBGDUmqj5FsVvf&>yrq~yT=^~X%x8fZ<= zudC++W8lB{;0xEqD}`7FKL&pW?zu{cgWv)1W^fg} z8vG5o7knCIT?$+RUj{z_KLTF>&p{Zf#MKbK7Q7C;1KbDx5RAba!4>cpa1Fc@+yZX^ z&wpg za=u;yIj$E#_UC=@F7O}VkHD`%US|)2$9CTUvOW7je!mP7cmli$OhBGjg7}CR@x}3e z1?2et9prg$ft<(pK#uRHAlvgf$o_o;vcFegatz)H;+1$9WVxq6)@MMJk|;rr@ADwr z`FoJ<`~%2-zX5U____@@&tW}3$K77@c(}D08~}MejtO6fYgD;hz%%>Gc_Z9x{~~Vo zi!ZLX%dbOt!TxZp_u=LkaUQs4`C^+n?g)1kFZS(j-1p$-II%BW*T2Bc*S)x#Em_5D zKgR4QU%Vg1iA)clC2J_`DAKu16>VEb+hvxK*Uu{&X|+psyZU`wJ0GZkP%KvMu*{VS zlsa1$^jxXjSyIkfH=ubhPMMK%!B^8Vo9bb!!xqZPU|lR8u_T8OausAEgJgr{Na{>(Ws0Py zk#w4$J#Dr!nAE<5GirTkhFo-=$41HvE~)2AnNhIa=UHYzG<6Dv z#(9>8#k*s|Hted>l>~y}R9a>dKTb-Qr_TK0JC;Qaa>>+dP6n4OXjIBuKo}c@b;1Y9 zySa*O=XsX?IwkAQa)m{wlIRKLcz+FOO`es8POh#!HutD1tP9baPjwRgx=ekvVF$Dm zLNVy|Qe?2)iibAuIqR`&tn1}Gx2L@?m7iNby%C+@&_Qjq3OfgMq`$Nj_3w|4+)qo( zgZqv~{rmcT2u6>pk>=&Qax8j;`bP)-qlfyq<{p+lL>o>TpYho=AeF;tYrK`%VRSrE zqquqXt2D=+X5${fG?SJ%v7!wn^8u~Hr80$qiWVAIc6WEk_>z97!7x%^D3-7zVT4B zJeA}1wv~%cnxRd!Ne8sNrNhM90Tp3xJu98eqKB-@aSE8C8v2zZ$Ebc>Suk{9g_aiQ zxJBS}Cxa7>`$LWf;3VOAN0cbYT$&w=%Ef7bV~z@^bEP3rjL)aq$XJ|2Q{dS+DtwvY zV1!)i$^u6_Wq!!05I!C=+ z(>(aC6Aw1+gN4U$*6jnrwF9;_)l%I-9$~Sa@%h>~UpEq+Sl`M|Y$X}6#o-yYLc0xX zgB+&g(9bk4gYY<&HO9)0ul4+n{Whl4zUdsiU^g(Nd|>5?_JuX$w?_)Q9pz`MhB7{1 zjSv3!+#l;hnx`Km1?MbMp%R&(fG^dTQ+Mj-#4Q}@r+lz5y6G#DplqrZc?*{H^QR2h zn^4@O5AEeNdP?AT9YebfhB_UFHeupsqdUl$X0;fCL8@vj<2Un`vyPmmnx;+I@_CF3 zgE2E-c5`t_x4{hjg{bCs+6{>?emj&IC&7#_pz&C-Be!&>(dw9^|1Q(qAGmuNV4-d z%Qgt&XhYY5LTq@JuE(~-)~PjcEuKeVi}s;g{!L^0zTduMU2Sk)@zRxz_*;p`&Z^vu Z5-ALa&6cQyT#a9^, 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"PO-Revision-Date: 2011-11-02 05:05+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:8 +msgid "group actions" +msgstr "ações do grupo" + +#: __init__.py:9 +msgid "groups" +msgstr "grupos" + +#: forms.py:55 +msgid "Pages" +msgstr "Páginas" + +#: forms.py:56 +msgid "Select" +msgstr "Selecionar" + +#: forms.py:61 +msgid "group document" +msgstr "agrupar documento" + +#: forms.py:66 +msgid "Click on the image for full size view of the first page." +msgstr "Clique na imagem para ver em tamanho grande a primeira página." + +#: literals.py:7 +msgid "and" +msgstr "e" + +#: literals.py:8 +msgid "or" +msgstr "ou" + +#: literals.py:12 +msgid "is equal to" +msgstr "é igual a" + +#: literals.py:13 +msgid "is equal to (case insensitive)" +msgstr "é igual a (case insensitive)" + +#: literals.py:14 +msgid "contains" +msgstr "contém" + +#: literals.py:15 +msgid "contains (case insensitive)" +msgstr "contém (case insensitive)" + +#: literals.py:16 +msgid "is in" +msgstr "está em" + +#: literals.py:17 +msgid "is greater than" +msgstr "é maior do que" + +#: literals.py:18 +msgid "is greater than or equal to" +msgstr "é maior ou igual a" + +#: literals.py:19 +msgid "is less than" +msgstr "é inferior a" + +#: literals.py:20 +msgid "is less than or equal to" +msgstr "é menor ou igual a" + +#: literals.py:21 +msgid "starts with" +msgstr "começa com" + +#: literals.py:22 +msgid "starts with (case insensitive)" +msgstr "começa com (case insensitive)" + +#: literals.py:23 +msgid "ends with" +msgstr "termina com" + +#: literals.py:24 +msgid "ends with (case insensitive)" +msgstr "termina com (case insensitive)" + +#: literals.py:25 +msgid "is in regular expression" +msgstr "está em expressão regular" + +#: literals.py:26 +msgid "is in regular expression (case insensitive)" +msgstr "está em expressão regular (case insensitive)" + +#: models.py:10 +msgid "title" +msgstr "título" + +#: models.py:11 +msgid "dynamic title" +msgstr "título dinâmico" + +#: models.py:12 models.py:33 +msgid "enabled" +msgstr "habilitado" + +#: models.py:20 models.py:25 +msgid "document group" +msgstr "grupo de documentos" + +#: models.py:21 +msgid "document groups" +msgstr "grupos de documentos" + +#: models.py:26 +msgid "The inclusion is ignored for the first item." +msgstr "A inclusão é ignorada para o primeiro item." + +#: models.py:27 +msgid "foreign document data" +msgstr "dados de documentos estrangeiros" + +#: models.py:27 +msgid "" +"This represents the metadata of all other documents. Available objects: " +"`document.` and `metadata.`." +msgstr "" +"Isto representa os metadados de todos os outros documentos. Objetos " +"disponíveis: `document. ` e ` metadata. `." + +#: models.py:31 +msgid "expression" +msgstr "expressão" + +#: models.py:31 +msgid "" +"This expression will be evaluated against the current selected document. " +"The document metadata is available as variables `metadata` and document " +"properties under the variable `document`." +msgstr "" +"Esta expressão será avaliada em relação ao documento atual selecionado. Os " +"metadados do documento estão disponíveis como variáveis \"​metadados \" e " +"propriedades do documento em variáveis `documento`." + +#: models.py:32 +msgid "negated" +msgstr "negada" + +#: models.py:32 +msgid "Inverts the logic of the operator." +msgstr "Inverte a lógica do operador." + +#: models.py:36 +msgid "not" +msgstr "não" + +#: models.py:39 +msgid "group item" +msgstr "item do grupo" + +#: models.py:40 +msgid "group items" +msgstr "itens do grupo" + +#: views.py:21 +msgid "No action selected." +msgstr "Nenhuma ação selecionada." + +#: views.py:34 +#, python-format +msgid "documents in group: %(group)s" +msgstr "documentos no grupo: %(group)s " + +#: views.py:50 +#, python-format +msgid "Document group query error: %s" +msgstr "Erro na consulta de grupo do documento: %s" + +#: views.py:61 +#, python-format +msgid "document groups (%s)" +msgstr "grupos do documento (%s)" + +#: views.py:75 +msgid "There no defined groups for the current document." +msgstr "Não há grupos definidos para o documento atual." + + diff --git a/apps/history/locale/pt/LC_MESSAGES/django.mo b/apps/history/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c1895c3b292ed1e6cceaa56f22a099bd84c26f49 GIT binary patch literal 1475 zcmZXT%Zd|06o$+D7#%O;1-wDIP!z3nk{NZT$A~%;QJ7#Dqx(v_CTU4`HC2^~0b$-i zaNz?8x|pr*TnXwz5!|^FU%-tn+_~^S-JKY)p!>@?IhVgrpZ-3x{TahKit8k<&$v$E zdb|ZUoSz{5_Y2$(PHkmu8k`0T;0bUScoy6V7D0-;1X7$2?gnpz`@vO^@>;n+0x5q0 z?gKYK>h}cP3%&%Y&MT1Wz6Gh?2ax)G0V)40_z4=ngU4ZSBADXe<2D0+1gZWvkn(?k zl>Zyt0saB^fLmdZzJ1_9@EAz`3%UOaNclIx!{7=?^O7LNZ-CVADTtEn1xWFmAoY6< zPJwU0e8j1rV(4tcMLG|WfkQPB%8rnML$zr>2gtx7tu!anLWg?Np&se;fHXgv5zU|7 zXt$NM+;tW2hSq5_Z6ypqvbQHn-d`QS5dW$?mous0W$AoP8=s%CEC|~!)Uh-}mNg8O&3}zNL$0Xv*qxi>5+k9hmPy01SV9WjY$Dr= z=}e&QM-eq_7)^r3oj^QL#zKbA>vAY#UR$o;E3B$S8z<_v69(dDzhgyH`@HL1;(J~v zblrZd*w&F}w3Q~*#)~M|3$5)dTWH*EiY22YJ)NNW`MgppmqlqoR2F!7-k-ZHN^_+W z0>!FY52^iR9EHyE(yU*pTqxlbR-|>JX=H4B5--N*DuQSoTP=;U{A!@qi@EE1C&D`- zao3O*clxrUL{rJg=M6kkzXO4apUWR*Fc=ga)eYCwqhhR_mt=#nUXneNP(frphXP*W zyz_)Nz>baPouJZEv0`?YbD-D, 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"PO-Revision-Date: 2011-11-03 03:22+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:6 +msgid "Access the history app" +msgstr "Acessar a história do app" + +#: __init__.py:8 +msgid "History" +msgstr "História" + +#: __init__.py:12 models.py:69 +msgid "history" +msgstr "história" + +#: models.py:16 +msgid "namespace" +msgstr "namespace" + +#: models.py:17 +msgid "name" +msgstr "nome" + +#: models.py:25 models.py:34 +msgid "history type" +msgstr "tipo de história" + +#: models.py:26 +msgid "history types" +msgstr "tipos de história" + +#: models.py:30 +msgid "date time" +msgstr "hora, data" + +#: models.py:35 +msgid "dictionary" +msgstr "dicionário" + +#: models.py:70 +msgid "histories" +msgstr "histórias" + +#: views.py:23 +msgid "history events" +msgstr "eventos da história" + +#: views.py:26 views.py:60 +msgid "date and time" +msgstr "data e hora" + +#: views.py:30 +msgid "object" +msgstr "objeto" + +#: views.py:34 views.py:64 +msgid "summary" +msgstr "sumário" + +#: views.py:56 +#, python-format +msgid "history events for: %s" +msgstr "eventos de história para: %s" + +#: views.py:81 +msgid "Date" +msgstr "Data" + +#: views.py:82 +msgid "Time" +msgstr "Tempo" + +#: views.py:83 +msgid "Object" +msgstr "Objeto" + +#: views.py:84 +msgid "Event type" +msgstr "Tipo de evento" + +#: views.py:85 +msgid "Event details" +msgstr "Detalhes do evento" + +#: views.py:89 +#, python-format +msgid "details for: %s" +msgstr "detalhes para: %s" + + diff --git a/apps/main/locale/pt/LC_MESSAGES/django.mo b/apps/main/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c8d624036c903abb1fc4e62fd7c3a3e2a50ebc4b GIT binary patch literal 2563 zcma)+ONbmr7{@Cb9~t8-z8@=JG=W{Ry)!!|A(^=1W_J^UyXAHslZ@M1&|F6by`~5D~ly;z7K5(2FNM`2Tul_7MqMboZ~TyXvd&QT6|M z-|i0u+AFwU#=Uo!5M$uqAh(b26XGH83b+rvKInf99zy?HunztKz6!o}zYu%CQ{a=} z68H|-1Rnu!fe(Opzz4w}zz@J5!RNsB-9kJLz6b6HFN2SPpMe$d8xWVcjmKW_dyxJ6 z3FQC3g1pY}ATIIOpwEjwf&N~Q*Bu$~0Lb$WfwvL!QIPHJ!s97$56JxyJR_LMuDI+=;-IB0A9khE?c9UL_>Q)9kSzIAjedCYm+yrAMR zcK6u+=kx!2$~~2TFM~?MP5l4w`jdEE#Ia8(}1*_c&F{@>2tPeW&V&10O@DrI5i@7r7 zZQ)`yPO}%JNi8*{hiTPDDx5Vsro_ettOd%XktuxJ(4j?f;e*X6Q$Z#&$Z^spQJ1ty z$0^7ZYv5&FBSf!U2R-}`3Kii@lQan}&MZ?bbJ^60ODiuH%fRKoa?9w_fvExi3W=_XhC+Rp}E+6J{k$Q#vaiWC>kiP&aUXT5aVx@yLAtJ?cQ`O4DbYBb|ina*ey z`DswSHaQv9jz{(5GqjBT=1+!Kb%UB&5yGy@_ciEwC%1RVA|qEg_^Lg@cMl2cc|iY)k~U ztJl?~38O+4N0Srdt9d`BNF|xC1{kR3p*mJsII}Rfm9oi+T7{1X@*Ayoa|9aHB^YU= zC?_axN#|9VT3bC89orhm>#Zvn&6(IH*nJH;*3@Cs+Xm&KveYh|Y)7Z8%b)}%FS~xK zeuDb1Q=^9VPtoL9MGW<2#WtNH<%1gPixktnYrQY9eFvmmI{9A;LwAqfp)qt11=%_4 z-h)i0QC$7IUl{y&Ie)%wF?F|MM(7Z?||wOU3XbiwR;A wtX1q_sa(*ve#m|G+RQi1N$8g;aDK|D1y`l4&i0SPs+TgR4MGtp!#0=x0q+*z`2YX_ literal 0 HcmV?d00001 diff --git a/apps/main/locale/pt/LC_MESSAGES/django.po b/apps/main/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..d3419bfb68 --- /dev/null +++ b/apps/main/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,149 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"PO-Revision-Date: 2011-11-02 02:25+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:15 +msgid "maintenance" +msgstr "manutenção" + +#: __init__.py:16 +msgid "statistics" +msgstr "estatísticas" + +#: __init__.py:17 +msgid "diagnostics" +msgstr "diagnósticos" + +#: __init__.py:18 +msgid "sentry" +msgstr "sentinela" + +#: __init__.py:19 +msgid "admin site" +msgstr "site de administação" + +#: __init__.py:30 +msgid "home" +msgstr "casa" + +#: __init__.py:32 +msgid "search" +msgstr "pesquisa" + +#: views.py:41 +msgid "maintenance menu" +msgstr "menu de manutenção" + +#: views.py:53 +msgid "Statistics" +msgstr "Estatísticas" + +#: views.py:61 +msgid "Diagnostics" +msgstr "Diagnósticos" + +#: conf/settings.py:12 +msgid "" +"Controls whether the search functionality is provided by a sidebar widget or" +" by a menu entry." +msgstr "" +"Controla-se a funcionalidade de pesquisa é fornecido por um widget da barra " +"lateral ou por uma entrada de menu." + +#: templates/about.html:5 +msgid "About this program" +msgstr "Sobre este programa" + +#: templates/about.html:9 templates/verbose_login.html:4 +msgid "Version" +msgstr "Versão" + +#: templates/base.html:28 +msgid "(DEBUG)" +msgstr "(DEBUG)" + +#: templates/base.html:117 +msgid "User" +msgstr "Usuário" + +#: templates/base.html:119 +msgid "Anonymous" +msgstr "Anônimo" + +#: templates/base.html:122 +msgid "User details" +msgstr "Detalhes do usuário" + +#: templates/base.html:139 +msgid "Login" +msgstr "Login" + +#: templates/base.html:139 +msgid "Logout" +msgstr "Sair" + +#: templates/base.html:219 +msgid "Secondary menu" +msgstr "Menu secundário" + +#: templates/base.html:236 +#, python-format +msgid "Actions for %(name)s: %(navigation_object)s" +msgstr "Ações para %(name)s: %(navigation_object)s " + +#: templates/base.html:238 templates/base.html.py:270 +#, python-format +msgid "Actions for: %(navigation_object)s" +msgstr "Ações para: %(navigation_object)s " + +#: templates/base.html:241 +msgid "Available actions" +msgstr "Ações disponíveis" + +#: templates/base.html:253 templates/base.html.py:285 +msgid "Related actions" +msgstr "Ações relacionadas" + +#: templates/base.html:268 +#, python-format +msgid "Actions for %(object_name)s: %(navigation_object)s" +msgstr "Ações para %(object_name)s : %(navigation_object)s " + +#: templates/base.html:273 +msgid "Actions" +msgstr "Ações" + +#: templates/base.html:298 +msgid "Other available actions" +msgstr "Outras ações disponíveis" + +#: templates/project_description.html:6 +msgid "" +"Open source, Django based electronic document manager with custom metadata, " +"indexing, tagging, file serving integration and OCR capabilities" +msgstr "" +"Código Aberto, Django gestão de documentos eletrônicos com metadados " +"personalizados, indexação, etiquetagem, a integração do serviço de arquivos " +"e recursos de OCR" + +#: templates/project_description.html:15 +msgid "Released under the GPL V3 License" +msgstr "Liberado sob a licença GPL V3" + + diff --git a/apps/metadata/locale/pt/LC_MESSAGES/django.mo b/apps/metadata/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..91875b033d9e6ad1ec6da81bf61ceb129bd154d1 GIT binary patch literal 6192 zcma)=Yit}>6@YJPD6I<(6bj|haszd2x7l4gahhb4v`u2Cr0FJU>O>$O$$015o-jMJ znTH<{@B_q;N+6+1NT?Nv5Q!p65UM~tet^XOtN2mi2Si9!MZ`lOUJ?%piN|;5wKMCr z(~<9fJ9E#y_uO;NJ#*GC-?`=Uit9M-U9{*mN*VZ*EqrjDzeTCLp#|@Pm*5!u9DE1- z9^3|h4&MX+0Y(1q*D3XOI0fGVk3$)M9`1n4a67yLWu6z|z3?~i-EhmTO5F+XgKvg= z;5pHSx8GNRODa64?l zi%{nO5foEghipy#9*TZ{fn#v%?MjWqJ@5&59!|m+pvYf`uZ4er_rSkG+1DMfPxrMA z@~3w5!IbJS#007Z-w4k@vD*Ta`920^U!Q_+f}er1uP?#3!f(L0!5$R7f0gyW0&%VS zb9VnXDD(Xf%6zvliLAF3@wFw;g`b2n-_ua`{cP5M zIlKQVeDNmqgyQ!V21&d;4IhBdLy4nbz#Z`4unxyiPM)8I5+`dJzW`;P@4_kgGuVJz zP+r4ncpp3iN8u$Xe)uw!`1~RC;4h*0@liHA0lRP(J_DbCuRzgnC&5U_sE@#DxCF)S zUxe?3--b-3UV_`2*p1C&7R*(kcj?wWxNMU|0onY+z$z>B!>|)No;~dXPH+n@uyt-XrjYWx#1E! zjnZU4H`7G#H+FqK(?fYnlY2s6f zJF$iMxk-}?wlgeD5ru#Si+LN#Mt z!;nI&M11gJChD`LNXMbk-L+`R_jF)F6D%8BulRu-?$Caq!>-jfVO`B+8`F+wn^hC) zxQl@h4dXTf;X>@XYjrhiJ5k9DV_~65+EwVaz}yvcBqN7*r?#l}C)=t%N;fs@MJ7Ol z5J!27V)S{V&9ddjqHSI4*;T94bxl)$kc|iRMH8J9-OqVe$Ba*C(Mvkmr#>SBX#j+E z%XP;mK3peeZm@(%1c7W%Tp>#2`^;^(Um`D+G1yB)hHhMsj^{%sLI#Z+nRfzjq=N&~ z@s}&3#Rde|cs|`Zc`y;`g~0C=YKTC8-h8sepBrl1$_|9eza)mrXJJ2DcCs!U3hBgO z<-54spGuUh-VK|rDlu%Amdkmu*K}9n*o(x4eGMyHE;QN5VCAURmTj}M()k@QU@HzI z7R48~Aw_7{SUm7OQ!HOsC#;T9r^R78NDm9}5) zO(LiID6xmaE5-b(U1UmSn*}R&qnv%2tfP3q21upJDK#qJL-C~$>pw~2G#Auz#~Du+ zW12iarp_v!%dt@M(Vx$;l_Ocovs^7%N4dWLQO-jrKV$h9Ib(PxEP6!a%8lmCb=E(r zjwszFJ1C}4R8@%z13{qzb1`-TW2?xCT%(e4l0=O<75MT-tR1s!XH5|DCT;4LwPtyG zcBb{@$Z6B{gQ(UD7ahBHI9?2EbAD4VMNzleXe>I>QaoR8`<+JMhgRVDL8BvM8%`L; zCLB3+a;}!V+nBaCL&k3Eos&~jwaI<8o%{6E-sbd!waMwpNd#-B&9WoQm*qrsm!8_) z+%@&UB-hB}oW$B(V0ocyMPkjsc)Ztr*I71BVCe(t{XB2}M;1HO2%_9W4D%LaYthu^ zjMZuCQ*0?-L_wp+v#qSGtkff!*I6*DbW3TsI?>poc+X=hA z*Sm^Q(u~oPV#puTagut7Oqf+jwjYk6c!v_jTZ&0yX?a9{S{^xV9ApJL4LPJqbBN`K z#ivZlMIxt5ft2T^M6_Qp5kee;&4p1mJA;0@ha-W*(w@J}vTfhH5POmAsI&xiR9{3C z80el|ZMz(UjYj9)Lq?wHUGdY(%5tscfa)==t*9!)tlFZyinXD>>OJT4O7DHv!xrL; z{%b=D&e(FDOP1J!$dqb}V#}}Vq@1c)mT?u+&XRNxU|`?+_Mk~`B$Qe*liI+DS?>@l z%s8BQQOnY1Ro=>>n1$lZP@<7e9L!OtA~RHExOiwq*0ngMV#~O9nS`MUwqbRd#K)^! z4nZlOw8dPRe|uMl*uJRJ#3RObI4US#4j-N9RzzK;Dp*&p$$Dv)4fMKLANKwwocj?i z0{KFD0Vp%(@e$~a_s~k-D@0IMK}jrSR?VmMrGm3uUP|jCO_8OB9v$CXa2Clm>+PcE z2G8>PCrO1jxY&BJp@zB8yPVf}{5UFEsbVBuf0ff&Sq{S9r6abPbNM-BsBm~ad!|h+ zcgdBUG7rO+k04c_UsQcTR<4zk;oy-?3%@izs;Ou&81mw816c-FbD?--V8$dEojkGh zzP{>2l4jTacGxToPxjYI%Rx!^4DjTr$a~=;>FZ*QiSis&SBJ8c7DzGZ^GPqdAi?J0$Pq9_=q1QX%H4UUe-yKta`CGJle>ddjKg98V0TvV5Tm, 2011. +# Renata Oliveira , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"PO-Revision-Date: 2011-11-03 15:31+0000\n" +"Last-Translator: renataoliveira \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:12 +msgid "Edit a document's metadata" +msgstr "Editar metadados de um documento" + +#: __init__.py:13 +msgid "Add metadata to a document" +msgstr "Adicionar metadados a um documento" + +#: __init__.py:14 +msgid "Remove metadata from a document" +msgstr "Remover metadados de um documento" + +#: __init__.py:15 +msgid "View metadata from a document" +msgstr "Ver os metadados de um documento" + +#: __init__.py:17 +msgid "Edit metadata types" +msgstr "Editar tipos de metadados" + +#: __init__.py:18 +msgid "Create new metadata types" +msgstr "Criar novos tipos de metadados" + +#: __init__.py:19 +msgid "Delete metadata types" +msgstr "Excluir tipos de metadados" + +#: __init__.py:20 +msgid "View metadata types" +msgstr "Ver tipos de metadados" + +#: __init__.py:22 +msgid "Edit metadata sets" +msgstr "Editar conjuntos de metadados" + +#: __init__.py:23 +msgid "Create new metadata sets" +msgstr "Criar novos conjuntos de metadados" + +#: __init__.py:24 +msgid "Delete metadata sets" +msgstr "Excluir conjuntos de metadados" + +#: __init__.py:25 +msgid "View metadata sets" +msgstr "Ver conjuntos de metadados" + +#: __init__.py:27 forms.py:94 +msgid "Metadata" +msgstr "Metadados" + +#: __init__.py:33 +msgid "Metadata setup" +msgstr "Configuração de metadados" + +#: __init__.py:44 __init__.py:46 +msgid "edit metadata" +msgstr "editar metadados" + +#: __init__.py:45 +msgid "metadata" +msgstr "metadados" + +#: __init__.py:47 __init__.py:48 +msgid "add metadata" +msgstr "adicionar metadados" + +#: __init__.py:49 __init__.py:50 +msgid "remove metadata" +msgstr "remover metadados" + +#: __init__.py:52 models.py:33 views.py:294 +msgid "metadata types" +msgstr "tipos de metadados" + +#: __init__.py:53 __init__.py:58 +msgid "edit" +msgstr "editar" + +#: __init__.py:54 __init__.py:59 +msgid "delete" +msgstr "excluir" + +#: __init__.py:55 __init__.py:60 +msgid "create new" +msgstr "criar novo" + +#: __init__.py:57 views.py:394 +msgid "metadata sets" +msgstr "conjuntos de metadados" + +#: __init__.py:62 models.py:92 +msgid "default metadata" +msgstr "metadados padrão" + +#: classes.py:12 +#, python-format +msgid "'metadata' object has no attribute '%s'" +msgstr "Objeto 'metadados' tem nenhum atributo '%s'" + +#: forms.py:28 +msgid "required" +msgstr "exigido" + +#: forms.py:54 +msgid "id" +msgstr "id" + +#: forms.py:55 +msgid "Name" +msgstr "Nome" + +#: forms.py:57 +msgid "Value" +msgstr "Valor" + +#: forms.py:58 +msgid "Update" +msgstr "Atualizar" + +#: forms.py:64 +msgid "Metadata type" +msgstr "Tipo de metadados" + +#: forms.py:68 +msgid "Remove" +msgstr "Remover" + +#: forms.py:86 +msgid "Metadata sets" +msgstr "Conjuntos de metadados" + +#: models.py:9 +#, python-format +msgid " Available models: %s" +msgstr "Modelos disponíveis: %s" + +#: models.py:10 +#, python-format +msgid " Available functions: %s" +msgstr "Funções disponíveis: %s" + +#: models.py:17 +msgid "name" +msgstr "nome" + +#: models.py:17 +msgid "Do not use python reserved words, or spaces." +msgstr "Não use palavras reservadas python, ou espaços." + +#: models.py:18 models.py:40 +msgid "title" +msgstr "título" + +#: models.py:20 +msgid "default" +msgstr "padrão" + +#: models.py:21 +#, python-format +msgid "Enter a string to be evaluated.%s" +msgstr "Digite uma expressão a ser avaliada. %s" + +#: models.py:23 +msgid "lookup" +msgstr "pesquisa" + +#: models.py:24 +#, python-format +msgid "" +"Enter a string to be evaluated. Example: [user.get_full_name() for user in " +"User.objects.all()].%s" +msgstr "" +"Digite uma expressão a ser avaliada. Exemplo: [user.get_full_name()para o " +"usuário em User.objects.all()]. %s" + +#: models.py:32 models.py:57 views.py:331 views.py:376 +msgid "metadata type" +msgstr "tipo de metadados" + +#: models.py:47 models.py:48 models.py:56 views.py:446 views.py:491 +msgid "metadata set" +msgstr "conjunto de metadados" + +#: models.py:64 +msgid "metadata set item" +msgstr "conjunto de item de metadados" + +#: models.py:65 +msgid "metadata set items" +msgstr "conjunto de itens de metadados" + +#: models.py:73 +msgid "document" +msgstr "documento" + +#: models.py:74 +msgid "type" +msgstr "tipo" + +#: models.py:75 views.py:283 +msgid "value" +msgstr "valor" + +#: models.py:81 models.py:82 +msgid "document metadata" +msgstr "metadados do documento" + +#: models.py:90 views.py:559 +msgid "document type" +msgstr "tipo de documento" + +#: models.py:91 +msgid "default metadata sets" +msgstr "padrão de metadados definidos" + +#: models.py:98 +msgid "document type defaults" +msgstr "padrões de tipo de documento" + +#: models.py:99 +msgid "document types defaults" +msgstr "padrões de tipos de documentos" + +#: views.py:38 views.py:193 +msgid "The selected document doesn't have any metadata." +msgstr "O documento selecionado não tem qualquer metadado." + +#: views.py:43 views.py:131 views.py:199 +msgid "Must provide at least one document." +msgstr "Deve fornecer pelo menos um documento." + +#: views.py:78 views.py:234 +#, python-format +msgid "Error deleting document indexes; %s" +msgstr "Erro ao excluir índices de documento; %s" + +#: views.py:90 +#, python-format +msgid "Error editing metadata for document %(document)s; %(error)s." +msgstr "Erro de edição de metadados para documento %(document)s; %(error)s." + +#: views.py:93 +#, python-format +msgid "Metadata for document %s edited successfully." +msgstr "Metadados para o documento %s alterados com sucesso." + +#: views.py:98 views.py:251 +#, python-format +msgid "Error updating document indexes; %s" +msgstr "Erro ao atualizar índices de documento; %s" + +#: views.py:100 views.py:253 +msgid "Document indexes updated successfully." +msgstr "Índices de documento atualizados com sucesso. " + +#: views.py:111 +#, python-format +msgid "Edit metadata for document: %s" +msgstr "Editar os metadados do documento: %s" + +#: views.py:113 +#, python-format +msgid "Edit metadata for documents: %s" +msgstr "Editar os metadados do documentos: %s" + +#: views.py:148 +#, python-format +msgid "" +"Metadata type: %(metadata_type)s successfully added to document " +"%(document)s." +msgstr "" +"Tipo de metadados: %(metadata_type)s adicionado com sucesso para documento " +"%(document)s." + +#: views.py:151 +#, python-format +msgid "" +"Metadata type: %(metadata_type)s already present in document %(document)s." +msgstr "" +"Tipo de metadados: %(metadata_type)s já presente no documento %(document)s " +"." + +#: views.py:175 +#, python-format +msgid "Add metadata type to document: %s" +msgstr "Adicionar tipo de metadados ao documento: %s" + +#: views.py:177 +#, python-format +msgid "Add metadata type to documents: %s" +msgstr "Adicionar tipo de metadados aos documentos: %s" + +#: views.py:242 +#, python-format +msgid "" +"Successfully remove metadata type: %(metadata_type)s from document: " +"%(document)s." +msgstr "" +"Tipos de metadados removidos com êxito: %(metadata_type)s do documento: " +"%(document)s." + +#: views.py:245 +#, python-format +msgid "" +"Error removing metadata type: %(metadata_type)s from document: %(document)s." +msgstr "" +"Erro ao remover tipo de metadados: %(metadata_type)s do documento: " +"%(document)s." + +#: views.py:264 +#, python-format +msgid "Remove metadata types from document: %s" +msgstr "Remover tipos de metadados do documento: %s" + +#: views.py:266 +#, python-format +msgid "Remove metadata types from documents: %s" +msgstr "Remover tipos de metadados dos documentos: %s" + +#: views.py:281 +#, python-format +msgid "metadata for: %s" +msgstr "metadados para: %s" + +#: views.py:298 +msgid "internal name" +msgstr "nome interno" + +#: views.py:319 +msgid "Metadata type edited successfully" +msgstr "Tipo de metadados editados com sucesso" + +#: views.py:322 +#, python-format +msgid "Error editing metadata type; %s" +msgstr "" + +#: views.py:328 +#, python-format +msgid "edit metadata type: %s" +msgstr "" + +#: views.py:343 +msgid "Metadata type created successfully" +msgstr "" + +#: views.py:349 +msgid "create metadata type" +msgstr "" + +#: views.py:368 +#, python-format +msgid "Metadata type: %s deleted successfully." +msgstr "" + +#: views.py:370 +#, python-format +msgid "Metadata type: %(metadata_type)s delete error: %(error)s" +msgstr "" + +#: views.py:381 +#, python-format +msgid "Are you sure you wish to delete the metadata type: %s?" +msgstr "" + +#: views.py:398 +msgid "members" +msgstr "" + +#: views.py:442 +#, python-format +msgid "non members of metadata set: %s" +msgstr "" + +#: views.py:443 +#, python-format +msgid "members of metadata set: %s" +msgstr "" + +#: views.py:458 +msgid "Metadata set created successfully" +msgstr "" + +#: views.py:464 +msgid "create metadata set" +msgstr "" + +#: views.py:483 +#, python-format +msgid "Metadata set: %s deleted successfully." +msgstr "" + +#: views.py:485 +#, python-format +msgid "Metadata set: %(metadata_set)s delete error: %(error)s" +msgstr "" + +#: views.py:496 +#, python-format +msgid "Are you sure you wish to delete the metadata set: %s?" +msgstr "" + +#: views.py:554 +#, python-format +msgid "non members of document type: %s" +msgstr "" + +#: views.py:555 +#, python-format +msgid "members of document type: %s" +msgstr "" + +#: templates/metadata_set_help.html:3 +msgid "What are metadata sets?" +msgstr "" + +#: templates/metadata_set_help.html:4 +msgid "" +"A metadata set is a group of one or more metadata types. Metadata sets are " +"useful when creating new documents; selecing a metadata set automatically " +"attaches it's member metadata types to said document." +msgstr "" + +#: templates/metadata_type_help.html:3 +msgid "What are metadata types?" +msgstr "" + +#: templates/metadata_type_help.html:4 +msgid "" +"A metadata type defines the characteristics of a value of some kind that can" +" be attached to a document. Examples of metadata types are: a client name, " +"a date, or a project to which several documents belong. A metadata type's " +"name is the internal identifier with which it can be referenced to by other " +"modules such as the indexing module, the title is the value that is shown to" +" the users, the default value is the value an instance of this metadata type" +" will have initially, and the lookup value turns an instance of a metadata " +"of this type into a choice list which options are the result of the lookup's" +" code execution." +msgstr "" + + diff --git a/apps/navigation/locale/pt/LC_MESSAGES/django.mo b/apps/navigation/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a75c87ed160cfaf0604ba134aed5fae1a4ecf269 GIT binary patch literal 679 zcmYjPy>1jS5H=7fwu1s1kS1LsOl8Y3H6{qB&qH%U7dyaPP#rEDMEj$Aa z4Im0CN}k|49)f3Kd>4_7^zC?Oz8TMq=kJ4!&x~Y)@R+bixJ!6X2+|Sm6Fv|g5$iH@-|*7L&Es^YKu+VQCoF!R0>Nm466>rdm- zw23uNT4ij~hS)?o*Q1LjZ>D_Tq6}5=1L;vfo@N_(DNNVBtdUPq zwgM*9QeRVn2wPXJEEbE{hrH?xFJg^8>DGgBNw@BaW7WFEQ-Y-P$#zs6731rXWpNtq z8|_h3eU}|I>hXe-G*anZC}+|-^rN@aLq5Fbh5OFX^06*WrF1P|c&hyWY6WyYnl!zY z4L>xtbpmv^`gNmx7uLtomWIs{WZMyYx%|2OVW2{oFTc}cxbWWEt?a*PI^, 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"PO-Revision-Date: 2011-11-02 01:24+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:14 +msgid "Multi item action" +msgstr "Ação de vários itens" + +#: widgets.py:28 +msgid "icon" +msgstr "ícone" + +#: templatetags/navigation_tags.py:275 +msgid "Selected item actions:" +msgstr "Ações de item selecionadas:" + + diff --git a/apps/ocr/locale/pt/LC_MESSAGES/django.mo b/apps/ocr/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cc071a684c3f7f99c92296c99c3c91bd118ebbf7 GIT binary patch literal 9087 zcmbW6U5s7VRmXRmv`t-yKntZMP+#!+ao`2; ze(?9fQ{cD36X1K_UcX-lFYx>+Q1Aa7Tma1>V-|r$P~#nF!QTXb8vHW21b!2|4}AMO zjJX#)3H}K99QZac2Y(8@3f={N7CZ)iwZZRz_wjuD;rjd2;N3hw2ddwvz;}T!HP2rM z&+z;&;3MGC+l@I3#^6ct_rM1fH4E`Y~dA|#O5WM4ukquk{B}X583fu)H-!~fk zM-UOse}kU`Z)0)k`#Pv~{sxpuzYDTu^Kalg!Ph~_bC`#BgYO2Vrw*w1kAfQa1c=Ga zWl-~d416#6Jg9yD8u&i&3m~GKS3%A9*Wj(-KZ9=p|GmN2n)k0a_JbEX#22=2H@T;Kq_hy0vUCd)3qM7GFjoSfF zfL{c~w{L=y_b{Xoo&qm|5s2!{AAk$spMvs-{{&H`c^wqL?|?*4f_H-tfEB2DUIIJd z--25AtppFre*)YBp8yfnyaJ+n^OxXZ@Sni1fUkk4!Iy0F9uz-b17+{mK~!dLL#g7+ z5fG6~2b6qIH18cK{U@M!Q-M&|d=fkYeg>4DzXZx}zXfXFZ{thJdnYJ2( z+dO{=lwK}^?*K1>lJn!Bc-{l$=T|`K>l&zie;SmWFE-zQ9h6*u0ZPt)0JZMFf|~a~ zn&vgca}s?yi{KV9weBe3SdD<`0q~oV)_t2#0CuoGmkP`v(5t`Kv*N1Bec5ZHi4u779M`+^B zMcPMcx_*v!mL_{#qHWL?X}TVxNuT3Own4Qsm-rzYoTSMI#BW_s)e!vtXPbN1pll^S z($4^y92;TxAE`Bl4_7q;5=Hp?S_Z)wXaFWi>5g&!nw z-&Jv**?h+r+ulW8^JwAiwR~vHVRLgeF1NLc>sRrPt9-kHePQT_e#PEX9z3X@c$eAX zz#>VIVZh3zMf3_8&mKIGJ$cp&OSCI$t(zTF-prt?a9N4E(poD=?m0U9=2&^;1|r9$ z>m@g*pTc);YKwdNkGD6hatYl>&(|8QW&SGn{la6ksMTQ^=m1%|<{YN+QCwM2?5QOg z6#2jxRqV^UL#9nFM9t==yVl?D`u-40HD9y_hg7opn2t6W-kjU^{VPxtHcnO)KLv`4DHHzRNkz~gD>KFzen^N~aqsPp@;SAG)&WP9ZA{W$_Zjr)ek?p(e-pckA2<3zb zH&GJ;gz+~VSH~zut;vaIIjRZF8d0vW&hEG*j`TUiTx%ji?Us@$?0s(VgJE#!7uJ|| zj9Jyt^Jrk!F;<%$aKOZK-R1u`6ytnMNE^5+5X1Z1~*@?Xjo6L<@6V zT0LLC4^Oh!GnX&eI12$l1X!_0QlIu+f7?eZ3kyrj4|Es#x3sdfw7j&ma72QZ1K*D~ ziFPoDezxcOSI8CmYFM%(d@0HMS71@st`qcQ;<4S%iQa)~xOY86EQR@j!~ER!G-2t} zxStd8yXG0DiegSUdFBdIpQewqh_n*cF1G43)p54y6!C+5w7T2H;kCr8LC6 zIo~$WvYyPeS!5=;7%1BivJA>bUIRJcYu+z(2lvd_0PRg3Nah~pN#kTb9eu#@#W)L?fI-q~dzkhz z7bj*`A9Ii8{IggY^l_=kB~Ir;)OpqyCG1+U>+TvMaBX${=|h+OATO%Udbt%xoyUe- zWoIK_vD;NOz#Fz=mhW}((1ju|VP#${5VTyjK+qie^3bIxH#*^r#I&7NcE4hm7nhbg zi>Euwr|r_ImHQv)EZ)DkNXO1)zY}Zu>3-_EY!^?iEG^!*$aUxTL|dw(Pk@GuU_p24aS>(x10HD z0joc4+;=`r1TgOWnmo=jxK7vvF;}Mk_+i!XR;R_Mq)= zyQ1{fnP)c6cTP?Eg`>PLI%`=!*U@stp6bO_EA5IMREI7l!@?z<^TZ+!I@usRmS>h9 zwDs+oqnUmG8M}1s5b@O!3?fHb;;-~u!z{{6-8;5c)-&dWG*32AoDWRoLivM_*JWXC1}IC%ovFRe9HJ_|*0}j{8r9-Y}I;rGMVBEajL^ z7jlg7WxI6X-oYc2I7KwbALU3DYO&GRxQ{rb4Mx|u;>=NIJ)8GOFQVwl`csRCD8w8L z8t+$I3!-TCvo{dj@Ai`+3b9h(cr>>M4&P^8Hx*S|)zymFw`e<98EEtWuSvp>&q%61 zE@qYSMmpHZlj;EDH5J`OSrzlPg`EiDrL!#Gnblmsh@H3?_@;PfE)j7Wrui zS1~Au40WKl1UtmJh~I=QALKMMv*>K4+R)WUe(NYMYsdS6hKD@_5=hKec)g}vl<(s( zETQU+nubtuQ0M1I*R3xrKEtpdq@%PO-C)Y_eZBnX#obteDy$yj;k2xi(vieAQ#;y; zSXpDoN%^&>^JX4XKgNBX&#?07wLK%V3KK%Wuj>sHFTJs%&d;%lk`3% zatTQpUDuP6h+o&lmw_CwJnOY{pw0GTJ1ifP*)>YV@*7Rl;Qxh1OEbj);9FHI52axjobhY;kqvTF(+>O?=4y z3B`nx^q|qqWDEO-gDFc|I7$r&Q)a`+9K~9e1RBl89CKh_M@h3MK<(*0PE3Icb5pmT zN5Y%L`G|0?3LU$rp_+x^fyVU_G_4)FE^hf14+qeX&8f=ZTFs);{wE%N)0(j^bSboo z$-6eca<`es@ZfGUb*^3D-(0C{sdYmr@=dYI@lZP)7rQJ_ zSHGdtkZPdrp4(oM!{Rva+Q&o9n~uH~YGC#)nvfpY!emy_sjh;e7T{)s(_S+R=52j^O)+|<8YVe4 zw5sXRE8&LSC~_H<(`hKDb!r;d({=q|rcS4m&F|d?GC|ciar+JkW%gtyqZ%9jtK@DH zvZ?EBqE(1(fQZU3Gum*t=T&Vj=s1_X4Zn@Dd`*>RYwaWPKjutVxTzXD*kkq?t?zje JTqF?l{{XRVdHetX literal 0 HcmV?d00001 diff --git a/apps/ocr/locale/pt/LC_MESSAGES/django.po b/apps/ocr/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..ae9be2eb84 --- /dev/null +++ b/apps/ocr/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,463 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +# Renata Oliveira , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"PO-Revision-Date: 2011-11-02 05:10+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:28 +msgid "Submit document for OCR" +msgstr "Submeter documento para OCR" + +#: __init__.py:29 +msgid "Delete document for OCR queue" +msgstr "Excluir documento da lista de OCR" + +#: __init__.py:30 +msgid "Can enable/disable an OCR queue" +msgstr "Pode ativar/desativar uma lista de OCR" + +#: __init__.py:31 +msgid "Can execute an OCR clean up on all document pages" +msgstr "Pode executar uma limpeza de OCR em todas as páginas do documento" + +#: __init__.py:32 +msgid "Can edit an OCR queue properties" +msgstr "Pode editar uma lista de propriedades OCR" + +#: __init__.py:34 __init__.py:56 __init__.py:74 +msgid "OCR" +msgstr "OCR" + +#: __init__.py:40 +msgid "OCR Setup" +msgstr "Configuração de OCR" + +#: __init__.py:44 +msgid "submit to OCR queue" +msgstr "submeter à lista de OCR" + +#: __init__.py:45 __init__.py:46 +msgid "re-queue" +msgstr "re-enfileirar" + +#: __init__.py:47 __init__.py:48 __init__.py:63 +msgid "delete" +msgstr "excluir" + +#: __init__.py:50 +msgid "stop queue" +msgstr "parar lista" + +#: __init__.py:51 +msgid "activate queue" +msgstr "ativar lista" + +#: __init__.py:53 +msgid "clean up pages content" +msgstr "limpar conteúdo das páginas" + +#: __init__.py:53 +msgid "" +"Runs a language filter to remove common OCR mistakes from document pages " +"content." +msgstr "" +"Executa um filtro de linguagem para remover erros comuns de OCR do conteúdo " +"das páginas do documento." + +#: __init__.py:55 +msgid "queue document list" +msgstr "lista de documentos da fila" + +#: __init__.py:58 views.py:316 +msgid "active tasks" +msgstr "tarefas ativas" + +#: __init__.py:60 +msgid "transformations" +msgstr "transformações" + +#: __init__.py:61 +msgid "add transformation" +msgstr "adicionar transformação" + +#: __init__.py:62 +msgid "edit" +msgstr "editar" + +#: __init__.py:82 +msgid "Default" +msgstr "Padrão" + +#: __init__.py:104 +msgid "Checks the OCR queue for pending documents." +msgstr "Verifica a lista de OCR para documentos pendentes." + +#: api.py:119 +msgid "Text from OCR" +msgstr "Texto de OCR" + +#: literals.py:8 +msgid "stopped" +msgstr "parado" + +#: literals.py:9 +msgid "active" +msgstr "ativo" + +#: literals.py:18 +msgid "pending" +msgstr "pendente" + +#: literals.py:19 +msgid "processing" +msgstr "processamento" + +#: literals.py:20 +msgid "error" +msgstr "erro" + +#: models.py:22 +msgid "name" +msgstr "nome" + +#: models.py:23 +msgid "label" +msgstr "rótulo" + +#: models.py:27 models.py:47 +msgid "state" +msgstr "estado" + +#: models.py:32 models.py:40 views.py:44 views.py:337 views.py:378 +#: views.py:408 views.py:444 +msgid "document queue" +msgstr "lista de documento" + +#: models.py:33 +msgid "document queues" +msgstr "listas de documento" + +#: models.py:41 +msgid "document" +msgstr "documento" + +#: models.py:42 +msgid "date time submitted" +msgstr "data e hora submetido" + +#: models.py:43 +msgid "delay ocr" +msgstr "atraso ocr" + +#: models.py:48 +msgid "result" +msgstr "resultado" + +#: models.py:49 +msgid "node name" +msgstr "nome do nó" + +#: models.py:53 +msgid "queue document" +msgstr "enfileirar documento" + +#: models.py:54 +msgid "queue documents" +msgstr "enfileirar documentos" + +#: models.py:63 views.py:48 +msgid "Missing document." +msgstr "Falta de documento." + +#: models.py:67 +msgid "Enter a valid value." +msgstr "Digite um valor válido." + +#: models.py:95 views.py:341 +msgid "order" +msgstr "ordem" + +#: models.py:96 views.py:342 views.py:379 views.py:409 +msgid "transformation" +msgstr "transformação" + +#: models.py:97 views.py:343 +msgid "arguments" +msgstr "argumentos" + +#: models.py:97 +#, python-format +msgid "Use dictionaries to indentify arguments, example: %s" +msgstr "Use dicionários para identificar argumentos, exemplo: %s" + +#: models.py:107 +msgid "document queue transformation" +msgstr "transformação de lista de documento ocr" + +#: models.py:108 +msgid "document queue transformations" +msgstr "transformações de listas de documentos" + +#: statistics.py:8 +#, python-format +msgid "Document queues: %d" +msgstr "Listas de documento: %d" + +#: statistics.py:9 +#, python-format +msgid "Queued documents: %d" +msgstr "Documentos na lista: %d" + +#: statistics.py:13 +msgid "OCR statistics" +msgstr "estatísticas de OCR" + +#: views.py:41 +#, python-format +msgid "documents in queue: %s" +msgstr "documentos na lista: %s" + +#: views.py:49 +msgid "thumbnail" +msgstr "miniatura" + +#: views.py:62 +msgid "document queue properties" +msgstr "propriedades da lista de documento" + +#: views.py:63 +#, python-format +msgid "Current state: %s" +msgstr "Estado atual: %s" + +#: views.py:79 views.py:154 +msgid "Must provide at least one queue document." +msgstr "Deve fornecer pelo menos um documento da lista." + +#: views.py:89 +#, python-format +msgid "Document: %s is being processed and can't be deleted." +msgstr "Documento: %s está sendo processado e não pode ser excluído." + +#: views.py:92 +#, python-format +msgid "Queue document: %(document)s deleted successfully." +msgstr "Lista de documento: %(document)s removido com sucesso." + +#: views.py:96 +#, python-format +msgid "Error deleting document: %(document)s; %(error)s" +msgstr "Erro ao excluir documento: %(document)s; %(error)s " + +#: views.py:109 +#, python-format +msgid "Are you sure you wish to delete queue document: %s?" +msgstr "Você tem certeza que deseja deletar o documento da lista: %s?" + +#: views.py:111 +#, python-format +msgid "Are you sure you wish to delete queue documents: %s?" +msgstr "Tem certeza de que deseja excluir os documentos da lista: %s?" + +#: views.py:134 +#, python-format +msgid "Document: %(document)s was added to the OCR queue: %(queue)s." +msgstr "Documento: %(document)s foi adicionado à lista de OCR: %(queue)s ." + +#: views.py:137 +#, python-format +msgid "Document: %(document)s is already queued." +msgstr "Documento: %(document)s já está na lista." + +#: views.py:165 +#, python-format +msgid "Document: %s is already being processed and can't be re-queded." +msgstr "Documento: %s já está sendo processado e não pode ser re-enfileirado." + +#: views.py:173 +#, python-format +msgid "Document: %(document)s was re-queued to the OCR queue: %(queue)s" +msgstr "" +"Documento: %(document)s foi re-enfileirado para a lista de OCR: %(queue)s " + +#: views.py:176 +#, python-format +msgid "Document id#: %d, no longer exists." +msgstr "#ID do documento: %d, não existe mais." + +#: views.py:189 +#, python-format +msgid "Are you sure you wish to re-queue document: %s?" +msgstr "Tem certeza de que deseja re-enfileirar o documento: %s?" + +#: views.py:191 +#, python-format +msgid "Are you sure you wish to re-queue documents: %s?" +msgstr "Tem certeza de que deseja voltar a lista de documentos: %s?" + +#: views.py:209 +#, python-format +msgid "Document queue: %s, already stopped." +msgstr "Lista de documento: %s, já está parado." + +#: views.py:215 +#, python-format +msgid "Document queue: %s, stopped successfully." +msgstr "Lista de documento: %s, parada com êxito." + +#: views.py:221 +#, python-format +msgid "Are you sure you wish to disable document queue: %s" +msgstr "Tem certeza de que deseja desativar a lista de documento: %s" + +#: views.py:236 +#, python-format +msgid "Document queue: %s, already active." +msgstr "Lista de documento: %s, já está ativa." + +#: views.py:242 +#, python-format +msgid "Document queue: %s, activated successfully." +msgstr "Lista de documento: %s, ativada com sucesso." + +#: views.py:248 +#, python-format +msgid "Are you sure you wish to activate document queue: %s" +msgstr "Tem certeza de que deseja ativar a lista de documento: %s" + +#: views.py:265 +msgid "Are you sure you wish to clean up all the pages content?" +msgstr "Tem certeza de que deseja limpar todo o conteúdo das páginas?" + +#: views.py:266 +msgid "On large databases this operation may take some time to execute." +msgstr "" +"Em grandes bases de dados esta operação pode levar algum tempo para " +"executar." + +#: views.py:272 +msgid "Document pages content clean up complete." +msgstr "Limpeza do conteúdo das páginas do documento completa." + +#: views.py:274 +#, python-format +msgid "Document pages content clean up error: %s" +msgstr "Erro ao limpar o conteúdo das páginas do documento: %s" + +#: views.py:320 +msgid "node" +msgstr "nó" + +#: views.py:321 +msgid "task id" +msgstr "id da tarefa" + +#: views.py:322 +msgid "task name" +msgstr "nome da tarefa" + +#: views.py:323 +msgid "related object" +msgstr "objeto relacionado" + +#: views.py:335 +#, python-format +msgid "transformations for: %s" +msgstr "transformações para: %s" + +#: views.py:365 +msgid "Queue transformation edited successfully" +msgstr "Transformação da lista editada com sucesso" + +#: views.py:368 +#, python-format +msgid "Error editing queue transformation; %s" +msgstr "Erro ao editar transformação da lista; %s" + +#: views.py:373 +#, python-format +msgid "Edit transformation: %s" +msgstr "Editar Transformação: %s" + +#: views.py:396 +msgid "Queue transformation deleted successfully." +msgstr "Transformação de lista apagada com sucesso." + +#: views.py:398 +#, python-format +msgid "Error deleting queue transformation; %(error)s" +msgstr "Erro ao deletar transformação de lista; %(error)s " + +#: views.py:411 +#, python-format +msgid "" +"Are you sure you wish to delete queue transformation \"%(transformation)s\"" +msgstr "" +"Tem certeza que deseja deletar a transformação de lista " +"\"%(transformation)s\"" + +#: views.py:434 +msgid "Queue transformation created successfully" +msgstr "Transformação de lista criada com sucesso" + +#: views.py:437 +#, python-format +msgid "Error creating queue transformation; %s" +msgstr "Erro ao criar a transformação de lista; %s" + +#: views.py:446 +#, python-format +msgid "Create new transformation for queue: %s" +msgstr "Criar nova transformação para a lista: %s" + +#: conf/settings.py:13 +msgid "" +"Amount of seconds to delay OCR of documents to allow for the node's storage " +"replication overhead." +msgstr "" +"Quantidade de segundos de atraso OCR de documentos para permitir o nó da " +"sobrecarga de replicação de armazenamento." + +#: conf/settings.py:14 +msgid "Maximum amount of concurrent document OCRs a node can perform." +msgstr "" +"Quantidade máxima de documentos simultâneos OCRs que um nó pode executar." + +#: conf/settings.py:15 +msgid "Automatically queue newly created documents for OCR." +msgstr "Listar automaticamente os novos documentos criados para OCR " + +#: conf/settings.py:17 +msgid "" +"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend" +" to use for locking. Multiple hosts can be specified separated by a " +"semicolon." +msgstr "" +"URI na forma: \"memcached: / / 127.0.0.1:11211 /\" para especificar um " +"backend de cache para usar para o bloqueio. Hosts múltiplos podem ser " +"especificados separados por ponto-evírgula." + +#: conf/settings.py:18 +msgid "File path to unpaper program." +msgstr "Caminho do arquivo para o programa unpaper." + +#: parsers/__init__.py:23 +msgid "Text extracted from PDF" +msgstr "Texto extraído de PDF" + + diff --git a/apps/permissions/locale/pt/LC_MESSAGES/django.mo b/apps/permissions/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ef53a7d2481186c2c12639b7b0ed47d6a3796225 GIT binary patch literal 3213 zcmb7`OKclO7{`ZFpcqP^EwA#L1}q$vwVf!1)FGv59*~NtRxmm6P&L^d+Z%Rw%*<>Y zSDbo42!uEwgx~-wIUsrjA@2B4!~qGx2_z1jkPzIE=#BrkUdN6SJ7SdG-|Xzn_ukL> z?a09o7)BP?gSh5zVC)na9Ka3Z?2U{)2hM_J@NMt{_$&Adc=8})7s0o{+rd9l{sU(4 zeBdU=@W&40b{BXQydTVh=fG#cdGIoL8+Z-88T<)60{#M$oWH;k@Za?PA#8#QHUeUa z9RqIxkAp|S(e(Y3;H`L`2JZzIK$7<=NcPl0(sKzU{qKS#_oMXr6OjD63f>8R1CqY) zQvLvbkC^=ol0TmwV(dKlJ19U0%3lWG178CF1j&y@7(x11L6TbsafG$NW8h`*IQSvB z2!07toUVgp=Na6{-}B%-;0kyc^g;5!nZADqglX*k^!ekIpMeyQt04LNEl6>?22vgT z2tpP68@wC54&DcjAQ+gk97y&~f)u|Qko1;8lIwva?+uXjzX>8t$(bzp5Ux9LJ%Xz{ z$ZzuDM7l5vQfyFaiB7VMY<(CP>7YTrcL(XA+9G?q<55f~P84ez6jK^xE7?sxa$GbX z>ma#5&^M=i(I9^)_Y?>EJm3-vIp^AokqG6ODe-Jh%hzLRtkh$MdrF$MW~mK*A|eZ$AAT7|>p&n2#O0>I{FAgxRv7Chgk(`PAkEV=jP%CM!##MP?r z`ZBWpFY>HBIHTP}P=p3MK3qh{d2c`O`h^&_l0+;;zqxGHm(A4GPHHL7$pZ6|kT8j0 zut2QIfQ2$#qqL`_I->GHksC(!p4?1BxR{}!_uAI0aMqjhx(Yn0cdwYfCBsNpa!V!m z&pU5-xRz8lGZyvA%37^U*E&m{vkDLJxs~{`Xo-j~%rC!?S&07d-`3-`ysN^3Rz_%F=|V_n3;1yHWoOD4Do#>N5bMlCU5QT=$H$%GX=maz zAD=2sKIIfAi$!d7kO`mE_wS>v6TCQCIyG^!h>>|-80%C}c_t86=@OSAj8>6R_(TnV z+LIgkbm?p@6n;R)ox!oF7K@s6DpG_cUWQ9?4F*b{OI>L;n|Vue{i@u|N75D=oxqqv zqvMk!z0eda1QZ&!FqT7g%qjGe2==uaaMa382nmEAO>?&{w2^k^#mb^H z)!Rq7pWd zsSQ#O^Ry#*aHkn0n|e%5=;2``mxqX+gZa7_lTL%(u|i#T#{wz~VMQP4PPTnRP`iCK z39wJyx6^#3*=}{ibG2VEhKoT~C?;N#>A`OIgpkS9b`i%e@pHPvBXpv^08zd*kJN@p z7q=9Xn{E*MI_bfXquXEEI8aIdMJwu(!>Ug4ZJ}#r(Tmm2UQB_ZW{fkt_V((WSs&72 p0}{J?6}8;APTqC*(7dZYHK||AURL&>C9&Jbx4$8V|Cmtz>_3}`n0x>L literal 0 HcmV?d00001 diff --git a/apps/permissions/locale/pt/LC_MESSAGES/django.po b/apps/permissions/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..3385a71985 --- /dev/null +++ b/apps/permissions/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,188 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"PO-Revision-Date: 2011-11-02 04:52+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:12 +msgid "View roles" +msgstr "Ver funções" + +#: __init__.py:13 +msgid "Edit roles" +msgstr "Editar funções" + +#: __init__.py:14 +msgid "Create roles" +msgstr "Criar funções" + +#: __init__.py:15 +msgid "Delete roles" +msgstr "Deletar funções" + +#: __init__.py:16 +msgid "Grant permissions" +msgstr "Conceder permissões" + +#: __init__.py:17 +msgid "Revoke permissions" +msgstr "Revogar as permissões" + +#: __init__.py:20 models.py:75 views.py:33 +msgid "roles" +msgstr "funções" + +#: __init__.py:21 +msgid "create new role" +msgstr "criar nova função" + +#: __init__.py:22 +msgid "edit" +msgstr "editar" + +#: __init__.py:23 +msgid "members" +msgstr "membros" + +#: __init__.py:24 +msgid "role permissions" +msgstr "permissões de função" + +#: __init__.py:25 +msgid "delete" +msgstr "excluir" + +#: api.py:22 +msgid "Permissions" +msgstr "Permissões" + +#: api.py:55 +msgid "Insufficient permissions." +msgstr "Permissões insuficientes." + +#: models.py:11 views.py:53 +msgid "namespace" +msgstr "namespace" + +#: models.py:12 views.py:54 +msgid "name" +msgstr "nome" + +#: models.py:13 models.py:70 +msgid "label" +msgstr "rótulo" + +#: models.py:20 models.py:53 +msgid "permission" +msgstr "permissão" + +#: models.py:21 views.py:50 +msgid "permissions" +msgstr "permissões" + +#: models.py:61 +msgid "permission holder" +msgstr "titular de permissão" + +#: models.py:62 +msgid "permission holders" +msgstr "titulares de permissões" + +#: models.py:74 models.py:92 views.py:69 views.py:79 views.py:103 views.py:203 +msgid "role" +msgstr "função" + +#: models.py:103 +msgid "role member" +msgstr "membro da função" + +#: models.py:104 +msgid "role members" +msgstr "membros da função" + +#: views.py:56 +msgid "state" +msgstr "estado" + +#: views.py:116 +#, python-format +msgid "" +"Are you sure you wish to grant the permission \"%(permission)s\" to " +"%(ct_name)s: %(requester)s" +msgstr "" +"Tem certeza que deseja conceder permissão \"%(permission)s\" para " +"%(ct_name)s: %(requester)s" + +#: views.py:121 +#, python-format +msgid "" +"Are you sure you wish to revoke the permission \"%(permission)s\" from " +"%(ct_name)s: %(requester)s" +msgstr "" +"Tem certeza que deseja revogar a permissão \"%(permission)s\" de " +"%(ct_name)s: %(requester)s" + +#: views.py:134 +#, python-format +msgid "Permission \"%(permission)s\" granted to %(ct_name)s: %(requester)s." +msgstr "Permissão \"%(permission)s\" concedida para %(ct_name)s: %(requester)s." + +#: views.py:137 +#, python-format +msgid "" +"%(ct_name)s: %(requester)s, already had the permission \"%(permission)s\" " +"granted." +msgstr "" +"%(ct_name)s: %(requester)s, já tem permissão \"%(permission)s\" concedida." + +#: views.py:143 +#, python-format +msgid "Permission \"%(permission)s\" revoked from %(ct_name)s: %(requester)s." +msgstr "Permissão \"%(permission)s\" revogada de %(ct_name)s: %(requester)s." + +#: views.py:146 +#, python-format +msgid "%(ct_name)s: %(requester)s doesn't have the permission \"%(permission)s\"." +msgstr "%(ct_name)s: %(requester)s não tem a permissão \"%(permission)s\"." + +#: views.py:199 +#, python-format +msgid "non members of role: %s" +msgstr "não membros da função: %s" + +#: views.py:200 +#, python-format +msgid "members of role: %s" +msgstr "membros da função: %s" + +#: widgets.py:16 +msgid "Revoke" +msgstr "Revogar" + +#: widgets.py:21 +msgid "Grant" +msgstr "Conceder" + +#: conf/settings.py:10 +msgid "" +"A list of existing roles that are automatically assigned to newly created " +"users" +msgstr "" +"A lista de funções existentes que são automaticamente designados para " +"usuários recém-criados" + + diff --git a/apps/project_setup/locale/pt/LC_MESSAGES/django.mo b/apps/project_setup/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..912f33b52af2f53c4672c27cf6dc7214c8292641 GIT binary patch literal 611 zcmYjO&2H2%5DtHrz=;bN4(8ShIZmP#Y+bfOv|Fj75vvk7<8EfXMu{DHCf)WycmfVQ zNN+p@&%$K4qI}Zlu}9<2-;Dn}fBYk1JYv3NPMA-a=gbk`nB&)|q6hEBzRCb|$+H{MkaaR5vgpK5s=!4S*J6GNaynHPo3 z4`g{Dim9HwmH8ykxlmrfl^dV`ziuooMPBIg&Fh?zo*N`tN8_9kmIOM_*DAolKB*=#l$jk<0H*O>=W{cbR*`dv>F znhq7Qfa*!@r`1_CzaLqV<>_(o1fKof^xP=HHH);y`9rZ>o5(|-eW_37^uBI!Sj{dpTqNjAx4$-voG{g?I@cs6Pv+_{vwzEAiUd=?YpC-;DnbzF?y8Rgv S{#}ov0kI5z, 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"PO-Revision-Date: 2011-11-02 01:26+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:6 +msgid "setup" +msgstr "instalação" + +#: views.py:13 +msgid "setup items" +msgstr "itens de configuração" + + diff --git a/apps/project_tools/locale/pt/LC_MESSAGES/django.mo b/apps/project_tools/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a38466231cc7aac937fb9df0f8d5cb1f226fe789 GIT binary patch literal 558 zcmYjN!A{&T5Ditiq_>`XFg=05aS~B!F)TvBA|W+ufI!b?Gh|&QcI26`@FD#vK7w!Q zghgFOdK!;4@6DTe{rdTD#PNyojj_krWE?TZC>djY#dz6>qTigqFupT^%QqgUb&&Th zMrH7SU{3O~mUj@)dZ$HUo{bZ;^WrAHhTaE~1va*pr$d9X@>(p2daYDrX))XPD`zhy!3;{;K3z07EP*&kcbVd75Q1J&^f<$R>J!BGdgeQ_5Ss5?}|0;(sq6Bn1oY<;pUN#ir`2ps!+ z?s-vyCl+aqb%$cUFad$4x7CH5toz1!4-n+c&3$cMqs8Rj(to#F^c0uv5KJpCeCSXM d*T0oG%@4)uIo)<*YbvsxIAW<_I(A?%`Ue?xq#ytQ literal 0 HcmV?d00001 diff --git a/apps/project_tools/locale/pt/LC_MESSAGES/django.po b/apps/project_tools/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..8cc4da4a38 --- /dev/null +++ b/apps/project_tools/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,25 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:48-0400\n" +"PO-Revision-Date: 2011-11-02 01:25+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:7 views.py:13 +msgid "tools" +msgstr "ferramentas" + + diff --git a/apps/smart_settings/locale/pt/LC_MESSAGES/django.mo b/apps/smart_settings/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c82fae32fc562d60d43ce0779644770a8d48e1b3 GIT binary patch literal 659 zcmYk3v5pfl5QYsL0&RmtO<}q_A+L8=S0p}y5SN^E5-Xx(q4#Ac8>3y@vb{;JpofBj z0$K`$cmkdv9S^~?FwUMhM*1`!>!0z=_|Lklx{p( z%eDtHcjg@|0z0qSTX0?(EodpPq^7fJ`8v4(Yg}NZZ&b}*^o?hg5p)%T6`VIJtoqAz zVLI-NmrfbSyO_(B_dWPz{;Fc94rIWxY$^i?T4Z_7vN0>hG#`oMG0Tp#42A3h)+#># zzb;A(n&qM>o@8jrOX&lvoYcOR!8k#o!={b)Mmq5HX$|Z2`s#VpN!7;Yo?)79df5Q0 zKz4%8aiqS%27w-4kFwcp(h%#aC2Ug-f!kp*p4(w226g9ozyjO`ew38wiVs`w}RS`%-i0{ zmYo^bc|o<^hkjC=(BU{a)b#O$=0^#!vUa=ghG>J|yfAvH8qD4O-2H<6ZyQJc0&gw5 A3IG5A literal 0 HcmV?d00001 diff --git a/apps/smart_settings/locale/pt/LC_MESSAGES/django.po b/apps/smart_settings/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..156cdd2e6b --- /dev/null +++ b/apps/smart_settings/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"PO-Revision-Date: 2011-11-02 01:22+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:8 views.py:26 +msgid "settings" +msgstr "configurações" + +#: views.py:31 +msgid "name" +msgstr "nome" + +#: views.py:32 +msgid "default" +msgstr "padrão" + +#: views.py:33 +msgid "value" +msgstr "valor" + + diff --git a/apps/sources/locale/pt/LC_MESSAGES/django.mo b/apps/sources/locale/pt/LC_MESSAGES/django.mo index 214e19d7b27542c7dc29b1f667fac404925c7a64..184999dc83edfca542b7c5365e2be7b3b10eccba 100644 GIT binary patch literal 8265 zcmeI0Ym6jS6~`~KfDS$o5X42jyRa{IduDb)TxNG!_Av_!JIl(>vVy#7y6#LD+uhYv zRnLP2BSwq{A0Y%k5Hvw!kQg+I5{*cV6B9Hsn)nPP5EH);znGW+Mh*V{x2k%odu9TD zw=%bX^|+67&pqedd*-Ec*F0jl8kCDEx1DaxgYdC4`Qdv0?Z)W#mv9^WExaE72adq& z-eC;4W*+W__rtaDIru^N0^AH=hv&d`LwWrj@Isz&NgHioXu zdGJHfLiMv3Zi4}oykCNv*E8@^_%c+zHSfu}5$@;tI>;yUAiM%T3Q>{y4OIUxz#9A~ z+yFPB>>Y3dYJQ)BYX4byE_?*Cbmm(HzYk>(&%*QIB2>SBf?BUvq1N$&_Zq_xW-XMS zwnDAngQp20elilj-Nr0M;hnmk%q54~dT9-dV>ESgfyL-zdA6yGHkGr7kE`t1-ukbSpzXPv; zFGJb!`7~0yYxt3$-vTxM92|r9!Q0`Fp!9kH&ZzGj;W4-kO279($@w{G;S-Q1=6T4U z`3pZ9?_Y2PZbEq3?@6e74?xNJHK=}`f%1z#K+WSdDE(c^*c_?`v zf|~cYp~n9;L`CMWkg1zDpxUp+nbq$)sBt$#>E&uDd5%KOpmZ?`)fMEmZrhQ0;cZ(;(_Kj&hQs>oN+i?5|H0+*45c)mrG1FOB-U zr61YDwUqS~=|tC!6v?rhf=GT&n!n~QJJa=%9Da|~?F{80O9O7+s*Z>31by0oUc zq{AKlE|1f?eH&%Ccqbb>Mv)I5Dc(&&+5SfnL|pZl;`|C?4HFAyoNGacY`!3q@;p8)X;e07bT4z3$>+gmM!_ z_9vg%K)H(YG0N?f^17ZIt$jeblv1bYQXJKqAEJy?bjen#muzD%Wn=MjsGw|kO85Jk zbHPGt_O)$PkJ~nj?QE2GgJyHVhEbYD?U`i0A zH*8K_*6rNcjM}HRq>?@eLmMa7wS%dqnzoz`<9fH{+F2o2I&2OkE?zUy_Drqf-mPPfyHgV2S;=3tbbG6x4Hx%8r}*w>s^Ni^%sco=2Nb>QFj z&(BY4yw%ATY$u7@h-Sw1YXdtQG^0?zU2J2#J?olrhn|xJjnt)SjA&(>*d>*&Sh4cO z8&#zX>?mIt><6hfI}Nm@>}Rlc|19WspuR%^mClz{FZ=DUmy0*w3EH8p$E{AnvbfN% zTWSu)%@Flm=c1WLmg_~9Ipu68@YQ(GD&udnE|CtWg8C`fW+@Nr4VttOtL>-|rgpC3 za5FWS3$l6xLsR$kl{I7?^@gJ{W25b=L1X4eT{agdr)=n#`lzFCb2O%J#tiBi>%VO2 zF*e?MYYW|U)TU$g8@FBMOYU5Vd#td8;|PsNX%yzRn=Yi8Yk3ie&2b+!aQ}3D5g@_= zQ!HwDTVcSenU}4l{#8EpFIjGJZ>?$`uKEY;$ve>P>H-iK6@$$2ESQlc$$9%8%CP7S zRhGjTmAd8U>a+)H49X&lubO_fJ2~pM)f8PBHm|oza5#~N&l#85CcA(_U|MOLsTB`>G7o$j4cshL2(dkpVB-gki_+Ebta6ji#0;7`4M_HVWCEdWMS_c^7$1;4#Ij zBdj}a2T4Rb;OA`^SD$F}?YksZs!wuU3I#o5|P53~WjRTlkxNPK}(z|5SIvB3hVy6&2VDOHu?g zm1t%Z=!}jb#)l{rV&X)hl=wQ!vXrz9A6k2lbJCw-34IVM?KF?VE51$3%GHRv(mN{p z=v9Enf!_NbQS8B%fii6m^zMqD#*Ei?tLu%&Slw@f2Zg^E%Fu^{)+tst$;jnhIOH%x6%uWOg zLEDZWoH#yolk3DuR+~s?qOi8VJCoKX<1yRFvd-AZ$V`N0riPi-ND`;`Wt@z()OI9F z)2>U0j@>v}^QSVpt#MSsEq9D=-(DNNsO3W`~Pc*UYq7F$s4y%{cG|Gp;u2 zg4UQl#+14<2lj+;-VWCs#~5(#hvkb73nT$>?CDlZ|W{nm9Z$ zzNE74!=pn72yFzU+N3{LW^SHNn#8(Y?B+qjcCzQh-N~~TZYVWrz49w(XxwA;chyZ zBv@E^-cO1gK!;{$IobqR1-HXyl3l&7Gt0eHclMqxu@>drttXEDfsTVqM!opN;y1K8 zd>ms^HXvCB(g8oKfX#rR5RHtb zigG@z7O3q@jtp_9_ zGjyiiN#`ooGWH2WJ?5B-76+!@%Np3-+OyHJmM7X#NYdfc1~jy?WNZR_8<@JE@!|ZW z9Aj*=!MzblQAA{Lw%gL~$3{B4_&B))BKD;bTI#yj`0CcxOBj|ad+GY#yQ)ULJ?8OK zc8GvwYG8d%qK-yYvv7~j3ZAgbdq9cOyguJ!C+(z!r@6++BQp~;jHYX z6}1~oTYWMTXRcI1foGRyi;vqDM;p@Fd;t6d+pYRdVIG=l;xLn=Y-9mxNSkf3h#~sc zYf_{lWFj&8jQB>%A;ZO0+eIsuzUY9|xuy)JBN#kAx9SxN6Or4y=;Q$5gB(WY$&itaIe4~bu$DUT)2F( zAB)Aui;xu9rUa)-ASYB5d6R%Np$J6gQf|`Pbo0qnUJis`v!ooOlqw)tAeJe@dr2E~ z7N1TDYejN1(2D{^Z^bm>IEiLl%lKHV=f3(sT((u_q1&fB)J%uD0m^q)lKc=6e0*T1=IqEgyU!i%Jc`r0>6f@}~bWW#&n%+w`t&NvNvN{4WX^of+|K#` z|7UhTzv&fcZlP(_i-v6nt&_I6!kE4I;Yto{f2}fRHD1I)U8pf;4WzIGN8|H*@G8z9 z!ZD1HSIirj#CMS0e8QmxKf`)s=F9>e4Y-IJ;1AS<^&GZiGw#7#kr&Jn zYPu$YS7HFDuD@91@6XH<~Lb78u&0aDxfb> z0e>4`UqEH}D{6v^$Zl$RSkEV8H{fZOw-1%j1zwuFj?NMtO}v>j92`eYydPECJl=@U zq9#6tdj1S5&>vCX!q2F+uA%-4pcT8Y2ld`K>N}gjNAPeR^;c%!#Sbi^GWi{~R)1p~ zc9NC`9>G1h8&$Cva3dbaEqDg?@hzby+(s4(bOhV+b|glVK?Po1NBvvrJjMl;1!foUtI#+N>gy#XjjlS(e%q2rp>90 zm$%JvN2S-MNVWd`I$;~Vgt-A#*5#XmQDypQ*VFV}X;YOhZ~9efd9{Wd8KmE z+*@+9ej)2j`#I0v(y+^Z-LTKznS9XBCpYzb8NXz_f;*Y>GG;o+WxUWSx}_Q8PXz^2 z9eLKx*?i-ZcBye^U1Z9IsUTkry(qGuHl0qSQ|VzRo!&7r`tHl?A70UXmltNs#N)UD z@s=w`LqD+RT6*pMtxwrMTl?B?yYzApy3VY7$anvbdtci(_VM#+~$Y^fG~&a`S#+ zhCy7iib}4jyh&c(e~ATlrrYbN-ikCb(`br-(uK2rCJ60M-Q%{ur>%vQi|(?Rs_)o4 VdU})Z5n9HJR2FxN`EA14`7hCi{=@(P diff --git a/apps/sources/locale/pt/LC_MESSAGES/django.po b/apps/sources/locale/pt/LC_MESSAGES/django.po index 591a53cc9e..95fd82b41c 100644 --- a/apps/sources/locale/pt/LC_MESSAGES/django.po +++ b/apps/sources/locale/pt/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-09-29 18:49-0400\n" -"PO-Revision-Date: 2011-10-04 00:56+0000\n" +"PO-Revision-Date: 2011-11-02 01:21+0000\n" "Last-Translator: emersonsoares \n" "Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" "MIME-Version: 1.0\n" @@ -56,7 +56,7 @@ msgstr "formulários web" #: __init__.py:30 models.py:130 msgid "staging folders" -msgstr "preparação de pastas" +msgstr "staging folders" #: __init__.py:31 models.py:194 msgid "watch folders" @@ -98,7 +98,7 @@ msgstr "" #: forms.py:41 msgid "Staging file" -msgstr "Teste de arquivo" +msgstr "Preparação de arquivo" #: literals.py:8 literals.py:13 msgid "Always" @@ -166,7 +166,7 @@ msgstr "assistir pasta do servidor" #: literals.py:54 msgid "server staging folders" -msgstr "pastas de teste do servidor" +msgstr "server staging folders" #: literals.py:55 msgid "server watch folders" @@ -254,214 +254,220 @@ msgstr "" #: models.py:193 msgid "watch folder" -msgstr "" +msgstr "assistir pasta" #: models.py:198 msgid "Enter a valid value." -msgstr "" +msgstr "Digite um valor válido." #: models.py:226 views.py:487 msgid "order" -msgstr "" +msgstr "ordem" #: models.py:227 views.py:488 views.py:525 views.py:555 msgid "transformation" -msgstr "" +msgstr "transformação" #: models.py:228 views.py:489 msgid "arguments" -msgstr "" +msgstr "argumentos" #: models.py:228 #, python-format msgid "Use dictionaries to indentify arguments, example: %s" -msgstr "" +msgstr "Use dicionários para identificar os argumentos, exemplo: %s" #: models.py:239 msgid "document source transformation" -msgstr "" +msgstr "transformação do documento de origem" #: models.py:240 msgid "document source transformations" -msgstr "" +msgstr "fonte de transformações de documentos" #: staging.py:40 #, python-format msgid "Unable get list of staging files: %s" -msgstr "" +msgstr "Unable get list of staging files: %s" #: staging.py:125 #, python-format msgid "Unable to upload staging file: %s" -msgstr "" +msgstr "Unable to upload staging file: %s" #: staging.py:135 #, python-format msgid "Unable to delete staging file: %s" -msgstr "" +msgstr "Unable to delete staging file: %s" #: utils.py:40 msgid "Whitelist Blacklist validation error." -msgstr "" +msgstr "Erro de validação da Lista Negra e da Lista Branca" #: views.py:80 msgid "here" -msgstr "" +msgstr "aqui" #: views.py:85 msgid "Upload sources" -msgstr "" +msgstr "Carregar fontes" #: views.py:87 msgid "" "No interactive document sources have been defined or none have been enabled." msgstr "" +"Nenhuma fonte de documento interativo foi definido ou nenhuma delas foi " +"ativada." #: views.py:88 #, python-format msgid "Click %(setup_link)s to add or enable some document sources." msgstr "" +"Clique %(setup_link)s para adicionar ou permitir algumas fontes de " +"documentos." #: views.py:136 msgid "Document uploaded successfully." -msgstr "" +msgstr "Documento enviado com sucesso." #: views.py:152 #, python-format msgid "upload a local document from source: %s" -msgstr "" +msgstr "carregar um documento local da fonte: %s" #: views.py:182 #, python-format msgid "Staging file: %s, uploaded successfully." -msgstr "" +msgstr "Staging file: %s, uploaded successfully." #: views.py:187 #, python-format msgid "Staging file: %s, deleted successfully." -msgstr "" +msgstr "Staging file: %s, deleted successfully." #: views.py:209 #, python-format msgid "upload a document from staging source: %s" -msgstr "" +msgstr "upload a document from staging source: %s" #: views.py:215 msgid "files in staging path" -msgstr "" +msgstr "files in staging path" #: views.py:229 msgid "Current metadata" -msgstr "" +msgstr "Metadados atuais" #: views.py:265 views.py:284 #, python-format msgid "Staging file transformation error: %(error)s" -msgstr "" +msgstr "Staging file transformation error: %(error)s" #: views.py:307 msgid "Staging file delete successfully." -msgstr "" +msgstr "Staging file delete successfully." #: views.py:309 #, python-format msgid "Staging file delete error; %s." -msgstr "" +msgstr "Staging file delete error; %s." #: views.py:368 msgid "Source edited successfully" -msgstr "" +msgstr "Fonte editada com sucesso" #: views.py:371 #, python-format msgid "Error editing source; %s" -msgstr "" +msgstr "Erro ao editar fonte; %s" #: views.py:376 #, python-format msgid "edit source: %s" -msgstr "" +msgstr "editar fonte: %s" #: views.py:381 views.py:421 views.py:483 views.py:524 views.py:554 #: views.py:597 msgid "source" -msgstr "" +msgstr "fonte" #: views.py:410 #, python-format msgid "Source \"%s\" deleted successfully." -msgstr "" +msgstr "Fonte \"%s\" removida com sucesso." #: views.py:412 #, python-format msgid "Error deleting source \"%(source)s\": %(error)s" -msgstr "" +msgstr "Erro ao excluir fonte \" %(source)s \": %(error)s " #: views.py:419 #, python-format msgid "Are you sure you wish to delete the source: %s?" -msgstr "" +msgstr "Tem certeza de que deseja deletar a fonte: %s?" #: views.py:451 msgid "Source created successfully" -msgstr "" +msgstr "Fonte criada com sucesso" #: views.py:454 #, python-format msgid "Error creating source; %s" -msgstr "" +msgstr "Erro ao criar fonte; %s" #: views.py:459 #, python-format msgid "Create new source of type: %s" -msgstr "" +msgstr "Criar nova fonte do tipo: %s" #: views.py:481 #, python-format msgid "transformations for: %s" -msgstr "" +msgstr "transformações para: %s" #: views.py:511 msgid "Source transformation edited successfully" -msgstr "" +msgstr "Transformação de fonte alterado com sucesso" #: views.py:514 #, python-format msgid "Error editing source transformation; %s" -msgstr "" +msgstr "Erro ao editar transformação de fonte; %s" #: views.py:519 #, python-format msgid "Edit transformation: %s" -msgstr "" +msgstr "Editar transformação: %s" #: views.py:542 msgid "Source transformation deleted successfully." -msgstr "" +msgstr "Transformação de fonte excluída com sucesso." #: views.py:544 #, python-format msgid "Error deleting source transformation; %(error)s" -msgstr "" +msgstr "Erro ao deletar transformação de fonte; %(error)s " #: views.py:557 #, python-format msgid "" "Are you sure you wish to delete source transformation \"%(transformation)s\"" msgstr "" +"Tem certeza de que deseja deletar a transformação de fonte \" " +"%(transformation)s \"" #: views.py:587 msgid "Source transformation created successfully" -msgstr "" +msgstr "Transformação de fonte criada com sucesso" #: views.py:590 #, python-format msgid "Error creating source transformation; %s" -msgstr "" +msgstr "Erro ao criar a transformação de fonte; %s" #: views.py:599 #, python-format msgid "Create new transformation for source: %s" -msgstr "" +msgstr "Criar nova transformação de fonte: %s" diff --git a/apps/tags/locale/pt/LC_MESSAGES/django.mo b/apps/tags/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b73dcaac57face1fd1866f6e6c120534dc4e3681 GIT binary patch literal 4183 zcma);O^hW)9l%Q&b$PNPi-@AD#pt>-u>IbfanPN&jyTK=y0XJ=mglO89%{R5-t^k9 z>(SLcAFCI`!9?Q4Xp9FA7>JRWc+i6vPsEE7H~`^B(-domjwldYf zSKU?h|E&7YtH)-3s%U5EAE*E8T}qvY&)vj>cH})u-41Vtr{HlIz^~Thy?XpKlzA`0 z8TdNnPrXs|AMjSjZ$bHfk)bN9F4W5L3cocpQ-U5FJWxt=no8c4ieejpC z3x5MY0sjJJ|NqqAXPCrKbqf@eZijclJK;QBgktx%;3wfelzo0)^Y>8fdIf$2{=MeR zkxI^S_+j49!cW0vDDu7yTQGvRK?gR=KL&pb#f}%C*#A=f z{WU0d{1x)2-rynoya~mBGdM@)-vMR)Y&|{+#s5q2PsDf~ewy*E?^kL;-owwqt$O?f z{4C=ap!nw|HkJJ}6!|Bh*fS6BfSr200YA$4A$S5>D1Lh!N}Qg8AA&DKiSOT_?DG~x zl=?Ts#j3?e(dQWa3_J@({s{7?3LY}=F(`g`97_Ct0vF-$pvZq6N`4*1NfMuK%{~-8 z_Mq7JBdFms5Z9Kfa$fBQyGVdNJ{$7EERV~p2x-{{Z z#8C8qH(m4<9mHPI={~ybF-Mm(A^W!JqMtO;Pi$-2JU{NCpQiWda%V_G^tg#n@1;u) zi{8@24#~C8(@)U}Nf{$dDqE+fKx~n?Nt1X^H^~QSa;{F&#oyu+X_7xQwsDJFne!HAu6PsI| zZ_~}7r%(9%Z*;OhWOinUZs$g~zIJl6b)K7WTidp~$%o-%_vPr7<>$NX*?6pZ)6z$80fsM5BdiI2$RU1*9>*+NcS>`ew z$!4_zOq^rYyr0GTIV<1iz1l#-W`NNRs{bJ7*sB@sP!( z9}nKUN`e0+x(SygLhdVd!ZPg5>?u8qQA9pm|G}$EG43&A2b}a(VthSL5`Ed~MtsuGj_k;4VvTd+VjCy*pyRZ;+mxIM+y>Pm>v>bGox?Ls)7wryb{@Qsm zby0U0dQ11++oiS6aR7oosqPb#i$!*b(k}JRWY+61M0TfLzxvW(XyQba`y$KILBS~u z`qm74`T`~u0~EA+t~OGEd}f*(}&dLl<$|^z`Y= zaX!|zr$>3~LQ-($1rNGx$Q7B6%AsFbJfo|hD|4y7dqpqIx2OVfhyzWgxw{@MY|bS& zGMUkns^C=L4s}TG*sB~1tCR^@46-#dT6vQ@e-wiSX(QB@CR6)vE=?VybM!OikU+w6ba~HmTz}uZ$lX zQ5A*QtEPxJedXCFwe>mAp~*rMIZbl8>g-A#xyJEjO<}pz6K&ksyNv)nOEKXv&Qpl+ zb5mEe+8D>Ky!$FkIGT|SR*`EHr`F7)MU3JpFS9QN!QQcZ zH2)CD%hD9NT4nn-wUcGs5UC|K^avT6{~??&=QbKsaGVsJ>HX9>@+-Y!6bcS)vhC{P zGo6BDS#vu%{85`%y6u!U+?YN@3lpIw1&MI-3&%=5q8z#QwM(d6RhAzz>+p@rG>rfM zHiyiaxN%C$FpCd1!Q_QW;;RQvpkxt&#^qj)XfY|^PCa5X@~>8lbIrd3E+SC;O`P0T zO{SFoob0FGG1jK62_Z)$CAPYBMn>6c4$4@Q`dy=#sxOOiJwv|4Y%0^rf3KvPnXD{o zQ>UX8THgX{yropP@=j{rcqMfzi*01MqQutb%e2_$9bQlrz0^0SbCPR*ETp;+OZf-w H?bUw)@0vsZ literal 0 HcmV?d00001 diff --git a/apps/tags/locale/pt/LC_MESSAGES/django.po b/apps/tags/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..833d520d2c --- /dev/null +++ b/apps/tags/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,268 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"PO-Revision-Date: 2011-11-02 01:45+0000\n" +"Last-Translator: emersonsoares \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:13 +msgid "Create new tags" +msgstr "Criar novas etiquetas" + +#: __init__.py:14 +msgid "Attach exising tags" +msgstr "Anexar etiquetas existentes" + +#: __init__.py:15 +msgid "Remove tags from documents" +msgstr "Remover etiquetas de documentos" + +#: __init__.py:16 +msgid "Delete global tags" +msgstr "Excluir etiquetas globais" + +#: __init__.py:17 +msgid "Edit global tags" +msgstr "Editar etiquetas globais" + +#: __init__.py:18 +msgid "View a document's tags" +msgstr "Ver etiquetas de um documento" + +#: __init__.py:20 widgets.py:15 +msgid "Tags" +msgstr "Etiquetas" + +#: __init__.py:28 +msgid "tag list" +msgstr "lista de etiquetas" + +#: __init__.py:29 +msgid "create new tag" +msgstr "criar nova etiqueta" + +#: __init__.py:30 +msgid "attach tag" +msgstr "anexar etiqueta" + +#: __init__.py:31 __init__.py:32 +msgid "remove" +msgstr "remover" + +#: __init__.py:33 __init__.py:58 utils.py:14 views.py:144 +msgid "tags" +msgstr "Etiquetas" + +#: __init__.py:34 __init__.py:37 +msgid "delete" +msgstr "excluir" + +#: __init__.py:35 +msgid "edit" +msgstr "editar" + +#: __init__.py:36 +msgid "tagged documents" +msgstr "documentos etiquetados" + +#: __init__.py:41 models.py:46 +msgid "color" +msgstr "cor" + +#: __init__.py:45 +msgid "color name" +msgstr "nome da cor" + +#: forms.py:14 +msgid "New tag" +msgstr "Nova etiqueta" + +#: forms.py:15 forms.py:24 +msgid "Color" +msgstr "Cor" + +#: forms.py:16 +msgid "Existing tags" +msgstr "Etiquetas existentes" + +#: forms.py:23 +msgid "Name" +msgstr "Nome" + +#: models.py:18 +msgid "Blue" +msgstr "Azul" + +#: models.py:19 +msgid "Cyan" +msgstr "Ciano" + +#: models.py:20 +msgid "Coral" +msgstr "Coral" + +#: models.py:21 +msgid "Green-Yellow" +msgstr "Verde-Amarelo" + +#: models.py:22 +msgid "Khaki" +msgstr "Caqui" + +#: models.py:23 +msgid "LightGrey" +msgstr "Cinza Claro" + +#: models.py:24 +msgid "Magenta" +msgstr "Magenta" + +#: models.py:25 +msgid "Red" +msgstr "Vermelho" + +#: models.py:26 +msgid "Orange" +msgstr "Laranja" + +#: models.py:27 +msgid "Yellow" +msgstr "Amarelo" + +#: models.py:45 views.py:185 views.py:233 views.py:248 +msgid "tag" +msgstr "etiqueta" + +#: models.py:49 +msgid "tag properties" +msgstr "propriedades de etiqueta" + +#: models.py:50 +msgid "tags properties" +msgstr "propriedades de etiquetas" + +#: views.py:33 +msgid "Tag already exists." +msgstr "Etiqueta já existe." + +#: views.py:40 +msgid "Tag created succesfully." +msgstr "Etiqueta criada com sucesso." + +#: views.py:46 +msgid "create tag" +msgstr "criar etiqueta" + +#: views.py:73 views.py:112 +msgid "Must choose either a new tag or an existing one." +msgstr "Deve optar por uma nova etiqueta ou uma já existente." + +#: views.py:77 views.py:116 +#, python-format +msgid "Document is already tagged as \"%s\"" +msgstr "Documento já está marcado como \"%s\"" + +#: views.py:86 +#, python-format +msgid "Tag \"%s\" added successfully." +msgstr "Etiqueta \"%s\" adicionada com sucesso." + +#: views.py:124 +#, python-format +msgid "Tag \"%s\" added and attached successfully." +msgstr "Etiqueta \"%s\", acrescentada e anexada com sucesso." + +#: views.py:126 +#, python-format +msgid "Tag \"%s\" attached successfully." +msgstr "Etiqueta \"%s\" anexada com sucesso." + +#: views.py:133 +#, python-format +msgid "attach tag to: %s" +msgstr "anexar etiqueta a: %s" + +#: views.py:149 +msgid "tagged items" +msgstr "itens marcados" + +#: views.py:166 views.py:280 +msgid "Must provide at least one tag." +msgstr "Deve fornecer pelo menos uma etiqueta." + +#: views.py:176 +#, python-format +msgid "Tag \"%s\" deleted successfully." +msgstr "Etiqueta \"%s\" removida com sucesso." + +#: views.py:178 views.py:294 +#, python-format +msgid "Error deleting tag \"%(tag)s\": %(error)s" +msgstr "Erro ao excluir etiqueta \" %(tag)s \": %(error)s " + +#: views.py:193 +#, python-format +msgid "Are you sure you wish to delete the tag: %s?" +msgstr "Tem certeza de que deseja excluir a etiqueta: %s?" + +#: views.py:194 views.py:197 +msgid "Will be removed from all documents." +msgstr "Será removido de todos os documentos." + +#: views.py:196 +#, python-format +msgid "Are you sure you wish to delete the tags: %s?" +msgstr "Você tem certeza que deseja deletar as etiquetas: %s?" + +#: views.py:221 +msgid "Tag updated succesfully." +msgstr "Etiqueta atualizada com sucesso." + +#: views.py:230 +#, python-format +msgid "edit tag: %s" +msgstr "editar etiqueta: %s" + +#: views.py:245 +#, python-format +msgid "documents with the tag \"%s\"" +msgstr "documentos com a etiqueta \"%s\"" + +#: views.py:258 +#, python-format +msgid "tags for: %s" +msgstr "etiquetas para: %s" + +#: views.py:292 +#, python-format +msgid "Tag \"%s\" removed successfully." +msgstr "Etiqueta \"%s\" removida com sucesso." + +#: views.py:308 +#, python-format +msgid "Are you sure you wish to remove the tag: %s?" +msgstr "Tem certeza de que deseja remover a etiqueta: %s?" + +#: views.py:310 +#, python-format +msgid "Are you sure you wish to remove the tags: %s?" +msgstr "Tem certeza de que deseja remover as etiquetas: %s?" + +#: templatetags/tags_tags.py:17 +msgid "Add tag to document" +msgstr "Adicionar etiquetas para o documento" + + diff --git a/apps/user_management/locale/pt/LC_MESSAGES/django.mo b/apps/user_management/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6915454337a54b2801e9599895102308c850b266 GIT binary patch literal 4722 zcmcJSO^g&p6vsBLsj=K zOW?r4MB{~vi6@NFNW73}Ffs8!6yw2z9^}NqnCO9M;)xr^_EwmCN2^xHjW{5cjv&F}53wZ@>?(x0f+i0^b44;Fn+kUhw^^Z)EIFv}@p9 z-~r!mfveG80Pg{hgR8(#z`Mb(z;)n{;23xbdXl>0WX3fjW2g{r#;VkUIg#J_^Ml+y=y_TcLKzeY!amP zPJ<*TeSZ$ZCF}@zJ9rFS0UigjGdp9V?q84#wi??Cd?58!>^uOR9B z3ncxw;w3z?J3-RB2K*i|;~>T9k6Ymb>W6d2!56`e;8Bq5{R~_QehpGw&Vl!Xzk?5e z%V0Fk%Ry>SfE4!`&$qxD+FyX=?@J&D*T6`M!&c8Xz!9{MfiR7o1fKvu_x&M~Uk1r983<8!7$muOLGteh zAo=^GA3x>C&-nhIKrD%!2T9Kb5T>v{{rKM?>A4Y3q&Ter$$!Hj$!!CXLTnF+KQ@CO zidPFnm~2eQA2e26v_8_Y9yjTH95>BXE4pg1kQHlTyzLwlCCKKYcc3hokaS_4wc`jq@bv8RjHx(4^XxHsb_-%xzW7qkz_ z*GMh9*T=x(qL@>j!JRg4>^Uv@g37tc{lk1@T0B!cl(Ebt&svfZHB$ohofaI^k_$%)HVe+o`31&8eJsHk;lan#QnQZdvkBWU?r27IKTbop3FT zGQL=}ztan9t+aDlM=2j38MU4pGs9Tks3e&&!)pDqq<}<;OG;{Kq&2lzCU0P_%e=Om z!UdIPnAfdCLPWP-m&P>mI9@2R9sw8S%LwG{5H4LTFqxZ-x3!v!LdiwOV=2&~QlBd& zHdufRFR_;pqGCO4%E!;}Q1Mh{JP}#FwVr2sfs3Yy(h}P@&uJ>P5)md*%A+)sx*_V)D#q@? zXk8e2S=|zO_CKjEoa|QnpC*}cnL047y5mb{Rd;;pq_X3QNJUd7GR@e52uZSd_w{$? zFv&1c&!RcWT(Wm}e{Tl~GG`VeZ`+^l!RDGIWYb9|B8nO97M_YkGP{l4FOP9>xJSbh znaq*_o?JD0RHiEBOAffaD+0r;Y4qb%)01ISTD>XjS@1#_96&o#X_Zfk1(EXFuF3sF z`(#_`ESNOSC=7PwO%qJ3DsN?3yIL+cqpX$Bmg*`gYh{FvlrAUqZaFe0mu6^c?{r{~ zN~jHXVS88khRXPOP?-oeOz`n7)lCyYWmBaB!C;@9i)i{@ITGE-D;ulhTh>)@4ei11 z52m$9O)N46A8MJ3OsE)PiL~I`Tzgi==Gi9smW+EEucgf#(GI4iNUD4aOUj!tQ1Vf~ zl==DjQbu~ChCEbCWmd+aLyj@!wp&vm!^D&`C@8nH^4QSi3zN03%f?HUAykPB=@d*a zw6V}k9)gk>hssu7ZwZaFb^FZp^TC#`9L?8|I;f>}6=KI!`Igxz>sVXm?QCc&&b5ex z=ao)y!lZ56G}||9OGUZ3z_C2+ygSQ-w8sU7fdC%`eg} z(YXDLa7YwFJJPYOe++vR`j>dg4RrMPDMV%ELM`^|fI`e|CGM3klrCM4y*xswWhfg_ z8l63P_9OaGaxOt(L8`0HdIo9PO|dS@b0kpmuoV!Z literal 0 HcmV?d00001 diff --git a/apps/user_management/locale/pt/LC_MESSAGES/django.po b/apps/user_management/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..c5701552fa --- /dev/null +++ b/apps/user_management/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Renata Oliveira , 2011. +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"PO-Revision-Date: 2011-11-03 03:18+0000\n" +"Last-Translator: renataoliveira \n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:8 +msgid "Create new users" +msgstr "Criar novos usuários" + +#: __init__.py:9 +msgid "Edit existing users" +msgstr "Editar usuários existentes" + +#: __init__.py:10 +msgid "View existing users" +msgstr "Ver os usuários existentes" + +#: __init__.py:11 +msgid "Delete existing users" +msgstr "Exclui usuários existentes" + +#: __init__.py:13 +msgid "Create new groups" +msgstr "Criar novos grupos" + +#: __init__.py:14 +msgid "Edit existing groups" +msgstr "Editar grupos existentes" + +#: __init__.py:15 +msgid "View existing groups" +msgstr "Ver grupos existentes" + +#: __init__.py:16 +msgid "Delete existing groups" +msgstr "Excluir grupos existentes" + +#: __init__.py:18 +msgid "User management" +msgstr "Gerenciar usuários" + +#: __init__.py:28 +msgid "user list" +msgstr "lista de usuários" + +#: __init__.py:29 views.py:31 +msgid "users" +msgstr "usuários" + +#: __init__.py:30 __init__.py:39 +msgid "edit" +msgstr "editar" + +#: __init__.py:31 views.py:92 +msgid "create new user" +msgstr "criar novo usuário" + +#: __init__.py:32 __init__.py:33 __init__.py:41 __init__.py:42 +msgid "delete" +msgstr "excluir" + +#: __init__.py:34 __init__.py:35 +msgid "reset password" +msgstr "redefinir senha" + +#: __init__.py:37 +msgid "group list" +msgstr "lista de grupos" + +#: __init__.py:38 views.py:222 +msgid "groups" +msgstr "grupos" + +#: __init__.py:40 views.py:270 +msgid "create new group" +msgstr "criar novo grupo" + +#: __init__.py:43 views.py:226 +msgid "members" +msgstr "membros" + +#: forms.py:13 +msgid "New password" +msgstr "Nova senha" + +#: forms.py:14 +msgid "Confirm password" +msgstr "Confirmar senha" + +#: views.py:35 +msgid "full name" +msgstr "nome completo" + +#: views.py:39 +msgid "email" +msgstr "e-mail" + +#: views.py:43 +msgid "active" +msgstr "ativo" + +#: views.py:58 +msgid "" +"Super user and staff user editing is not allowed, use the admin interface " +"for these cases." +msgstr "" +"Edição de super usuário e usuário pessoal não é permitida, use a interface " +"de administração para esses casos." + +#: views.py:65 +#, python-format +msgid "User \"%s\" updated successfully." +msgstr "Usuário \"%s\" atualizado com sucesso." + +#: views.py:71 +#, python-format +msgid "edit user: %s" +msgstr "editar usuário: %s" + +#: views.py:74 views.py:130 views.py:193 +msgid "user" +msgstr "usuário" + +#: views.py:86 +#, python-format +msgid "User \"%s\" created successfully." +msgstr "Usuário \"%s\" criado com sucesso." + +#: views.py:108 views.py:162 +msgid "Must provide at least one user." +msgstr "Deve fornecer pelo menos um usuário." + +#: views.py:118 +msgid "" +"Super user and staff user deleting is not allowed, use the admin interface " +"for these cases." +msgstr "" +"Excluir super usuário e usuário pessoal não é permitido, use a interface de " +"administração para esses casos." + +#: views.py:121 +#, python-format +msgid "User \"%s\" deleted successfully." +msgstr "Usuário \"%s\" removido com sucesso." + +#: views.py:123 +#, python-format +msgid "Error deleting user \"%(user)s\": %(error)s" +msgstr "Erro ao excluir usuário \"%(user)s\": %(error)s " + +#: views.py:138 +#, python-format +msgid "Are you sure you wish to delete the user: %s?" +msgstr "Tem certeza de que deseja excluir o usuário: %s?" + +#: views.py:140 +#, python-format +msgid "Are you sure you wish to delete the users: %s?" +msgstr "Tem certeza de que deseja excluir os usuários: %s?" + +#: views.py:173 +msgid "Passwords do not match, try again." +msgstr "Senhas não coincidem, tente novamente." + +#: views.py:178 +msgid "" +"Super user and staff user password reseting is not allowed, use the admin " +"interface for these cases." +msgstr "" +"Redefinir senha de super usuário e usuário pessoal não é permitido, use a " +"interface de administração para esses casos." + +#: views.py:182 +#, python-format +msgid "Successfull password reset for user: %s." +msgstr "Redefinição de senha do usuário bem-sucedida: %s." + +#: views.py:184 +#, python-format +msgid "Error reseting password for user \"%(user)s\": %(error)s" +msgstr "Erro de redefinição de senha para o usuário \"%(user)s\": %(error)s " + +#: views.py:200 +#, python-format +msgid "Reseting password for user: %s" +msgstr "Redefinindo senha para o usuário: %s" + +#: views.py:202 +#, python-format +msgid "Reseting password for users: %s" +msgstr "Redefinindo senha para os usuários: %s" + +#: views.py:243 +#, python-format +msgid "Group \"%s\" updated successfully." +msgstr "Grupo \"%s\" atualizado com sucesso." + +#: views.py:249 +#, python-format +msgid "edit group: %s" +msgstr "editar grupo: %s" + +#: views.py:252 views.py:305 views.py:350 +msgid "group" +msgstr "grupo" + +#: views.py:264 +#, python-format +msgid "Group \"%s\" created successfully." +msgstr "Grupo \"%s\" criado com sucesso." + +#: views.py:286 +msgid "Must provide at least one group." +msgstr "Deve fornecer pelo menos um grupo." + +#: views.py:296 +#, python-format +msgid "Group \"%s\" deleted successfully." +msgstr "Grupo \"%s\" removido com sucesso." + +#: views.py:298 +#, python-format +msgid "Error deleting group \"%(group)s\": %(error)s" +msgstr "Erro ao excluir o grupo \"%(group)s\": %(error)s " + +#: views.py:313 +#, python-format +msgid "Are you sure you wish to delete the group: %s?" +msgstr "Tem certeza de que deseja excluir o grupo: %s?" + +#: views.py:315 +#, python-format +msgid "Are you sure you wish to delete the groups: %s?" +msgstr "Tem certeza de que deseja excluir os grupos: %s?" + +#: views.py:345 +#, python-format +msgid "non members of group: %s" +msgstr "não-membros do grupo: %s" + +#: views.py:346 +#, python-format +msgid "members of group: %s" +msgstr "membros do grupo: %s" + + diff --git a/apps/web_theme/locale/pt/LC_MESSAGES/django.mo b/apps/web_theme/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3f55962b2d5d71fb59fac5bc34b8ae1be86f7227 GIT binary patch literal 420 zcmYL^-%i3X6o)Z-wM(zPsEHREJ-7iTSeUW0f{Xh@#vswV3U!W*c4>>z2l4fM7CSX^ z(l2e(@3g;u9UgqPZ0%W&EGL$I%Y~(>zGZC>ukGA8|20)|&6ftk6)d>Yr4$%V$>@Ph zC|b~L7N&`l@meYau`bFL+-(aDxx~nsra6ohXT~-`zzoNz<9Z(0;dYUCg?n9ad#-Cm z$oN~?T>j@hQj$TOLO{@cisSJ7DNU#oF>N4MOz4UksW2MPqX;D=rf5iG5=OTq2r@dG z-B?u=TUKz$Ion_qkz_J&A`heJwkq3F6+6d9jl-Dk{^zw_XC#H;!any=+uVk~o6EXl zr5K>)D^r>qf1Zz_zw??{FI)i?OSvjVfl>dtG|sfzDptW*s*T1-)IVG8cLwNp>7NR8 K>?7~YX?+8!_;d#V literal 0 HcmV?d00001 diff --git a/apps/web_theme/locale/pt/LC_MESSAGES/django.po b/apps/web_theme/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000000..328369d112 --- /dev/null +++ b/apps/web_theme/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,75 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 15:43-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: conf/settings.py:10 +msgid "" +"CSS theme to apply, options are: amro, bec, bec-green, blue, default, djime-" +"cerulean, drastic-dark, kathleene, olive, orange, red, reidb-greenish and " +"warehouse." +msgstr "" + +#: conf/settings.py:12 +msgid "Display extra information in the login screen." +msgstr "" + +#: templates/web_theme_base.html:101 +msgid "dismiss all notifications" +msgstr "" + +#: templates/web_theme_base.html:101 +msgid "close all" +msgstr "" + +#: templates/web_theme_base.html:102 +msgid "dismiss this notification" +msgstr "" + +#: templates/web_theme_base.html:102 +msgid "close" +msgstr "" + +#: templates/web_theme_login.html:12 templates/web_theme_login.html.py:33 +msgid "Login" +msgstr "" + +#: templates/web_theme_login.html:17 +msgid "You are already logged in" +msgstr "" + +#: templates/web_theme_login.html:20 +msgid "Redirecting you to the website entry point in 5 seconds." +msgstr "" + +#: templates/web_theme_login.html:23 +#, python-format +msgid "" +"Or click here if redirection doesn't " +"work." +msgstr "" + +#: templates/pagination/pagination.html:6 +#: templates/pagination/pagination.html:8 +msgid "Previous" +msgstr "" + +#: templates/pagination/pagination.html:26 +#: templates/pagination/pagination.html:28 +msgid "Next" +msgstr "" From 52099b17c9b98387c56d6b9600454b7cbc5d2d48 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:20:23 -0400 Subject: [PATCH 010/220] Added convinience scrtip to compile translation files --- misc/compilemessages_all.sh | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 misc/compilemessages_all.sh diff --git a/misc/compilemessages_all.sh b/misc/compilemessages_all.sh new file mode 100755 index 0000000000..0a386d95e7 --- /dev/null +++ b/misc/compilemessages_all.sh @@ -0,0 +1,67 @@ +#!/bin/sh +COMPILEMESSAGES="django-admin compilemessages" +PWD=`pwd` +BASE=$PWD + +cd $BASE/apps/common +$COMPILEMESSAGES -l pt + +cd $BASE/apps/converter +$COMPILEMESSAGES -l pt + +cd $BASE/apps/documents +$COMPILEMESSAGES -l pt + +cd $BASE/apps/document_comments +$COMPILEMESSAGES -l pt + +cd $BASE/apps/document_indexing +$COMPILEMESSAGES -l pt + +cd $BASE/apps/dynamic_search +$COMPILEMESSAGES -l pt + +cd $BASE/apps/folders +$COMPILEMESSAGES -l pt + +cd $BASE/apps/history +$COMPILEMESSAGES -l pt + +cd $BASE/apps/grouping +$COMPILEMESSAGES -l pt + +cd $BASE/apps/main +$COMPILEMESSAGES -l pt + +cd $BASE/apps/metadata +$COMPILEMESSAGES -l pt + +cd $BASE/apps/navigation +$COMPILEMESSAGES -l pt + +cd $BASE/apps/ocr +$COMPILEMESSAGES -l pt + +cd $BASE/apps/permissions +$COMPILEMESSAGES -l pt + +cd $BASE/apps/project_setup +$COMPILEMESSAGES -l pt + +cd $BASE/apps/project_tools +$COMPILEMESSAGES -l pt + +cd $BASE/apps/smart_settings +$COMPILEMESSAGES -l pt + +cd $BASE/apps/sources +$COMPILEMESSAGES -l pt + +cd $BASE/apps/tags +$COMPILEMESSAGES -l pt + +cd $BASE/apps/user_management +$COMPILEMESSAGES -l pt + +cd $BASE/apps/web_theme +$COMPILEMESSAGES -l pt From cd4ec8cb1adfef5b7743a503c718716c8803950f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:24:49 -0400 Subject: [PATCH 011/220] Added new language translator to the contributors file --- docs/contributors.rst | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/contributors.rst b/docs/contributors.rst index 367645d292..4fc62abaa4 100644 --- a/docs/contributors.rst +++ b/docs/contributors.rst @@ -9,6 +9,10 @@ How to contribute? You can help further the development of **Mayan EDMS** by reporting bugs, submitting documentation, patches, with monetary or hardware donations. +Bug fixes +--------- +* Aziz M. Bookwala (https://github.com/azizmb) + Bug reports ----------- * Aziz M. Bookwala (https://github.com/azizmb) @@ -17,18 +21,16 @@ Bug reports * Brian Huxley * dAnjou (https://github.com/dAnjou) -Bug fixes ---------- -* Aziz M. Bookwala (https://github.com/azizmb) - -Translations ------------- -* Emerson Soares (http://emersonsoares.com) +Patches +------- +* Meurig Freeman (https://github.com/meurig) Suggestions ----------- * Cezar Jenkins (https://twitter.com/#!/emperorcezar) -Patches -------- -* Meurig Freeman (https://github.com/meurig) +Translations +------------ +* Emerson Soares (http://emersonsoares.com) +* Renata Oliveira (https://twitter.com/#!/rnataoliveira) +* Sergey Glita From 8e2210b799b5689bb911d2cd5a558445e44fdeb2 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:40:19 -0400 Subject: [PATCH 012/220] Added initial Russian translation files --- apps/common/locale/ru/LC_MESSAGES/django.po | 300 +++++- .../converter/locale/ru/LC_MESSAGES/django.po | 923 ++++++++++++++++++ .../locale/ru/LC_MESSAGES/django.po | 102 ++ .../locale/ru/LC_MESSAGES/django.po | 205 ++++ .../documents/locale/ru/LC_MESSAGES/django.po | 907 +++++++++++++++++ .../locale/ru/LC_MESSAGES/django.po | 114 ++- apps/folders/locale/ru/LC_MESSAGES/django.po | 212 ++++ apps/grouping/locale/ru/LC_MESSAGES/django.po | 200 ++++ apps/history/locale/ru/LC_MESSAGES/django.po | 106 ++ apps/main/locale/ru/LC_MESSAGES/django.po | 143 +++ apps/metadata/locale/ru/LC_MESSAGES/django.po | 451 +++++++++ .../locale/ru/LC_MESSAGES/django.po | 32 + apps/ocr/locale/ru/LC_MESSAGES/django.po | 447 +++++++++ .../locale/ru/LC_MESSAGES/django.po | 28 + .../locale/ru/LC_MESSAGES/django.po | 24 + .../locale/ru/LC_MESSAGES/django.po | 36 + apps/sources/locale/ru/LC_MESSAGES/django.po | 461 +++++++++ apps/tags/locale/ru/LC_MESSAGES/django.po | 267 +++++ .../locale/ru/LC_MESSAGES/django.po | 254 +++++ .../web_theme/locale/ru/LC_MESSAGES/django.po | 63 +- 20 files changed, 5248 insertions(+), 27 deletions(-) create mode 100644 apps/converter/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/document_comments/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/document_indexing/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/documents/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/folders/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/grouping/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/history/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/main/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/metadata/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/navigation/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/ocr/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/project_setup/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/project_tools/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/smart_settings/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/sources/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/tags/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/user_management/locale/ru/LC_MESSAGES/django.po diff --git a/apps/common/locale/ru/LC_MESSAGES/django.po b/apps/common/locale/ru/LC_MESSAGES/django.po index 73789abb79..eb42170de4 100644 --- a/apps/common/locale/ru/LC_MESSAGES/django.po +++ b/apps/common/locale/ru/LC_MESSAGES/django.po @@ -2,27 +2,317 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-01-30 16:51+0300\n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" "PO-Revision-Date: 2011-01-30 13:08\n" "Last-Translator: \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: \n" "X-Translated-Using: django-rosetta 0.5.5\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: views.py:6 templates/password_change_done.html:5 +#: __init__.py:17 +msgid "change password" +msgstr "" + +#: __init__.py:18 +msgid "user details" +msgstr "" + +#: __init__.py:19 +msgid "edit details" +msgstr "" + +#: __init__.py:23 __init__.py:29 +msgid "about" +msgstr "" + +#: __init__.py:24 +msgid "changelog" +msgstr "" + +#: __init__.py:25 +msgid "license" +msgstr "" + +#: forms.py:99 +msgid "Selection" +msgstr "" + +#: forms.py:131 +msgid "Email" +msgstr "" + +#: forms.py:142 +msgid "" +"Please enter a correct email and password. Note that the password fields is " +"case-sensitive." +msgstr "" + +#: forms.py:144 +msgid "This account is inactive." +msgstr "" + +#: literals.py:24 +msgid "A5" +msgstr "" + +#: literals.py:25 +msgid "A4" +msgstr "" + +#: literals.py:26 +msgid "A3" +msgstr "" + +#: literals.py:27 +msgid "B5" +msgstr "" + +#: literals.py:28 +msgid "B4" +msgstr "" + +#: literals.py:29 +msgid "Letter" +msgstr "" + +#: literals.py:30 +msgid "Legal" +msgstr "" + +#: literals.py:31 +msgid "Ledger" +msgstr "" + +#: literals.py:38 +msgid "Portrait" +msgstr "" + +#: literals.py:39 +msgid "Landscape" +msgstr "" + +#: utils.py:289 +msgid "function found" +msgstr "" + +#: utils.py:291 utils.py:293 +#, python-format +msgid "class found: %s" +msgstr "" + +#: views.py:24 templates/password_change_done.html:5 msgid "Your password has been successfully changed." msgstr "Ваш пароль был успешно изменен." +#: views.py:41 +msgid "No action selected." +msgstr "" + +#: views.py:45 +msgid "Must select at least one item." +msgstr "" + +#: views.py:86 +#, python-format +msgid "%(selection)s added successfully added to %(right_list_title)s." +msgstr "" + +#: views.py:89 views.py:106 +#, python-format +msgid "Unable to add %(selection)s to %(right_list_title)s." +msgstr "" + +#: views.py:103 +#, python-format +msgid "%(selection)s added successfully removed from %(right_list_title)s." +msgstr "" + +#: views.py:121 +msgid "Add" +msgstr "" + +#: views.py:132 +msgid "Remove" +msgstr "" + +#: views.py:155 +msgid "current user details" +msgstr "" + +#: views.py:172 +msgid "Current user's details updated." +msgstr "" + +#: views.py:181 +msgid "edit current user details" +msgstr "" + +#: views.py:207 +msgid "Changelog" +msgstr "" + +#: views.py:220 +msgid "License" +msgstr "" + +#: widgets.py:58 +msgid "None" +msgstr "" + +#: conf/settings.py:15 +msgid "" +"Temporary directory used site wide to store thumbnails, previews and " +"temporary files. If none is specified, one will be created using tempfile." +"mkdtemp()" +msgstr "" + +#: conf/settings.py:65 +msgid "" +"Controls the mechanism used to authenticated user. Options are: username, " +"email" +msgstr "" + +#: templates/403.html:3 templates/403.html.py:7 +msgid "Insufficient permissions" +msgstr "" + +#: templates/403.html:9 +msgid "You don't have enough permissions for this operation." +msgstr "" + +#: templates/404.html:3 templates/404.html.py:7 +msgid "Page not found" +msgstr "" + +#: templates/404.html:9 +msgid "Sorry, but the requested page could not be found." +msgstr "" + +#: templates/calculate_form_title.html:11 +#, python-format +msgid "Details for %(object_name)s: %(object)s" +msgstr "" + +#: templates/calculate_form_title.html:13 +#, python-format +msgid "Details for: %(object)s" +msgstr "" + +#: templates/calculate_form_title.html:18 +#, python-format +msgid "Edit %(object_name)s:" +msgstr "" + +#: templates/calculate_form_title.html:20 +msgid "Edit" +msgstr "" + +#: templates/calculate_form_title.html:24 +#, python-format +msgid "Create new %(object_name)s" +msgstr "" + +#: templates/calculate_form_title.html:26 +msgid "Create" +msgstr "" + +#: templates/generic_assign_remove.html:3 +#, python-format +msgid "Assign %(title)s %(object)s" +msgstr "" + +#: templates/generic_confirm.html:3 templates/generic_confirm.html.py:18 +msgid "Confirm" +msgstr "" + +#: templates/generic_confirm.html:16 +msgid "Confirm delete" +msgstr "" + +#: templates/generic_confirm.html:28 +msgid "form icon" +msgstr "" + +#: templates/generic_confirm.html:36 +#, python-format +msgid "Are you sure you wish to delete %(object_name)s: %(object)s?" +msgstr "" + +#: templates/generic_confirm.html:38 +#, python-format +msgid "Are you sure you wish to delete: %(object)s?" +msgstr "" + +#: templates/generic_confirm.html:46 +msgid "Yes" +msgstr "" + +#: templates/generic_confirm.html:50 +msgid "No" +msgstr "" + +#: templates/generic_form_instance.html:37 +#: templates/generic_form_subtemplate.html:52 +msgid "required" +msgstr "" + +#: templates/generic_form_subtemplate.html:76 +#: templates/generic_form_subtemplate.html:78 +#: templates/generic_list_horizontal_subtemplate.html:51 +#: templates/generic_list_horizontal_subtemplate.html:178 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 +msgid "Save" +msgstr "" + +#: templates/generic_form_subtemplate.html:76 +#: templates/generic_form_subtemplate.html:78 +#: templates/generic_list_horizontal_subtemplate.html:51 +#: templates/generic_list_horizontal_subtemplate.html:178 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 +msgid "Submit" +msgstr "" + +#: templates/generic_list.html:6 templates/generic_list_horizontal.html:6 +#, python-format +msgid "List of %(stripped_title)s" +msgstr "" + +#: templates/generic_list_horizontal_subtemplate.html:23 +#: templates/generic_list_subtemplate.html:24 +#, python-format +msgid "" +"List of %(title)s (%(start)s - %(end)s out of %(total)s) (Page " +"%(page_number)s of %(total_pages)s)" +msgstr "" + +#: templates/generic_list_horizontal_subtemplate.html:25 +#: templates/generic_list_subtemplate.html:26 +#, python-format +msgid "List of %(title)s (%(total)s)" +msgstr "" + +#: templates/generic_list_subtemplate.html:72 +msgid "Identifier" +msgstr "" + +#: templates/generic_list_subtemplate.html:152 +#, python-format +msgid "There are no %(stripped_title)s" +msgstr "" + #: templates/login.html:5 msgid "Login" msgstr "Логин" diff --git a/apps/converter/locale/ru/LC_MESSAGES/django.po b/apps/converter/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..e3ce3ba547 --- /dev/null +++ b/apps/converter/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,923 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:10 +msgid "file formats" +msgstr "" + +#: literals.py:18 +msgid "Resize" +msgstr "" + +#: literals.py:19 +msgid "Resize." +msgstr "" + +#: literals.py:21 literals.py:36 +msgid "width" +msgstr "" + +#: literals.py:22 literals.py:37 +msgid "height" +msgstr "" + +#: literals.py:26 +msgid "Rotate" +msgstr "" + +#: literals.py:27 +msgid "Rotate by n degress." +msgstr "" + +#: literals.py:29 +msgid "degrees" +msgstr "" + +#: literals.py:33 +msgid "Density" +msgstr "" + +#: literals.py:34 +msgid "Change the resolution (ie: DPI) without resizing." +msgstr "" + +#: literals.py:41 +msgid "Zoom" +msgstr "" + +#: literals.py:42 +msgid "Zoom by n percent." +msgstr "" + +#: literals.py:44 +msgid "percent" +msgstr "" + +#: literals.py:50 +msgid "Hasselblad Photo RAW, CFV/H3D39II" +msgstr "" + +#: literals.py:51 literals.py:52 +msgid "Photoshop resource format" +msgstr "" + +#: literals.py:53 +msgid "Photoshop resource text format" +msgstr "" + +#: literals.py:54 +msgid "Photoshop resource wide text format" +msgstr "" + +#: literals.py:56 +msgid "Raw alpha samples" +msgstr "" + +#: literals.py:57 +msgid "Adobe Illustrator CS2" +msgstr "" + +#: literals.py:58 +msgid "Raw application information" +msgstr "" + +#: literals.py:59 +msgid "Raw JPEG binary data" +msgstr "" + +#: literals.py:60 +msgid "PFS: 1st Publisher Clip Art" +msgstr "" + +#: literals.py:61 +msgid "Sony Alpha DSLR Raw Image Format" +msgstr "" + +#: literals.py:62 +msgid "Microsoft Audio/Visual Interleaved" +msgstr "" + +#: literals.py:63 +msgid "AVS X image" +msgstr "" + +#: literals.py:65 +msgid "Raw blue samples" +msgstr "" + +#: literals.py:66 +msgid "Raw blue, green, and red samples" +msgstr "" + +#: literals.py:67 +msgid "Raw blue, green, red and alpha samples" +msgstr "" + +#: literals.py:68 +msgid "Microsoft Windows bitmap image" +msgstr "" + +#: literals.py:69 +msgid "Microsoft Windows bitmap image version 2" +msgstr "" + +#: literals.py:70 +msgid "Microsoft Windows bitmap image version 3" +msgstr "" + +#: literals.py:71 +msgid "BRF ASCII Braille format" +msgstr "" + +#: literals.py:72 +msgid "Raw blue, red, and green samples" +msgstr "" + +#: literals.py:74 +msgid "Raw cyan samples" +msgstr "" + +#: literals.py:75 literals.py:180 +msgid "Magick Persistent Cache image format" +msgstr "" + +#: literals.py:76 literals.py:77 +msgid "Continuous Acquisition and Life-cycle Support Type 1 image" +msgstr "" + +#: literals.py:78 +msgid "Image caption" +msgstr "" + +#: literals.py:79 +msgid "Cineon Image File" +msgstr "" + +#: literals.py:80 +msgid "Cisco IP phone image format" +msgstr "" + +#: literals.py:81 +msgid "Image Clip Mask" +msgstr "" + +#: literals.py:82 +msgid "Raw cyan, magenta, yellow, and black samples" +msgstr "" + +#: literals.py:83 +msgid "Raw cyan, magenta, yellow, black, and opacity samples" +msgstr "" + +#: literals.py:84 literals.py:85 +msgid "Canon Digital Camera Raw Image Format" +msgstr "" + +#: literals.py:86 +msgid "Microsoft Cursor Icon" +msgstr "" + +#: literals.py:87 +msgid "DR Halo" +msgstr "" + +#: literals.py:89 +msgid "Digital Imaging and Communications in Medicine image" +msgstr "" + +#: literals.py:90 +msgid "Kodak Digital Camera Raw Image File" +msgstr "" + +#: literals.py:91 +msgid "ZSoft IBM PC multi-page Paintbrush" +msgstr "" + +#: literals.py:92 +msgid "Microsoft DirectDraw Surface" +msgstr "" + +#: literals.py:93 +msgid "Multi-face font package (Freetype 2.4.2)" +msgstr "" + +#: literals.py:94 +msgid "Déjà vu" +msgstr "" + +#: literals.py:95 +msgid "Adobe Digital Negative" +msgstr "" + +#: literals.py:96 +msgid "Graphviz" +msgstr "" + +#: literals.py:97 +msgid "SMPTE 268M-2003 (DPX 2.0)" +msgstr "" + +#: literals.py:99 +msgid "Encapsulated Portable Document Format" +msgstr "" + +#: literals.py:100 literals.py:105 +msgid "Adobe Encapsulated PostScript Interchange format" +msgstr "" + +#: literals.py:101 literals.py:104 +msgid "Adobe Encapsulated PostScript" +msgstr "" + +#: literals.py:102 +msgid "Adobe Level II Encapsulated PostScript" +msgstr "" + +#: literals.py:103 +msgid "Adobe Level III Encapsulated PostScript" +msgstr "" + +#: literals.py:106 +msgid "Adobe Encapsulated PostScript with TIFF preview" +msgstr "" + +#: literals.py:107 +msgid "Adobe Level II Encapsulated PostScript with TIFF preview" +msgstr "" + +#: literals.py:108 +msgid "Adobe Level III Encapsulated PostScript with TIFF preview" +msgstr "" + +#: literals.py:109 +msgid "Epson RAW Format" +msgstr "" + +#: literals.py:110 +msgid "Exif digital camera binary data" +msgstr "" + +#: literals.py:111 +msgid "High Dynamic-range (HDR)" +msgstr "" + +#: literals.py:113 +msgid "Group 3 FAX (Not TIFF Group3 FAX)" +msgstr "" + +#: literals.py:114 +msgid "Autodesk FLI animations file" +msgstr "" + +#: literals.py:115 +msgid "Autodesk FLC animations file" +msgstr "" + +#: literals.py:116 literals.py:119 +msgid "Flexible Image Transport System" +msgstr "" + +#: literals.py:117 +msgid "Kodak FlashPix file" +msgstr "" + +#: literals.py:118 literals.py:224 +msgid "Plasma fractal image" +msgstr "" + +#: literals.py:121 +msgid "Raw green samples" +msgstr "" + +#: literals.py:122 +msgid "Group 3 FAX" +msgstr "" + +#: literals.py:123 +msgid "Raw green, blue, and red samples" +msgstr "" + +#: literals.py:124 +msgid "GIMP brush file" +msgstr "" + +#: literals.py:125 +msgid "CompuServe graphics interchange format (version 89a)" +msgstr "" + +#: literals.py:126 +msgid "CompuServe graphics interchange format (version 87a)" +msgstr "" + +#: literals.py:127 +msgid "Gradual passing from one shade to another" +msgstr "" + +#: literals.py:128 +msgid "Raw gray samples" +msgstr "" + +#: literals.py:129 +msgid "Raw green, red, and blue samples" +msgstr "" + +#: literals.py:130 +msgid "Raw CCITT Group4" +msgstr "" + +#: literals.py:132 +msgid "Histogram of the image" +msgstr "" + +#: literals.py:133 +msgid "HRZ: Slow scan TV" +msgstr "" + +#: literals.py:134 literals.py:135 literals.py:254 +msgid "Hypertext Markup Language and a client-side image map" +msgstr "" + +#: literals.py:137 literals.py:263 literals.py:278 literals.py:282 +msgid "Truevision Targa image" +msgstr "" + +#: literals.py:138 literals.py:139 +msgid "ICC Color Profile" +msgstr "" + +#: literals.py:140 literals.py:141 +msgid "Microsoft Icon" +msgstr "" + +#: literals.py:142 +msgid "Hald CLUT identity image" +msgstr "" + +#: literals.py:143 +msgid "LabEye image format" +msgstr "" + +#: literals.py:144 +msgid "GraphicsMagick Embedded Image" +msgstr "" + +#: literals.py:145 +msgid "The image format and characteristics" +msgstr "" + +#: literals.py:146 +msgid "Base64-encoded inline images" +msgstr "" + +#: literals.py:147 +msgid "IPL Image Sequence" +msgstr "" + +#: literals.py:148 +msgid "IPTC Newsphoto" +msgstr "" + +#: literals.py:149 literals.py:150 +msgid "IPTC Newsphoto text format" +msgstr "" + +#: literals.py:151 +msgid "ISO/TR 11548-1 format" +msgstr "" + +#: literals.py:153 literals.py:156 +msgid "JPEG-2000 Code Stream Syntax" +msgstr "" + +#: literals.py:154 +msgid "JPEG Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" + +#: literals.py:155 +msgid "JPEG-2000 JP2 File Format Syntax" +msgstr "" + +#: literals.py:157 literals.py:158 +msgid "Joint Photographic Experts Group JFIF format (IJG JPEG 62)" +msgstr "" + +#: literals.py:159 +msgid "JPEG-2000 File Format Syntax" +msgstr "" + +#: literals.py:161 +msgid "Raw black samples" +msgstr "" + +#: literals.py:162 literals.py:163 +msgid "Kodak Digital Camera Raw Image Format" +msgstr "" + +#: literals.py:165 +msgid "Image label" +msgstr "" + +#: literals.py:167 +msgid "Raw magenta samples" +msgstr "" + +#: literals.py:168 literals.py:178 literals.py:181 literals.py:182 +msgid "MPEG Video Stream" +msgstr "" + +#: literals.py:169 +msgid "Raw MPEG-4 Video" +msgstr "" + +#: literals.py:170 +msgid "Colormap intensities and indices" +msgstr "" + +#: literals.py:171 +msgid "MATLAB image format" +msgstr "" + +#: literals.py:172 +msgid "MATTE raw opacity format" +msgstr "" + +#: literals.py:173 +msgid "8-bit McIdas area file" +msgstr "" + +#: literals.py:174 +msgid "Microsoft Image Composer (MIC) file" +msgstr "" + +#: literals.py:175 +msgid "Magick Image File Format" +msgstr "" + +#: literals.py:176 +msgid "" +"Multiple-image Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" + +#: literals.py:177 +msgid "Raw Bi-level bitmap in least-significant-byte first order" +msgstr "" + +#: literals.py:179 +msgid "MPEG-4 Video Stream" +msgstr "" + +#: literals.py:183 +msgid "Sony (Minolta) Raw Image File" +msgstr "" + +#: literals.py:184 +msgid "Magick Scripting Language" +msgstr "" + +#: literals.py:185 +msgid "Windows 1 and 2 MSP file format" +msgstr "" + +#: literals.py:186 +msgid "ImageMagick's own SVG internal renderer" +msgstr "" + +#: literals.py:187 +msgid "MTV Raytracing image format" +msgstr "" + +#: literals.py:188 +msgid "Magick Vector Graphics" +msgstr "" + +#: literals.py:190 +msgid "Nikon Digital SLR Camera Raw Image File" +msgstr "" + +#: literals.py:191 +msgid "Constant image of uniform color" +msgstr "" + +#: literals.py:193 +msgid "Raw opacity samples" +msgstr "" + +#: literals.py:194 +msgid "Olympus Digital Camera Raw Image File" +msgstr "" + +#: literals.py:195 +msgid "On-the-air bitmap" +msgstr "" + +#: literals.py:196 +msgid "Open Type font (Freetype 2.4.2)" +msgstr "" + +#: literals.py:198 +msgid "Xv thumbnail format" +msgstr "" + +#: literals.py:199 literals.py:276 +msgid "16bit/pixel interleaved YUV" +msgstr "" + +#: literals.py:200 +msgid "Palm pixmap" +msgstr "" + +#: literals.py:201 +msgid "Common 2-dimensional bitmap format" +msgstr "" + +#: literals.py:202 +msgid "Predefined pattern" +msgstr "" + +#: literals.py:203 +msgid "Portable bitmap format (black and white)" +msgstr "" + +#: literals.py:204 literals.py:205 +msgid "Photo CD" +msgstr "" + +#: literals.py:206 +msgid "Page Control Language" +msgstr "" + +#: literals.py:207 literals.py:220 +msgid "Apple Macintosh QuickDraw/PICT" +msgstr "" + +#: literals.py:208 +msgid "ZSoft IBM PC Paintbrush" +msgstr "" + +#: literals.py:209 +msgid "Palm Database ImageViewer Format" +msgstr "" + +#: literals.py:210 +msgid "Portable Document Format" +msgstr "" + +#: literals.py:211 +msgid "Portable Document Archive Format" +msgstr "" + +#: literals.py:212 +msgid "Pentax Electronic File" +msgstr "" + +#: literals.py:213 +msgid "Embrid Embroidery Format" +msgstr "" + +#: literals.py:214 +msgid "Postscript Type 1 font (ASCII) (Freetype 2.4.2)" +msgstr "" + +#: literals.py:215 +msgid "Postscript Type 1 font (binary) (Freetype 2.4.2)" +msgstr "" + +#: literals.py:216 +msgid "Portable float format" +msgstr "" + +#: literals.py:217 +msgid "Portable graymap format (gray scale)" +msgstr "" + +#: literals.py:218 +msgid "JPEG-2000 VM Format" +msgstr "" + +#: literals.py:219 +msgid "Personal Icon" +msgstr "" + +#: literals.py:221 +msgid "Alias/Wavefront RLE image format" +msgstr "" + +#: literals.py:222 +msgid "PIXAR raster file" +msgstr "" + +#: literals.py:223 +msgid "Joint Photographic Experts Group JFIF format (62)" +msgstr "" + +#: literals.py:225 +msgid "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" + +#: literals.py:226 +msgid "" +"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" + +#: literals.py:227 +msgid "" +"32-bit RGBA PNG, semitransparency OK (libpng 1.2.42,1.2.44, zlib " +"1.2.3.3,1.2.3.4)" +msgstr "" + +#: literals.py:228 +msgid "" +"8-bit indexed PNG, binary transparency only (libpng 1.2.42,1.2.44, zlib " +"1.2.3.3,1.2.3.4)" +msgstr "" + +#: literals.py:229 +msgid "Portable anymap" +msgstr "" + +#: literals.py:230 +msgid "Portable pixmap format (color)" +msgstr "" + +#: literals.py:231 +msgid "Show a preview an image enhancement, effect, or f/x" +msgstr "" + +#: literals.py:232 +msgid "Adobe PostScript" +msgstr "" + +#: literals.py:233 +msgid "Adobe Level II PostScript" +msgstr "" + +#: literals.py:234 +msgid "Adobe Level III PostScript" +msgstr "" + +#: literals.py:235 +msgid "Adobe Large Document Format" +msgstr "" + +#: literals.py:236 +msgid "Adobe Photoshop bitmap" +msgstr "" + +#: literals.py:237 +msgid "Pyramid encoded TIFF" +msgstr "" + +#: literals.py:238 literals.py:252 +msgid "Seattle Film Works" +msgstr "" + +#: literals.py:240 +msgid "Raw red samples" +msgstr "" + +#: literals.py:241 +msgid "Fuji CCD-RAW Graphic File" +msgstr "" + +#: literals.py:242 literals.py:258 +msgid "SUN Rasterfile" +msgstr "" + +#: literals.py:243 +msgid "Raw red, blue, and green samples" +msgstr "" + +#: literals.py:244 +msgid "Raw red, green, and blue samples" +msgstr "" + +#: literals.py:245 +msgid "Raw red, green, blue, and matte samples" +msgstr "" + +#: literals.py:246 +msgid "Raw red, green, blue, and opacity samples" +msgstr "" + +#: literals.py:247 +msgid "Alias/Wavefront image" +msgstr "" + +#: literals.py:248 +msgid "Utah Run length encoded image" +msgstr "" + +#: literals.py:250 +msgid "ZX-Spectrum SCREEN$" +msgstr "" + +#: literals.py:251 +msgid "Scitex HandShake" +msgstr "" + +#: literals.py:253 +msgid "Irix RGB image" +msgstr "" + +#: literals.py:255 +msgid "Sony Raw Format 2" +msgstr "" + +#: literals.py:256 +msgid "Sony Raw Format" +msgstr "" + +#: literals.py:257 +msgid "Steganographic image" +msgstr "" + +#: literals.py:259 +msgid "Scalable Vector Graphics (XML 2.7.6, RSVG 2.32.0)" +msgstr "" + +#: literals.py:260 +msgid "Scalable Vector Graphics (ZIP compressed) (XML 2.7.6, RSVG 2.32.0)" +msgstr "" + +#: literals.py:262 literals.py:272 +msgid "Text" +msgstr "" + +#: literals.py:264 +msgid "EXIF Profile Thumbnail" +msgstr "" + +#: literals.py:265 +msgid "Tagged Image File Format (LIBTIFF, Version 3.9.4)" +msgstr "" + +#: literals.py:266 +msgid "Tagged Image File Format (64-bit) (LIBTIFF, Version 3.9.4)" +msgstr "" + +#: literals.py:267 +msgid "Tile image with a texture" +msgstr "" + +#: literals.py:268 +msgid "PSX TIM" +msgstr "" + +#: literals.py:269 +msgid "TOPOL X Image" +msgstr "" + +#: literals.py:270 +msgid "TrueType font collection (Freetype 2.4.2)" +msgstr "" + +#: literals.py:271 +msgid "TrueType font (Freetype 2.4.2)" +msgstr "" + +#: literals.py:274 +msgid "Unicode Text format" +msgstr "" + +#: literals.py:275 +msgid "X-Motif UIL table" +msgstr "" + +#: literals.py:279 +msgid "VICAR rasterfile format" +msgstr "" + +#: literals.py:280 +msgid "Visual Image Directory" +msgstr "" + +#: literals.py:281 literals.py:298 +msgid "Khoros Visualization image" +msgstr "" + +#: literals.py:284 +msgid "Wireless Bitmap (level 0) image" +msgstr "" + +#: literals.py:285 +msgid "Windows Meta File" +msgstr "" + +#: literals.py:286 +msgid "Word Perfect Graphics" +msgstr "" + +#: literals.py:287 +msgid "Windows Media Video" +msgstr "" + +#: literals.py:288 +msgid "Compressed Windows Meta File" +msgstr "" + +#: literals.py:290 +msgid "X Window System" +msgstr "" + +#: literals.py:291 +msgid "Foveon X3 (Sigma/Polaroid) Raw picture file" +msgstr "" + +#: literals.py:292 +msgid "X Windows system bitmap (black and white)" +msgstr "" + +#: literals.py:293 +msgid "Constant image uniform color" +msgstr "" + +#: literals.py:294 +msgid "GIMP image" +msgstr "" + +#: literals.py:295 +msgid "Adobe XML metadata" +msgstr "" + +#: literals.py:296 +msgid "X Windows system pixmap (color)" +msgstr "" + +#: literals.py:297 +msgid "Microsoft XML Paper Specification" +msgstr "" + +#: literals.py:299 +msgid "XV thumbnail file" +msgstr "" + +#: literals.py:300 +msgid "X Windows system window dump (color)" +msgstr "" + +#: literals.py:302 +msgid "Raw yellow samples" +msgstr "" + +#: literals.py:303 +msgid "CCIR 601 4:1:1 or 4:2:2 (8-bit only)" +msgstr "" + +#: views.py:15 +msgid "suported file formats" +msgstr "" + +#: views.py:20 +msgid "name" +msgstr "" + +#: views.py:24 +msgid "description" +msgstr "" + +#: conf/settings.py:10 +msgid "File path to imagemagick's convert program." +msgstr "" + +#: conf/settings.py:11 +msgid "File path to imagemagick's identify program." +msgstr "" + +#: conf/settings.py:12 +msgid "File path to graphicsmagick's program." +msgstr "" + +#: conf/settings.py:14 +msgid "" +"Graphics conversion backend to use. Options are: converter.backends." +"imagemagick, converter.backends.graphicsmagick and converter.backends.python." +msgstr "" + +#: templates/converter_file_formats_help.html:3 +msgid "Help" +msgstr "" + +#: templates/converter_file_formats_help.html:4 +#, python-format +msgid "" +"These are the file formats supported by the currently selected converter " +"backend. In this case: '%(backend)s'" +msgstr "" diff --git a/apps/document_comments/locale/ru/LC_MESSAGES/django.po b/apps/document_comments/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..d95b41b325 --- /dev/null +++ b/apps/document_comments/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,102 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:15 +msgid "Create new comments" +msgstr "" + +#: __init__.py:16 +msgid "Delete comments" +msgstr "" + +#: __init__.py:17 +msgid "Edit comments" +msgstr "" + +#: __init__.py:18 +msgid "View comments" +msgstr "" + +#: __init__.py:20 +msgid "Comments" +msgstr "" + +#: __init__.py:26 __init__.py:27 +msgid "delete" +msgstr "" + +#: __init__.py:28 +msgid "add comment" +msgstr "" + +#: __init__.py:29 utils.py:14 +msgid "comments" +msgstr "" + +#: __init__.py:33 +msgid "date" +msgstr "" + +#: __init__.py:37 +msgid "user" +msgstr "" + +#: __init__.py:41 +msgid "comment" +msgstr "" + +#: views.py:27 +msgid "Must provide at least one comment." +msgstr "" + +#: views.py:37 +#, python-format +msgid "Comment \"%s\" deleted successfully." +msgstr "" + +#: views.py:39 +#, python-format +msgid "Error deleting comment \"%(comment)s\": %(error)s" +msgstr "" + +#: views.py:54 +#, python-format +msgid "Are you sure you wish to delete the comment: %s?" +msgstr "" + +#: views.py:56 +#, python-format +msgid "Are you sure you wish to delete the comments: %s?" +msgstr "" + +#: views.py:86 +msgid "Comment added successfully." +msgstr "" + +#: views.py:93 +#, python-format +msgid "Add comment to document: %s" +msgstr "" + +#: views.py:109 +#, python-format +msgid "comments: %s" +msgstr "" diff --git a/apps/document_indexing/locale/ru/LC_MESSAGES/django.po b/apps/document_indexing/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..38182166ac --- /dev/null +++ b/apps/document_indexing/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,205 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:12 +msgid "View document indexes" +msgstr "" + +#: __init__.py:13 +msgid "Rebuild document indexes" +msgstr "" + +#: __init__.py:15 +msgid "Indexing" +msgstr "" + +#: __init__.py:19 +msgid "index list" +msgstr "" + +#: __init__.py:20 +msgid "go up one level" +msgstr "" + +#: __init__.py:21 __init__.py:23 models.py:26 +msgid "indexes" +msgstr "" + +#: __init__.py:25 +msgid "rebuild indexes" +msgstr "" + +#: __init__.py:25 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "" + +#: __init__.py:27 +msgid "Indexes" +msgstr "" + +#: api.py:83 +msgid "root" +msgstr "" + +#: api.py:139 +#, python-format +msgid "Maximum suffix (%s) count reached." +msgstr "" + +#: api.py:175 +#, python-format +msgid "" +"Error in document indexing update expression: %(expression)s; %(exception)s" +msgstr "" + +#: api.py:178 +#, python-format +msgid "" +"Error updating document index, expression: %(expression)s; %(exception)s" +msgstr "" + +#: api.py:209 +#, python-format +msgid "Unable to delete document indexing node; %s" +msgstr "" + +#: filesystem.py:34 +#, python-format +msgid "Unable to create indexing directory; %s" +msgstr "" + +#: filesystem.py:52 +#, python-format +msgid "" +"Unable to create symbolic link, file exists and could not be deleted: " +"%(filepath)s; %(exc)s" +msgstr "" + +#: filesystem.py:54 +#, python-format +msgid "Unable to create symbolic link: %(filepath)s; %(exc)s" +msgstr "" + +#: filesystem.py:71 +#, python-format +msgid "Unable to delete document symbolic link; %s" +msgstr "" + +#: filesystem.py:83 +#, python-format +msgid "Unable to delete indexing directory; %s" +msgstr "" + +#: models.py:11 +#, python-format +msgid "Available functions: %s" +msgstr "" + +#: models.py:16 +msgid "indexing expression" +msgstr "" + +#: models.py:16 +msgid "Enter a python string expression to be evaluated." +msgstr "" + +#: models.py:18 +msgid "enabled" +msgstr "" + +#: models.py:19 +msgid "link documents" +msgstr "" + +#: models.py:25 models.py:31 views.py:56 +msgid "index" +msgstr "" + +#: models.py:32 +msgid "value" +msgstr "" + +#: models.py:33 +msgid "documents" +msgstr "" + +#: models.py:46 models.py:51 +msgid "index instance" +msgstr "" + +#: models.py:47 +msgid "indexes instances" +msgstr "" + +#: models.py:52 +msgid "document" +msgstr "" + +#: models.py:59 +msgid "document rename count" +msgstr "" + +#: models.py:60 +msgid "documents rename count" +msgstr "" + +#: utils.py:19 +msgid "document indexes" +msgstr "" + +#: views.py:38 +#, python-format +msgid "contents for index: %s" +msgstr "" + +#: views.py:60 +msgid "items" +msgstr "" + +#: views.py:82 +msgid "Are you sure you wish to rebuild all indexes?" +msgstr "" + +#: views.py:83 +msgid "On large databases this operation may take some time to execute." +msgstr "" + +#: views.py:89 +msgid "Index rebuild completed successfully." +msgstr "" + +#: views.py:94 +#, python-format +msgid "Index rebuild error: %s" +msgstr "" + +#: views.py:109 +#, python-format +msgid "indexes containing: %s" +msgstr "" + +#: templates/indexing_help.html:3 +msgid "What are indexes?" +msgstr "" + +#: templates/indexing_help.html:4 +msgid "Indexes group documents into a tree like hierarchical structure." +msgstr "" diff --git a/apps/documents/locale/ru/LC_MESSAGES/django.po b/apps/documents/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..93be45be35 --- /dev/null +++ b/apps/documents/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,907 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:50 __init__.py:159 +msgid "Documents" +msgstr "" + +#: __init__.py:61 +msgid "Documents setup" +msgstr "" + +#: __init__.py:71 +msgid "all documents" +msgstr "" + +#: __init__.py:72 models.py:381 views.py:672 +msgid "recent documents" +msgstr "" + +#: __init__.py:73 +msgid "upload new documents" +msgstr "" + +#: __init__.py:74 +msgid "clone metadata" +msgstr "" + +#: __init__.py:75 +msgid "details" +msgstr "" + +#: __init__.py:76 +msgid "properties" +msgstr "" + +#: __init__.py:77 __init__.py:78 __init__.py:92 __init__.py:114 +#: __init__.py:120 +msgid "delete" +msgstr "" + +#: __init__.py:79 __init__.py:91 __init__.py:113 __init__.py:119 +msgid "edit" +msgstr "" + +#: __init__.py:80 +msgid "preview" +msgstr "" + +#: __init__.py:81 +msgid "download" +msgstr "" + +#: __init__.py:82 +msgid "find duplicates" +msgstr "" + +#: __init__.py:83 +msgid "find all duplicates" +msgstr "" + +#: __init__.py:83 +msgid "" +"Search all the documents' checksums and return a list of the exact matches." +msgstr "" + +#: __init__.py:84 __init__.py:85 +msgid "clear transformations" +msgstr "" + +#: __init__.py:86 +msgid "print" +msgstr "" + +#: __init__.py:87 +msgid "history" +msgstr "" + +#: __init__.py:89 +msgid "page transformations" +msgstr "" + +#: __init__.py:90 +msgid "create new transformation" +msgstr "" + +#: __init__.py:94 forms.py:49 +msgid "page image" +msgstr "" + +#: __init__.py:95 +msgid "page text" +msgstr "" + +#: __init__.py:96 +msgid "edit page text" +msgstr "" + +#: __init__.py:97 +msgid "next page" +msgstr "" + +#: __init__.py:98 +msgid "previous page" +msgstr "" + +#: __init__.py:99 +msgid "first page" +msgstr "" + +#: __init__.py:100 +msgid "last page" +msgstr "" + +#: __init__.py:101 +msgid "zoom in" +msgstr "" + +#: __init__.py:102 +msgid "zoom out" +msgstr "" + +#: __init__.py:103 +msgid "rotate right" +msgstr "" + +#: __init__.py:104 +msgid "rotate left" +msgstr "" + +#: __init__.py:105 +msgid "reset view" +msgstr "" + +#: __init__.py:107 +msgid "Find missing document files" +msgstr "" + +#: __init__.py:110 +msgid "document type list" +msgstr "" + +#: __init__.py:111 views.py:840 +msgid "document types" +msgstr "" + +#: __init__.py:112 +msgid "documents of this type" +msgstr "" + +#: __init__.py:115 views.py:953 +msgid "create document type" +msgstr "" + +#: __init__.py:117 +msgid "filenames" +msgstr "" + +#: __init__.py:118 +msgid "add filename to document type" +msgstr "" + +#: __init__.py:161 __init__.py:187 models.py:97 views.py:68 +msgid "documents" +msgstr "" + +#: __init__.py:174 widgets.py:13 +msgid "thumbnail" +msgstr "" + +#: __init__.py:177 +msgid "tags" +msgstr "" + +#: __init__.py:180 +msgid "metadata" +msgstr "" + +#: forms.py:72 +msgid "Page image" +msgstr "" + +#: forms.py:82 forms.py:232 +msgid "Contents" +msgstr "" + +#: forms.py:135 +msgid "Page" +msgstr "" + +#: forms.py:136 +msgid "Details" +msgstr "" + +#: forms.py:138 models.py:312 models.py:349 +msgid "document page" +msgstr "" + +#: forms.py:144 +msgid "Click on the image for full size preview" +msgstr "" + +#: forms.py:154 +#, python-format +msgid "Document pages (%s)" +msgstr "" + +#: forms.py:189 +msgid "Quick document rename" +msgstr "" + +#: forms.py:192 +msgid "New document filename" +msgstr "" + +#: forms.py:246 +msgid "Page size" +msgstr "" + +#: forms.py:247 +msgid "Custom page width" +msgstr "" + +#: forms.py:248 +msgid "Custom page height" +msgstr "" + +#: forms.py:249 +msgid "Page orientation" +msgstr "" + +#: forms.py:250 +msgid "Page range" +msgstr "" + +#: literals.py:8 +msgid "Create documents" +msgstr "" + +#: literals.py:9 +msgid "Edit document properties" +msgstr "" + +#: literals.py:10 +msgid "Edit documents" +msgstr "" + +#: literals.py:11 +msgid "View documents" +msgstr "" + +#: literals.py:12 +msgid "Delete documents" +msgstr "" + +#: literals.py:13 +msgid "Download documents" +msgstr "" + +#: literals.py:14 +msgid "Transform documents" +msgstr "" + +#: literals.py:15 +msgid "Execute document modifying tools" +msgstr "" + +#: literals.py:17 +msgid "Edit document types" +msgstr "" + +#: literals.py:18 +msgid "Delete document types" +msgstr "" + +#: literals.py:19 +msgid "Create document types" +msgstr "" + +#: literals.py:23 +msgid "Document creation" +msgstr "" + +#: literals.py:24 +#, python-format +msgid "Document \"%(content_object)s\" created by %(fullname)s." +msgstr "" + +#: literals.py:25 +#, python-format +msgid "" +"Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." +msgstr "" + +#: literals.py:31 +msgid "Document edited" +msgstr "" + +#: literals.py:32 +#, python-format +msgid "Document \"%(content_object)s\" edited by %(fullname)s." +msgstr "" + +#: literals.py:33 +#, python-format +msgid "" +"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s. " +"The following changes took place: %(changes)s." +msgstr "" + +#: literals.py:42 +msgid "Document deleted" +msgstr "" + +#: literals.py:43 +#, python-format +msgid "Document \"%(document)s\" deleted by %(fullname)s." +msgstr "" + +#: literals.py:44 +#, python-format +msgid "Document \"%(document)s\" deleted on %(datetime)s by %(fullname)s." +msgstr "" + +#: models.py:59 +msgid "name" +msgstr "" + +#: models.py:65 models.py:74 models.py:281 views.py:859 views.py:889 +#: views.py:918 views.py:923 views.py:966 views.py:1012 views.py:1046 +msgid "document type" +msgstr "" + +#: models.py:66 +msgid "documents types" +msgstr "" + +#: models.py:75 +msgid "file" +msgstr "" + +#: models.py:82 +msgid "added" +msgstr "" + +#: models.py:83 +msgid "updated" +msgstr "" + +#: models.py:84 +msgid "checksum" +msgstr "" + +#: models.py:85 +msgid "description" +msgstr "" + +#: models.py:96 models.py:298 models.py:370 models.py:385 views.py:208 +msgid "document" +msgstr "" + +#: models.py:177 +msgid "" +"This document's file format is not known, the page count has therefore " +"defaulted to 1." +msgstr "" + +#: models.py:282 +msgid "filename" +msgstr "" + +#: models.py:283 views.py:973 +msgid "enabled" +msgstr "" + +#: models.py:290 +msgid "document type quick rename filename" +msgstr "" + +#: models.py:291 +msgid "document types quick rename filenames" +msgstr "" + +#: models.py:299 +msgid "content" +msgstr "" + +#: models.py:300 +msgid "page label" +msgstr "" + +#: models.py:301 +msgid "page number" +msgstr "" + +#: models.py:304 +#, python-format +msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" +msgstr "" + +#: models.py:313 +msgid "document pages" +msgstr "" + +#: models.py:324 +msgid "Enter a valid value." +msgstr "" + +#: models.py:350 views.py:327 +msgid "order" +msgstr "" + +#: models.py:351 views.py:328 views.py:383 views.py:412 +msgid "transformation" +msgstr "" + +#: models.py:352 views.py:329 +msgid "arguments" +msgstr "" + +#: models.py:352 +#, python-format +msgid "Use dictionaries to indentify arguments, example: %s" +msgstr "" + +#: models.py:360 +msgid "document page transformation" +msgstr "" + +#: models.py:361 +msgid "document page transformations" +msgstr "" + +#: models.py:369 +msgid "user" +msgstr "" + +#: models.py:371 +msgid "accessed" +msgstr "" + +#: models.py:380 +msgid "recent document" +msgstr "" + +#: models.py:386 +msgid "Document type" +msgstr "" + +#: models.py:387 +msgid "MIME type" +msgstr "" + +#: models.py:388 views.py:116 +msgid "Filename" +msgstr "" + +#: models.py:389 +msgid "Filename extension" +msgstr "" + +#: models.py:390 +msgid "Metadata value" +msgstr "" + +#: models.py:391 +msgid "Content" +msgstr "" + +#: models.py:392 +msgid "Description" +msgstr "" + +#: models.py:393 +msgid "Tags" +msgstr "" + +#: models.py:394 +msgid "Comments" +msgstr "" + +#: statistics.py:38 +#, python-format +msgid "Document types: %d" +msgstr "" + +#: statistics.py:39 +#, python-format +msgid "Documents in database: %d" +msgstr "" + +#: statistics.py:44 +#, python-format +msgid "Documents in storage: %d" +msgstr "" + +#: statistics.py:46 +#, python-format +msgid "" +"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d " +"bytes" +msgstr "" + +#: statistics.py:56 +#, python-format +msgid "Document pages in database: %d" +msgstr "" + +#: statistics.py:57 +#, python-format +msgid "Minimum amount of pages per document: %(page_count__min)d" +msgstr "" + +#: statistics.py:58 +#, python-format +msgid "Maximum amount of pages per document: %(page_count__max)d" +msgstr "" + +#: statistics.py:59 +#, python-format +msgid "Average amount of pages per document: %(page_count__avg)f" +msgstr "" + +#: statistics.py:65 +msgid "Document statistics" +msgstr "" + +#: views.py:117 +msgid "File extension" +msgstr "" + +#: views.py:118 +msgid "File mimetype" +msgstr "" + +#: views.py:119 +msgid "File mime encoding" +msgstr "" + +#: views.py:120 +msgid "File size" +msgstr "" + +#: views.py:121 +msgid "Exists in storage" +msgstr "" + +#: views.py:122 +msgid "File path in storage" +msgstr "" + +#: views.py:123 +msgid "Date added" +msgstr "" + +#: views.py:124 +msgid "Time added" +msgstr "" + +#: views.py:125 +msgid "Checksum" +msgstr "" + +#: views.py:126 +msgid "UUID" +msgstr "" + +#: views.py:127 +msgid "Pages" +msgstr "" + +#: views.py:136 +#, python-format +msgid "document properties for: %s" +msgstr "" + +#: views.py:158 +msgid "document data" +msgstr "" + +#: views.py:183 views.py:484 +msgid "Must provide at least one document." +msgstr "" + +#: views.py:199 +#, python-format +msgid "Document: %s deleted successfully." +msgstr "" + +#: views.py:201 +#, python-format +msgid "Document: %(document)s delete error: %(error)s" +msgstr "" + +#: views.py:216 +#, python-format +msgid "Are you sure you wish to delete the document: %s?" +msgstr "" + +#: views.py:218 +#, python-format +msgid "Are you sure you wish to delete the documents: %s?" +msgstr "" + +#: views.py:255 +#, python-format +msgid "Document \"%s\" edited successfully." +msgstr "" + +#: views.py:323 +#, python-format +msgid "transformations for: %s" +msgstr "" + +#: views.py:347 +msgid "Document page transformation created successfully." +msgstr "" + +#: views.py:356 +#, python-format +msgid "Create new transformation for page: %(page)s of document: %(document)s" +msgstr "" + +#: views.py:372 +msgid "Document page transformation edited successfully." +msgstr "" + +#: views.py:385 +#, python-format +msgid "Edit transformation \"%(transformation)s\" for: %(document_page)s" +msgstr "" + +#: views.py:403 +msgid "Document page transformation deleted successfully." +msgstr "" + +#: views.py:414 +#, python-format +msgid "" +"Are you sure you wish to delete transformation \"%(transformation)s\" for: " +"%(document_page)s" +msgstr "" + +#: views.py:428 +#, python-format +msgid "duplicates of: %s" +msgstr "" + +#: views.py:440 +msgid "Are you sure you wish to find all duplicates?" +msgstr "" + +#: views.py:441 views.py:534 +msgid "On large databases this operation may take some time to execute." +msgstr "" + +#: views.py:456 +msgid "duplicated documents" +msgstr "" + +#: views.py:497 +#, python-format +msgid "" +"All the page transformations for document: %s, have been deleted " +"successfully." +msgstr "" + +#: views.py:499 +#, python-format +msgid "" +"Error deleting the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views.py:505 +msgid "document transformation" +msgstr "" + +#: views.py:514 +#, python-format +msgid "" +"Are you sure you wish to clear all the page transformations for document: %s?" +msgstr "" + +#: views.py:516 +#, python-format +msgid "" +"Are you sure you wish to clear all the page transformations for documents: " +"%s?" +msgstr "" + +#: views.py:544 +msgid "missing documents" +msgstr "" + +#: views.py:557 views.py:595 +#, python-format +msgid "details for: %s" +msgstr "" + +#: views.py:610 +msgid "Document page edited successfully." +msgstr "" + +#: views.py:619 +#, python-format +msgid "edit: %s" +msgstr "" + +#: views.py:630 +msgid "There are no more pages in this document" +msgstr "" + +#: views.py:643 +msgid "You are already at the first page of this document" +msgstr "" + +#: views.py:786 +#, python-format +msgid "print: %s" +msgstr "" + +#: views.py:857 +#, python-format +msgid "documents of type \"%s\"" +msgstr "" + +#: views.py:877 +msgid "Document type edited successfully" +msgstr "" + +#: views.py:880 +#, python-format +msgid "Error editing document type; %s" +msgstr "" + +#: views.py:885 +#, python-format +msgid "edit document type: %s" +msgstr "" + +#: views.py:910 +#, python-format +msgid "Document type: %s deleted successfully." +msgstr "" + +#: views.py:912 +#, python-format +msgid "Document type: %(document_type)s delete error: %(error)s" +msgstr "" + +#: views.py:927 +#, python-format +msgid "Are you sure you wish to delete the document type: %s?" +msgstr "" + +#: views.py:928 +msgid "" +"The document type of all documents using this document type will be set to " +"none." +msgstr "" + +#: views.py:944 +msgid "Document type created successfully" +msgstr "" + +#: views.py:947 +#, python-format +msgid "Error creating document type; %(error)s" +msgstr "" + +#: views.py:965 +#, python-format +msgid "filenames for document type: %s" +msgstr "" + +#: views.py:996 +msgid "Document type filename edited successfully" +msgstr "" + +#: views.py:999 +#, python-format +msgid "Error editing document type filename; %s" +msgstr "" + +#: views.py:1004 +#, python-format +msgid "edit filename \"%(filename)s\" from document type \"%(document_type)s\"" +msgstr "" + +#: views.py:1013 views.py:1039 views.py:1047 +msgid "document type filename" +msgstr "" + +#: views.py:1031 +#, python-format +msgid "Document type filename: %s deleted successfully." +msgstr "" + +#: views.py:1033 +#, python-format +msgid "" +"Document type filename: %(document_type_filename)s delete error: %(error)s" +msgstr "" + +#: views.py:1049 +#, python-format +msgid "" +"Are you sure you wish to delete the filename: %(filename)s, from document " +"type \"%(document_type)s\"?" +msgstr "" + +#: views.py:1074 +msgid "Document type filename created successfully" +msgstr "" + +#: views.py:1077 +#, python-format +msgid "Error creating document type filename; %(error)s" +msgstr "" + +#: views.py:1083 +#, python-format +msgid "create filename for document type: %s" +msgstr "" + +#: wizards.py:34 +msgid "step 1 of 3: Document type" +msgstr "" + +#: wizards.py:35 +msgid "step 2 of 3: Metadata selection" +msgstr "" + +#: wizards.py:36 +msgid "step 3 of 3: Document metadata" +msgstr "" + +#: wizards.py:44 +msgid "Next step" +msgstr "" + +#: conf/settings.py:38 +msgid "" +"Maximum number of recent (created, edited, viewed) documents to remember per " +"user." +msgstr "" + +#: conf/settings.py:39 +msgid "Amount in percent zoom in or out a document page per user interaction." +msgstr "" + +#: conf/settings.py:40 +msgid "" +"Maximum amount in percent (%) to allow user to zoom in a document page " +"interactively." +msgstr "" + +#: conf/settings.py:41 +msgid "" +"Minimum amount in percent (%) to allow user to zoom out a document page " +"interactively." +msgstr "" + +#: conf/settings.py:42 +msgid "Amount in degrees to rotate a document page per user interaction." +msgstr "" + +#: templates/document_types_help.html:3 +msgid "What are document types?" +msgstr "" + +#: templates/document_types_help.html:4 +msgid "" +"Document types define a class that represents a broard group of documents, " +"such as: invoices, regulations or manuals. The advantage of using document " +"types are: assigning a list of typical filenames for quick renaming during " +"creation, as well as assigning default metadata types and sets to it." +msgstr "" + +#: templates/recent_document_list_help.html:3 +msgid "What are recent documents?" +msgstr "" + +#: templates/recent_document_list_help.html:4 +#, python-format +msgid "" +"Here you will find the latest %(recent_count)s documents you have either " +"created or edited in any way." +msgstr "" diff --git a/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po b/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po index 328b49e35c..4436b06341 100644 --- a/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po +++ b/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po @@ -2,44 +2,124 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-02-03 01:31-0400\n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" "PO-Revision-Date: 2011-02-03 01:31\n" "Last-Translator: \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: \n" "X-Translated-Using: django-rosetta 0.5.6\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: __init__.py:5 msgid "search" msgstr "поиск" -#: forms.py:6 -msgid "Search term" +#: __init__.py:6 views.py:72 +msgid "advanced search" +msgstr "" + +#: __init__.py:7 +#, fuzzy +msgid "search again" +msgstr "поиск" + +#: forms.py:8 +#, fuzzy +msgid "Search terms" msgstr "Поиск по критериям" -#: views.py:77 -msgid "Search" -msgstr "Поиск" +#: models.py:18 +msgid "user" +msgstr "" -#: views.py:78 +#: models.py:19 +msgid "query" +msgstr "" + +#: models.py:20 +msgid "datetime created" +msgstr "" + +#: models.py:21 +msgid "hits" +msgstr "" + +#: models.py:59 +#, fuzzy +msgid "recent search" +msgstr "поиск" + +#: models.py:60 +msgid "recent searches" +msgstr "" + +#: views.py:33 +#, python-format +msgid "results, (showing only %(shown_result_count)s out of %(result_count)s)" +msgstr "" + +#: views.py:37 +#, fuzzy +msgid "results" +msgstr "результаты: %s" + +#: views.py:56 +#, fuzzy, python-format +msgid "Search error: %s" +msgstr "Поиск по критериям" + +#: views.py:60 msgid "type" msgstr "типа" -#: views.py:79 -#, python-format -msgid "results with: %s" -msgstr "результаты: %s" +#: views.py:76 views.py:86 views.py:88 templatetags/search_tags.py:19 +#: templatetags/search_tags.py:20 +msgid "Search" +msgstr "Поиск" -#: templates/search_results.html:14 -msgid "No results found" -msgstr "Ничего не наидено" +#: conf/settings.py:12 +msgid "Maximum amount search hits to fetch and display." +msgstr "" + +#: conf/settings.py:13 +msgid "Maximum number of search queries to remember per user." +msgstr "" + +#: templates/search_help.html:3 +msgid "Help" +msgstr "" + +#: templates/search_help.html:4 +#, python-format +msgid "" +"Enter the desired search keywords separated by space. Only the top " +"%(search_results_limit)s results will be available." +msgstr "" + +#: templates/search_results.html:3 +#, fuzzy +msgid "Search results" +msgstr "Поиск по критериям" + +#: templates/search_results.html:19 +#, python-format +msgid "Elapsed time: %(time_delta)s seconds" +msgstr "" + +#: templatetags/search_tags.py:33 +#, python-format +msgid "recent searches (maximum of %d)" +msgstr "" + +#~ msgid "No results found" +#~ msgstr "Ничего не наидено" diff --git a/apps/folders/locale/ru/LC_MESSAGES/django.po b/apps/folders/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..f80cae0608 --- /dev/null +++ b/apps/folders/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,212 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:10 +msgid "folder list" +msgstr "" + +#: __init__.py:11 views.py:53 +msgid "create folder" +msgstr "" + +#: __init__.py:12 +msgid "edit" +msgstr "" + +#: __init__.py:13 +msgid "delete" +msgstr "" + +#: __init__.py:14 +msgid "remove from folder" +msgstr "" + +#: __init__.py:15 +msgid "folder documents" +msgstr "" + +#: __init__.py:16 +msgid "add to a folder" +msgstr "" + +#: __init__.py:17 __init__.py:25 models.py:31 views.py:21 +msgid "folders" +msgstr "" + +#: forms.py:20 +msgid "Existing folders" +msgstr "" + +#: forms.py:22 +msgid "New folder" +msgstr "" + +#: models.py:11 +msgid "title" +msgstr "" + +#: models.py:12 +msgid "user" +msgstr "" + +#: models.py:13 +msgid "datetime created" +msgstr "" + +#: models.py:30 models.py:35 views.py:82 views.py:109 views.py:134 +msgid "folder" +msgstr "" + +#: models.py:36 +msgid "document" +msgstr "" + +#: models.py:42 views.py:257 +msgid "folder document" +msgstr "" + +#: models.py:43 +msgid "folders documents" +msgstr "" + +#: views.py:24 +msgid "created" +msgstr "" + +#: views.py:25 +msgid "documents" +msgstr "" + +#: views.py:45 views.py:152 +msgid "Folder created successfully" +msgstr "" + +#: views.py:48 views.py:154 views.py:188 +#, python-format +msgid "A folder named: %s, already exists." +msgstr "" + +#: views.py:71 +msgid "Folder edited successfully" +msgstr "" + +#: views.py:74 +#, python-format +msgid "Error editing folder; %s" +msgstr "" + +#: views.py:79 +#, python-format +msgid "edit folder: %s" +msgstr "" + +#: views.py:101 +#, python-format +msgid "Folder: %s deleted successfully." +msgstr "" + +#: views.py:103 +#, python-format +msgid "Folder: %(folder)s delete error: %(error)s" +msgstr "" + +#: views.py:114 +#, python-format +msgid "Are you sure you with to delete the folder: %s?" +msgstr "" + +#: views.py:131 +#, python-format +msgid "documents in folder: %s" +msgstr "" + +#: views.py:157 views.py:191 +msgid "Must specify a new folder or an existing one." +msgstr "" + +#: views.py:162 views.py:196 +#, python-format +msgid "Document: %(document)s added to folder: %(folder)s successfully." +msgstr "" + +#: views.py:165 views.py:199 +#, python-format +msgid "Document: %(document)s is already in folder: %(folder)s." +msgstr "" + +#: views.py:186 +#, python-format +msgid "Folder \"%s\" created successfully" +msgstr "" + +#: views.py:207 +#, python-format +msgid "add document \"%s\" to a folder" +msgstr "" + +#: views.py:223 +#, python-format +msgid "folders containing: %s" +msgstr "" + +#: views.py:239 +msgid "Must provide at least one folder document." +msgstr "" + +#: views.py:249 +#, python-format +msgid "Document: %s removed successfully." +msgstr "" + +#: views.py:251 +#, python-format +msgid "Document: %(document)s delete error: %(error)s" +msgstr "" + +#: views.py:265 +#, python-format +msgid "" +"Are you sure you wish to remove the document: %(document)s from the folder " +"\"%(folder)s\"?" +msgstr "" + +#: views.py:268 +#, python-format +msgid "" +"Are you sure you wish to remove the documents: %(documents)s from the folder " +"\"%(folder)s\"?" +msgstr "" + +#: templates/folders_help.html:3 +msgid "What are folders?" +msgstr "" + +#: templates/folders_help.html:4 +msgid "" +"These folders can also be described as user folders. They are a way to let " +"individual users create their own document organization methods. Folders " +"created by one user and the documents contained by them don't affect any " +"other user folders or documents." +msgstr "" + +#: templatetags/folder_tags.py:17 +msgid "Add document to a folder" +msgstr "" diff --git a/apps/grouping/locale/ru/LC_MESSAGES/django.po b/apps/grouping/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..ac44c5c48b --- /dev/null +++ b/apps/grouping/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,200 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:8 +msgid "group actions" +msgstr "" + +#: __init__.py:9 +msgid "groups" +msgstr "" + +#: forms.py:55 +msgid "Pages" +msgstr "" + +#: forms.py:56 +msgid "Select" +msgstr "" + +#: forms.py:61 +msgid "group document" +msgstr "" + +#: forms.py:66 +msgid "Click on the image for full size view of the first page." +msgstr "" + +#: literals.py:7 +msgid "and" +msgstr "" + +#: literals.py:8 +msgid "or" +msgstr "" + +#: literals.py:12 +msgid "is equal to" +msgstr "" + +#: literals.py:13 +msgid "is equal to (case insensitive)" +msgstr "" + +#: literals.py:14 +msgid "contains" +msgstr "" + +#: literals.py:15 +msgid "contains (case insensitive)" +msgstr "" + +#: literals.py:16 +msgid "is in" +msgstr "" + +#: literals.py:17 +msgid "is greater than" +msgstr "" + +#: literals.py:18 +msgid "is greater than or equal to" +msgstr "" + +#: literals.py:19 +msgid "is less than" +msgstr "" + +#: literals.py:20 +msgid "is less than or equal to" +msgstr "" + +#: literals.py:21 +msgid "starts with" +msgstr "" + +#: literals.py:22 +msgid "starts with (case insensitive)" +msgstr "" + +#: literals.py:23 +msgid "ends with" +msgstr "" + +#: literals.py:24 +msgid "ends with (case insensitive)" +msgstr "" + +#: literals.py:25 +msgid "is in regular expression" +msgstr "" + +#: literals.py:26 +msgid "is in regular expression (case insensitive)" +msgstr "" + +#: models.py:10 +msgid "title" +msgstr "" + +#: models.py:11 +msgid "dynamic title" +msgstr "" + +#: models.py:12 models.py:33 +msgid "enabled" +msgstr "" + +#: models.py:20 models.py:25 +msgid "document group" +msgstr "" + +#: models.py:21 +msgid "document groups" +msgstr "" + +#: models.py:26 +msgid "The inclusion is ignored for the first item." +msgstr "" + +#: models.py:27 +msgid "foreign document data" +msgstr "" + +#: models.py:27 +msgid "" +"This represents the metadata of all other documents. Available objects: " +"`document.` and `metadata.`." +msgstr "" + +#: models.py:31 +msgid "expression" +msgstr "" + +#: models.py:31 +msgid "" +"This expression will be evaluated against the current selected document. " +"The document metadata is available as variables `metadata` and document " +"properties under the variable `document`." +msgstr "" + +#: models.py:32 +msgid "negated" +msgstr "" + +#: models.py:32 +msgid "Inverts the logic of the operator." +msgstr "" + +#: models.py:36 +msgid "not" +msgstr "" + +#: models.py:39 +msgid "group item" +msgstr "" + +#: models.py:40 +msgid "group items" +msgstr "" + +#: views.py:21 +msgid "No action selected." +msgstr "" + +#: views.py:34 +#, python-format +msgid "documents in group: %(group)s" +msgstr "" + +#: views.py:50 +#, python-format +msgid "Document group query error: %s" +msgstr "" + +#: views.py:61 +#, python-format +msgid "document groups (%s)" +msgstr "" + +#: views.py:75 +msgid "There no defined groups for the current document." +msgstr "" diff --git a/apps/history/locale/ru/LC_MESSAGES/django.po b/apps/history/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..09a571f138 --- /dev/null +++ b/apps/history/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:6 +msgid "Access the history app" +msgstr "" + +#: __init__.py:8 +msgid "History" +msgstr "" + +#: __init__.py:12 models.py:69 +msgid "history" +msgstr "" + +#: models.py:16 +msgid "namespace" +msgstr "" + +#: models.py:17 +msgid "name" +msgstr "" + +#: models.py:25 models.py:34 +msgid "history type" +msgstr "" + +#: models.py:26 +msgid "history types" +msgstr "" + +#: models.py:30 +msgid "date time" +msgstr "" + +#: models.py:35 +msgid "dictionary" +msgstr "" + +#: models.py:70 +msgid "histories" +msgstr "" + +#: views.py:23 +msgid "history events" +msgstr "" + +#: views.py:26 views.py:60 +msgid "date and time" +msgstr "" + +#: views.py:30 +msgid "object" +msgstr "" + +#: views.py:34 views.py:64 +msgid "summary" +msgstr "" + +#: views.py:56 +#, python-format +msgid "history events for: %s" +msgstr "" + +#: views.py:81 +msgid "Date" +msgstr "" + +#: views.py:82 +msgid "Time" +msgstr "" + +#: views.py:83 +msgid "Object" +msgstr "" + +#: views.py:84 +msgid "Event type" +msgstr "" + +#: views.py:85 +msgid "Event details" +msgstr "" + +#: views.py:89 +#, python-format +msgid "details for: %s" +msgstr "" diff --git a/apps/main/locale/ru/LC_MESSAGES/django.po b/apps/main/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..2c760c985c --- /dev/null +++ b/apps/main/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,143 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:15 +msgid "maintenance" +msgstr "" + +#: __init__.py:16 +msgid "statistics" +msgstr "" + +#: __init__.py:17 +msgid "diagnostics" +msgstr "" + +#: __init__.py:18 +msgid "sentry" +msgstr "" + +#: __init__.py:19 +msgid "admin site" +msgstr "" + +#: __init__.py:30 +msgid "home" +msgstr "" + +#: __init__.py:32 +msgid "search" +msgstr "" + +#: views.py:41 +msgid "maintenance menu" +msgstr "" + +#: views.py:53 +msgid "Statistics" +msgstr "" + +#: views.py:61 +msgid "Diagnostics" +msgstr "" + +#: conf/settings.py:12 +msgid "" +"Controls whether the search functionality is provided by a sidebar widget or " +"by a menu entry." +msgstr "" + +#: templates/about.html:5 +msgid "About this program" +msgstr "" + +#: templates/about.html:9 templates/verbose_login.html:4 +msgid "Version" +msgstr "" + +#: templates/base.html:28 +msgid "(DEBUG)" +msgstr "" + +#: templates/base.html:177 +msgid "User" +msgstr "" + +#: templates/base.html:179 +msgid "Anonymous" +msgstr "" + +#: templates/base.html:182 +msgid "User details" +msgstr "" + +#: templates/base.html:199 +msgid "Login" +msgstr "" + +#: templates/base.html:199 +msgid "Logout" +msgstr "" + +#: templates/base.html:279 +msgid "Secondary menu" +msgstr "" + +#: templates/base.html:296 +#, python-format +msgid "Actions for %(name)s: %(navigation_object)s" +msgstr "" + +#: templates/base.html:298 templates/base.html.py:330 +#, python-format +msgid "Actions for: %(navigation_object)s" +msgstr "" + +#: templates/base.html:301 +msgid "Available actions" +msgstr "" + +#: templates/base.html:313 templates/base.html.py:345 +msgid "Related actions" +msgstr "" + +#: templates/base.html:328 +#, python-format +msgid "Actions for %(object_name)s: %(navigation_object)s" +msgstr "" + +#: templates/base.html:333 +msgid "Actions" +msgstr "" + +#: templates/base.html:358 +msgid "Other available actions" +msgstr "" + +#: templates/project_description.html:6 +msgid "" +"Open source, Django based electronic document manager with custom metadata, " +"indexing, tagging, file serving integration and OCR capabilities" +msgstr "" + +#: templates/project_description.html:15 +msgid "Released under the GPL V3 License" +msgstr "" diff --git a/apps/metadata/locale/ru/LC_MESSAGES/django.po b/apps/metadata/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..e22a5faadf --- /dev/null +++ b/apps/metadata/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,451 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:12 +msgid "Edit a document's metadata" +msgstr "" + +#: __init__.py:13 +msgid "Add metadata to a document" +msgstr "" + +#: __init__.py:14 +msgid "Remove metadata from a document" +msgstr "" + +#: __init__.py:15 +msgid "View metadata from a document" +msgstr "" + +#: __init__.py:17 +msgid "Edit metadata types" +msgstr "" + +#: __init__.py:18 +msgid "Create new metadata types" +msgstr "" + +#: __init__.py:19 +msgid "Delete metadata types" +msgstr "" + +#: __init__.py:20 +msgid "View metadata types" +msgstr "" + +#: __init__.py:22 +msgid "Edit metadata sets" +msgstr "" + +#: __init__.py:23 +msgid "Create new metadata sets" +msgstr "" + +#: __init__.py:24 +msgid "Delete metadata sets" +msgstr "" + +#: __init__.py:25 +msgid "View metadata sets" +msgstr "" + +#: __init__.py:27 forms.py:94 +msgid "Metadata" +msgstr "" + +#: __init__.py:33 +msgid "Metadata setup" +msgstr "" + +#: __init__.py:44 __init__.py:46 +msgid "edit metadata" +msgstr "" + +#: __init__.py:45 +msgid "metadata" +msgstr "" + +#: __init__.py:47 __init__.py:48 +msgid "add metadata" +msgstr "" + +#: __init__.py:49 __init__.py:50 +msgid "remove metadata" +msgstr "" + +#: __init__.py:52 models.py:33 views.py:294 +msgid "metadata types" +msgstr "" + +#: __init__.py:53 __init__.py:58 +msgid "edit" +msgstr "" + +#: __init__.py:54 __init__.py:59 +msgid "delete" +msgstr "" + +#: __init__.py:55 __init__.py:60 +msgid "create new" +msgstr "" + +#: __init__.py:57 views.py:394 +msgid "metadata sets" +msgstr "" + +#: __init__.py:62 models.py:92 +msgid "default metadata" +msgstr "" + +#: classes.py:12 +#, python-format +msgid "'metadata' object has no attribute '%s'" +msgstr "" + +#: forms.py:28 +msgid "required" +msgstr "" + +#: forms.py:54 +msgid "id" +msgstr "" + +#: forms.py:55 +msgid "Name" +msgstr "" + +#: forms.py:57 +msgid "Value" +msgstr "" + +#: forms.py:58 +msgid "Update" +msgstr "" + +#: forms.py:64 +msgid "Metadata type" +msgstr "" + +#: forms.py:68 +msgid "Remove" +msgstr "" + +#: forms.py:86 +msgid "Metadata sets" +msgstr "" + +#: models.py:9 +#, python-format +msgid " Available models: %s" +msgstr "" + +#: models.py:10 +#, python-format +msgid " Available functions: %s" +msgstr "" + +#: models.py:17 +msgid "name" +msgstr "" + +#: models.py:17 +msgid "Do not use python reserved words, or spaces." +msgstr "" + +#: models.py:18 models.py:40 +msgid "title" +msgstr "" + +#: models.py:20 +msgid "default" +msgstr "" + +#: models.py:21 +#, python-format +msgid "Enter a string to be evaluated.%s" +msgstr "" + +#: models.py:23 +msgid "lookup" +msgstr "" + +#: models.py:24 +#, python-format +msgid "" +"Enter a string to be evaluated. Example: [user.get_full_name() for user in " +"User.objects.all()].%s" +msgstr "" + +#: models.py:32 models.py:57 views.py:331 views.py:376 +msgid "metadata type" +msgstr "" + +#: models.py:47 models.py:48 models.py:56 views.py:446 views.py:491 +msgid "metadata set" +msgstr "" + +#: models.py:64 +msgid "metadata set item" +msgstr "" + +#: models.py:65 +msgid "metadata set items" +msgstr "" + +#: models.py:73 +msgid "document" +msgstr "" + +#: models.py:74 +msgid "type" +msgstr "" + +#: models.py:75 views.py:283 +msgid "value" +msgstr "" + +#: models.py:81 models.py:82 +msgid "document metadata" +msgstr "" + +#: models.py:90 views.py:559 +msgid "document type" +msgstr "" + +#: models.py:91 +msgid "default metadata sets" +msgstr "" + +#: models.py:98 +msgid "document type defaults" +msgstr "" + +#: models.py:99 +msgid "document types defaults" +msgstr "" + +#: views.py:38 views.py:193 +msgid "The selected document doesn't have any metadata." +msgstr "" + +#: views.py:43 views.py:131 views.py:199 +msgid "Must provide at least one document." +msgstr "" + +#: views.py:78 views.py:234 +#, python-format +msgid "Error deleting document indexes; %s" +msgstr "" + +#: views.py:90 +#, python-format +msgid "Error editing metadata for document %(document)s; %(error)s." +msgstr "" + +#: views.py:93 +#, python-format +msgid "Metadata for document %s edited successfully." +msgstr "" + +#: views.py:98 views.py:251 +#, python-format +msgid "Error updating document indexes; %s" +msgstr "" + +#: views.py:100 views.py:253 +msgid "Document indexes updated successfully." +msgstr "" + +#: views.py:111 +#, python-format +msgid "Edit metadata for document: %s" +msgstr "" + +#: views.py:113 +#, python-format +msgid "Edit metadata for documents: %s" +msgstr "" + +#: views.py:148 +#, python-format +msgid "" +"Metadata type: %(metadata_type)s successfully added to document %(document)s." +msgstr "" + +#: views.py:151 +#, python-format +msgid "" +"Metadata type: %(metadata_type)s already present in document %(document)s." +msgstr "" + +#: views.py:175 +#, python-format +msgid "Add metadata type to document: %s" +msgstr "" + +#: views.py:177 +#, python-format +msgid "Add metadata type to documents: %s" +msgstr "" + +#: views.py:242 +#, python-format +msgid "" +"Successfully remove metadata type: %(metadata_type)s from document: " +"%(document)s." +msgstr "" + +#: views.py:245 +#, python-format +msgid "" +"Error removing metadata type: %(metadata_type)s from document: %(document)s." +msgstr "" + +#: views.py:264 +#, python-format +msgid "Remove metadata types from document: %s" +msgstr "" + +#: views.py:266 +#, python-format +msgid "Remove metadata types from documents: %s" +msgstr "" + +#: views.py:281 +#, python-format +msgid "metadata for: %s" +msgstr "" + +#: views.py:298 +msgid "internal name" +msgstr "" + +#: views.py:319 +msgid "Metadata type edited successfully" +msgstr "" + +#: views.py:322 +#, python-format +msgid "Error editing metadata type; %s" +msgstr "" + +#: views.py:328 +#, python-format +msgid "edit metadata type: %s" +msgstr "" + +#: views.py:343 +msgid "Metadata type created successfully" +msgstr "" + +#: views.py:349 +msgid "create metadata type" +msgstr "" + +#: views.py:368 +#, python-format +msgid "Metadata type: %s deleted successfully." +msgstr "" + +#: views.py:370 +#, python-format +msgid "Metadata type: %(metadata_type)s delete error: %(error)s" +msgstr "" + +#: views.py:381 +#, python-format +msgid "Are you sure you wish to delete the metadata type: %s?" +msgstr "" + +#: views.py:398 +msgid "members" +msgstr "" + +#: views.py:442 +#, python-format +msgid "non members of metadata set: %s" +msgstr "" + +#: views.py:443 +#, python-format +msgid "members of metadata set: %s" +msgstr "" + +#: views.py:458 +msgid "Metadata set created successfully" +msgstr "" + +#: views.py:464 +msgid "create metadata set" +msgstr "" + +#: views.py:483 +#, python-format +msgid "Metadata set: %s deleted successfully." +msgstr "" + +#: views.py:485 +#, python-format +msgid "Metadata set: %(metadata_set)s delete error: %(error)s" +msgstr "" + +#: views.py:496 +#, python-format +msgid "Are you sure you wish to delete the metadata set: %s?" +msgstr "" + +#: views.py:554 +#, python-format +msgid "non members of document type: %s" +msgstr "" + +#: views.py:555 +#, python-format +msgid "members of document type: %s" +msgstr "" + +#: templates/metadata_set_help.html:3 +msgid "What are metadata sets?" +msgstr "" + +#: templates/metadata_set_help.html:4 +msgid "" +"A metadata set is a group of one or more metadata types. Metadata sets are " +"useful when creating new documents; selecing a metadata set automatically " +"attaches it's member metadata types to said document." +msgstr "" + +#: templates/metadata_type_help.html:3 +msgid "What are metadata types?" +msgstr "" + +#: templates/metadata_type_help.html:4 +msgid "" +"A metadata type defines the characteristics of a value of some kind that can " +"be attached to a document. Examples of metadata types are: a client name, a " +"date, or a project to which several documents belong. A metadata type's " +"name is the internal identifier with which it can be referenced to by other " +"modules such as the indexing module, the title is the value that is shown to " +"the users, the default value is the value an instance of this metadata type " +"will have initially, and the lookup value turns an instance of a metadata of " +"this type into a choice list which options are the result of the lookup's " +"code execution." +msgstr "" diff --git a/apps/navigation/locale/ru/LC_MESSAGES/django.po b/apps/navigation/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..178af9cd4a --- /dev/null +++ b/apps/navigation/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,32 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: forms.py:14 +msgid "Multi item action" +msgstr "" + +#: widgets.py:28 +msgid "icon" +msgstr "" + +#: templatetags/navigation_tags.py:275 +msgid "Selected item actions:" +msgstr "" diff --git a/apps/ocr/locale/ru/LC_MESSAGES/django.po b/apps/ocr/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..cf9de867e4 --- /dev/null +++ b/apps/ocr/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,447 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:28 +msgid "Submit document for OCR" +msgstr "" + +#: __init__.py:29 +msgid "Delete document for OCR queue" +msgstr "" + +#: __init__.py:30 +msgid "Can enable/disable an OCR queue" +msgstr "" + +#: __init__.py:31 +msgid "Can execute an OCR clean up on all document pages" +msgstr "" + +#: __init__.py:32 +msgid "Can edit an OCR queue properties" +msgstr "" + +#: __init__.py:34 __init__.py:56 __init__.py:74 +msgid "OCR" +msgstr "" + +#: __init__.py:40 +msgid "OCR Setup" +msgstr "" + +#: __init__.py:44 +msgid "submit to OCR queue" +msgstr "" + +#: __init__.py:45 __init__.py:46 +msgid "re-queue" +msgstr "" + +#: __init__.py:47 __init__.py:48 __init__.py:63 +msgid "delete" +msgstr "" + +#: __init__.py:50 +msgid "stop queue" +msgstr "" + +#: __init__.py:51 +msgid "activate queue" +msgstr "" + +#: __init__.py:53 +msgid "clean up pages content" +msgstr "" + +#: __init__.py:53 +msgid "" +"Runs a language filter to remove common OCR mistakes from document pages " +"content." +msgstr "" + +#: __init__.py:55 +msgid "queue document list" +msgstr "" + +#: __init__.py:58 views.py:316 +msgid "active tasks" +msgstr "" + +#: __init__.py:60 +msgid "transformations" +msgstr "" + +#: __init__.py:61 +msgid "add transformation" +msgstr "" + +#: __init__.py:62 +msgid "edit" +msgstr "" + +#: __init__.py:82 +msgid "Default" +msgstr "" + +#: __init__.py:104 +msgid "Checks the OCR queue for pending documents." +msgstr "" + +#: api.py:119 +msgid "Text from OCR" +msgstr "" + +#: literals.py:8 +msgid "stopped" +msgstr "" + +#: literals.py:9 +msgid "active" +msgstr "" + +#: literals.py:18 +msgid "pending" +msgstr "" + +#: literals.py:19 +msgid "processing" +msgstr "" + +#: literals.py:20 +msgid "error" +msgstr "" + +#: models.py:22 +msgid "name" +msgstr "" + +#: models.py:23 +msgid "label" +msgstr "" + +#: models.py:27 models.py:47 +msgid "state" +msgstr "" + +#: models.py:32 models.py:40 views.py:44 views.py:337 views.py:378 +#: views.py:408 views.py:444 +msgid "document queue" +msgstr "" + +#: models.py:33 +msgid "document queues" +msgstr "" + +#: models.py:41 +msgid "document" +msgstr "" + +#: models.py:42 +msgid "date time submitted" +msgstr "" + +#: models.py:43 +msgid "delay ocr" +msgstr "" + +#: models.py:48 +msgid "result" +msgstr "" + +#: models.py:49 +msgid "node name" +msgstr "" + +#: models.py:53 +msgid "queue document" +msgstr "" + +#: models.py:54 +msgid "queue documents" +msgstr "" + +#: models.py:63 views.py:48 +msgid "Missing document." +msgstr "" + +#: models.py:67 +msgid "Enter a valid value." +msgstr "" + +#: models.py:95 views.py:341 +msgid "order" +msgstr "" + +#: models.py:96 views.py:342 views.py:379 views.py:409 +msgid "transformation" +msgstr "" + +#: models.py:97 views.py:343 +msgid "arguments" +msgstr "" + +#: models.py:97 +#, python-format +msgid "Use dictionaries to indentify arguments, example: %s" +msgstr "" + +#: models.py:107 +msgid "document queue transformation" +msgstr "" + +#: models.py:108 +msgid "document queue transformations" +msgstr "" + +#: statistics.py:8 +#, python-format +msgid "Document queues: %d" +msgstr "" + +#: statistics.py:9 +#, python-format +msgid "Queued documents: %d" +msgstr "" + +#: statistics.py:13 +msgid "OCR statistics" +msgstr "" + +#: views.py:41 +#, python-format +msgid "documents in queue: %s" +msgstr "" + +#: views.py:49 +msgid "thumbnail" +msgstr "" + +#: views.py:62 +msgid "document queue properties" +msgstr "" + +#: views.py:63 +#, python-format +msgid "Current state: %s" +msgstr "" + +#: views.py:79 views.py:154 +msgid "Must provide at least one queue document." +msgstr "" + +#: views.py:89 +#, python-format +msgid "Document: %s is being processed and can't be deleted." +msgstr "" + +#: views.py:92 +#, python-format +msgid "Queue document: %(document)s deleted successfully." +msgstr "" + +#: views.py:96 +#, python-format +msgid "Error deleting document: %(document)s; %(error)s" +msgstr "" + +#: views.py:109 +#, python-format +msgid "Are you sure you wish to delete queue document: %s?" +msgstr "" + +#: views.py:111 +#, python-format +msgid "Are you sure you wish to delete queue documents: %s?" +msgstr "" + +#: views.py:134 +#, python-format +msgid "Document: %(document)s was added to the OCR queue: %(queue)s." +msgstr "" + +#: views.py:137 +#, python-format +msgid "Document: %(document)s is already queued." +msgstr "" + +#: views.py:165 +#, python-format +msgid "Document: %s is already being processed and can't be re-queded." +msgstr "" + +#: views.py:173 +#, python-format +msgid "Document: %(document)s was re-queued to the OCR queue: %(queue)s" +msgstr "" + +#: views.py:176 +#, python-format +msgid "Document id#: %d, no longer exists." +msgstr "" + +#: views.py:189 +#, python-format +msgid "Are you sure you wish to re-queue document: %s?" +msgstr "" + +#: views.py:191 +#, python-format +msgid "Are you sure you wish to re-queue documents: %s?" +msgstr "" + +#: views.py:209 +#, python-format +msgid "Document queue: %s, already stopped." +msgstr "" + +#: views.py:215 +#, python-format +msgid "Document queue: %s, stopped successfully." +msgstr "" + +#: views.py:221 +#, python-format +msgid "Are you sure you wish to disable document queue: %s" +msgstr "" + +#: views.py:236 +#, python-format +msgid "Document queue: %s, already active." +msgstr "" + +#: views.py:242 +#, python-format +msgid "Document queue: %s, activated successfully." +msgstr "" + +#: views.py:248 +#, python-format +msgid "Are you sure you wish to activate document queue: %s" +msgstr "" + +#: views.py:265 +msgid "Are you sure you wish to clean up all the pages content?" +msgstr "" + +#: views.py:266 +msgid "On large databases this operation may take some time to execute." +msgstr "" + +#: views.py:272 +msgid "Document pages content clean up complete." +msgstr "" + +#: views.py:274 +#, python-format +msgid "Document pages content clean up error: %s" +msgstr "" + +#: views.py:320 +msgid "node" +msgstr "" + +#: views.py:321 +msgid "task id" +msgstr "" + +#: views.py:322 +msgid "task name" +msgstr "" + +#: views.py:323 +msgid "related object" +msgstr "" + +#: views.py:335 +#, python-format +msgid "transformations for: %s" +msgstr "" + +#: views.py:365 +msgid "Queue transformation edited successfully" +msgstr "" + +#: views.py:368 +#, python-format +msgid "Error editing queue transformation; %s" +msgstr "" + +#: views.py:373 +#, python-format +msgid "Edit transformation: %s" +msgstr "" + +#: views.py:396 +msgid "Queue transformation deleted successfully." +msgstr "" + +#: views.py:398 +#, python-format +msgid "Error deleting queue transformation; %(error)s" +msgstr "" + +#: views.py:411 +#, python-format +msgid "" +"Are you sure you wish to delete queue transformation \"%(transformation)s\"" +msgstr "" + +#: views.py:434 +msgid "Queue transformation created successfully" +msgstr "" + +#: views.py:437 +#, python-format +msgid "Error creating queue transformation; %s" +msgstr "" + +#: views.py:446 +#, python-format +msgid "Create new transformation for queue: %s" +msgstr "" + +#: conf/settings.py:13 +msgid "" +"Amount of seconds to delay OCR of documents to allow for the node's storage " +"replication overhead." +msgstr "" + +#: conf/settings.py:14 +msgid "Maximum amount of concurrent document OCRs a node can perform." +msgstr "" + +#: conf/settings.py:15 +msgid "Automatically queue newly created documents for OCR." +msgstr "" + +#: conf/settings.py:17 +msgid "" +"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend " +"to use for locking. Multiple hosts can be specified separated by a semicolon." +msgstr "" + +#: conf/settings.py:18 +msgid "File path to unpaper program." +msgstr "" + +#: parsers/__init__.py:23 +msgid "Text extracted from PDF" +msgstr "" diff --git a/apps/project_setup/locale/ru/LC_MESSAGES/django.po b/apps/project_setup/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..94e78e7ccd --- /dev/null +++ b/apps/project_setup/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,28 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:6 +msgid "setup" +msgstr "" + +#: views.py:13 +msgid "setup items" +msgstr "" diff --git a/apps/project_tools/locale/ru/LC_MESSAGES/django.po b/apps/project_tools/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..476a9f6ce9 --- /dev/null +++ b/apps/project_tools/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,24 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:7 views.py:13 +msgid "tools" +msgstr "" diff --git a/apps/smart_settings/locale/ru/LC_MESSAGES/django.po b/apps/smart_settings/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..8a0b9fea28 --- /dev/null +++ b/apps/smart_settings/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:8 views.py:26 +msgid "settings" +msgstr "" + +#: views.py:31 +msgid "name" +msgstr "" + +#: views.py:32 +msgid "default" +msgstr "" + +#: views.py:33 +msgid "value" +msgstr "" diff --git a/apps/sources/locale/ru/LC_MESSAGES/django.po b/apps/sources/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..855eaefc8b --- /dev/null +++ b/apps/sources/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,461 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:14 +msgid "View existing document sources" +msgstr "" + +#: __init__.py:15 +msgid "Edit document sources" +msgstr "" + +#: __init__.py:16 +msgid "Delete document sources" +msgstr "" + +#: __init__.py:17 +msgid "Create new document sources" +msgstr "" + +#: __init__.py:19 +msgid "Sources setup" +msgstr "" + +#: __init__.py:25 +msgid "preview" +msgstr "" + +#: __init__.py:26 __init__.py:34 __init__.py:40 +msgid "delete" +msgstr "" + +#: __init__.py:28 +msgid "sources" +msgstr "" + +#: __init__.py:29 literals.py:53 models.py:159 +msgid "web forms" +msgstr "" + +#: __init__.py:30 models.py:130 +msgid "staging folders" +msgstr "" + +#: __init__.py:31 models.py:194 +msgid "watch folders" +msgstr "" + +#: __init__.py:33 __init__.py:39 +msgid "edit" +msgstr "" + +#: __init__.py:35 +msgid "add new source" +msgstr "" + +#: __init__.py:37 +msgid "transformations" +msgstr "" + +#: __init__.py:38 +msgid "add transformation" +msgstr "" + +#: __init__.py:42 +msgid "Document sources" +msgstr "" + +#: __init__.py:69 widgets.py:33 +msgid "thumbnail" +msgstr "" + +#: forms.py:32 forms.py:55 +msgid "Expand compressed files" +msgstr "" + +#: forms.py:33 forms.py:56 +msgid "Upload a compressed file's contained files as individual documents" +msgstr "" + +#: forms.py:41 +msgid "Staging file" +msgstr "" + +#: literals.py:8 literals.py:13 +msgid "Always" +msgstr "" + +#: literals.py:9 literals.py:14 +msgid "Never" +msgstr "" + +#: literals.py:15 +msgid "Ask user" +msgstr "" + +#: literals.py:30 +msgid "Disk" +msgstr "" + +#: literals.py:31 +msgid "Database" +msgstr "" + +#: literals.py:32 +msgid "Drive" +msgstr "" + +#: literals.py:33 +msgid "Network drive" +msgstr "" + +#: literals.py:34 +msgid "User drive" +msgstr "" + +#: literals.py:35 +msgid "Envelope" +msgstr "" + +#: literals.py:36 +msgid "Folder" +msgstr "" + +#: literals.py:37 +msgid "World" +msgstr "" + +#: literals.py:38 +msgid "Printer" +msgstr "" + +#: literals.py:39 +msgid "Empty printer" +msgstr "" + +#: literals.py:47 models.py:158 +msgid "web form" +msgstr "" + +#: literals.py:48 +msgid "server staging folder" +msgstr "" + +#: literals.py:49 +msgid "server watch folder" +msgstr "" + +#: literals.py:54 +msgid "server staging folders" +msgstr "" + +#: literals.py:55 +msgid "server watch folders" +msgstr "" + +#: models.py:29 +msgid "title" +msgstr "" + +#: models.py:30 +msgid "enabled" +msgstr "" + +#: models.py:31 +msgid "whitelist" +msgstr "" + +#: models.py:32 +msgid "blacklist" +msgstr "" + +#: models.py:98 +msgid "icon" +msgstr "" + +#: models.py:98 +msgid "An icon to visually distinguish this source." +msgstr "" + +#: models.py:114 models.py:166 +msgid "folder path" +msgstr "" + +#: models.py:114 models.py:166 +msgid "Server side filesystem path." +msgstr "" + +#: models.py:115 +msgid "preview width" +msgstr "" + +#: models.py:115 +msgid "Width value to be passed to the converter backend." +msgstr "" + +#: models.py:116 +msgid "preview height" +msgstr "" + +#: models.py:116 +msgid "Height value to be passed to the converter backend." +msgstr "" + +#: models.py:117 models.py:154 models.py:167 +msgid "uncompress" +msgstr "" + +#: models.py:117 models.py:154 models.py:167 +msgid "Whether to expand or not compressed archives." +msgstr "" + +#: models.py:118 models.py:168 +msgid "delete after upload" +msgstr "" + +#: models.py:118 models.py:168 +msgid "Delete the file after is has been successfully uploaded." +msgstr "" + +#: models.py:129 +msgid "staging folder" +msgstr "" + +#: models.py:169 +msgid "interval" +msgstr "" + +#: models.py:169 +msgid "" +"Inverval in seconds where the watch folder path is checked for new documents." +msgstr "" + +#: models.py:193 +msgid "watch folder" +msgstr "" + +#: models.py:198 +msgid "Enter a valid value." +msgstr "" + +#: models.py:226 views.py:487 +msgid "order" +msgstr "" + +#: models.py:227 views.py:488 views.py:525 views.py:555 +msgid "transformation" +msgstr "" + +#: models.py:228 views.py:489 +msgid "arguments" +msgstr "" + +#: models.py:228 +#, python-format +msgid "Use dictionaries to indentify arguments, example: %s" +msgstr "" + +#: models.py:239 +msgid "document source transformation" +msgstr "" + +#: models.py:240 +msgid "document source transformations" +msgstr "" + +#: staging.py:40 +#, python-format +msgid "Unable get list of staging files: %s" +msgstr "" + +#: staging.py:125 +#, python-format +msgid "Unable to upload staging file: %s" +msgstr "" + +#: staging.py:135 +#, python-format +msgid "Unable to delete staging file: %s" +msgstr "" + +#: utils.py:40 +msgid "Whitelist Blacklist validation error." +msgstr "" + +#: views.py:80 +msgid "here" +msgstr "" + +#: views.py:85 +msgid "Upload sources" +msgstr "" + +#: views.py:87 +msgid "" +"No interactive document sources have been defined or none have been enabled." +msgstr "" + +#: views.py:88 +#, python-format +msgid "Click %(setup_link)s to add or enable some document sources." +msgstr "" + +#: views.py:136 +msgid "Document uploaded successfully." +msgstr "" + +#: views.py:152 +#, python-format +msgid "upload a local document from source: %s" +msgstr "" + +#: views.py:182 +#, python-format +msgid "Staging file: %s, uploaded successfully." +msgstr "" + +#: views.py:187 +#, python-format +msgid "Staging file: %s, deleted successfully." +msgstr "" + +#: views.py:209 +#, python-format +msgid "upload a document from staging source: %s" +msgstr "" + +#: views.py:215 +msgid "files in staging path" +msgstr "" + +#: views.py:229 +msgid "Current metadata" +msgstr "" + +#: views.py:265 views.py:284 +#, python-format +msgid "Staging file transformation error: %(error)s" +msgstr "" + +#: views.py:307 +msgid "Staging file delete successfully." +msgstr "" + +#: views.py:309 +#, python-format +msgid "Staging file delete error; %s." +msgstr "" + +#: views.py:368 +msgid "Source edited successfully" +msgstr "" + +#: views.py:371 +#, python-format +msgid "Error editing source; %s" +msgstr "" + +#: views.py:376 +#, python-format +msgid "edit source: %s" +msgstr "" + +#: views.py:381 views.py:421 views.py:483 views.py:524 views.py:554 +#: views.py:597 +msgid "source" +msgstr "" + +#: views.py:410 +#, python-format +msgid "Source \"%s\" deleted successfully." +msgstr "" + +#: views.py:412 +#, python-format +msgid "Error deleting source \"%(source)s\": %(error)s" +msgstr "" + +#: views.py:419 +#, python-format +msgid "Are you sure you wish to delete the source: %s?" +msgstr "" + +#: views.py:451 +msgid "Source created successfully" +msgstr "" + +#: views.py:454 +#, python-format +msgid "Error creating source; %s" +msgstr "" + +#: views.py:459 +#, python-format +msgid "Create new source of type: %s" +msgstr "" + +#: views.py:481 +#, python-format +msgid "transformations for: %s" +msgstr "" + +#: views.py:511 +msgid "Source transformation edited successfully" +msgstr "" + +#: views.py:514 +#, python-format +msgid "Error editing source transformation; %s" +msgstr "" + +#: views.py:519 +#, python-format +msgid "Edit transformation: %s" +msgstr "" + +#: views.py:542 +msgid "Source transformation deleted successfully." +msgstr "" + +#: views.py:544 +#, python-format +msgid "Error deleting source transformation; %(error)s" +msgstr "" + +#: views.py:557 +#, python-format +msgid "" +"Are you sure you wish to delete source transformation \"%(transformation)s\"" +msgstr "" + +#: views.py:587 +msgid "Source transformation created successfully" +msgstr "" + +#: views.py:590 +#, python-format +msgid "Error creating source transformation; %s" +msgstr "" + +#: views.py:599 +#, python-format +msgid "Create new transformation for source: %s" +msgstr "" diff --git a/apps/tags/locale/ru/LC_MESSAGES/django.po b/apps/tags/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..01c643513d --- /dev/null +++ b/apps/tags/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,267 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:13 +msgid "Create new tags" +msgstr "" + +#: __init__.py:14 +msgid "Attach exising tags" +msgstr "" + +#: __init__.py:15 +msgid "Remove tags from documents" +msgstr "" + +#: __init__.py:16 +msgid "Delete global tags" +msgstr "" + +#: __init__.py:17 +msgid "Edit global tags" +msgstr "" + +#: __init__.py:18 +msgid "View a document's tags" +msgstr "" + +#: __init__.py:20 widgets.py:14 +msgid "Tags" +msgstr "" + +#: __init__.py:28 +msgid "tag list" +msgstr "" + +#: __init__.py:29 +msgid "create new tag" +msgstr "" + +#: __init__.py:30 +msgid "attach tag" +msgstr "" + +#: __init__.py:31 __init__.py:32 +msgid "remove" +msgstr "" + +#: __init__.py:33 __init__.py:58 utils.py:14 views.py:144 +msgid "tags" +msgstr "" + +#: __init__.py:34 __init__.py:37 +msgid "delete" +msgstr "" + +#: __init__.py:35 +msgid "edit" +msgstr "" + +#: __init__.py:36 +msgid "tagged documents" +msgstr "" + +#: __init__.py:41 models.py:46 +msgid "color" +msgstr "" + +#: __init__.py:45 +msgid "color name" +msgstr "" + +#: forms.py:14 +msgid "New tag" +msgstr "" + +#: forms.py:15 forms.py:24 +msgid "Color" +msgstr "" + +#: forms.py:16 +msgid "Existing tags" +msgstr "" + +#: forms.py:23 +msgid "Name" +msgstr "" + +#: models.py:18 +msgid "Blue" +msgstr "" + +#: models.py:19 +msgid "Cyan" +msgstr "" + +#: models.py:20 +msgid "Coral" +msgstr "" + +#: models.py:21 +msgid "Green-Yellow" +msgstr "" + +#: models.py:22 +msgid "Khaki" +msgstr "" + +#: models.py:23 +msgid "LightGrey" +msgstr "" + +#: models.py:24 +msgid "Magenta" +msgstr "" + +#: models.py:25 +msgid "Red" +msgstr "" + +#: models.py:26 +msgid "Orange" +msgstr "" + +#: models.py:27 +msgid "Yellow" +msgstr "" + +#: models.py:45 views.py:185 views.py:233 views.py:248 +msgid "tag" +msgstr "" + +#: models.py:49 +msgid "tag properties" +msgstr "" + +#: models.py:50 +msgid "tags properties" +msgstr "" + +#: views.py:33 +msgid "Tag already exists." +msgstr "" + +#: views.py:40 +msgid "Tag created succesfully." +msgstr "" + +#: views.py:46 +msgid "create tag" +msgstr "" + +#: views.py:73 views.py:112 +msgid "Must choose either a new tag or an existing one." +msgstr "" + +#: views.py:77 views.py:116 +#, python-format +msgid "Document is already tagged as \"%s\"" +msgstr "" + +#: views.py:86 +#, python-format +msgid "Tag \"%s\" added successfully." +msgstr "" + +#: views.py:124 +#, python-format +msgid "Tag \"%s\" added and attached successfully." +msgstr "" + +#: views.py:126 +#, python-format +msgid "Tag \"%s\" attached successfully." +msgstr "" + +#: views.py:133 +#, python-format +msgid "attach tag to: %s" +msgstr "" + +#: views.py:149 +msgid "tagged items" +msgstr "" + +#: views.py:166 views.py:280 +msgid "Must provide at least one tag." +msgstr "" + +#: views.py:176 +#, python-format +msgid "Tag \"%s\" deleted successfully." +msgstr "" + +#: views.py:178 views.py:294 +#, python-format +msgid "Error deleting tag \"%(tag)s\": %(error)s" +msgstr "" + +#: views.py:193 +#, python-format +msgid "Are you sure you wish to delete the tag: %s?" +msgstr "" + +#: views.py:194 views.py:197 +msgid "Will be removed from all documents." +msgstr "" + +#: views.py:196 +#, python-format +msgid "Are you sure you wish to delete the tags: %s?" +msgstr "" + +#: views.py:221 +msgid "Tag updated succesfully." +msgstr "" + +#: views.py:230 +#, python-format +msgid "edit tag: %s" +msgstr "" + +#: views.py:245 +#, python-format +msgid "documents with the tag \"%s\"" +msgstr "" + +#: views.py:258 +#, python-format +msgid "tags for: %s" +msgstr "" + +#: views.py:292 +#, python-format +msgid "Tag \"%s\" removed successfully." +msgstr "" + +#: views.py:308 +#, python-format +msgid "Are you sure you wish to remove the tag: %s?" +msgstr "" + +#: views.py:310 +#, python-format +msgid "Are you sure you wish to remove the tags: %s?" +msgstr "" + +#: templatetags/tags_tags.py:17 +msgid "Add tag to document" +msgstr "" diff --git a/apps/user_management/locale/ru/LC_MESSAGES/django.po b/apps/user_management/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..60179df6e5 --- /dev/null +++ b/apps/user_management/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,254 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:8 +msgid "Create new users" +msgstr "" + +#: __init__.py:9 +msgid "Edit existing users" +msgstr "" + +#: __init__.py:10 +msgid "View existing users" +msgstr "" + +#: __init__.py:11 +msgid "Delete existing users" +msgstr "" + +#: __init__.py:13 +msgid "Create new groups" +msgstr "" + +#: __init__.py:14 +msgid "Edit existing groups" +msgstr "" + +#: __init__.py:15 +msgid "View existing groups" +msgstr "" + +#: __init__.py:16 +msgid "Delete existing groups" +msgstr "" + +#: __init__.py:18 +msgid "User management" +msgstr "" + +#: __init__.py:28 +msgid "user list" +msgstr "" + +#: __init__.py:29 views.py:31 +msgid "users" +msgstr "" + +#: __init__.py:30 __init__.py:39 +msgid "edit" +msgstr "" + +#: __init__.py:31 views.py:92 +msgid "create new user" +msgstr "" + +#: __init__.py:32 __init__.py:33 __init__.py:41 __init__.py:42 +msgid "delete" +msgstr "" + +#: __init__.py:34 __init__.py:35 +msgid "reset password" +msgstr "" + +#: __init__.py:37 +msgid "group list" +msgstr "" + +#: __init__.py:38 views.py:222 +msgid "groups" +msgstr "" + +#: __init__.py:40 views.py:270 +msgid "create new group" +msgstr "" + +#: __init__.py:43 views.py:226 +msgid "members" +msgstr "" + +#: forms.py:13 +msgid "New password" +msgstr "" + +#: forms.py:14 +msgid "Confirm password" +msgstr "" + +#: views.py:35 +msgid "full name" +msgstr "" + +#: views.py:39 +msgid "email" +msgstr "" + +#: views.py:43 +msgid "active" +msgstr "" + +#: views.py:58 +msgid "" +"Super user and staff user editing is not allowed, use the admin interface " +"for these cases." +msgstr "" + +#: views.py:65 +#, python-format +msgid "User \"%s\" updated successfully." +msgstr "" + +#: views.py:71 +#, python-format +msgid "edit user: %s" +msgstr "" + +#: views.py:74 views.py:130 views.py:193 +msgid "user" +msgstr "" + +#: views.py:86 +#, python-format +msgid "User \"%s\" created successfully." +msgstr "" + +#: views.py:108 views.py:162 +msgid "Must provide at least one user." +msgstr "" + +#: views.py:118 +msgid "" +"Super user and staff user deleting is not allowed, use the admin interface " +"for these cases." +msgstr "" + +#: views.py:121 +#, python-format +msgid "User \"%s\" deleted successfully." +msgstr "" + +#: views.py:123 +#, python-format +msgid "Error deleting user \"%(user)s\": %(error)s" +msgstr "" + +#: views.py:138 +#, python-format +msgid "Are you sure you wish to delete the user: %s?" +msgstr "" + +#: views.py:140 +#, python-format +msgid "Are you sure you wish to delete the users: %s?" +msgstr "" + +#: views.py:173 +msgid "Passwords do not match, try again." +msgstr "" + +#: views.py:178 +msgid "" +"Super user and staff user password reseting is not allowed, use the admin " +"interface for these cases." +msgstr "" + +#: views.py:182 +#, python-format +msgid "Successfull password reset for user: %s." +msgstr "" + +#: views.py:184 +#, python-format +msgid "Error reseting password for user \"%(user)s\": %(error)s" +msgstr "" + +#: views.py:200 +#, python-format +msgid "Reseting password for user: %s" +msgstr "" + +#: views.py:202 +#, python-format +msgid "Reseting password for users: %s" +msgstr "" + +#: views.py:243 +#, python-format +msgid "Group \"%s\" updated successfully." +msgstr "" + +#: views.py:249 +#, python-format +msgid "edit group: %s" +msgstr "" + +#: views.py:252 views.py:305 views.py:350 +msgid "group" +msgstr "" + +#: views.py:264 +#, python-format +msgid "Group \"%s\" created successfully." +msgstr "" + +#: views.py:286 +msgid "Must provide at least one group." +msgstr "" + +#: views.py:296 +#, python-format +msgid "Group \"%s\" deleted successfully." +msgstr "" + +#: views.py:298 +#, python-format +msgid "Error deleting group \"%(group)s\": %(error)s" +msgstr "" + +#: views.py:313 +#, python-format +msgid "Are you sure you wish to delete the group: %s?" +msgstr "" + +#: views.py:315 +#, python-format +msgid "Are you sure you wish to delete the groups: %s?" +msgstr "" + +#: views.py:345 +#, python-format +msgid "non members of group: %s" +msgstr "" + +#: views.py:346 +#, python-format +msgid "members of group: %s" +msgstr "" diff --git a/apps/web_theme/locale/ru/LC_MESSAGES/django.po b/apps/web_theme/locale/ru/LC_MESSAGES/django.po index 303d9e09e3..0ac7ce2296 100644 --- a/apps/web_theme/locale/ru/LC_MESSAGES/django.po +++ b/apps/web_theme/locale/ru/LC_MESSAGES/django.po @@ -2,23 +2,76 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-01-30 16:51+0300\n" +"POT-Creation-Date: 2011-11-03 16:38-0400\n" "PO-Revision-Date: 2011-01-30 13:12\n" "Last-Translator: \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: \n" "X-Translated-Using: django-rosetta 0.5.5\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -#: templates/web_theme_login.html:3 templates/web_theme_login.html.py:8 +#: conf/settings.py:10 +msgid "" +"CSS theme to apply, options are: amro, bec, bec-green, blue, default, djime-" +"cerulean, drastic-dark, kathleene, olive, orange, red, reidb-greenish and " +"warehouse." +msgstr "" + +#: conf/settings.py:12 +msgid "Display extra information in the login screen." +msgstr "" + +#: templates/web_theme_base.html:101 +msgid "dismiss all notifications" +msgstr "" + +#: templates/web_theme_base.html:101 +msgid "close all" +msgstr "" + +#: templates/web_theme_base.html:102 +msgid "dismiss this notification" +msgstr "" + +#: templates/web_theme_base.html:102 +msgid "close" +msgstr "" + +#: templates/web_theme_login.html:12 templates/web_theme_login.html.py:33 msgid "Login" msgstr "Пользователь" + +#: templates/web_theme_login.html:17 +msgid "You are already logged in" +msgstr "" + +#: templates/web_theme_login.html:20 +msgid "Redirecting you to the website entry point in 5 seconds." +msgstr "" + +#: templates/web_theme_login.html:23 +#, python-format +msgid "" +"Or click here if redirection doesn't " +"work." +msgstr "" + +#: templates/pagination/pagination.html:6 +#: templates/pagination/pagination.html:8 +msgid "Previous" +msgstr "" + +#: templates/pagination/pagination.html:26 +#: templates/pagination/pagination.html:28 +msgid "Next" +msgstr "" From de790fabd0722bf1e676737554ecffd18a153f2a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:40:46 -0400 Subject: [PATCH 013/220] Added Russian language compilation to the make messages script --- misc/makemessages_all.sh | 88 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100755 misc/makemessages_all.sh diff --git a/misc/makemessages_all.sh b/misc/makemessages_all.sh new file mode 100755 index 0000000000..e492b3411c --- /dev/null +++ b/misc/makemessages_all.sh @@ -0,0 +1,88 @@ +#!/bin/sh +MAKEMESSAGES="django-admin makemessages" +PWD=`pwd` +BASE=$PWD + +cd $BASE/apps/common +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/converter +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/documents +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/document_comments +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/document_indexing +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/dynamic_search +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/folders +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/history +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/grouping +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/main +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/metadata +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/navigation +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/ocr +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/permissions +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/project_setup +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/project_tools +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/smart_settings +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/sources +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/tags +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/user_management +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru + +cd $BASE/apps/web_theme +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru From f59aa5501cbffb811e193643eed5e91828f33f6b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:41:17 -0400 Subject: [PATCH 014/220] Added Russian resources to the transifex resources file --- .tx/config | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.tx/config b/.tx/config index 3bd7886fb3..05ac8ed4fa 100644 --- a/.tx/config +++ b/.tx/config @@ -3,54 +3,63 @@ source_file = apps/converter/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/converter/locale/es/LC_MESSAGES/django.po trans.pt = apps/converter/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/converter/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-common] source_file = apps/common/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/common/locale/es/LC_MESSAGES/django.po trans.pt = apps/common/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/common/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-permissions] source_file = apps/permissions/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/permissions/locale/es/LC_MESSAGES/django.po trans.pt = apps/permissions/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/permissions/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-sources] source_file = apps/sources/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/sources/locale/es/LC_MESSAGES/django.po trans.pt = apps/sources/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/sources/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-document_indexing] source_file = apps/document_indexing/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/document_indexing/locale/es/LC_MESSAGES/django.po trans.pt = apps/document_indexing/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/document_indexing/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-user_management] source_file = apps/user_management/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/user_management/locale/es/LC_MESSAGES/django.po trans.pt = apps/user_management/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/user_management/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-main] source_file = apps/main/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/main/locale/es/LC_MESSAGES/django.po trans.pt = apps/main/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/main/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-ocr] source_file = apps/ocr/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/ocr/locale/es/LC_MESSAGES/django.po trans.pt = apps/ocr/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/ocr/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-project_setup] source_file = apps/project_setup/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/project_setup/locale/es/LC_MESSAGES/django.po trans.pt = apps/project_setup/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/project_setup/locale/pt/LC_MESSAGES/django.po [main] host = https://www.transifex.net @@ -60,70 +69,82 @@ source_file = apps/folders/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/folders/locale/es/LC_MESSAGES/django.po trans.pt = apps/folders/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/folders/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-history] source_file = apps/history/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/history/locale/es/LC_MESSAGES/django.po trans.pt = apps/history/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/history/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-dynamic_search] source_file = apps/dynamic_search/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/dynamic_search/locale/es/LC_MESSAGES/django.po trans.pt = apps/dynamic_search/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/dynamic_search/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-smart_settings] source_file = apps/smart_settings/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/smart_settings/locale/es/LC_MESSAGES/django.po trans.pt = apps/smart_settings/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/smart_settings/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-navigation] source_file = apps/navigation/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/navigation/locale/es/LC_MESSAGES/django.po trans.pt = apps/navigation/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/navigation/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-tags] source_file = apps/tags/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/tags/locale/es/LC_MESSAGES/django.po trans.pt = apps/tags/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/tags/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-documents] source_file = apps/documents/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/documents/locale/es/LC_MESSAGES/django.po trans.pt = apps/documents/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/documents/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-project_tools] source_file = apps/project_tools/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/project_tools/locale/es/LC_MESSAGES/django.po trans.pt = apps/project_tools/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/project_tools/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-grouping] source_file = apps/grouping/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/grouping/locale/es/LC_MESSAGES/django.po trans.pt = apps/grouping/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/grouping/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-document_comments] source_file = apps/document_comments/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/document_comments/locale/es/LC_MESSAGES/django.po trans.pt = apps/document_comments/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/document_comments/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-metadata] source_file = apps/metadata/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/metadata/locale/es/LC_MESSAGES/django.po trans.pt = apps/metadata/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/metadata/locale/pt/LC_MESSAGES/django.po [mayan-edms.apps-web_theme] source_file = apps/web_theme/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/web_theme/locale/es/LC_MESSAGES/django.po trans.pt = apps/web_theme/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/web_theme/locale/pt/LC_MESSAGES/django.po From b1854cb93bd0cfabcb3e1d45a671d6b2da3739f0 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:41:42 -0400 Subject: [PATCH 015/220] Added Russian language to the compile messages script --- misc/compilemessages_all.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/misc/compilemessages_all.sh b/misc/compilemessages_all.sh index 0a386d95e7..99f951f1c7 100755 --- a/misc/compilemessages_all.sh +++ b/misc/compilemessages_all.sh @@ -5,63 +5,84 @@ BASE=$PWD cd $BASE/apps/common $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/converter $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/documents $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/document_comments $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/document_indexing $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/dynamic_search $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/folders $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/history $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/grouping $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/main $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/metadata $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/navigation $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/ocr $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/permissions $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/project_setup $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/project_tools $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/smart_settings $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/sources $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/tags $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/user_management $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru cd $BASE/apps/web_theme $COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru From 01aa13c162bda523418542c3ece9e8a96505cebc Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:50:47 -0400 Subject: [PATCH 016/220] Fixed Russian locale resource typo --- .tx/config | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/.tx/config b/.tx/config index 05ac8ed4fa..aadf05cd77 100644 --- a/.tx/config +++ b/.tx/config @@ -3,63 +3,63 @@ source_file = apps/converter/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/converter/locale/es/LC_MESSAGES/django.po trans.pt = apps/converter/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/converter/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/converter/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-common] source_file = apps/common/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/common/locale/es/LC_MESSAGES/django.po trans.pt = apps/common/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/common/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/common/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-permissions] source_file = apps/permissions/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/permissions/locale/es/LC_MESSAGES/django.po trans.pt = apps/permissions/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/permissions/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/permissions/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-sources] source_file = apps/sources/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/sources/locale/es/LC_MESSAGES/django.po trans.pt = apps/sources/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/sources/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/sources/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-document_indexing] source_file = apps/document_indexing/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/document_indexing/locale/es/LC_MESSAGES/django.po trans.pt = apps/document_indexing/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/document_indexing/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/document_indexing/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-user_management] source_file = apps/user_management/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/user_management/locale/es/LC_MESSAGES/django.po trans.pt = apps/user_management/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/user_management/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/user_management/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-main] source_file = apps/main/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/main/locale/es/LC_MESSAGES/django.po trans.pt = apps/main/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/main/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/main/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-ocr] source_file = apps/ocr/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/ocr/locale/es/LC_MESSAGES/django.po trans.pt = apps/ocr/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/ocr/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/ocr/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-project_setup] source_file = apps/project_setup/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/project_setup/locale/es/LC_MESSAGES/django.po trans.pt = apps/project_setup/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/project_setup/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/project_setup/locale/ru/LC_MESSAGES/django.po [main] host = https://www.transifex.net @@ -69,82 +69,82 @@ source_file = apps/folders/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/folders/locale/es/LC_MESSAGES/django.po trans.pt = apps/folders/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/folders/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/folders/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-history] source_file = apps/history/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/history/locale/es/LC_MESSAGES/django.po trans.pt = apps/history/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/history/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/history/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-dynamic_search] source_file = apps/dynamic_search/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/dynamic_search/locale/es/LC_MESSAGES/django.po trans.pt = apps/dynamic_search/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/dynamic_search/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/dynamic_search/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-smart_settings] source_file = apps/smart_settings/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/smart_settings/locale/es/LC_MESSAGES/django.po trans.pt = apps/smart_settings/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/smart_settings/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/smart_settings/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-navigation] source_file = apps/navigation/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/navigation/locale/es/LC_MESSAGES/django.po trans.pt = apps/navigation/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/navigation/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/navigation/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-tags] source_file = apps/tags/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/tags/locale/es/LC_MESSAGES/django.po trans.pt = apps/tags/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/tags/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/tags/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-documents] source_file = apps/documents/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/documents/locale/es/LC_MESSAGES/django.po trans.pt = apps/documents/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/documents/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/documents/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-project_tools] source_file = apps/project_tools/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/project_tools/locale/es/LC_MESSAGES/django.po trans.pt = apps/project_tools/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/project_tools/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/project_tools/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-grouping] source_file = apps/grouping/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/grouping/locale/es/LC_MESSAGES/django.po trans.pt = apps/grouping/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/grouping/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/grouping/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-document_comments] source_file = apps/document_comments/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/document_comments/locale/es/LC_MESSAGES/django.po trans.pt = apps/document_comments/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/document_comments/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/document_comments/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-metadata] source_file = apps/metadata/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/metadata/locale/es/LC_MESSAGES/django.po trans.pt = apps/metadata/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/metadata/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/metadata/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-web_theme] source_file = apps/web_theme/locale/en/LC_MESSAGES/django.po source_lang = en trans.es = apps/web_theme/locale/es/LC_MESSAGES/django.po trans.pt = apps/web_theme/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/web_theme/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/web_theme/locale/ru/LC_MESSAGES/django.po From 51b2a989ff1b9995caae4a4287533c0e47c99d44 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:55:53 -0400 Subject: [PATCH 017/220] Added Russian to the list of available translations --- settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/settings.py b/settings.py index 25182f6e98..4322e12875 100644 --- a/settings.py +++ b/settings.py @@ -52,6 +52,7 @@ LANGUAGES = ( ('en', ugettext('English')), ('es', ugettext('Spanish')), ('pt', ugettext('Portuguese')), + ('ru', ugettext('Russian')), ) SITE_ID = 1 From eea1abbc805a6a029c1bb9735aa940ca9e1d0119 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:57:04 -0400 Subject: [PATCH 018/220] Russian translation update --- .../converter/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 988 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 494 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 4982 bytes .../documents/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 22276 bytes apps/folders/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 5037 bytes apps/grouping/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 2085 bytes apps/history/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 705 bytes apps/main/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 494 bytes apps/metadata/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 494 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 780 bytes apps/ocr/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 7236 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 693 bytes .../locale/ru/LC_MESSAGES/django.po | 180 ++++++++++++++++++ .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 678 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 494 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 746 bytes apps/sources/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 4470 bytes apps/tags/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 2000 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 711 bytes 19 files changed, 180 insertions(+) create mode 100644 apps/converter/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/document_comments/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/document_indexing/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/documents/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/folders/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/grouping/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/history/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/main/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/metadata/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/navigation/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/ocr/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/permissions/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/permissions/locale/ru/LC_MESSAGES/django.po create mode 100644 apps/project_setup/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/project_tools/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/smart_settings/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/sources/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/tags/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/user_management/locale/ru/LC_MESSAGES/django.mo diff --git a/apps/converter/locale/ru/LC_MESSAGES/django.mo b/apps/converter/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..99e8a9c52fe47b23811a827decf1736440da5637 GIT binary patch literal 988 zcmc&y%Wl*#6iuOk6gG$z5?x#tty&>Zoavxx)22}R5S2P&Gz9jZ#Lc*x*pcl_Td5ni z2#FP6!G;Y|k$7zQfOOFh$ghwOZxknbV?LcWcB zhK!bR542x~t6^yzx6awk>aAz0&taG8oWrI{tAa}l+e#PAdRsDOrKyI@@(j94ThvSMS{G!cu!Fm6Tn^cR^3MDOvR1geVLFA&6(SdY~q#d1y(&WZ?nl`#TOG=Dz#!NEbpx+Y?eA2uYnK{>ev6O@w!5S|q# zu;>nS6)gCjozB+P{e%tbZzyT;-AHm&;;Ae@#3n-~tvfOUFqC@dt4KI zVU-D)N3hfv_Hxt+bme!4m1aZY-pWKE%W-Pr#TA$=<9Rt7(l`!bZVud%K8nK-o&p7w zW4;zQFG{O%%Pq$ax*AeAKAu=mLl@8!qNlmw|JTp4{!#y|Pfp*~pX=}SN&UscpKqrh FyuTrU94r6; literal 0 HcmV?d00001 diff --git a/apps/document_comments/locale/ru/LC_MESSAGES/django.mo b/apps/document_comments/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..728bb26bddad734e2300017ef9d107ecc791cb66 GIT binary patch literal 494 zcmYL^(N5bi6ox_DRW7;S#X%ZqXggrH2z91mgw|ydNmHdM65N^A%Q6MKa$E!wudz4b zd3ctc0Ha6#<#Xikw|_rxef+yYwMqI!`b_#j`bKK2M|z^e@3gnfdrh4Eqvsyu1zu{` zRMrTXM1zayT*9Tyr*Sq8a=o<9W7?F}0?$@ugM}3kOtJz8PAg9)94fB`bQtGIi*e{1Z3|{sr6&KK@aqwtqnI{|(IG@!`&Ab;uwem)Jp3Sv^d34RLv zCCHz;#*fG^gJS1>@H5~CpveCX6#0LGqGt=n2~|A^%KL5LU2xeCo@TwXPpKW?94K-A z3j98}>61$R0Q@0%0{jQ~I5>7srvD;1%lb#4eipo7vpO z`T-CZ)z`sCz;RIcnFjm8OQ7g`J72#Kiu~U}k>3ot1#l-Q``-b@4+Bz~Hiw@Dg;ci|q?F_L6#sVtbJ~%jsA1HK|fx%AbW3O5I+M@+-NOdfMoc zIuTzb&ilEcT4`>%q$ecrcXLZza&6<5nB^jUwhy2|Jt!Mb1xC;Mu@2+>;fxzrb>!>7 zOvG-jqMcezyI#f2nDDTAYT9vY&P2`V$=EALuJ47zdV8pjn3{=9s2#7O%Ykv^c{1?p zIxGiHRIXYrQPt>*Uykd>i&`oN)zKjE1C~9nTyILpjS8BynP~(j3^9hS{?2M3JYd&l z(-2Pv!d#aD7+rIpH@fPYzzND#x9rq(7zJ@TA|1H_B2i<`j9ZVPGoGAuXLSGe za6p&+7#<o#0GNVY<q(jOUO?TMO;ou=7NH ztP$Xu-mR!9pWf2GNBNm)Q&ZNF>=zSZ`CL#)=(MPE zBU2BRDbw(S zs4x~zxs}4#;;FDO?hor~6g7s2hNj%88cz(;twVtyI)Up4L)5(E4Y^?$o3QWXiSfeI zGM(s#!VyNxu-;QFl?uft3wxf_rTxQu_Z5nJi$w$rr_8h~=GV%J=wrI{#BgcPt|C|8 zH=Qslj0cVv)*RYkSWku1PZae*3!`;r)Cip}Z%2{&rHI;?}Z?_@0woLb=-Kd3Y2 zy@p+eBaa=>+2csRx4l#x87b)XtT<0{cFXPcN?8;ZQzK)DRSPS>>uXZyq0ZTdD=H?k$0YiJWM*M(sN z?sj|ej@B0}_pnc}UD5R<3X7y3#wE2ciKvG9W>yPq2u-UH`39Kh78chj&kJF-L${q+ zYmcS#U0Nu)>{YZ8-~T|!Etxgo4cu{P0gi86eV)f`!tS6OwU z_@>mJobL7?ajD$}%M5DTg^JE=Qf0RADWj%TGMnbi7@Epzl?A3L_t(<^ZB+Pbvm72jJEmipd&G*$9bY2gdj z|4w6K#`bFFURN<^ZLX#JY#~Ay3^(P2jyq_RO5$`DtJIz)u%j-gU!<0yCC@T^zbdpd zW!R?WnN}C!=ti=fW#eV31}rY%Y(7(jh%QpELca{JJRZx0bk#=x3jH5l{dXo>zO=c` zsFuicPv3>IYN4#GdzE&3r9nt!yUW4h$!b7V`45r*1#Yy;Xh%NwSvY-My&pFItrXz=z7{E&f# z5nH6^Wj-V~+aF9jMC>SSjh&4$MThm+WM=+P8lg!MFOx?`L~ER@eAX-`H)s;RKr7H? zCnfSSFS2j?yvTP&tpA_LOR4{3J(?SGYB=s!mQyGx$B&07RF5j|n1I8?7tOS!G1Q`Z2WVayCNl#O{n!0%M^m<|KMXO`t0=0{!O~9Pz!mIb5On| F{{jy=v-SW0 literal 0 HcmV?d00001 diff --git a/apps/documents/locale/ru/LC_MESSAGES/django.mo b/apps/documents/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..de2d31def323718107d732a8623f419f666060a5 GIT binary patch literal 22276 zcmchd3zXbdeaA255sdN_L5k8p!N4wLH@iuAErbMl|{DoA;gIG1T7&>iGgt`@YWOr$F&z zAIMhCe}SihhrZj@XMsmiKNr;arQm7cAb2*o89WOd1Fryo1d6V+Pd4U!@Fws~@L?fx z+XsptKlwvry1`$An)l38jCmV)1xOdO5@ae<07d`3pvHaHw|^BBz25|n2EPw30$&GV ztvLf_5giwTT0aj;54M4lhI9jJLu z2%MZx1rMXX8WexCp!Df6Pg!3RL` z=ZB!^IuhY%{?(xP{ZUZ;ZwD8En?UVj9F)Ai10quMBXA!08&G`eW>c`loCk`YRiOBK zBPcp^p!!9i=)4Woybpo0hbKYt|102ZZ~~N`{400__&ZScbNKsQ|KmXE&B>tV?F6;n zJdcY(RKQ#XimqEgt+yGJ93KHO1+x>>xW5H4E%O6V^8N+LlIAdo(YOv!be+dP?dN7t z{RchX4vLEB#_t8Ket@Fqd!Xp}KB#&B-9P_1csTW6gBt%kk8i`M#P1V8 z%@csy&spFMa1kiJeE`(>RiOIa2x^`X6kQ{r^!5(l{vfD%9|h&&p8=&$W1#j`1u-4- z-=OF`ro+v90w_M63QBHW;0$mXD7yMV^LDn({R-6l zm!U-Kz!l(P@Vnq0;M-x6=DQC>HO;f&Vc@G^1pXM*y4PLd({YCIJ>aT#3=YN7{gC{e|3E(oY1H1w32RDJJps9hH|416O&y&D+ zfE}Rx&pEz*IjDVPK=FMexETBrh)B%qzP%G;kiPYU;{R=+=zJDj0KN>)0e=JD4t8Aa z`1~}uiTbxe?eFsC&faeV1L~VV$>WRQ(cm}0Gr=18Zt#CW(R=)d9RIq&k5XR?+I@nj zQa|z~0N#H6F6*t4+`@m;G@wEnO{a=Av|F{*74*@9tE(JTm>%k+y zP5$|(K=pqP6utXE#o3>DJOm|D{k>o}cmXKB4S~{&M?lGA0z4M{8;}1Cimso5>URvz z;$7f5py<33l)Q4_S>R@{2iyrtzkUMF1W(0Sjt4uz_kb6HqVsy+z7f>8ZJ_x4ZQuT? z$6tVl(5`2YV!lq%2emfeq1>m6|Ag@ukBh_wo$%Kk-dDCqR-(DEKgA# zbBnKk7?j=|>g$5-{`;86vpjwal%I7He zQU)mcNC)JnP!s#Pn*TRZq{}-ge@XcR$~=nn=5ER}l;+Q8s9Z&nU4EIeo}y0|PmQx<2ET#N0rTKHJ zuXKYSpzQGV+dP^}^7)`V6b2)i!7wP7GKFYuu{4}1=Zb|W;A@aA4pfH2Lb)%P9nA@b zGV8)%O&At}Y?u$rVK#^=0|Q|ct*zwq8@kOU!^KLW9OU$TuoQ+-P%Z|gVmVU|gG_xc zx7tWp3Mvu*a)okO$_!}D<{5ZCz{0_;#p1ALgqUKbJl$zZVX&cCfjs|ZG#3qtn1Otl zDFvB>+4drH$y+pABrZ-donxvMNX+-3ykR6f_+bY>;vi^So6CoV%&^Gnh`)ED9cxQS zDnWQKYj#K6uv$CmjAl(^{|P20Pc9B}3uBEm39IEMc-+f?~l6EjO&$ zWHz#gAj;i}WtGBpxp34hDGtkyBEF#Sg>sBEltS4@yr7kMOKZKM5RRq{)h;L!V^TY# zfUU&yHM0p0EvZCh#AFSAD9jBGK}l27Xf9hGGE1$&X0u_|EVYJSpUqR3YK`a?4U}>t zGGe}$Gr2r%-giiX18&!=i)%g_4wNOq0lV#Nux5kQ2!2VWI-~As4uj>0A3Do94LjIr z!fa0N>mU~&%|wA8d7$-!U?qNaZ84uOj^+x3!N5?aFlZfO@s?mDpBb>?@~!D@$FdWj zVoy6IsqF?Fh{9$@vyR_a(xKNyXr*O^8w=Ib)tJRi(5PD#n|fB;C28Dsy_kfMc0*zo z9mJ3W(-j3Bv!l-Bb|M?vGUd#gOeFbX9x*#2f?O^t=LVYeULLQ}L$$WMOLb{OTB=9v zbf+_0z3=p=ZT1+}Yp;$c!Ok47gRoR`9@u`tuhbb~w;2y$s(45`S4a$KS#r87O?LrN zK@3nDGLX+iBql?da!?9!&yn0R?Q2TKOeq@-mWq{;W(P`SL$QW}3?VXCSXa!E@XTT8 zU?uMpB^>^6rclY`qi$#Rne4hup{!tlBd$cU|7@%%;t$J}&>!f?4Hon?6Xa1I_2x0* zDIdffbZOYfDhe|tgNnoWOVR{twuw^=3waR%BV{UMxwHqvr#Ukmz zvh}EVvuw?!B$7e6o^&WuXtC8{!g&xD1{hozY&1!5t~Qb>56KOC1#yi^wd^+~5%n*L zxzYOJ90u2Hi!!pvTo%?337C-06vb7nJH#euca%aML|g(WEAW;a*%O965`{SicxjVW zAb9U>p)*t15R7Ix9Q9w`zs#DT>Cdds4OfQaypvAxVW(qur_7S`NpaMjj;O^ap!5l< zesEeB>hP7Cbz0f%aAtjHwmz~@8D7IS80oegboeA~j^EFmK)Gy~?QCKK1eU_#(2i8% ztTP?N#6HKGgXzx|4tmG!PJ8JsC#Rj>mU9JdnVeT{VqGpvOehB&3*~%~hn@ zajkB$w5~6seBp?>x`2+9aPo4l$_NxyawOld!TM#Q!iJ!nxg`vuB3i9XRniTerF5I+ zI5_(cB~xCr8Ub{oJ{)t|3dbH!&iU1P5~*2DF+D_FjSlRQ!+kB5a;T|Y*fnsBis!fX zp#hQkkPRjAJT9h$W(CJ$#W)N=x*tD|&LnYlM;#&yCRD-!mr&|PyrOrwp5r^4Ez_3- ze#Hpct@I$|_Tls36H(-72dX3Pm%nb6ci7;zOVu>iO zQ|n``l|tO;dXDDkw+2CkWr?7Gq`NgCmQN_A9t;;j%WF}cn1YUoHJV$k=1n%J|G%UnVlER$ac-tcnrMkUntMRnX`?(D#RytgIB8js67*Ce)wR zxuJWDSb6N7)3oll+|<@W%7hAAb#oUoYw}o!rnLWTt`aX0)tizRuXdAme48sQ#^941 zTcjSFr@>{BLT@mfcAUYQy49rfpvYKK3W{u2Q;Vf+STc4GF2LBY`OKOy?^<1^;J({k zy8XsZ%m$&z#CKm7ixn=`WCkOgUCQpi-B(kxo^nGbRgY+p1Gg7y{#rR7t}Pq?y=1Sm z6q|!ysnYzuU}^KQ%h*Tr{G)n`5^=?49jtpkKRvY0H%@esDG!k)6}aFsN#B&JS}EH7 zRYr78l{H*E>dYcX6DwY1lr0&b;5j7vo8_gVuF1MC&vsoKmXsX#1^t-~nL@B^Y5$6u z*MuX*Qn{-?8q8(8-d`Dvx>gqZf}wJGq;KxrL2}W`n(l$(@Z3@{B4!jzbIC(8g}G$E zl`xvQ{OXlmOZ>^PYbm7l1@n4(d%Jor=$dyy(0hL0g85xN3wnC!*mVt;ms-BLpSsQu zde7~f*K>9cpP3&-!@6t$BW0FD9E{eT*ArZ1Vev4m>Mm6-rdwgKf&z4{3^T)h!8H|< zady<<=^h;&?Y11vtqs?A7sB#f6hmBy=8m`xbcNaBXl|L&b4!)EoimkCH~7=r-80kQ zt#+-%G4use%(+~(r!5fa05^nvDIkd{0q6p)02fAh1tD53m5hVXPgn}YtLy5dwYXLK~F$;>K8AZ z7eBga;R1cNBYH0C?FnwX%?+VXPbXt~88feQrl~$u+gKe7s{3nqRL80l)#t(O)m?ns z0q(1g*R}>hZDZ|D+phXOwJkw)XZ0l>029?cwN2H%jNMnev$|c17}Pc~=l<$g?UPI} zL6v^nt1sC;Te?m4Gj^_>>c+x$sR^1UG(p?7Qi}xD9YJ;6E;weV+QZ0k2xhhF-higD z>Wef$6{|gAr@qHgC}MW-^(8iPubS)z+wHGqO%eK1?Y@{dEU9V6s(V@EA;*)k>TXTN z3ghlE-7N?1wwtq!4R%ni-N#-IEPy0^5?5QsFZzEbWC}$`vt}Kf zwqi&yL3^#63?8KVyiB>er@9?u+Jd@0X{~=Jy~kuHdt|iE*1cuoj}qR@I+K((RL8_< zB@xNDan;W;9ez$8#rgthl6*E=7r3{&-Bcfg$`|oG&elb=l@k4(XMNE*9cRPVhg!cP zH&J~7XK5Yr1TJB(Tm}o_5uHcIo9UaeMC@(2TpGu#lmb?pO5qZ@H)+;UCQNiS@w+oVjAo3!G2xU|Fic^fKB^$V79(kXdwXM4^OCL@Mr zN!-~68n@Xty&lJU$Dz9}plyf|3Z%IrCo!b$OU^lLgKl0%auW6ToB`o!I#Z-)P%i0T zdDcpFzEVXw{mtbH!kFwppC{A{45oeC$5bClB|;)s(bM_gcI4yP zlj@cv@wsqc8hmYvrpU$I9KSw>STH=P|coJ7m(ahE4p5+;ae4v;!?A-j1v68eUEQtfA2E=bCs}He-ovqq_6vZ3${; zIo2d5{27-VNvczOpmwM7LpX;OY@B0rMbwFtDB)pud?MayO~mE^wXF)vLG=ZCY{HN2 zpJXY5v4Zy=9O2!Xm9KsBUYs}epv$K7#6I+srC3-QwN@B+ViZ`V*{8MbVta6@BzfI| z_mDalY^rTm@M20uPclyQ%(}b8G1dCxx}8`?D6MIB%xYwBWI2v2%!x=CDF4C#_@Hck zuuoN_VyvulhYr%#xzzQ%q2+!(o97az-F{f!Wx9|rcOP2^omtYI$mPStmI*elP3n%K z*??JfE1a`Lh}ERkZh%-|v(9)TrOgtDOLsk?wM5el-0Lxa;T`emx0g~`rvcF81K4IJs4>gQ31*33|gTk%V<{)VM>0!~J4 zhub{eD=T|y9XR>Qc4&G(;_V}GvI$GB zKHlW|({@s~OJvlzN{Geft+Z<@__ zj#IHZEi2fid#HLiO8q7!$u{|-w#uiIWm>7(aS@+32okah!^UyKNh{z62W0h#)k#b51Qk-qETpQ8sBY#3D`R!@axhX|I94 zr;qdQ7d~B1VNCT=Xxjrh3ZtB&b>-YhU~K%P;ZB9S-^0aso5k5TyLziG-rNs|+HG?3 zb<*-7qIV>GmCXW3ACmSHx4OKeaRVnqu+KVM%?k@)o?S3rrb!ZJRfU%VI&H-+RyIP0 zB8~8gPa;J_kTxU5jX#=BR$6?$J7grpN`?b{_hGiyWaX{U1lch&Z&$=e?=U_knQ|T8 znI_d!{!9$fTbyaURC(0yv`OVAmqv1JyG+_PTCQ99@hQKZ!jRo%0IyHro>uc0q)kSR zR{N_s`;tYwC(|U`vLp7jhzu@2#zTKInRePO-F4x*4aUjX$8f^Rpse()mqf%aq1x`G zT|a0Cwfn_xY(5f;6(jcWL?h=yMLWM6)<)q zHBn>ZdE=cT&n7rDyz!r}c?Uu^ZmN?V&!tx!r<}qjoq)Dx71uc`cHv$uiQUpwr?yhP z_S2?y{C3S7s~z6CvU5X z2;(JnW1kq4X0XR)Zb7sQC>w_p?iH841mM(5#}}-Ex(*Cxv&vBvy5uHNOb(54tf+^w z_T*Kc*7l{dI!P;fYf&J1@j#5gbvDx1n6++q?arWnQa6kJy@GD_yr)P}AWxJM zgql7F6$yVrCx~czLnz0cMt5I`PWDDw38yI39A|ikfC~dz{|OK!a{*N4jYsC>r*YdNZc9T>GYn zvEFm1<;(Ms>5}|$yS!C~raLZahmXzej8wa4!Fqx;iEd0PDCufqf_A2Za!opc3-N87 zadOs8DLN-v#=Z`XFG||(#hZfT)udES!m3GC=#5$2lU~L?ZYts^4y8q?MlPfbub1E^ghGf&JB(GhfX8X(QzErajjV0xK>i)vGZ|%4q6DL;$$LmhV@8k_!fTrAy z#Mn0I630D(mWI?Yxulk+X2%+Du5C9fX;!vBhn;%!I3J}}+@(6pZTW4+BmzzKla!qU zX?q)E=k{XKsaHO<*)KX8TbHtL4@~=k(g_)G{SHHK*yCTz>fToQa?GYSQ>%OGb;qnp zmJ<1zicDY1+Tt{(7#1^y99rA(hrJ0Clig|>_U5FGKH8pb+O;+5=@eUa{=!~{sF%+q z8HnFb{1C_aX5Gc>dMN$enX=2=mG;>9m~g+)CdvFi7gBvuh4B#d*YPs+`%goYgroEayV)e5sb~t?z9|9M+*a;x;{|e*79sB zg$bsNDJ@g^-aF%L(@x!TWmL}>fe8*obNUdY71j3f*?nJ81U zXQ39GN{QQ=XFG`{4`53CsyppizBV7ts7j_}nUg$K1Qa_57~8`V`;x zw~)vw8xvI5d5x~Rq2<_v3|lX9YIny2<~IgB3Yn=auH8y?#UbZ$S4^Cz@g)z4>{v!^ z&m&VjbSVc0?~GcxvrE$Id9SV~;#W34Rkc0r3Avp-6u4V{CPW&CcR(OEt5fQ$%#J3s MolIHRR<7y)05R+@@&Et; literal 0 HcmV?d00001 diff --git a/apps/folders/locale/ru/LC_MESSAGES/django.mo b/apps/folders/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6bdb087a35efe4bc5dc11a29c0e639f95b96e9e0 GIT binary patch literal 5037 zcmb`JO>7-k6~}KO(AI?l;j5(-ZVgFolJ}LSC2`^=p^2rUnnbA^K6aBgV|&nhZ``@_ z>=-JP#0mmA)DkK?+K3GZB#>+3#&H@4u|O<9n%O}GELfHe-E_eM_?upCh59S_DEL

TUu_L*WxTQzL zzSR69{3w&nyTl@KN^G=7@rZBvBRm_+pxJGEok&N4cCs_-Sm^2bpsP(c zdztgiv`B1!Q9YC^88&({4BB=-Ge5X%D193?gGc@=#ip#;{4c5_>$B^% zyeRcK^+b|!L>bY^o*J8wp#Pm?G$9@yf6$x(QRLb&358G zCbP2moh^*^*)drG+)b{W5M$bN{mAc3Wl9bar8*&%?yVU$mXcy{ml@Pe*botHIjmgZ zPJ3c!>thmcUTwWyB2pKm2$@K~2URuRHIbePgIVA8v=ix;=dciTyezVUdYP!1@tXeR zJoN2&bGZ!pa5^c|C4Np<)t8EGH8Jg(T%XZRM4gri^jUcAnP%vpB|yjMuAzg{h)h*$ zPGN?gaP*urFD!vt+V8kNzIL6Kl}DXTtaO1N>R_%@IIM$k%IWyua3VkG=(ZP42d?N% zQ<5Ka_1SqFuC?xTpkt}ukP14H<9F~7Ikwv9?>ri5XL8bO0v%4X9QJvS>B0?K|I5=P zRwBuQJE91ma*MY-@P^4nfcEtPUW<@2FWxOFez3Cdpl%!(+5dQ@zQ0~a zuyWd)^~HQyPDCHmjVDGPe_~IaXW$t+rZN#a9n*3mnL|@%_Vaap*uv4acsafmuO|ySxuD~< z`1N=-zRB-(8D+^r{93%qPO^}EH(muV#w#qYCKszJektCFU*-5pyp~){F6;Oz3usDp zBo}qOqS2k{SMm3gMUh#JucwOS7+*J%%UImd$)$LM1-mGguX6InHmYSN=OpKT!|!W_ zsd$Y}?@eqj=>MnXWU*{pZty!8&u!l^v?4=f9A71?r6iWEi80A>n)Dk|ss0>`aN6aF zQnL%Be>M4zq&KTqS#y61H;`LH^?JPA%f4`7Em;!1`IY|;4*KtS^>3kIv$K5;;Q1?M z-_8@aaAVz)DpY z+x;1(E&fA6VMx(fsm|m)G%ZMO)67E8t8yXZTS#wMB~qjtI7+7!)#@uw*3O97_AN7@ z-`sLWh#Pb`F6sEyWYKnU%GG4au3(5n*!_&ABD$&1ky%08%hUyK%6TMYlF-u&!Y86% zPA3FJlmU{wC|x7Xy=k&YebVh-S6J1y$l_GthKheK1n8~sib)&JhWLF;)aQo9i*=FR zu=D1c_#u1g{6TIVhsw05>i88QReI(c(sFVM2bpU!r(}@X(UmMREVt3T#8z^N@}&f| zQ!g^EFh8PzDa{Z8*72=m{FZCywF{g@#v@WJTmnP#;iDxS#r7Ku8_NP+Xy?jF}$|7SSo80lLnBB59)xQC1yJCj` literal 0 HcmV?d00001 diff --git a/apps/grouping/locale/ru/LC_MESSAGES/django.mo b/apps/grouping/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6df6346d0fc9fc8af48335dfa3025fa91b845980 GIT binary patch literal 2085 zcmZ`(O>7%Q6y8AjGnckhoB%xzi4vh*@1{Xb-8d~YsZ<~k1;e!&+Y@Jzy=!J>^CRWZ z1Smf_a49!9a0kh8YMLg*l{j;lEqCtRIC4UKvzuKfQCMmG&FsGSz3=^a{=9hZI}6W? zSg&9ytP5DbW0~jtkY&9Fya0R&=mMVs&Hz2&JHP|r2Jmy>eEE|d?GD5&#Pc;-fnne@dY?SdQaNJ=IOGg1ndh#{2_X^Wg(Iz(^f za>D8-sGckhNS!IBl<=#O;?t?DT%|LWQQuMPZGIWJL(8#cF*X@tFFij}Y99w4r&CbkySXkigP$+v&HvGE%cGQq| zB`ndhQteW)*znbIRCQ`$t0+Q=(uShgGQLG$%81Lt{09~Lrr^v>i#>yWmT27dJlnl$ zk6$HkvNZ9g?M}EZ4DAKJ;+yct?TqPV@~)J|C*E-J6y9S}*%iS8*<{MhV?(Z7acL@n z8!dF&5z#cvf<}aqv@4voO0*DRx{%T6k?z&iRYw^Te~GU-0arzIJ!wX|%<2i2OW*8{6-L9Y;B~pA1Bu$L!HL5K$A-O7lRJmnO4(v?4B`)mQ zpcdBspi!d9s;_dXB@$6#z8MMDv~Pu?g}DgY$x)UsU!!ze9u0;)w_NsUWQ5GteZA~? zbe&v+InLAN@$A!7dBSWH4|mFQX=5XGfsH!`9}hm`V+Bj!*L}Sof2M!cJ$)E&k=~8( z;`mrUj<-oa)E#W@>VCWlyDnk#mEO}kdS7>v`#}GIBMw-5@fV~YfaX!W8E@$>K0G3Q zsC%Tl@wVOpO$W!mW9c8`t)tUkd@tTMDh}dr30^%TCjJ_@tNVuTggV_hgAng>&AMah zpFsmx#7tuRViJQE$k;(*5NNVAU%!OpO?{AjHx8x-xo@r)ivLH8L;Cx~qXSlx+9A?J zm@`DLn^fj4^-K@zcyMoC;E$*Mp(Nv<3Dt?1-`$&EJ_+3ZG zE;~x{%(HgrtlN%E3VEAN1y7g3jAwEIo*rpqi~{A(x_A6SOlIVvDGDarOiJIvPY09V KO?ryKvHk=3sBJ3% literal 0 HcmV?d00001 diff --git a/apps/history/locale/ru/LC_MESSAGES/django.mo b/apps/history/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b0e56dad8dd05e76b8329111f82a9e685ef0900e GIT binary patch literal 705 zcmYk4L2uJA7=|+#AmsoON5tXduxS-?<8&2ky=EY`PMSnTRSG9AUhAetjU8-fU8Nlu zH!i@1U%?59LxouP7t%k#Z{bS{3`qdih2|E2kIK?bp*>YgW`EZ;kcYw7-_>`!+K+Boi;O1 z@kDrCqu+>uBS%B>N*F7(V$k6;uAqI;dExg&s*NKZ8_OYin#Gp%HG{EpDGP#Fx^Z?~ z9q1%5+Hxbc36dfkNNY1;{qFNV**Aha+?E`0Cm7Ud7!ukfwI+lOR)0ijol-QCo;Z=k z@&Ee@>o$Zttk!%;arn=;b);{&vJ;LyFo^BR4uw`JPZDgiYO+1FsW{`YAbr6T2EEK$ zi5+eIx%YHBt-4|pITEK;C0vlMUcmeEDdO@))wK%Ltc2$@AJ}VkAf-Qs7-9^UT{2 ziRc>98x=M4WEc0=RQ?n<$!d>07D}U?L7VUM43?ML8~(Z|a%D(c$FfK6m$4?DoWZs+ z1q*^$n(cD4-p$iM<(ey*s~~mRKx$nI?XNxTkVPf9n}RHHBN#Mj7!o>98uJj&v6(xB z&QOX*vMzR{yMEN?tkV$AvPO8DV)+laHl(9?rW0;*#UR!@vlLqAbT8#HsjG4UZCPCM zSdfn3DTDP=Yl$zK`aAdT?rz<a38t3!l4hODM9Ob@QIgVg_@Y()=Hl zfhzsAq*Od1E4fNFgRD4T>S($N!#0}AZiO_8LYSNc*V2h74B;+NKs&A%qQ<|iRy5<< z^8{^$6b=rC5%ka+W3**$(VilwP24Vh5gmGb&WCp*jS6 oT)ncNs^_+E&+HlY-|Pw4AJq{qPchkd0t3%}L7`v0#1l@vKhE|5-T(jq literal 0 HcmV?d00001 diff --git a/apps/ocr/locale/ru/LC_MESSAGES/django.mo b/apps/ocr/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..782b9c5f9dfdb9cd43d4fc0f0ea9f720d83de20b GIT binary patch literal 7236 zcmb`KTWlOx8OKkd<>FGHr9gquoDgy`$*y;uR7ssUNt>jlfSWW4NL(T`-ksQ!?#?W8 z@kOfC+)3mVw^2bw&?13QC7zr#ZZ>w}NPvWdkeKBGBp!IE#1p)LfENVi_np~Y&#pJV zq>McKpUXMl<^TP^bH;yq;O_4#jz>6GasKiyrJe*!@8*Z&{M|}z1uuYGz`6SU-|P1q z?oq0T=U)eN-~=e+Z-9C5Z{Q|y?R%8^G&U_4oI`SEHKL9@mt|Lj| z{~*`{{uq22{2eI%h8{|E^CmdW{afH6@D++ci0UsOsjL5jq^R!uWTL-^!L8gs4n78s z*717%{lCGDJYW4OrMOg|2c_NxQ0yHCSA*kV4*Wj22K+TBe*X$eKfMiZ09SECYndEm zzGy=1iFOECL4#V)`2o&#oS)%r9KwUdB0R}K>gJFZrHn?WTRIB0&^t4q7oe?Xvb6RM07|h1cR{?RvW8xkI*3OimDrg~k};To*hyl$tkV zEO_OL)OP8Sw(onskxA2LQ#qTPvMQpuLctD#V-YN-tft47;IlZM%t?FhFeV7SO2saA zHdKGPs7onsu}K3r8yjqP2igg!P!f#so$}K*a@1mIv4{xhp_baoKr^{JMR$kU4cRSf zAsuK-c!Rb`qvCtQEm2r*Q5P(CL#PLBotP%Ld722o%wKd~($>t{k1Bj^=@F~s6y-Of zEc>P4+KfrdvNg3GWN(zw9jF0o%qd4@ZI!(Ujd{mJZiUGAMR5(*Mf6aKRExG`fb4x_ zUCycjCkWDxcoGGn|Ee}j8szZ@0d6q19 zD5CN8F{dOX6(>1 zP)R{mgX`u+eZgovuP<&e3n`()qSW>#^es1#su;!=f7?EJ{vH9ki7Qc~vWrfrT&rv= z&oA1(GEJi!p4)D92};_Y1u7hl%7d=ulvG=Ut+!@**PCa5tExOg+9ASia-=J!r>r zdk|`52VDmb9LemJtpT%{ee4i@x;K~4XL65bdLPyK?R{IfWpZ0{IR<79*&~j)PmhzK zTXcR~UvKZG97orekay;Ya9^@QS!{=bk!?A>)4-lGd1w7-7sC=sWscZZxlbR8=o>QH zSdV*jbTn)DaE{qyS=SDGD73H;^i+}rGIp^X^n}dr@uQyZu7Rfp_RsT^&*r-JCi_I@ z$asaULVFA&CChPl=)$n&2X@&13FtwF}@kk>Dt+N zjtAzUj;G=oxiODmb55CrMr{-R_s<3cN@nqCJ7)Mgauoos*~{y)iCNzrP6LdOUlfih^H4+E|K_bZBoO` z6b2>aYfKP(Q(#qIiR@<*H(3?G%H0(+>;}JYCWMN4nLBIdh%9esP@=#-iQ;a$cGko% zgU!ryL~(XOnDLZ~f5aHlFwL}Vu~0-JtV+M2vJ0exzuRX@c0XzDt+syE*t*uD3@N~E z4XXHM0!a0{e(TKlP*PFHmxZj_#oGCVk7=RdG!ar&_`X7qPuETn&+Ei2PiCMD!sZB1 zmJ>-z=zl|2BHl|334tBR)09*S%0%%e^kexouB*g>Tpl6>SE)JbMs>zUJ*TQeA4cwD)G>N#@TP282*i+-!=n<=9z})-ufD;`+kM z;a$|SKt?=F|2NVIn`C8ILL$;2Cu!Zb)g-P`_clqk*<$h>q7b>5yd|h5)`vDHwToi1 z`Jc^F{uWsz>jAVcXeslZvI*wP7+*GhL9fw4l#}+A#Rr8XOBXFhC)OsCeRSoKbYzoO zg2B3D`3jhT%PDE+q$G=kKp~TzogT&ZCF$9uni8{A=9aV!$t2y+L$g>*vyoRdo@Q36 zubWMsvdgFrJGgu#q$HL8?=1eI>8F#%C!Zb3_m2cLLqPHsB26Jdu`5XKSChVhf$8Ks zNA5eXk_>?T4hufYZz}IJNzR%jt4+GHi%?m7pEkegbyJ4U(#>Y8X_PqmW|O|)Nh4Ha zWU0P}*H>kO#Lo#VUpG5%=bVyFlj@}xdD(bOTd@)+`O4~Y(mVD66Nhz)*Y|E^qU(JT!*pZDmYLg_f^t#+Cg!Z+pq0rh( zMxpHmF=cD*SJZ|{)-c(?MYc&W<`ZEuzD9S5jO6>_x~`pJgzSp2+(@M1u|AIkrMr@? zocxnLj7@g2V%+J*X$U)IcE;2Pmh@qIPp>m>D!23(l%l>T;x|aE{y#u%LN#+VA2!N# zddh<$&!q&a$Wgw^8vm@cs=8ClL%K4lO&dn#1L7K2_3u6rRm$sa4DcZ?pAGNK!qRRQ zFtYGNIj*9zK$&1<4K@Fcac2^ewoxL!+9Ux>*VHBxk{4KR%UWo?C0|4snrV9{3T;t> kI9p)QEHv}wi>r#lSLxv@LO8`&Da0?z;vz4b?QU}aAM*xTQ2+n{ literal 0 HcmV?d00001 diff --git a/apps/permissions/locale/ru/LC_MESSAGES/django.mo b/apps/permissions/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..87762754f77a0eef9862f32023c85ca51c5c5d64 GIT binary patch literal 693 zcmYjNO=}ZD7@lhNum=ww#lv{8G{|IUlR(mGwu)^E1s6k%p1e%6)6K~4>^d{sq)?$m zkAesBZ%7e^qT+AZ{R93M-$|@JC>${|vka>;h7B9pL;Z7OAiTiC9{scqY(L=dZ-Xl7pDM z5ZcIGF&yy|uJB+ldghHpk!wpLlgOAnE)zq>Im1(H3+DTYwA1piImt6$=Z0&UYd>>d zUm8;i;|-sV$*vaMLRqrMtzfuCgMiR2(%Qm7k9E3)b|?iQ8Hr=*+W)U}(l!pdtkr%% zA-pHtSTfdJnUvdHGn|;?F2(&NJ<7ODo4VWqnMz8Y2r?EtV|Y{=BVnV>%eiN>S<|{A z@<_~^N?5;G{etm})dEDsnei>SeO>wuFFJ?@SN{_V81OFu)rd*roJd7zFqsrWoXK-U(ZOpZa0PrAr6x2Na*4t}LLT4e$iuX*E1lzpcJj m=hctuqF&VRQGHf@TV8yx7jSh}{i?oH=gX(+qWW2XKz{%*h|Q4z literal 0 HcmV?d00001 diff --git a/apps/permissions/locale/ru/LC_MESSAGES/django.po b/apps/permissions/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..ea1075083a --- /dev/null +++ b/apps/permissions/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,180 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"PO-Revision-Date: 2011-11-03 17:23+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:12 +msgid "View roles" +msgstr "" + +#: __init__.py:13 +msgid "Edit roles" +msgstr "" + +#: __init__.py:14 +msgid "Create roles" +msgstr "" + +#: __init__.py:15 +msgid "Delete roles" +msgstr "" + +#: __init__.py:16 +msgid "Grant permissions" +msgstr "" + +#: __init__.py:17 +msgid "Revoke permissions" +msgstr "" + +#: __init__.py:20 models.py:75 views.py:33 +msgid "roles" +msgstr "" + +#: __init__.py:21 +msgid "create new role" +msgstr "" + +#: __init__.py:22 +msgid "edit" +msgstr "редактировать" + +#: __init__.py:23 +msgid "members" +msgstr "" + +#: __init__.py:24 +msgid "role permissions" +msgstr "" + +#: __init__.py:25 +msgid "delete" +msgstr "удалить" + +#: api.py:22 +msgid "Permissions" +msgstr "" + +#: api.py:55 +msgid "Insufficient permissions." +msgstr "" + +#: models.py:11 views.py:53 +msgid "namespace" +msgstr "" + +#: models.py:12 views.py:54 +msgid "name" +msgstr "имя" + +#: models.py:13 models.py:70 +msgid "label" +msgstr "" + +#: models.py:20 models.py:53 +msgid "permission" +msgstr "" + +#: models.py:21 views.py:50 +msgid "permissions" +msgstr "" + +#: models.py:61 +msgid "permission holder" +msgstr "" + +#: models.py:62 +msgid "permission holders" +msgstr "" + +#: models.py:74 models.py:92 views.py:69 views.py:79 views.py:103 views.py:203 +msgid "role" +msgstr "" + +#: models.py:103 +msgid "role member" +msgstr "" + +#: models.py:104 +msgid "role members" +msgstr "" + +#: views.py:56 +msgid "state" +msgstr "" + +#: views.py:116 +#, python-format +msgid "" +"Are you sure you wish to grant the permission \"%(permission)s\" to " +"%(ct_name)s: %(requester)s" +msgstr "" + +#: views.py:121 +#, python-format +msgid "" +"Are you sure you wish to revoke the permission \"%(permission)s\" from " +"%(ct_name)s: %(requester)s" +msgstr "" + +#: views.py:134 +#, python-format +msgid "Permission \"%(permission)s\" granted to %(ct_name)s: %(requester)s." +msgstr "" + +#: views.py:137 +#, python-format +msgid "" +"%(ct_name)s: %(requester)s, already had the permission \"%(permission)s\" " +"granted." +msgstr "" + +#: views.py:143 +#, python-format +msgid "Permission \"%(permission)s\" revoked from %(ct_name)s: %(requester)s." +msgstr "" + +#: views.py:146 +#, python-format +msgid "%(ct_name)s: %(requester)s doesn't have the permission \"%(permission)s\"." +msgstr "" + +#: views.py:199 +#, python-format +msgid "non members of role: %s" +msgstr "" + +#: views.py:200 +#, python-format +msgid "members of role: %s" +msgstr "" + +#: widgets.py:16 +msgid "Revoke" +msgstr "" + +#: widgets.py:21 +msgid "Grant" +msgstr "" + +#: conf/settings.py:10 +msgid "" +"A list of existing roles that are automatically assigned to newly created " +"users" +msgstr "" + + diff --git a/apps/project_setup/locale/ru/LC_MESSAGES/django.mo b/apps/project_setup/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7acccb67ee14a64ff206827a853098716862a183 GIT binary patch literal 678 zcmY*V&2AGh5Z>~0+1`2vX*f_dLeAQ0L{c|f5N#?|YD5$QXWYcy8fER3f0|b6fu9Q! zXWoMg5<~)CVej3rsPS;92px9XWkb)NiyZn!bx*t^28b^tTHyqtK3967o>}aPse26O5w3A zIS^iQXi>%p-65?VU|rts5Za~`g=8epRrUS9x=OkYtixLmA5gUTSU69{R%ka9-dGNq zJMU2F)$}+QYSy%24`n(FB9mk+Mb2RqoKrZ_*6+UO^Lf)(MbxRhXlm(`VzmXA6srM< zoaQd^n4Q>=G~&V0pnts|)}-;i(Ozn7=CZ)4yu837Gokb@OwNSG4X4k?hopP0tNuHc zmh|<+OqI?!bWfE3+bRbe;^8bd>XzyRdT8Eq$NSG-a^436)FlrHsKN zpn!6W_tMs%r(W8w+&Y8y7=^2=RSIfo19KSWv>I_#ek(sM-z?uQUzgv@ujQir5|uxe R@9=tommlE2_s``b`UML1%@Y6s literal 0 HcmV?d00001 diff --git a/apps/project_tools/locale/ru/LC_MESSAGES/django.mo b/apps/project_tools/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..728bb26bddad734e2300017ef9d107ecc791cb66 GIT binary patch literal 494 zcmYL^(N5bi6ox_DRW7;S#X%ZqXggrH2z91mgw|ydNmHdM65N^A%Q6MKa$E!wudz4b zd3ctc0Ha6#<#Xikw|_rxef+yYwMqI!`b_#j`bKK2M|z^e@3gnfdrh4Eqvsyu1zu{` zRMrTXM1zayT*9Tyr*Sq8a=o<9W7?F}0?$@ugM}3kOtJz8PAg9)94fB`bQtGIi*f@2tneVz`q(}Kqxt}JkOcj$+D&53--AJjNE2s0YM>ZvA8rqU3)7-}u>Uo6LNu`dx znqRFGTBQ_(q|3*Vz5ailm9AoM&G+uyrV!2prZnkECREIHDt#QP@fyXA8Qn`*6qjYb z0WuNhEaareS>oevu2cjYt^ApLGMSXMZ4wRnURiMMX7g82ZZ=b&$b2``;x#f;b5guPP#qP| Zis!{sIR9e4nkh1$XCDvEv6Y%*^cxo~;ava# literal 0 HcmV?d00001 diff --git a/apps/sources/locale/ru/LC_MESSAGES/django.mo b/apps/sources/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9965bf491362ba111cca7e7c46cfe07342acb1de GIT binary patch literal 4470 zcmbuB-ESOM8OBd&3$6KR3FVuXQ@}|KUhi&_s*Y>7RbvMQV(KPtZz!VU-Q)F;-5G0U z){doII5AO(QY8Yl;zOdPf{ThPx5?UxU2hPVAi<2dpb`@Q1VUVa_`PR#cGtTOxnSg( zXU>`TydTf|oU{J>{`=ohTnD(n#C>X?Qcr^CKg5G;=02sy!56_Vg4e*$g1-eH0e=sE z8T_;K)e;K#r}fd|3Afrr5R9#HCQ;4t_E_+kq~ z@Oj2>fRBS8fDeKH0wvBq9y0$RDES-&ajCuuegr%PeiWPqS)yKT&Ci3MVeEmQ055^! z_jOS0-fYeP29&yQfJ5LPLCO1{pw#ggLH5Df*TEk%9>&SDU=tKR{{xEs(E+83;49#B z;5AUb{~6>@JwTFIz(>Fp@E4%0dz2tw1;@b&@KtaWd=va0_*d{-;FFO10=NpUfiZXn zoTa$^;5(qyxy@q|{6h;Lepsn5h#e?)J}A6g1jYX6U>E&inb&k%k3pS|2#Le z+qksD>I<;f=XgrrALIUtok{yETBcq0f;wBf3^cd&neuGiqD8qxi`gam$}Z$?`zAF# zD3iylZt1KZJQSL!zWDvB>zy46b>wTOT-JV|jpxi&jSl^q(Ph6>uNg05R1Zof98t#u z<3vV#X1VX9nlx3zx86l+vd2qjqP|%5ow6zGuwKG_IA5<;S4PxS*^T<$OnH$Bw4;}t zs#}(4-HfOcezj}@b<$fh0aM!bbZAPxR}S^^f(eX{7K~nYqSAt%x2Ag0i59dQ>e7NK zoh9@Bz0LolZlxl8>8=>><`Ib%FsHuJ8B6Y=4Drt3>eV|hfKNvR_(=vHSU zr{a1QJ?~b{uECfd42SV26!!Aby(qQ23vn-{y{ni=SKTnu{=5#m0*10!wT$R^8f}+J zk3|}14-4Bkno;s=ivgVzA}Q%0y!u|`SW;vn)J_PQWp~Lf*Xd6tj!?bqq9JpRG=-0B zK2w@SQ*pP&WhvdsmbXx1E&RIF>tnOczJT zjvmVujur|S=1#+r<^d#%}NuiP9y|X!lkDQdfdWuHOL(a z>d#>2Rq9T~!*TqjsueI;aoKRO^9L&7DA?Y&&n!4#SBfPwVt`;*d93EKE!k^??IgUJFl5 z6pQ*#CSc8vLn;U)%bRweV<3MRPnE6t)$k< za(9qD7iks$Y`2*d){}4Q{dHhh5t{_Nk*reJhSa5#wd6v4CvGG^qN*nK{EBJGXp35J zC9C2ltF4ECyM+7+3&cg*BAeD7i6Z_Wvq|3|YzL>8B?BfKgnf&UcOZ40+JtU0T9wH0 zHZ9ZS*syi%NN&lcVQt&8L8sPqe5aMBERk*^4<=g242%(ED!!)8RoH2yiJ(-HUXM3sA7>jh`HJY@rjN`S zuO^q6VF!uqrB$*^Z2Rn7lO9{~B(I55?jqe**9b*Lq9UTg`jyNR@7E-j3q*~&Z1K4U>x&;?(ak|qNh&{RIktJr6!i!;|(#}KFD!z<<_BGmZzTDClITe>A5BG za4x?j%-G|Nk93%4BaPH=xh^bbPB|wz=7d|axkx)^=9K@A+}} z=R^BHVpxx3KZX4h_OsYm_Thtd;10$f0S|&b;M3qe;AwC__$qieSOo6`OW;xPO_1Uw z_yl+vB>$`6W8hcd^WY{(@xOo>@b}L7Pw+{c{{|`UFvLm!C_WE>&wvks21xf~;Dg{e zxDPSsK?COtcQG~yu7HQYHc0t?=$wB9N$)rCCGan>4}1Ym)W0fffWBXNc{+~4{UVo-*oJ2AdQ@SsSjFcA(<8Bp&n@+#-=>9 zsDGLNA z2X`g6y-?WBBKcH=!)?iXdSwqQ+7)=(>~*^;*tyX5D}qf62fG@~3-XqHHVmp=QOQck zvaKc-T&ZL>v6YcPL0U%TvXHZp=Pf1|l3jE~o!ecBKAGsUH(bx-GlGXnE+@@n!?xW3 zgx?aL7t~p*O<~Lto=}2yeR$nfb6m|O#imUO$5o7cv3V^FY9dswkaVQpyP;%Ata7*4 zR2aM?%E~zF7#Bq--N4WDqP=MQd~%|AJ~J(9L8y$PthkQxN>q_XDai9VrE2+Hu7X;k znQS?z=E6YQp&Nv`D#hkpDI*~>Q|C&?I1LK2#sub-=L4o?8RoDtFwCu?{NS)*4w@z$ zjcGCOQu^I~yPmAoE=J`3KvRejG-Mr$~P-QW701Nj_X(Qd}zj1 z-BR;Bj51SR6xyC~CJ3uC&;43*l!X%`JpEZX?)O?|pL*QffBgR6^K!1km5A{v`t#0a;ZpX{<6&^3^b^RUJ8(gp9 zY9n6Jo3L!*awYZNW#YK~Uaxa~3$AdBFDI_62#4fG`WMw-#4GWVzLk8p;#GZ}=}+`# z{65p4!`{?eq@i2s&8K9F8%UTqeu*lY`Uc7BHZrB%eC@U(>4xdgP|7mZuw7u> zK=$`wZNT0_)ws{@@oOORT9Rx_H+NmN8R}osH&N0izRU5_o*Mo&Bi&^B1IVvY0!rSk zzEf@sI_vSf|5-P(evC$MAPMyj&rV6n!zA-XQ+S51Zt`RdN%lU}DvujGRc@xwfF{?KDyoH(OBKRH{To6aptMZr0tn+O-$k+oV#F zs=%=~#BZPqfk0G(U)cQtzJ=MOrHu6SX6*OIGyZdL`I85+40s6W0PXHW$|KzZl{jBe;XMc$YiDP=ip4NgFrXh_+a>jY*Rb5aNM2meuqB>niCwq8qHy zdO{%l=iE9xG+fz)J8c+>?ePXdojE;AxlHON-vXJ6a~=yk6g*{UkXtKZqqVEKCzDCt zRZZlfnAVkWLALk>8)SFL4(8d3uf1y7^qd*%D$ uYjIIr7C*{adG3{G#kcvv&vFJwXT`7LOK~y3Dt<$8S)Lc)uMa^Awf7gX%G)pi literal 0 HcmV?d00001 From f71e2a4b623fa254c969bfaabad70aee2677a299 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:57:53 -0400 Subject: [PATCH 019/220] Further Russian translation updates --- apps/common/locale/ru/LC_MESSAGES/django.mo | Bin 749 -> 5508 bytes apps/common/locale/ru/LC_MESSAGES/django.po | 188 ++++---- .../converter/locale/ru/LC_MESSAGES/django.po | 41 +- .../locale/ru/LC_MESSAGES/django.po | 104 +++-- .../documents/locale/ru/LC_MESSAGES/django.po | 439 ++++++++++-------- .../locale/ru/LC_MESSAGES/django.mo | Bin 838 -> 844 bytes .../locale/ru/LC_MESSAGES/django.po | 55 +-- apps/folders/locale/ru/LC_MESSAGES/django.po | 113 ++--- apps/grouping/locale/ru/LC_MESSAGES/django.po | 45 +- apps/history/locale/ru/LC_MESSAGES/django.po | 30 +- .../locale/ru/LC_MESSAGES/django.po | 31 +- apps/ocr/locale/ru/LC_MESSAGES/django.po | 129 ++--- .../locale/ru/LC_MESSAGES/django.po | 29 +- .../locale/ru/LC_MESSAGES/django.po | 33 +- apps/sources/locale/ru/LC_MESSAGES/django.po | 99 ++-- apps/tags/locale/ru/LC_MESSAGES/django.po | 70 +-- .../locale/ru/LC_MESSAGES/django.po | 30 +- .../web_theme/locale/ru/LC_MESSAGES/django.mo | Bin 564 -> 584 bytes 18 files changed, 754 insertions(+), 682 deletions(-) diff --git a/apps/common/locale/ru/LC_MESSAGES/django.mo b/apps/common/locale/ru/LC_MESSAGES/django.mo index 4f8318d13368c59387dd6eeab768e3c59be5ec80..5803cce18e38400f65c96b2cf14217b64f92d70e 100644 GIT binary patch literal 5508 zcmbuBTWlOx8OKkc6l$PAA>1LSDM@VVU9aPqq?8sX&N}kg6F8B=S%|LLhiR2o=N&Nc_Gtvm4vN zM2N9x|2t>ScmIFi*3fud(WD1ICQ zzW_cCz5|>FQK1$<(f1>;6MP+f0hCQ20bT^RfYYGl<4<5W_-9b^@c_c&Umy4$@KI3o zmD1-L_yL|rK+$&@d>8nAkbgDLhxqqn5Yy_HAga|HpzQktxQ4*q1Rv)4@9$LVAlSo8 ziT6y3=TiJK_+Hj8fRBS;2R{q`1KbGies>~QPVppoAL~_6@;d@<0$%|C2L2#@e-$Ss z&p!hn0{;kp9$Zh*>p>Tkx_%XG2VVgtFE_#a!QX(mpw{4=_;)WKp99x{QiqeE3wW{EvaSV=l>$ z$cjG6MK`xxZ3&pTrKjYgyoP6pn@cz$dDzS?ypT)$6&rF%PUMoDN!+d6Qil$1xw70D z^DU{raIkSnoN`IMrS_!Ga9D#96Cs*QW{K23$K7RCk`IYru1|AIZAq!&^anx7tz425 z$yX=0)Jtk1ypWnd$gMWC26n|RgpTL71==bW?V=9qg@PRfrFx|@oGyi)-q7kh<-zbo z#RYIWO=|BJwYOXC8?@ZAUGd6lpXZhw zzuLgm8F>tSuM+5R(AHJEzUu!HxNOx~cSEOOg)Fe@XSIH$Cdnq(zMVH~5=gtY ztCmwy`+S?dDQMRoYC4t1tM=7>ADu>WQ-C8Oa)GYbiee)pv)tcv9{;)1O;-SYk!v>7mddMl_ znx_NS#m9Pez?JH?>zZ$$a_k{kK`bOERZ?;)b^vD%m9Qgu3v^Jk3l6~)+f62ioJvJw zzhHKBWmt+h?{4xvErm6H+GRtE6<6`cu`S zl1^@F@AEyGN0~##%%iq1t&rEf*0AO31N(cAwH&pnWtiy=%1$w}w_Xl1{a#)VhG8w= z(NT6F!9cd)RXcnyuzbh!JE|hvK~urCmcB>&GiD~BHnX1&&+E;(&dyBkp-fj!=W_Y( zEt%YwT#k*Iqfki9FWo0wyL9K){N`;B=D1o8(}J0P-*SVB1q<`K9Gu#k(>o08mIlxI z^_^^U%XLVe>9?(FULUQ~<3!Y&`aLu>l%;2Ap_2Vn*0sZqT9SpJqm~4av5VE9BSgBx zuXnVy^d9Oxa4SEZ*<6dvPWn01KU^cK(0&Rf70YqAYs&2hcGz>g|6pd@t$kvzWc!%| zZowC_uHYWbSG zzo)ZP@6tKVcAj_kY;L^T(X&Oq8j0MF&YXVw=|qG*xi(}vk=fkVqL#Nzd^#SDUW;bp zXQPE^QAg9!Vl){|L{rgRG!rf8Xo?=Y{V3Hd&r-cYQG6Oz6AdM^(Y4joG>_Bh`KIaF zcq|@Q(WUsjI5ZPok4NJ%Tw_88lR08Sul&3Pwg35jQy8$_y175^zhlGqOTF+ zHJq7<&xs%LIEK^nx#2-ukRH#`6}HYxQq4UZUsTaI2zlCsHWQCTS0#ib^yM$6Q{~Md zMagV5qoS9i*AQ%$OBS^lAvY6dkC-56V1oxqj|~jTzpYu`Ls#z zg30L_RNY|h8E{tL5=6n2IBDu|F{`6XtRzORMhhs!zHAsl4iAXtd>-4_!bH>jaxFMF zK^jJIdsN343~6p4Il{ID{uZO_Mm9bt>QwYCV^Zj4ToI}?mn3~FtFNGzWFvKN6)!Ye zCylj~`|Ito>Wz?ElOS14lGrGE`tyg5Ypg(nwAu|_i-y#*%eQ=! zyh>n%Pr+nsGsIP2HElGlroVllr)WzINzE3asp;~RG~yE7Mg1nCt15a4lh3fQz=ENt z$P>6U8hR+AOo%CpJc(lQAI=dc#J%vDjpLsw1Qf*@!1v4EmfvB zmRJyHjVugIHB)NC48v}`ok(S<4S~q8;9HXFt1Qhy^kjNWz_Ka+BqPblXtvI5GE#^O z5B>)xLIvTaklnPE7W$qh$ArqtyynGB^eW~UUy?Cmp|Rr;^JMbzGTz9PG{eJ8Jb1, YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: 2011-01-30 13:08\n" -"Last-Translator: \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-30 00:54-0400\n" +"PO-Revision-Date: 2011-11-03 17:28+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.5\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:17 msgid "change password" -msgstr "" +msgstr "Изменение пароля" #: __init__.py:18 msgid "user details" -msgstr "" +msgstr "сведения о пользователе" #: __init__.py:19 msgid "edit details" -msgstr "" +msgstr "изменение сведений" #: __init__.py:23 __init__.py:29 msgid "about" -msgstr "" +msgstr "о" #: __init__.py:24 msgid "changelog" -msgstr "" +msgstr "изменения" #: __init__.py:25 msgid "license" -msgstr "" +msgstr "лицензия" #: forms.py:99 msgid "Selection" -msgstr "" +msgstr "Выбор" #: forms.py:131 msgid "Email" -msgstr "" +msgstr "Email" #: forms.py:142 msgid "" "Please enter a correct email and password. Note that the password fields is " "case-sensitive." msgstr "" +"Пожалуйста, введите правильный адрес электронной почты и пароль с учетом " +"регистра." #: forms.py:144 msgid "This account is inactive." -msgstr "" +msgstr "Эта учетная запись неактивна." #: literals.py:24 msgid "A5" -msgstr "" +msgstr "A5" #: literals.py:25 msgid "A4" -msgstr "" +msgstr "A4" #: literals.py:26 msgid "A3" -msgstr "" +msgstr "A3" #: literals.py:27 msgid "B5" -msgstr "" +msgstr "B5" #: literals.py:28 msgid "B4" -msgstr "" +msgstr "B4" #: literals.py:29 msgid "Letter" @@ -96,183 +95,188 @@ msgstr "" #: literals.py:38 msgid "Portrait" -msgstr "" +msgstr "Портрет" #: literals.py:39 msgid "Landscape" -msgstr "" +msgstr "Пейзаж" #: utils.py:289 msgid "function found" -msgstr "" +msgstr "Функция найдены" #: utils.py:291 utils.py:293 #, python-format msgid "class found: %s" -msgstr "" +msgstr "Класс найден: %s." -#: views.py:24 templates/password_change_done.html:5 +#: views.py:23 templates/password_change_done.html:5 msgid "Your password has been successfully changed." msgstr "Ваш пароль был успешно изменен." -#: views.py:41 +#: views.py:39 msgid "No action selected." -msgstr "" +msgstr "Никаких действий не выбрано." -#: views.py:45 +#: views.py:43 msgid "Must select at least one item." -msgstr "" +msgstr "Необходимо выбрать хотя бы один элемент." -#: views.py:86 +#: views.py:76 #, python-format msgid "%(selection)s added successfully added to %(right_list_title)s." -msgstr "" +msgstr "%(selection)s успешно добавлен в %(right_list_title)s ." -#: views.py:89 views.py:106 +#: views.py:79 views.py:96 #, python-format msgid "Unable to add %(selection)s to %(right_list_title)s." -msgstr "" +msgstr "Не удалось добавить %(selection)s до %(right_list_title)s ." -#: views.py:103 +#: views.py:93 #, python-format msgid "%(selection)s added successfully removed from %(right_list_title)s." -msgstr "" +msgstr "%(selection)s успешно удален из %(right_list_title)s ." -#: views.py:121 +#: views.py:111 msgid "Add" -msgstr "" +msgstr "Добавить" -#: views.py:132 +#: views.py:122 msgid "Remove" -msgstr "" +msgstr "Удалить" -#: views.py:155 +#: views.py:145 msgid "current user details" -msgstr "" +msgstr "данные пользователя" -#: views.py:172 +#: views.py:162 msgid "Current user's details updated." -msgstr "" +msgstr "Данные пользователя обновлены." -#: views.py:181 +#: views.py:171 msgid "edit current user details" -msgstr "" +msgstr "редактировать данные пользователя" -#: views.py:207 +#: views.py:197 msgid "Changelog" -msgstr "" +msgstr "Изменения" -#: views.py:220 +#: views.py:210 msgid "License" -msgstr "" +msgstr "Лицензия" #: widgets.py:58 msgid "None" -msgstr "" +msgstr "Ни один" #: conf/settings.py:15 msgid "" "Temporary directory used site wide to store thumbnails, previews and " -"temporary files. If none is specified, one will be created using tempfile." -"mkdtemp()" +"temporary files. If none is specified, one will be created using " +"tempfile.mkdtemp()" msgstr "" +"Временный каталог, используемый сайтом для хранения миниатюр, превью и " +"временных файлов. Если он не указан, он будет создан с использованием " +"tempfile.mkdtemp ()" #: conf/settings.py:65 msgid "" "Controls the mechanism used to authenticated user. Options are: username, " "email" msgstr "" +"Управление механизмом, используемым для аутентификации пользователя. " +"Возможные варианты: имя пользователя, адрес электронной почты" #: templates/403.html:3 templates/403.html.py:7 msgid "Insufficient permissions" -msgstr "" +msgstr "Недостаточно прав" #: templates/403.html:9 msgid "You don't have enough permissions for this operation." -msgstr "" +msgstr "У вас нет достаточно прав для этой операции." #: templates/404.html:3 templates/404.html.py:7 msgid "Page not found" -msgstr "" +msgstr "Страница не найдена" #: templates/404.html:9 msgid "Sorry, but the requested page could not be found." -msgstr "" +msgstr "Извините, но запрашиваемая страница не найдена." #: templates/calculate_form_title.html:11 #, python-format msgid "Details for %(object_name)s: %(object)s" -msgstr "" +msgstr "Подробная информация для %(object_name)s : %(object)s" #: templates/calculate_form_title.html:13 #, python-format msgid "Details for: %(object)s" -msgstr "" +msgstr "Подробности: %(object)s" #: templates/calculate_form_title.html:18 #, python-format msgid "Edit %(object_name)s:" -msgstr "" +msgstr "Редактировать %(object_name)s :" #: templates/calculate_form_title.html:20 msgid "Edit" -msgstr "" +msgstr "Редактировать" #: templates/calculate_form_title.html:24 #, python-format msgid "Create new %(object_name)s" -msgstr "" +msgstr "Создать %(object_name)s" #: templates/calculate_form_title.html:26 msgid "Create" -msgstr "" +msgstr "Создавать" #: templates/generic_assign_remove.html:3 #, python-format msgid "Assign %(title)s %(object)s" -msgstr "" +msgstr "Назначить %(title)s%(object)s" #: templates/generic_confirm.html:3 templates/generic_confirm.html.py:18 msgid "Confirm" -msgstr "" +msgstr "Подтверждать" #: templates/generic_confirm.html:16 msgid "Confirm delete" -msgstr "" +msgstr "Подтвердить удаление" #: templates/generic_confirm.html:28 msgid "form icon" -msgstr "" +msgstr "значок формы" #: templates/generic_confirm.html:36 #, python-format msgid "Are you sure you wish to delete %(object_name)s: %(object)s?" -msgstr "" +msgstr "Вы действительно хотите удалить %(object_name)s: %(object)s?" #: templates/generic_confirm.html:38 #, python-format msgid "Are you sure you wish to delete: %(object)s?" -msgstr "" +msgstr "Вы действительно хотите удалить: %(object)s?" #: templates/generic_confirm.html:46 msgid "Yes" -msgstr "" +msgstr "Да" #: templates/generic_confirm.html:50 msgid "No" -msgstr "" +msgstr "Нет" #: templates/generic_form_instance.html:37 #: templates/generic_form_subtemplate.html:52 msgid "required" -msgstr "" +msgstr "требуется" #: templates/generic_form_subtemplate.html:76 #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:52 -#: templates/generic_list_subtemplate.html:178 +#: templates/generic_list_subtemplate.html:51 +#: templates/generic_list_subtemplate.html:171 msgid "Save" msgstr "" @@ -280,18 +284,22 @@ msgstr "" #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:52 -#: templates/generic_list_subtemplate.html:178 +#: templates/generic_list_subtemplate.html:51 +#: templates/generic_list_subtemplate.html:171 msgid "Submit" msgstr "" +#: templates/generic_form_subtemplate.html:82 +msgid "Cancel" +msgstr "" + #: templates/generic_list.html:6 templates/generic_list_horizontal.html:6 #, python-format msgid "List of %(stripped_title)s" msgstr "" #: templates/generic_list_horizontal_subtemplate.html:23 -#: templates/generic_list_subtemplate.html:24 +#: templates/generic_list_subtemplate.html:23 #, python-format msgid "" "List of %(title)s (%(start)s - %(end)s out of %(total)s) (Page " @@ -299,25 +307,29 @@ msgid "" msgstr "" #: templates/generic_list_horizontal_subtemplate.html:25 -#: templates/generic_list_subtemplate.html:26 +#: templates/generic_list_subtemplate.html:25 #, python-format msgid "List of %(title)s (%(total)s)" msgstr "" -#: templates/generic_list_subtemplate.html:72 +#: templates/generic_list_horizontal_subtemplate.html:72 +#: templates/generic_list_subtemplate.html:71 msgid "Identifier" msgstr "" -#: templates/generic_list_subtemplate.html:152 +#: templates/generic_list_horizontal_subtemplate.html:146 +#: templates/generic_list_subtemplate.html:145 #, python-format msgid "There are no %(stripped_title)s" msgstr "" #: templates/login.html:5 msgid "Login" -msgstr "Логин" +msgstr "" #: templates/password_change_done.html:3 templates/password_change_form.html:3 #: templates/password_change_form.html:5 msgid "Password change" -msgstr "Сменить пароль" +msgstr "" + + diff --git a/apps/converter/locale/ru/LC_MESSAGES/django.po b/apps/converter/locale/ru/LC_MESSAGES/django.po index e3ce3ba547..cca92efc44 100644 --- a/apps/converter/locale/ru/LC_MESSAGES/django.po +++ b/apps/converter/locale/ru/LC_MESSAGES/django.po @@ -1,23 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"PO-Revision-Date: 2011-11-03 17:27+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:10 msgid "file formats" @@ -237,7 +235,7 @@ msgstr "" #: literals.py:99 msgid "Encapsulated Portable Document Format" -msgstr "" +msgstr "Encapsulated Portable Document Format" #: literals.py:100 literals.py:105 msgid "Adobe Encapsulated PostScript Interchange format" @@ -578,11 +576,11 @@ msgstr "" #: literals.py:210 msgid "Portable Document Format" -msgstr "" +msgstr "Portable Document Format" #: literals.py:211 msgid "Portable Document Archive Format" -msgstr "" +msgstr "Portable Document Archive Format" #: literals.py:212 msgid "Pentax Electronic File" @@ -675,7 +673,7 @@ msgstr "" #: literals.py:235 msgid "Adobe Large Document Format" -msgstr "" +msgstr "Adobe Large Document Format" #: literals.py:236 msgid "Adobe Photoshop bitmap" @@ -887,11 +885,11 @@ msgstr "" #: views.py:20 msgid "name" -msgstr "" +msgstr "имя" #: views.py:24 msgid "description" -msgstr "" +msgstr "описание" #: conf/settings.py:10 msgid "File path to imagemagick's convert program." @@ -907,8 +905,9 @@ msgstr "" #: conf/settings.py:14 msgid "" -"Graphics conversion backend to use. Options are: converter.backends." -"imagemagick, converter.backends.graphicsmagick and converter.backends.python." +"Graphics conversion backend to use. Options are: " +"converter.backends.imagemagick, converter.backends.graphicsmagick and " +"converter.backends.python." msgstr "" #: templates/converter_file_formats_help.html:3 @@ -921,3 +920,5 @@ msgid "" "These are the file formats supported by the currently selected converter " "backend. In this case: '%(backend)s'" msgstr "" + + diff --git a/apps/document_indexing/locale/ru/LC_MESSAGES/django.po b/apps/document_indexing/locale/ru/LC_MESSAGES/django.po index 38182166ac..172ebd2aaf 100644 --- a/apps/document_indexing/locale/ru/LC_MESSAGES/django.po +++ b/apps/document_indexing/locale/ru/LC_MESSAGES/django.po @@ -1,35 +1,33 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"PO-Revision-Date: 2011-11-03 17:12+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:12 msgid "View document indexes" -msgstr "" +msgstr "Просмотр индексов документа" #: __init__.py:13 msgid "Rebuild document indexes" -msgstr "" +msgstr "Восстановление индексов документа" #: __init__.py:15 msgid "Indexing" -msgstr "" +msgstr "Индексирование" #: __init__.py:19 msgid "index list" @@ -37,54 +35,58 @@ msgstr "" #: __init__.py:20 msgid "go up one level" -msgstr "" +msgstr "перейти на уровень выше" #: __init__.py:21 __init__.py:23 models.py:26 msgid "indexes" -msgstr "" +msgstr "индексы" #: __init__.py:25 msgid "rebuild indexes" -msgstr "" +msgstr "восстановление индексов" #: __init__.py:25 msgid "Deletes and creates from scratch all the document indexes." -msgstr "" +msgstr "Удаляет и создается с нуля, все индексы документа." #: __init__.py:27 msgid "Indexes" -msgstr "" +msgstr "Индексы" #: api.py:83 msgid "root" -msgstr "" +msgstr "корень" #: api.py:139 #, python-format msgid "Maximum suffix (%s) count reached." -msgstr "" +msgstr "Достигнуто максимальное (%s) число суффиксов " #: api.py:175 #, python-format msgid "" "Error in document indexing update expression: %(expression)s; %(exception)s" msgstr "" +"Ошибка в выражении обновления индексов документа: %(expression)s; " +"%(exception)s" #: api.py:178 #, python-format msgid "" "Error updating document index, expression: %(expression)s; %(exception)s" msgstr "" +"Ошибка при обновлении индекса документа, выражение: %(expression)s; " +"%(exception)s" #: api.py:209 #, python-format msgid "Unable to delete document indexing node; %s" -msgstr "" +msgstr "Не удается удалить узел индексирования документов; %s." #: filesystem.py:34 #, python-format msgid "Unable to create indexing directory; %s" -msgstr "" +msgstr "Не удается создать индексации каталога; %s." #: filesystem.py:52 #, python-format @@ -92,30 +94,32 @@ msgid "" "Unable to create symbolic link, file exists and could not be deleted: " "%(filepath)s; %(exc)s" msgstr "" +"Невозможно создать символическую ссылку, файл существует и не может быть " +"удален: %(filepath)s; %(exc)s" #: filesystem.py:54 #, python-format msgid "Unable to create symbolic link: %(filepath)s; %(exc)s" -msgstr "" +msgstr "Невозможно создать символическую ссылку: %(filepath)s; %(exc)s" #: filesystem.py:71 #, python-format msgid "Unable to delete document symbolic link; %s" -msgstr "" +msgstr "Не удается удалить символическую ссылку документа;%s." #: filesystem.py:83 #, python-format msgid "Unable to delete indexing directory; %s" -msgstr "" +msgstr "Не удается удалить каталог индексации; %s." #: models.py:11 #, python-format msgid "Available functions: %s" -msgstr "" +msgstr "Доступные функции: %s." #: models.py:16 msgid "indexing expression" -msgstr "" +msgstr "выражение индексации " #: models.py:16 msgid "Enter a python string expression to be evaluated." @@ -123,83 +127,87 @@ msgstr "" #: models.py:18 msgid "enabled" -msgstr "" +msgstr "разрешено" #: models.py:19 msgid "link documents" -msgstr "" +msgstr "связать документы" #: models.py:25 models.py:31 views.py:56 msgid "index" -msgstr "" +msgstr "индекс" #: models.py:32 msgid "value" -msgstr "" +msgstr "значение" #: models.py:33 msgid "documents" -msgstr "" +msgstr "документы" #: models.py:46 models.py:51 msgid "index instance" -msgstr "" +msgstr "экземпляр индекса" #: models.py:47 msgid "indexes instances" -msgstr "" +msgstr "экземпляры индекса" #: models.py:52 msgid "document" -msgstr "" +msgstr "документ" #: models.py:59 msgid "document rename count" -msgstr "" +msgstr "счетчик переименования документа" #: models.py:60 msgid "documents rename count" -msgstr "" +msgstr "счетчик переименования документов" #: utils.py:19 msgid "document indexes" -msgstr "" +msgstr "индексы документов" #: views.py:38 #, python-format msgid "contents for index: %s" -msgstr "" +msgstr "содержания для индекса: %s." #: views.py:60 msgid "items" -msgstr "" +msgstr "членов" #: views.py:82 msgid "Are you sure you wish to rebuild all indexes?" -msgstr "" +msgstr "Вы уверены, что хотите перестроить все индексы?" #: views.py:83 msgid "On large databases this operation may take some time to execute." msgstr "" +"В больших базах данных эта операция может занять некоторое время для " +"выполнения." #: views.py:89 msgid "Index rebuild completed successfully." -msgstr "" +msgstr "восстановление индекса успешно завершено." #: views.py:94 #, python-format msgid "Index rebuild error: %s" -msgstr "" +msgstr "Индекс восстановить ошибка: %s" #: views.py:109 #, python-format msgid "indexes containing: %s" -msgstr "" +msgstr "индексы, содержащие: %s" #: templates/indexing_help.html:3 msgid "What are indexes?" -msgstr "" +msgstr "что за индексы?" #: templates/indexing_help.html:4 msgid "Indexes group documents into a tree like hierarchical structure." -msgstr "" +msgstr "Индексы группы документов в древовидной иерархической структуре." + + diff --git a/apps/documents/locale/ru/LC_MESSAGES/django.po b/apps/documents/locale/ru/LC_MESSAGES/django.po index 93be45be35..cf8ae6ddd9 100644 --- a/apps/documents/locale/ru/LC_MESSAGES/django.po +++ b/apps/documents/locale/ru/LC_MESSAGES/django.po @@ -1,655 +1,660 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:43-0400\n" +"PO-Revision-Date: 2011-11-03 16:20+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:50 __init__.py:159 msgid "Documents" -msgstr "" +msgstr "Документы" #: __init__.py:61 msgid "Documents setup" -msgstr "" +msgstr "Настройки для документов" #: __init__.py:71 msgid "all documents" -msgstr "" +msgstr "все документы" #: __init__.py:72 models.py:381 views.py:672 msgid "recent documents" -msgstr "" +msgstr "последние документы" #: __init__.py:73 msgid "upload new documents" -msgstr "" +msgstr "загрузить новые документы" #: __init__.py:74 msgid "clone metadata" -msgstr "" +msgstr "клонировать метаданные" #: __init__.py:75 msgid "details" -msgstr "" +msgstr "детали" #: __init__.py:76 msgid "properties" -msgstr "" +msgstr "свойства" #: __init__.py:77 __init__.py:78 __init__.py:92 __init__.py:114 #: __init__.py:120 msgid "delete" -msgstr "" +msgstr "удалить" #: __init__.py:79 __init__.py:91 __init__.py:113 __init__.py:119 msgid "edit" -msgstr "" +msgstr "редактировать" #: __init__.py:80 msgid "preview" -msgstr "" +msgstr "предварительный просмотр" #: __init__.py:81 msgid "download" -msgstr "" +msgstr "скачать" #: __init__.py:82 msgid "find duplicates" -msgstr "" +msgstr "поиска дубликатов" #: __init__.py:83 msgid "find all duplicates" -msgstr "" +msgstr "найти все дубликаты" #: __init__.py:83 msgid "" "Search all the documents' checksums and return a list of the exact matches." msgstr "" +"Искать все контрольные суммы документов и вернуть список точных совпадений." #: __init__.py:84 __init__.py:85 msgid "clear transformations" -msgstr "" +msgstr "очистить преобразования" #: __init__.py:86 msgid "print" -msgstr "" +msgstr "печать" #: __init__.py:87 msgid "history" -msgstr "" +msgstr "история" #: __init__.py:89 msgid "page transformations" -msgstr "" +msgstr " преобразования страницы" #: __init__.py:90 msgid "create new transformation" -msgstr "" +msgstr "создать новое преобразование" #: __init__.py:94 forms.py:49 msgid "page image" -msgstr "" +msgstr "изображение страницы" #: __init__.py:95 msgid "page text" -msgstr "" +msgstr "текст страницы" #: __init__.py:96 msgid "edit page text" -msgstr "" +msgstr "редактировать текст страницы" #: __init__.py:97 msgid "next page" -msgstr "" +msgstr "следующая страница" #: __init__.py:98 msgid "previous page" -msgstr "" +msgstr "предыдущая страница" #: __init__.py:99 msgid "first page" -msgstr "" +msgstr "первая страница" #: __init__.py:100 msgid "last page" -msgstr "" +msgstr "последняя страница" #: __init__.py:101 msgid "zoom in" -msgstr "" +msgstr "увеличить" #: __init__.py:102 msgid "zoom out" -msgstr "" +msgstr "уменьшить" #: __init__.py:103 msgid "rotate right" -msgstr "" +msgstr "повернуть вправо" #: __init__.py:104 msgid "rotate left" -msgstr "" +msgstr "повернуть влево" #: __init__.py:105 msgid "reset view" -msgstr "" +msgstr "вернуть вид" #: __init__.py:107 msgid "Find missing document files" -msgstr "" +msgstr "Найти недостающие файлы документов" #: __init__.py:110 msgid "document type list" -msgstr "" +msgstr "Список типов документов" #: __init__.py:111 views.py:840 msgid "document types" -msgstr "" +msgstr "типы документов" #: __init__.py:112 msgid "documents of this type" -msgstr "" +msgstr "документы этого типа" #: __init__.py:115 views.py:953 msgid "create document type" -msgstr "" +msgstr "создать тип документа" #: __init__.py:117 msgid "filenames" -msgstr "" +msgstr "Имена файлов" #: __init__.py:118 msgid "add filename to document type" -msgstr "" +msgstr "добавить имя файла для типа документа" #: __init__.py:161 __init__.py:187 models.py:97 views.py:68 msgid "documents" -msgstr "" +msgstr "документы" #: __init__.py:174 widgets.py:13 msgid "thumbnail" -msgstr "" +msgstr "миниатюра" #: __init__.py:177 msgid "tags" -msgstr "" +msgstr "метки" #: __init__.py:180 msgid "metadata" -msgstr "" +msgstr "метаданные" #: forms.py:72 msgid "Page image" -msgstr "" +msgstr "Страница изображения" #: forms.py:82 forms.py:232 msgid "Contents" -msgstr "" +msgstr "Содержание" #: forms.py:135 msgid "Page" -msgstr "" +msgstr "Страница" #: forms.py:136 msgid "Details" -msgstr "" +msgstr "Детали" #: forms.py:138 models.py:312 models.py:349 msgid "document page" -msgstr "" +msgstr "страница документа" #: forms.py:144 msgid "Click on the image for full size preview" -msgstr "" +msgstr "Нажмите на изображение для полного просмотра размера" #: forms.py:154 #, python-format msgid "Document pages (%s)" -msgstr "" +msgstr "Страницы документа (%s)" #: forms.py:189 msgid "Quick document rename" -msgstr "" +msgstr "Быстро переименовать документ" #: forms.py:192 msgid "New document filename" -msgstr "" +msgstr "Новое имя файла документа" #: forms.py:246 msgid "Page size" -msgstr "" +msgstr "Размер страницы" #: forms.py:247 msgid "Custom page width" -msgstr "" +msgstr "Своя ширина страницы" #: forms.py:248 msgid "Custom page height" -msgstr "" +msgstr "Своя высота страницы" #: forms.py:249 msgid "Page orientation" -msgstr "" +msgstr "Ориентация страницы" #: forms.py:250 msgid "Page range" -msgstr "" +msgstr "Диапазон страниц" #: literals.py:8 msgid "Create documents" -msgstr "" +msgstr "Создание документов" #: literals.py:9 msgid "Edit document properties" -msgstr "" +msgstr "Редактирование свойств документа" #: literals.py:10 msgid "Edit documents" -msgstr "" +msgstr "Редактировать документы" #: literals.py:11 msgid "View documents" -msgstr "" +msgstr "Просмотр документов" #: literals.py:12 msgid "Delete documents" -msgstr "" +msgstr "Удаление документов" #: literals.py:13 msgid "Download documents" -msgstr "" +msgstr "Загрузка документов" #: literals.py:14 msgid "Transform documents" -msgstr "" +msgstr "Преобразование документов" #: literals.py:15 msgid "Execute document modifying tools" -msgstr "" +msgstr "Выполнить изменения документа" #: literals.py:17 msgid "Edit document types" -msgstr "" +msgstr "Редактировать типы документов" #: literals.py:18 msgid "Delete document types" -msgstr "" +msgstr "Удалить типы документов" #: literals.py:19 msgid "Create document types" -msgstr "" +msgstr "Создание типов документов" #: literals.py:23 msgid "Document creation" -msgstr "" +msgstr "Создание документов" #: literals.py:24 #, python-format msgid "Document \"%(content_object)s\" created by %(fullname)s." -msgstr "" +msgstr "Документ \"%(content_object)s\", создан %(fullname)s ." #: literals.py:25 #, python-format -msgid "" -"Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." +msgid "Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." msgstr "" +"Документ \"%(content_object)s\" создан %(datetime)s пользователем " +"%(fullname)s." #: literals.py:31 msgid "Document edited" -msgstr "" +msgstr "Документ отредактирован" #: literals.py:32 #, python-format msgid "Document \"%(content_object)s\" edited by %(fullname)s." -msgstr "" +msgstr "Документ \"%(content_object)s\" редактировал %(fullname)s. " #: literals.py:33 #, python-format msgid "" -"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s. " -"The following changes took place: %(changes)s." +"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s." +" The following changes took place: %(changes)s." msgstr "" +"Документ \"%(content_object)s\" был изменён %(datetime)s %(fullname)s. Были" +" внесены изменения: %(changes)s." #: literals.py:42 msgid "Document deleted" -msgstr "" +msgstr "Документ удален" #: literals.py:43 #, python-format msgid "Document \"%(document)s\" deleted by %(fullname)s." -msgstr "" +msgstr "Документ \"%(document)s\" удалил %(fullname)s." #: literals.py:44 #, python-format msgid "Document \"%(document)s\" deleted on %(datetime)s by %(fullname)s." -msgstr "" +msgstr "Документ\"%(document)s\" удалил %(datetime)s %(fullname)s." #: models.py:59 msgid "name" -msgstr "" +msgstr "имя" #: models.py:65 models.py:74 models.py:281 views.py:859 views.py:889 #: views.py:918 views.py:923 views.py:966 views.py:1012 views.py:1046 msgid "document type" -msgstr "" +msgstr "тип документа" #: models.py:66 msgid "documents types" -msgstr "" +msgstr "типы документов" #: models.py:75 msgid "file" -msgstr "" +msgstr "файл" #: models.py:82 msgid "added" -msgstr "" +msgstr "добавлено" #: models.py:83 msgid "updated" -msgstr "" +msgstr "обновлено" #: models.py:84 msgid "checksum" -msgstr "" +msgstr "Контрольная сумма" #: models.py:85 msgid "description" -msgstr "" +msgstr "описание" #: models.py:96 models.py:298 models.py:370 models.py:385 views.py:208 msgid "document" -msgstr "" +msgstr "документ" #: models.py:177 msgid "" "This document's file format is not known, the page count has therefore " "defaulted to 1." msgstr "" +"Этот формат файла документа не известен, количество страниц поэтому 1." #: models.py:282 msgid "filename" -msgstr "" +msgstr "имя файла" #: models.py:283 views.py:973 msgid "enabled" -msgstr "" +msgstr "разрешено" #: models.py:290 msgid "document type quick rename filename" -msgstr "" +msgstr "имя файла для быстрого переименования документа определённого типа " #: models.py:291 msgid "document types quick rename filenames" -msgstr "" +msgstr "имена файлов для быстрого переименования документа определённых типов" #: models.py:299 msgid "content" -msgstr "" +msgstr "содержание" #: models.py:300 msgid "page label" -msgstr "" +msgstr "метка страницы" #: models.py:301 msgid "page number" -msgstr "" +msgstr "номер страницы" #: models.py:304 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" -msgstr "" +msgstr "Страница %(page_num)d из %(total_pages)d %(document)s" #: models.py:313 msgid "document pages" -msgstr "" +msgstr "страницы документа" #: models.py:324 msgid "Enter a valid value." -msgstr "" +msgstr "Введите допустимое значение." #: models.py:350 views.py:327 msgid "order" -msgstr "" +msgstr "порядок" #: models.py:351 views.py:328 views.py:383 views.py:412 msgid "transformation" -msgstr "" +msgstr "преобразование" #: models.py:352 views.py:329 msgid "arguments" -msgstr "" +msgstr "аргументы" #: models.py:352 #, python-format msgid "Use dictionaries to indentify arguments, example: %s" -msgstr "" +msgstr "Использовать словари для идентификации аргументов, например %s" #: models.py:360 msgid "document page transformation" -msgstr "" +msgstr "преобразование страницы документа" #: models.py:361 msgid "document page transformations" -msgstr "" +msgstr "преобразования документов страницу" #: models.py:369 msgid "user" -msgstr "" +msgstr "пользователь" #: models.py:371 msgid "accessed" -msgstr "" +msgstr "допущен" #: models.py:380 msgid "recent document" -msgstr "" +msgstr "недавний документ" #: models.py:386 msgid "Document type" -msgstr "" +msgstr "Тип документа" #: models.py:387 msgid "MIME type" -msgstr "" +msgstr "MIME-тип" #: models.py:388 views.py:116 msgid "Filename" -msgstr "" +msgstr "Имя файла" #: models.py:389 msgid "Filename extension" -msgstr "" +msgstr "Расширение файла" #: models.py:390 msgid "Metadata value" -msgstr "" +msgstr "Метаданны значение" #: models.py:391 msgid "Content" -msgstr "" +msgstr "Содержимое" #: models.py:392 msgid "Description" -msgstr "" +msgstr "Описание" #: models.py:393 msgid "Tags" -msgstr "" +msgstr "Метки" #: models.py:394 msgid "Comments" -msgstr "" +msgstr "Комментарии" #: statistics.py:38 #, python-format msgid "Document types: %d" -msgstr "" +msgstr "Типы документов: %d." #: statistics.py:39 #, python-format msgid "Documents in database: %d" -msgstr "" +msgstr "Документы в базе данных: %d." #: statistics.py:44 #, python-format msgid "Documents in storage: %d" -msgstr "" +msgstr "Документы в хранилище: %d." #: statistics.py:46 #, python-format msgid "" -"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d " -"bytes" +"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d" +" bytes" msgstr "" +"Использовано:%(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d bytes" #: statistics.py:56 #, python-format msgid "Document pages in database: %d" -msgstr "" +msgstr "Страниц документов в базе данных: %d." #: statistics.py:57 #, python-format msgid "Minimum amount of pages per document: %(page_count__min)d" -msgstr "" +msgstr "Минимальное количество страниц в документе: %(page_count__min)d" #: statistics.py:58 #, python-format msgid "Maximum amount of pages per document: %(page_count__max)d" -msgstr "" +msgstr "Максимальное количество страниц в документе: %(page_count__max)d" #: statistics.py:59 #, python-format msgid "Average amount of pages per document: %(page_count__avg)f" -msgstr "" +msgstr "Среднее количество страниц в документе: %(page_count__avg)f" #: statistics.py:65 msgid "Document statistics" -msgstr "" +msgstr "Статистика документов" #: views.py:117 msgid "File extension" -msgstr "" +msgstr "Расширение файла" #: views.py:118 msgid "File mimetype" -msgstr "" +msgstr "Mime тип файла" #: views.py:119 msgid "File mime encoding" -msgstr "" +msgstr "Mime-кодировка файла" #: views.py:120 msgid "File size" -msgstr "" +msgstr "Размер" #: views.py:121 msgid "Exists in storage" -msgstr "" +msgstr "Существует в хранилище" #: views.py:122 msgid "File path in storage" -msgstr "" +msgstr "Путь к файлу в хранилище" #: views.py:123 msgid "Date added" -msgstr "" +msgstr "Дата добавления" #: views.py:124 msgid "Time added" -msgstr "" +msgstr "Время добавления" #: views.py:125 msgid "Checksum" -msgstr "" +msgstr "Контрольная сумма" #: views.py:126 msgid "UUID" -msgstr "" +msgstr "UUID" #: views.py:127 msgid "Pages" -msgstr "" +msgstr "Страницы" #: views.py:136 #, python-format msgid "document properties for: %s" -msgstr "" +msgstr "Свойства документа для: %s" #: views.py:158 msgid "document data" -msgstr "" +msgstr "данные документа" #: views.py:183 views.py:484 msgid "Must provide at least one document." -msgstr "" +msgstr "Необходимо предоставить хотя бы один документ." #: views.py:199 #, python-format msgid "Document: %s deleted successfully." -msgstr "" +msgstr "Документ: %s успешно удален. " #: views.py:201 #, python-format msgid "Document: %(document)s delete error: %(error)s" -msgstr "" +msgstr "Документ:%(document)s ошибка удаления: %(error)s" #: views.py:216 #, python-format msgid "Are you sure you wish to delete the document: %s?" -msgstr "" +msgstr "Вы действительно хотите удалить документ: %s?" #: views.py:218 #, python-format msgid "Are you sure you wish to delete the documents: %s?" -msgstr "" +msgstr "Вы действительно хотите удалить документы: %s?" #: views.py:255 #, python-format msgid "Document \"%s\" edited successfully." -msgstr "" +msgstr "Документ \"%s\" изменен." #: views.py:323 #, python-format msgid "transformations for: %s" -msgstr "" +msgstr "преобразования для: %s" #: views.py:347 msgid "Document page transformation created successfully." -msgstr "" +msgstr "Преобразование страницы документа создано успешно." #: views.py:356 #, python-format msgid "Create new transformation for page: %(page)s of document: %(document)s" msgstr "" +"Создать новое преобразование для страницы: %(page)s документа: %(document)s" #: views.py:372 msgid "Document page transformation edited successfully." -msgstr "" +msgstr "Преобразование страницы успешно изменено." #: views.py:385 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(document_page)s" -msgstr "" +msgstr "Изменить преобразования \"%(transformation)s\" for: %(document_page)s" #: views.py:403 msgid "Document page transformation deleted successfully." -msgstr "" +msgstr "Преобразование страницы успешно удалено." #: views.py:414 #, python-format @@ -657,30 +662,34 @@ msgid "" "Are you sure you wish to delete transformation \"%(transformation)s\" for: " "%(document_page)s" msgstr "" +"Вы действительно хотите удалить преобразования \"%(transformation)s\" for: " +"%(document_page)s\"" #: views.py:428 #, python-format msgid "duplicates of: %s" -msgstr "" +msgstr "дубликатов: %s" #: views.py:440 msgid "Are you sure you wish to find all duplicates?" -msgstr "" +msgstr "Вы действительно хотите найти все дубликаты?" #: views.py:441 views.py:534 msgid "On large databases this operation may take some time to execute." msgstr "" +"В больших базах данных эта операция может занять некоторое время для " +"выполнения." #: views.py:456 msgid "duplicated documents" -msgstr "" +msgstr "дубликаты документов" #: views.py:497 #, python-format msgid "" "All the page transformations for document: %s, have been deleted " "successfully." -msgstr "" +msgstr "Все преобразования страницы для документа: %s успешно удалены." #: views.py:499 #, python-format @@ -688,16 +697,20 @@ msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "" +"Ошибка при удалении страницы для преобразования документов: %(document)s; " +"%(error)s." #: views.py:505 msgid "document transformation" -msgstr "" +msgstr "преобразование документа" #: views.py:514 #, python-format msgid "" -"Are you sure you wish to clear all the page transformations for document: %s?" +"Are you sure you wish to clear all the page transformations for document: " +"%s?" msgstr "" +"Вы действительно хотите удалить все преобразования странице документа: %s?" #: views.py:516 #, python-format @@ -705,120 +718,124 @@ msgid "" "Are you sure you wish to clear all the page transformations for documents: " "%s?" msgstr "" +"Вы действительно хотите удалить все преобразования страницы для документов: " +"%s?" #: views.py:544 msgid "missing documents" -msgstr "" +msgstr "недостающие документы" #: views.py:557 views.py:595 #, python-format msgid "details for: %s" -msgstr "" +msgstr "подробности: %s" #: views.py:610 msgid "Document page edited successfully." -msgstr "" +msgstr "Страница документа успешно изменена." #: views.py:619 #, python-format msgid "edit: %s" -msgstr "" +msgstr "редактировать: %s" #: views.py:630 msgid "There are no more pages in this document" -msgstr "" +msgstr " Нет более страниц в этом документе" #: views.py:643 msgid "You are already at the first page of this document" -msgstr "" +msgstr "Вы уже на первой странице этого документа" #: views.py:786 #, python-format msgid "print: %s" -msgstr "" +msgstr "печать: %s" #: views.py:857 #, python-format msgid "documents of type \"%s\"" -msgstr "" +msgstr "документы типа \"%s\"" #: views.py:877 msgid "Document type edited successfully" -msgstr "" +msgstr "Тип документа успешно изменен" #: views.py:880 #, python-format msgid "Error editing document type; %s" -msgstr "" +msgstr "Ошибка редактирования типа документа; %s" #: views.py:885 #, python-format msgid "edit document type: %s" -msgstr "" +msgstr "редактировать тип документа: %s" #: views.py:910 #, python-format msgid "Document type: %s deleted successfully." -msgstr "" +msgstr "Вид документа: %s успешно удален." #: views.py:912 #, python-format msgid "Document type: %(document_type)s delete error: %(error)s" -msgstr "" +msgstr "Тип документа: %(document_type)s ошибка удаления: %(error)s" #: views.py:927 #, python-format msgid "Are you sure you wish to delete the document type: %s?" -msgstr "" +msgstr "Вы действительно хотите удалить тип документа: %s?" #: views.py:928 msgid "" "The document type of all documents using this document type will be set to " "none." -msgstr "" +msgstr "Тип документа всех документов этого типа станет неопределённым." #: views.py:944 msgid "Document type created successfully" -msgstr "" +msgstr "Тип документа успешно создан" #: views.py:947 #, python-format msgid "Error creating document type; %(error)s" -msgstr "" +msgstr "Ошибка при создании типа документа; %(error)s" #: views.py:965 #, python-format msgid "filenames for document type: %s" -msgstr "" +msgstr "имена файлов для типа документа: %s" #: views.py:996 msgid "Document type filename edited successfully" -msgstr "" +msgstr "Имя файла для типа документа успешно изменено" #: views.py:999 #, python-format msgid "Error editing document type filename; %s" -msgstr "" +msgstr "Ошибка редактирования документа введите имя файла; %s" #: views.py:1004 #, python-format msgid "edit filename \"%(filename)s\" from document type \"%(document_type)s\"" -msgstr "" +msgstr "редактирование файла \"%(filename)s из типа документа \"%(document_type)s\"" #: views.py:1013 views.py:1039 views.py:1047 msgid "document type filename" -msgstr "" +msgstr "имя файла для типа документа" #: views.py:1031 #, python-format msgid "Document type filename: %s deleted successfully." -msgstr "" +msgstr "Имя файла для типа документа: %s успешно удалено." #: views.py:1033 #, python-format msgid "" "Document type filename: %(document_type_filename)s delete error: %(error)s" msgstr "" +"При удалении имени файла для типа документа %(document_type_filename)s " +"произошла ошибка %(error)s" #: views.py:1049 #, python-format @@ -826,66 +843,71 @@ msgid "" "Are you sure you wish to delete the filename: %(filename)s, from document " "type \"%(document_type)s\"?" msgstr "" +"Вы действительно хотите удалить имя файла: %(filename)s из типа документа " +"\"%(document_type)s\"?" #: views.py:1074 msgid "Document type filename created successfully" -msgstr "" +msgstr "Имя файла для типа документа успешно создан" #: views.py:1077 #, python-format msgid "Error creating document type filename; %(error)s" -msgstr "" +msgstr "Ошибка создания имени файла для типа документа; %(error)s" #: views.py:1083 #, python-format msgid "create filename for document type: %s" -msgstr "" +msgstr "создание имени файла для типа документа: %s" #: wizards.py:34 msgid "step 1 of 3: Document type" -msgstr "" +msgstr "Шаг 1 из 3: Тип документа" #: wizards.py:35 msgid "step 2 of 3: Metadata selection" -msgstr "" +msgstr "шаг 2 из 3: Выбор Метаданных" #: wizards.py:36 msgid "step 3 of 3: Document metadata" -msgstr "" +msgstr "шаг 3 из 3: Метаданные документа" #: wizards.py:44 msgid "Next step" -msgstr "" +msgstr "Далее" #: conf/settings.py:38 msgid "" -"Maximum number of recent (created, edited, viewed) documents to remember per " -"user." +"Maximum number of recent (created, edited, viewed) documents to remember per" +" user." msgstr "" +"Максимальное количество последних (созданных, измененных, просмотренных) " +"документов, запоминаемых для каждого пользователя." #: conf/settings.py:39 msgid "Amount in percent zoom in or out a document page per user interaction." -msgstr "" +msgstr "Процент увеличения страницы документа пользователем." #: conf/settings.py:40 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." -msgstr "" +msgstr "Максимальный процент увеличения страницы документа пользователем." #: conf/settings.py:41 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "" +"Процент уменьшения масштаба страницы документа в интерактивном режиме." #: conf/settings.py:42 msgid "Amount in degrees to rotate a document page per user interaction." -msgstr "" +msgstr "Градус поворота страницы документа в интерактивном режиме." #: templates/document_types_help.html:3 msgid "What are document types?" -msgstr "" +msgstr "Что такое типы документов?" #: templates/document_types_help.html:4 msgid "" @@ -894,10 +916,15 @@ msgid "" "types are: assigning a list of typical filenames for quick renaming during " "creation, as well as assigning default metadata types and sets to it." msgstr "" +"Типы документов определяют класс, который представляет группы документов, " +"таких как: счета-фактуры, правила или инструкции. Преимуществами " +"использования типов документов являются: назначение списка типичных имен " +"файлов для быстрого переименования в процессе создания, а также присвоения " +"метаданных по умолчанию и их установки." #: templates/recent_document_list_help.html:3 msgid "What are recent documents?" -msgstr "" +msgstr "Что такое последние документы?" #: templates/recent_document_list_help.html:4 #, python-format @@ -905,3 +932,7 @@ msgid "" "Here you will find the latest %(recent_count)s documents you have either " "created or edited in any way." msgstr "" +"Здесь вы найдете последние %(recent_count)s документов созданные или " +"отредактированные вами." + + diff --git a/apps/dynamic_search/locale/ru/LC_MESSAGES/django.mo b/apps/dynamic_search/locale/ru/LC_MESSAGES/django.mo index 94a65a81e2976d2bb592f37b0160cfbcc5049c94..2754a002461087a5db5f344169c8c32fc2e1655f 100644 GIT binary patch literal 844 zcmYjPO=}cE5FIrt%t<_X5G)UgyGZZMY!Z@8GEvM21Y8Ws>b^R@xUEn+7d+t-33sn@P=Tsuefcqr9b9JqxL=bvN|9R;=6kTBVUCp3D@NaVEXQYQ0#g zTqt+>NuABvZP1p@W2um;eh@H!idCm5m<-3pnLpX})v-jraW<}d3 z@w(Wmq(Xb$!7C`QJGcN7%|v+`YER}~*{v~e%{e5! kViyfc<_!4>NXKaL%AECooH<9M)8ZY-J#%1Zp#yT~H^e>{qyPW_ literal 838 zcmZ`%yKWOf6dfQuv^0ncB#Hqk5fo!)9YE2>8xn#OML3C-I1%mOoj4oWJJ#%&hm-3;@4?ug3`a1E#>^fEKy$GhSqTm~uZDhJS-|2-$*s7`x&B(Rme-8dlRHNt?nb9ng}9 zT5&R-pM|<=jX{z$I-((2O^Q}PD-(0mOK!_jr83@(3raV}yxE!A^3gr~0{13WVq}8Z zxNLy`@z`8%H$|L`()y~D&%0QnPYWS5cfa0y^>_Hiuuwz3(3`DkHX( z=9*{?+bO0MCK^F`;b!5MS8aB*XtF7#TWLU(b{?kT@F?xOVKV6RF!brr5OprU9Qr=J zO*w@c@mN?qD3!t+&b^w;N-`pJ_%-zS=qZkR#J;h;?1k;xcXpTB9ou!smhIX1 z$nDr&V&B?bNS@j4e_U$6IQe$=6r~N@&H0u6OyG3whwQoilx?E0m2G4%^Ec!g_QxRK IL%2o$0vKfia{vGU diff --git a/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po b/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po index 4436b06341..d9132410bf 100644 --- a/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po +++ b/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po @@ -1,46 +1,41 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: 2011-02-03 01:31\n" -"Last-Translator: \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"PO-Revision-Date: 2011-11-03 17:25+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Translated-Using: django-rosetta 0.5.6\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:5 msgid "search" -msgstr "поиск" +msgstr "" #: __init__.py:6 views.py:72 msgid "advanced search" msgstr "" #: __init__.py:7 -#, fuzzy msgid "search again" -msgstr "поиск" +msgstr "" #: forms.py:8 -#, fuzzy msgid "Search terms" -msgstr "Поиск по критериям" +msgstr "" #: models.py:18 msgid "user" -msgstr "" +msgstr "пользователь" #: models.py:19 msgid "query" @@ -48,16 +43,15 @@ msgstr "" #: models.py:20 msgid "datetime created" -msgstr "" +msgstr "даты и время создания" #: models.py:21 msgid "hits" msgstr "" #: models.py:59 -#, fuzzy msgid "recent search" -msgstr "поиск" +msgstr "" #: models.py:60 msgid "recent searches" @@ -69,18 +63,17 @@ msgid "results, (showing only %(shown_result_count)s out of %(result_count)s)" msgstr "" #: views.py:37 -#, fuzzy msgid "results" -msgstr "результаты: %s" +msgstr "" #: views.py:56 -#, fuzzy, python-format +#, python-format msgid "Search error: %s" -msgstr "Поиск по критериям" +msgstr "" #: views.py:60 msgid "type" -msgstr "типа" +msgstr "" #: views.py:76 views.py:86 views.py:88 templatetags/search_tags.py:19 #: templatetags/search_tags.py:20 @@ -107,9 +100,8 @@ msgid "" msgstr "" #: templates/search_results.html:3 -#, fuzzy msgid "Search results" -msgstr "Поиск по критериям" +msgstr "" #: templates/search_results.html:19 #, python-format @@ -119,7 +111,6 @@ msgstr "" #: templatetags/search_tags.py:33 #, python-format msgid "recent searches (maximum of %d)" -msgstr "" +msgstr "Последние запросы (максимум %d)" + -#~ msgid "No results found" -#~ msgstr "Ничего не наидено" diff --git a/apps/folders/locale/ru/LC_MESSAGES/django.po b/apps/folders/locale/ru/LC_MESSAGES/django.po index f80cae0608..ace34d7713 100644 --- a/apps/folders/locale/ru/LC_MESSAGES/django.po +++ b/apps/folders/locale/ru/LC_MESSAGES/django.po @@ -1,185 +1,183 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"PO-Revision-Date: 2011-11-03 16:56+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:10 msgid "folder list" -msgstr "" +msgstr "список папок" #: __init__.py:11 views.py:53 msgid "create folder" -msgstr "" +msgstr "создать папку" #: __init__.py:12 msgid "edit" -msgstr "" +msgstr "редактировать" #: __init__.py:13 msgid "delete" -msgstr "" +msgstr "удалить" #: __init__.py:14 msgid "remove from folder" -msgstr "" +msgstr "удалить из папки" #: __init__.py:15 msgid "folder documents" -msgstr "" +msgstr "документы папки" #: __init__.py:16 msgid "add to a folder" -msgstr "" +msgstr "добавить в папку" #: __init__.py:17 __init__.py:25 models.py:31 views.py:21 msgid "folders" -msgstr "" +msgstr "папки" #: forms.py:20 msgid "Existing folders" -msgstr "" +msgstr "Существующие папки" #: forms.py:22 msgid "New folder" -msgstr "" +msgstr "Новая папка" #: models.py:11 msgid "title" -msgstr "" +msgstr "название" #: models.py:12 msgid "user" -msgstr "" +msgstr "пользователь" #: models.py:13 msgid "datetime created" -msgstr "" +msgstr "даты и время создания" #: models.py:30 models.py:35 views.py:82 views.py:109 views.py:134 msgid "folder" -msgstr "" +msgstr "папка" #: models.py:36 msgid "document" -msgstr "" +msgstr "документ" #: models.py:42 views.py:257 msgid "folder document" -msgstr "" +msgstr "документ папки" #: models.py:43 msgid "folders documents" -msgstr "" +msgstr "документы из папок" #: views.py:24 msgid "created" -msgstr "" +msgstr "создано" #: views.py:25 msgid "documents" -msgstr "" +msgstr "документы" #: views.py:45 views.py:152 msgid "Folder created successfully" -msgstr "" +msgstr "Папка успешно создана" #: views.py:48 views.py:154 views.py:188 #, python-format msgid "A folder named: %s, already exists." -msgstr "" +msgstr "Папку с именем %s уже существует." #: views.py:71 msgid "Folder edited successfully" -msgstr "" +msgstr "Папка успешно изменена" #: views.py:74 #, python-format msgid "Error editing folder; %s" -msgstr "" +msgstr "Ошибка редактирования папки; %s." #: views.py:79 #, python-format msgid "edit folder: %s" -msgstr "" +msgstr "редактировать папку %s" #: views.py:101 #, python-format msgid "Folder: %s deleted successfully." -msgstr "" +msgstr "Папка %s успешно удалена." #: views.py:103 #, python-format msgid "Folder: %(folder)s delete error: %(error)s" -msgstr "" +msgstr "При удалении папки %(folder)s произошла ошибка: %(error)s" #: views.py:114 #, python-format msgid "Are you sure you with to delete the folder: %s?" -msgstr "" +msgstr "Вы хотите удалить папку %s?" #: views.py:131 #, python-format msgid "documents in folder: %s" -msgstr "" +msgstr "документы в папке: %s" #: views.py:157 views.py:191 msgid "Must specify a new folder or an existing one." -msgstr "" +msgstr "Необходимо указать новую илисуществующую папку ." #: views.py:162 views.py:196 #, python-format msgid "Document: %(document)s added to folder: %(folder)s successfully." -msgstr "" +msgstr "Документ: %(document)s добавлен в папку: %(folder)s успешно." #: views.py:165 views.py:199 #, python-format msgid "Document: %(document)s is already in folder: %(folder)s." -msgstr "" +msgstr "Документ: %(document)s is already in folder: %(folder)s." #: views.py:186 #, python-format msgid "Folder \"%s\" created successfully" -msgstr "" +msgstr "Папка \"%s\" создана" #: views.py:207 #, python-format msgid "add document \"%s\" to a folder" -msgstr "" +msgstr "добавить документ \"%s\" в папку" #: views.py:223 #, python-format msgid "folders containing: %s" -msgstr "" +msgstr "папки, содержащие %s" #: views.py:239 msgid "Must provide at least one folder document." -msgstr "" +msgstr "Должна быть хотя бы одна папка документов." #: views.py:249 #, python-format msgid "Document: %s removed successfully." -msgstr "" +msgstr "Документ: %s успешно удален." #: views.py:251 #, python-format msgid "Document: %(document)s delete error: %(error)s" -msgstr "" +msgstr "Документ:%(document)s ошибка удаления: %(error)s" #: views.py:265 #, python-format @@ -187,17 +185,21 @@ msgid "" "Are you sure you wish to remove the document: %(document)s from the folder " "\"%(folder)s\"?" msgstr "" +"Вы действительно хотите удалить документ: %(document)s из папки \"%(folder)s" +" \"?" #: views.py:268 #, python-format msgid "" -"Are you sure you wish to remove the documents: %(documents)s from the folder " -"\"%(folder)s\"?" +"Are you sure you wish to remove the documents: %(documents)s from the folder" +" \"%(folder)s\"?" msgstr "" +"Вы действительно хотите удалить документы: %(documents)s из папки " +"\"%(folder)s\"?" #: templates/folders_help.html:3 msgid "What are folders?" -msgstr "" +msgstr "Что такое папки?" #: templates/folders_help.html:4 msgid "" @@ -206,7 +208,12 @@ msgid "" "created by one user and the documents contained by them don't affect any " "other user folders or documents." msgstr "" +"Эти папки можно описать как пользовательские папки. Они позволяют отдельным " +"пользователям хранить папки ао своему. Папки, созданные одним пользователем " +"и документы, содержащиеся в них, не влияют других пользователей." #: templatetags/folder_tags.py:17 msgid "Add document to a folder" -msgstr "" +msgstr "Добавить документ в папку" + + diff --git a/apps/grouping/locale/ru/LC_MESSAGES/django.po b/apps/grouping/locale/ru/LC_MESSAGES/django.po index ac44c5c48b..3ae8f5a2a3 100644 --- a/apps/grouping/locale/ru/LC_MESSAGES/django.po +++ b/apps/grouping/locale/ru/LC_MESSAGES/django.po @@ -1,23 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"PO-Revision-Date: 2011-11-03 17:24+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:8 msgid "group actions" @@ -29,7 +27,7 @@ msgstr "" #: forms.py:55 msgid "Pages" -msgstr "" +msgstr "Страницы" #: forms.py:56 msgid "Select" @@ -113,7 +111,7 @@ msgstr "" #: models.py:10 msgid "title" -msgstr "" +msgstr "название" #: models.py:11 msgid "dynamic title" @@ -121,7 +119,7 @@ msgstr "" #: models.py:12 models.py:33 msgid "enabled" -msgstr "" +msgstr "разрешено" #: models.py:20 models.py:25 msgid "document group" @@ -144,6 +142,8 @@ msgid "" "This represents the metadata of all other documents. Available objects: " "`document.` and `metadata.`." msgstr "" +"Это представляет метаданные всех других документов. Доступные объекты: " +"`document. ` и `metadata. `." #: models.py:31 msgid "expression" @@ -155,6 +155,9 @@ msgid "" "The document metadata is available as variables `metadata` and document " "properties under the variable `document`." msgstr "" +"Это выражение будет вычислено вмето выбранного документа. Метаданные " +"документа доступны как переменные `metadata` и свойства документа в " +"переменной `document`." #: models.py:32 msgid "negated" @@ -178,23 +181,25 @@ msgstr "" #: views.py:21 msgid "No action selected." -msgstr "" +msgstr "Никаких действий не выбрано." #: views.py:34 #, python-format msgid "documents in group: %(group)s" -msgstr "" +msgstr "Документы в группе: %(group)s" #: views.py:50 #, python-format msgid "Document group query error: %s" -msgstr "" +msgstr "Документ группы запросов ошибка: %s" #: views.py:61 #, python-format msgid "document groups (%s)" -msgstr "" +msgstr "группы документов (%s)" #: views.py:75 msgid "There no defined groups for the current document." -msgstr "" +msgstr "Для текущего документа не выбрана группа" + + diff --git a/apps/history/locale/ru/LC_MESSAGES/django.po b/apps/history/locale/ru/LC_MESSAGES/django.po index 09a571f138..b3f3533736 100644 --- a/apps/history/locale/ru/LC_MESSAGES/django.po +++ b/apps/history/locale/ru/LC_MESSAGES/django.po @@ -1,23 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"PO-Revision-Date: 2011-11-03 17:29+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:6 msgid "Access the history app" @@ -29,7 +27,7 @@ msgstr "" #: __init__.py:12 models.py:69 msgid "history" -msgstr "" +msgstr "история" #: models.py:16 msgid "namespace" @@ -37,7 +35,7 @@ msgstr "" #: models.py:17 msgid "name" -msgstr "" +msgstr "имя" #: models.py:25 models.py:34 msgid "history type" @@ -103,4 +101,6 @@ msgstr "" #: views.py:89 #, python-format msgid "details for: %s" -msgstr "" +msgstr "подробности: %s" + + diff --git a/apps/navigation/locale/ru/LC_MESSAGES/django.po b/apps/navigation/locale/ru/LC_MESSAGES/django.po index 178af9cd4a..7397fc9bcf 100644 --- a/apps/navigation/locale/ru/LC_MESSAGES/django.po +++ b/apps/navigation/locale/ru/LC_MESSAGES/django.po @@ -1,32 +1,33 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: +# Sergey Glita , 2011. msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"PO-Revision-Date: 2011-11-03 17:21+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: forms.py:14 msgid "Multi item action" -msgstr "" +msgstr "Массовое действие" #: widgets.py:28 msgid "icon" -msgstr "" +msgstr "значек" #: templatetags/navigation_tags.py:275 msgid "Selected item actions:" -msgstr "" +msgstr "Действия с выбранными пунктами: " + + diff --git a/apps/ocr/locale/ru/LC_MESSAGES/django.po b/apps/ocr/locale/ru/LC_MESSAGES/django.po index cf9de867e4..28e4950955 100644 --- a/apps/ocr/locale/ru/LC_MESSAGES/django.po +++ b/apps/ocr/locale/ru/LC_MESSAGES/django.po @@ -1,31 +1,29 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"PO-Revision-Date: 2011-11-03 17:22+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:28 msgid "Submit document for OCR" -msgstr "" +msgstr "Отправить документ для распознавания текста" #: __init__.py:29 msgid "Delete document for OCR queue" -msgstr "" +msgstr "Удалить документ из очереди распознавания" #: __init__.py:30 msgid "Can enable/disable an OCR queue" @@ -33,7 +31,7 @@ msgstr "" #: __init__.py:31 msgid "Can execute an OCR clean up on all document pages" -msgstr "" +msgstr "Невозможно выполнить распознавание на всех страницах документа" #: __init__.py:32 msgid "Can edit an OCR queue properties" @@ -45,7 +43,7 @@ msgstr "" #: __init__.py:40 msgid "OCR Setup" -msgstr "" +msgstr "Настройки распознавания " #: __init__.py:44 msgid "submit to OCR queue" @@ -57,7 +55,7 @@ msgstr "" #: __init__.py:47 __init__.py:48 __init__.py:63 msgid "delete" -msgstr "" +msgstr "удалить" #: __init__.py:50 msgid "stop queue" @@ -76,10 +74,12 @@ msgid "" "Runs a language filter to remove common OCR mistakes from document pages " "content." msgstr "" +"Применить языковый фильтр для удаления общих ошибок распознавания " +"содержимого страниц документа." #: __init__.py:55 msgid "queue document list" -msgstr "" +msgstr "список очереди документов" #: __init__.py:58 views.py:316 msgid "active tasks" @@ -95,7 +95,7 @@ msgstr "" #: __init__.py:62 msgid "edit" -msgstr "" +msgstr "редактировать" #: __init__.py:82 msgid "Default" @@ -103,7 +103,7 @@ msgstr "" #: __init__.py:104 msgid "Checks the OCR queue for pending documents." -msgstr "" +msgstr "Проверить очередь документов ожидающих распознавания ." #: api.py:119 msgid "Text from OCR" @@ -131,7 +131,7 @@ msgstr "" #: models.py:22 msgid "name" -msgstr "" +msgstr "имя" #: models.py:23 msgid "label" @@ -144,15 +144,15 @@ msgstr "" #: models.py:32 models.py:40 views.py:44 views.py:337 views.py:378 #: views.py:408 views.py:444 msgid "document queue" -msgstr "" +msgstr "очередь документов" #: models.py:33 msgid "document queues" -msgstr "" +msgstr "очереди документов" #: models.py:41 msgid "document" -msgstr "" +msgstr "документ" #: models.py:42 msgid "date time submitted" @@ -172,31 +172,31 @@ msgstr "" #: models.py:53 msgid "queue document" -msgstr "" +msgstr "документ очереди" #: models.py:54 msgid "queue documents" -msgstr "" +msgstr "документы очереди" #: models.py:63 views.py:48 msgid "Missing document." -msgstr "" +msgstr "Документа отсутствует." #: models.py:67 msgid "Enter a valid value." -msgstr "" +msgstr "Введите допустимое значение." #: models.py:95 views.py:341 msgid "order" -msgstr "" +msgstr "порядок" #: models.py:96 views.py:342 views.py:379 views.py:409 msgid "transformation" -msgstr "" +msgstr "преобразование" #: models.py:97 views.py:343 msgid "arguments" -msgstr "" +msgstr "аргументы" #: models.py:97 #, python-format @@ -205,21 +205,21 @@ msgstr "" #: models.py:107 msgid "document queue transformation" -msgstr "" +msgstr "преобразование очереди документов " #: models.py:108 msgid "document queue transformations" -msgstr "" +msgstr "преобразование очереди документов " #: statistics.py:8 #, python-format msgid "Document queues: %d" -msgstr "" +msgstr "Очередей документов: %d" #: statistics.py:9 #, python-format msgid "Queued documents: %d" -msgstr "" +msgstr "Документов в очереди : %d" #: statistics.py:13 msgid "OCR statistics" @@ -228,15 +228,15 @@ msgstr "" #: views.py:41 #, python-format msgid "documents in queue: %s" -msgstr "" +msgstr "документы в очереди: %s" #: views.py:49 msgid "thumbnail" -msgstr "" +msgstr "миниатюра" #: views.py:62 msgid "document queue properties" -msgstr "" +msgstr "свойства очереди документов" #: views.py:63 #, python-format @@ -245,97 +245,99 @@ msgstr "" #: views.py:79 views.py:154 msgid "Must provide at least one queue document." -msgstr "" +msgstr "Должна быть хотя бы одна очередь документов." #: views.py:89 #, python-format msgid "Document: %s is being processed and can't be deleted." -msgstr "" +msgstr "Документ: %s обрабатывается и не может быть удален." #: views.py:92 #, python-format msgid "Queue document: %(document)s deleted successfully." -msgstr "" +msgstr "Очередь документов: %(document)s успешно удалён." #: views.py:96 #, python-format msgid "Error deleting document: %(document)s; %(error)s" -msgstr "" +msgstr "Ошибка при удалении документа: %(document)s; %(error)s" #: views.py:109 #, python-format msgid "Are you sure you wish to delete queue document: %s?" -msgstr "" +msgstr "Вы действительно хотите удалить очередь документа: %s?" #: views.py:111 #, python-format msgid "Are you sure you wish to delete queue documents: %s?" -msgstr "" +msgstr "Вы действительно хотите удалить очереди документов: %s?" #: views.py:134 #, python-format msgid "Document: %(document)s was added to the OCR queue: %(queue)s." msgstr "" +"Документ: %(document)s добавлен для распознавания в очередь: %(queue)s." #: views.py:137 #, python-format msgid "Document: %(document)s is already queued." -msgstr "" +msgstr "Документ: %(document)s уже находится в очереди." #: views.py:165 #, python-format msgid "Document: %s is already being processed and can't be re-queded." msgstr "" +"Документ: %s уже обработан и не может быть повторно добавлен в очередь." #: views.py:173 #, python-format msgid "Document: %(document)s was re-queued to the OCR queue: %(queue)s" -msgstr "" +msgstr "Документ: %(document)s повторно добавлен в очередь: %(queue)s" #: views.py:176 #, python-format msgid "Document id#: %d, no longer exists." -msgstr "" +msgstr "Документ №: %d больше не существует." #: views.py:189 #, python-format msgid "Are you sure you wish to re-queue document: %s?" -msgstr "" +msgstr "Вы действительно хотите повторно добавить документ в очередь: %s?" #: views.py:191 #, python-format msgid "Are you sure you wish to re-queue documents: %s?" -msgstr "" +msgstr "Вы действительно хотите повторно добавить документы в очередь: %s?" #: views.py:209 #, python-format msgid "Document queue: %s, already stopped." -msgstr "" +msgstr "Очередь документов: %s, уже остановлена." #: views.py:215 #, python-format msgid "Document queue: %s, stopped successfully." -msgstr "" +msgstr "Очередь документов: %s успешно остановлена." #: views.py:221 #, python-format msgid "Are you sure you wish to disable document queue: %s" -msgstr "" +msgstr "Вы действительно хотите отключить очередь документов: %s " #: views.py:236 #, python-format msgid "Document queue: %s, already active." -msgstr "" +msgstr "Очередь документов %s уже активна." #: views.py:242 #, python-format msgid "Document queue: %s, activated successfully." -msgstr "" +msgstr "Очередь документов %s успешно активирована." #: views.py:248 #, python-format msgid "Are you sure you wish to activate document queue: %s" -msgstr "" +msgstr "Вы действительно хотите активировать очередь документов %s" #: views.py:265 msgid "Are you sure you wish to clean up all the pages content?" @@ -344,15 +346,17 @@ msgstr "" #: views.py:266 msgid "On large databases this operation may take some time to execute." msgstr "" +"В больших базах данных эта операция может занять некоторое время для " +"выполнения." #: views.py:272 msgid "Document pages content clean up complete." -msgstr "" +msgstr "Чистка содержимого страниц документа завершена." #: views.py:274 #, python-format msgid "Document pages content clean up error: %s" -msgstr "" +msgstr "Ошибка:%s при чистка содержимого страниц документа" #: views.py:320 msgid "node" @@ -373,7 +377,7 @@ msgstr "" #: views.py:335 #, python-format msgid "transformations for: %s" -msgstr "" +msgstr "преобразования для: %s" #: views.py:365 msgid "Queue transformation edited successfully" @@ -427,15 +431,18 @@ msgstr "" #: conf/settings.py:14 msgid "Maximum amount of concurrent document OCRs a node can perform." msgstr "" +"Максимальное количество одновременно распознаваемых документов для узла." #: conf/settings.py:15 msgid "Automatically queue newly created documents for OCR." msgstr "" +"Автоматически ставить в очередь новые документы для распознавания текста." #: conf/settings.py:17 msgid "" -"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend " -"to use for locking. Multiple hosts can be specified separated by a semicolon." +"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend" +" to use for locking. Multiple hosts can be specified separated by a " +"semicolon." msgstr "" #: conf/settings.py:18 @@ -445,3 +452,5 @@ msgstr "" #: parsers/__init__.py:23 msgid "Text extracted from PDF" msgstr "" + + diff --git a/apps/project_setup/locale/ru/LC_MESSAGES/django.po b/apps/project_setup/locale/ru/LC_MESSAGES/django.po index 94e78e7ccd..df049be7b8 100644 --- a/apps/project_setup/locale/ru/LC_MESSAGES/django.po +++ b/apps/project_setup/locale/ru/LC_MESSAGES/django.po @@ -1,28 +1,29 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: +# Sergey Glita , 2011. msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"PO-Revision-Date: 2011-11-03 17:26+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:6 msgid "setup" -msgstr "" +msgstr "настройки" #: views.py:13 msgid "setup items" -msgstr "" +msgstr "пункты настроек" + + diff --git a/apps/smart_settings/locale/ru/LC_MESSAGES/django.po b/apps/smart_settings/locale/ru/LC_MESSAGES/django.po index 8a0b9fea28..0b4138ae4b 100644 --- a/apps/smart_settings/locale/ru/LC_MESSAGES/django.po +++ b/apps/smart_settings/locale/ru/LC_MESSAGES/django.po @@ -1,36 +1,37 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: +# Sergey Glita , 2011. msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"PO-Revision-Date: 2011-11-03 17:15+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:8 views.py:26 msgid "settings" -msgstr "" +msgstr "настройки" #: views.py:31 msgid "name" -msgstr "" +msgstr "имя" #: views.py:32 msgid "default" -msgstr "" +msgstr "по умолчанию" #: views.py:33 msgid "value" -msgstr "" +msgstr "значение" + + diff --git a/apps/sources/locale/ru/LC_MESSAGES/django.po b/apps/sources/locale/ru/LC_MESSAGES/django.po index 855eaefc8b..438a416148 100644 --- a/apps/sources/locale/ru/LC_MESSAGES/django.po +++ b/apps/sources/locale/ru/LC_MESSAGES/django.po @@ -1,51 +1,49 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"PO-Revision-Date: 2011-11-03 17:13+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:14 msgid "View existing document sources" -msgstr "" +msgstr "Просмотр существующих источников документов" #: __init__.py:15 msgid "Edit document sources" -msgstr "" +msgstr "Редактировать источник документов" #: __init__.py:16 msgid "Delete document sources" -msgstr "" +msgstr "Удалить источник документов " #: __init__.py:17 msgid "Create new document sources" -msgstr "" +msgstr "Создать новый источник документов" #: __init__.py:19 msgid "Sources setup" -msgstr "" +msgstr "Настройки источников" #: __init__.py:25 msgid "preview" -msgstr "" +msgstr "предварительный просмотр" #: __init__.py:26 __init__.py:34 __init__.py:40 msgid "delete" -msgstr "" +msgstr "удалить" #: __init__.py:28 msgid "sources" @@ -65,7 +63,7 @@ msgstr "" #: __init__.py:33 __init__.py:39 msgid "edit" -msgstr "" +msgstr "редактировать" #: __init__.py:35 msgid "add new source" @@ -81,11 +79,11 @@ msgstr "" #: __init__.py:42 msgid "Document sources" -msgstr "" +msgstr "Источники документов" #: __init__.py:69 widgets.py:33 msgid "thumbnail" -msgstr "" +msgstr "миниатюра" #: forms.py:32 forms.py:55 msgid "Expand compressed files" @@ -94,10 +92,11 @@ msgstr "" #: forms.py:33 forms.py:56 msgid "Upload a compressed file's contained files as individual documents" msgstr "" +"Загрузить файлы, содержащиеся в архиве в качестве отдельных документов" #: forms.py:41 msgid "Staging file" -msgstr "" +msgstr "Промежуточный файл" #: literals.py:8 literals.py:13 msgid "Always" @@ -137,7 +136,7 @@ msgstr "" #: literals.py:36 msgid "Folder" -msgstr "" +msgstr "Папка" #: literals.py:37 msgid "World" @@ -165,7 +164,7 @@ msgstr "" #: literals.py:54 msgid "server staging folders" -msgstr "" +msgstr "папки на промежуточном сервере" #: literals.py:55 msgid "server watch folders" @@ -173,11 +172,11 @@ msgstr "" #: models.py:29 msgid "title" -msgstr "" +msgstr "название" #: models.py:30 msgid "enabled" -msgstr "" +msgstr "разрешено" #: models.py:31 msgid "whitelist" @@ -197,7 +196,7 @@ msgstr "" #: models.py:114 models.py:166 msgid "folder path" -msgstr "" +msgstr "путь к папке" #: models.py:114 models.py:166 msgid "Server side filesystem path." @@ -237,7 +236,7 @@ msgstr "" #: models.py:129 msgid "staging folder" -msgstr "" +msgstr "промежуточная папка" #: models.py:169 msgid "interval" @@ -245,28 +244,30 @@ msgstr "" #: models.py:169 msgid "" -"Inverval in seconds where the watch folder path is checked for new documents." +"Inverval in seconds where the watch folder path is checked for new " +"documents." msgstr "" +"Интервал в секундах, между проверками папки на появление новых документов." #: models.py:193 msgid "watch folder" -msgstr "" +msgstr "просматривать папку" #: models.py:198 msgid "Enter a valid value." -msgstr "" +msgstr "Введите допустимое значение." #: models.py:226 views.py:487 msgid "order" -msgstr "" +msgstr "порядок" #: models.py:227 views.py:488 views.py:525 views.py:555 msgid "transformation" -msgstr "" +msgstr "преобразование" #: models.py:228 views.py:489 msgid "arguments" -msgstr "" +msgstr "аргументы" #: models.py:228 #, python-format @@ -275,26 +276,26 @@ msgstr "" #: models.py:239 msgid "document source transformation" -msgstr "" +msgstr "преобразования источника документов" #: models.py:240 msgid "document source transformations" -msgstr "" +msgstr "преобразования источника документов" #: staging.py:40 #, python-format msgid "Unable get list of staging files: %s" -msgstr "" +msgstr "Не удалось получить список промежуточных файлов: %s" #: staging.py:125 #, python-format msgid "Unable to upload staging file: %s" -msgstr "" +msgstr "Невозможно загрузить промежуточный файл: %s" #: staging.py:135 #, python-format msgid "Unable to delete staging file: %s" -msgstr "" +msgstr "Не удается удалить промежуточный файл: %s" #: utils.py:40 msgid "Whitelist Blacklist validation error." @@ -311,36 +312,38 @@ msgstr "" #: views.py:87 msgid "" "No interactive document sources have been defined or none have been enabled." -msgstr "" +msgstr "Интерактивные источники документов не были определены разрешены." #: views.py:88 #, python-format msgid "Click %(setup_link)s to add or enable some document sources." msgstr "" +"Нажмите %(setup_link)s, чтобы добавить или включить какой-нибудь документ " +"источников." #: views.py:136 msgid "Document uploaded successfully." -msgstr "" +msgstr "Документ загружен успешно." #: views.py:152 #, python-format msgid "upload a local document from source: %s" -msgstr "" +msgstr "загрузить локальный документ из источника: %s" #: views.py:182 #, python-format msgid "Staging file: %s, uploaded successfully." -msgstr "" +msgstr "Промежуточный файл %s загружен." #: views.py:187 #, python-format msgid "Staging file: %s, deleted successfully." -msgstr "" +msgstr "Постановка файл %s успешно удален." #: views.py:209 #, python-format msgid "upload a document from staging source: %s" -msgstr "" +msgstr "загрузить документ из промежуточного источника %s" #: views.py:215 msgid "files in staging path" @@ -415,7 +418,7 @@ msgstr "" #: views.py:481 #, python-format msgid "transformations for: %s" -msgstr "" +msgstr "преобразования для: %s" #: views.py:511 msgid "Source transformation edited successfully" @@ -459,3 +462,5 @@ msgstr "" #, python-format msgid "Create new transformation for source: %s" msgstr "" + + diff --git a/apps/tags/locale/ru/LC_MESSAGES/django.po b/apps/tags/locale/ru/LC_MESSAGES/django.po index 01c643513d..64778f9242 100644 --- a/apps/tags/locale/ru/LC_MESSAGES/django.po +++ b/apps/tags/locale/ru/LC_MESSAGES/django.po @@ -1,23 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"PO-Revision-Date: 2011-11-03 17:11+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:13 msgid "Create new tags" @@ -29,7 +27,7 @@ msgstr "" #: __init__.py:15 msgid "Remove tags from documents" -msgstr "" +msgstr "Удаление тегов из документов" #: __init__.py:16 msgid "Delete global tags" @@ -41,11 +39,11 @@ msgstr "" #: __init__.py:18 msgid "View a document's tags" -msgstr "" +msgstr "Просмотр тегов документа" -#: __init__.py:20 widgets.py:14 +#: __init__.py:20 widgets.py:15 msgid "Tags" -msgstr "" +msgstr "Метки" #: __init__.py:28 msgid "tag list" @@ -65,19 +63,19 @@ msgstr "" #: __init__.py:33 __init__.py:58 utils.py:14 views.py:144 msgid "tags" -msgstr "" +msgstr "метки" #: __init__.py:34 __init__.py:37 msgid "delete" -msgstr "" +msgstr "удалить" #: __init__.py:35 msgid "edit" -msgstr "" +msgstr "редактировать" #: __init__.py:36 msgid "tagged documents" -msgstr "" +msgstr "помеченные документы" #: __init__.py:41 models.py:46 msgid "color" @@ -101,7 +99,7 @@ msgstr "" #: forms.py:23 msgid "Name" -msgstr "" +msgstr "Имя" #: models.py:18 msgid "Blue" @@ -129,43 +127,43 @@ msgstr "" #: models.py:24 msgid "Magenta" -msgstr "" +msgstr "Пурпурный" #: models.py:25 msgid "Red" -msgstr "" +msgstr "Красный" #: models.py:26 msgid "Orange" -msgstr "" +msgstr "Оранжевый" #: models.py:27 msgid "Yellow" -msgstr "" +msgstr "Желтый" #: models.py:45 views.py:185 views.py:233 views.py:248 msgid "tag" -msgstr "" +msgstr "метка" #: models.py:49 msgid "tag properties" -msgstr "" +msgstr "свойства метки" #: models.py:50 msgid "tags properties" -msgstr "" +msgstr "свойства метки" #: views.py:33 msgid "Tag already exists." -msgstr "" +msgstr "Метка уже существует." #: views.py:40 msgid "Tag created succesfully." -msgstr "" +msgstr "Метка создана." #: views.py:46 msgid "create tag" -msgstr "" +msgstr "создать метку" #: views.py:73 views.py:112 msgid "Must choose either a new tag or an existing one." @@ -174,7 +172,7 @@ msgstr "" #: views.py:77 views.py:116 #, python-format msgid "Document is already tagged as \"%s\"" -msgstr "" +msgstr "Документ уже помечены как \"%s\"" #: views.py:86 #, python-format @@ -221,7 +219,7 @@ msgstr "" #: views.py:194 views.py:197 msgid "Will be removed from all documents." -msgstr "" +msgstr "Будет удален из всех документов." #: views.py:196 #, python-format @@ -240,7 +238,7 @@ msgstr "" #: views.py:245 #, python-format msgid "documents with the tag \"%s\"" -msgstr "" +msgstr "документы с тегом \"%s\"" #: views.py:258 #, python-format @@ -264,4 +262,6 @@ msgstr "" #: templatetags/tags_tags.py:17 msgid "Add tag to document" -msgstr "" +msgstr "Добавить тег к документу" + + diff --git a/apps/user_management/locale/ru/LC_MESSAGES/django.po b/apps/user_management/locale/ru/LC_MESSAGES/django.po index 60179df6e5..982618d6d0 100644 --- a/apps/user_management/locale/ru/LC_MESSAGES/django.po +++ b/apps/user_management/locale/ru/LC_MESSAGES/django.po @@ -1,23 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"PO-Revision-Date: 2011-11-03 17:28+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:8 msgid "Create new users" @@ -65,7 +63,7 @@ msgstr "" #: __init__.py:30 __init__.py:39 msgid "edit" -msgstr "" +msgstr "редактировать" #: __init__.py:31 views.py:92 msgid "create new user" @@ -73,7 +71,7 @@ msgstr "" #: __init__.py:32 __init__.py:33 __init__.py:41 __init__.py:42 msgid "delete" -msgstr "" +msgstr "удалить" #: __init__.py:34 __init__.py:35 msgid "reset password" @@ -133,7 +131,7 @@ msgstr "" #: views.py:74 views.py:130 views.py:193 msgid "user" -msgstr "" +msgstr "пользователь" #: views.py:86 #, python-format @@ -252,3 +250,5 @@ msgstr "" #, python-format msgid "members of group: %s" msgstr "" + + diff --git a/apps/web_theme/locale/ru/LC_MESSAGES/django.mo b/apps/web_theme/locale/ru/LC_MESSAGES/django.mo index 5f31b44d88a94854d03bf3e5b354458a6b947652..bc85a831e65780a8d41539ccb9baf725c2caeaf1 100644 GIT binary patch delta 105 zcmdnOa)M=oh!raX1A`3^gFpZfgZP0!e4UYjAsk3c0I@z30|Sr?20$hhOtgyOGc?pS lFjg=$vof~OH87dDq?F4iF)zI|F+J5vVX_2c^yE6mZ2*Y`5UKzG delta 85 zcmX@XvV~=Wh#CVDumQ4Jf!G#^uQM_*I0I=3AeLsD=oiChV5n0}GWC@!DGy!6t<^i(T_$rBm30{{Zq5L5sF From d26176602b65ea051e03f2ab4c7a9fefca534d9b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 16:58:14 -0400 Subject: [PATCH 020/220] Updated string composition so that make messages could process it --- apps/permissions/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/permissions/views.py b/apps/permissions/views.py index 1a1d843faf..65bd30ec56 100644 --- a/apps/permissions/views.py +++ b/apps/permissions/views.py @@ -139,7 +139,7 @@ def permission_grant(request): grouped_items = [(grouper, [permission['permission'] for permission in group_data]) for grouper, group_data in groups] # Warning: trial and error black magic ahead - title_suffix = _(u' and ').join([_(u'%s to %s') % (', '.join(['"%s"' % unicode(ps) for ps in p]), unicode(r)) for r, p in grouped_items]) + title_suffix = _(u' and ').join([_(u'%(permissions)s to %(requester)s') % {'permissions': ', '.join(['"%s"' % unicode(ps) for ps in p]), 'requester': unicode(r)} for r, p in grouped_items]) if len(grouped_items) == 1 and len(grouped_items[0][1]) == 1: permissions_label = _(u'permission') @@ -198,7 +198,7 @@ def permission_revoke(request): grouped_items = [(grouper, [permission['permission'] for permission in group_data]) for grouper, group_data in groups] # Warning: trial and error black magic ahead - title_suffix = _(u' and ').join([_(u'%s from %s') % (', '.join(['"%s"' % unicode(ps) for ps in p]), unicode(r)) for r, p in grouped_items]) + title_suffix = _(u' and ').join([_(u'%(permissions)s to %(requester)s') % {'permissions': ', '.join(['"%s"' % unicode(ps) for ps in p]), 'requester': unicode(r)} for r, p in grouped_items]) if len(grouped_items) == 1 and len(grouped_items[0][1]) == 1: permissions_label = _(u'permission') From f1c15341f191c8f6b0b5798cdc60abee6fc9888f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 17:04:31 -0400 Subject: [PATCH 021/220] Updated changelog --- docs/changelog.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 6f5a6888a8..d3cb77b7dd 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,3 +1,7 @@ +2011-11-03 +* Portuguese translation updates (Emerson Soares and Renata Oliveira) +* Initial Russian translation (Sergey Glita) + 2011-10-30 ---------- * The admin and sentry links are no longer hard-coded (Meurig Freeman) From 1d63599a609056eeffbc0d07402d006290eda4de Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 17:04:41 -0400 Subject: [PATCH 022/220] Added Portuguese and Russian to the list of included languages --- docs/features.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/features.rst b/docs/features.rst index 3ad5262fbd..75360e15f6 100644 --- a/docs/features.rst +++ b/docs/features.rst @@ -48,9 +48,9 @@ Features * The task of transcribing text from documents via OCR can be distributed among several physical or virtual computers to decrease load and increase availability. -* Multilingual user interface (English, Spanish). +* Multilingual user interface (English, Spanish, Portuguese, Russian). - * **Mayan EDMS** is written using the Django_ framework which natively support Unicode, this coupled with the use of text templates allows **Mayan EDMS** to be translated to practically any language spoken in the world, by default two translations are provided: English and Spanish. + * **Mayan EDMS** is written using the Django_ framework which natively support Unicode, this coupled with the use of text templates allows **Mayan EDMS** to be translated to practically any language spoken in the world, by default four translations are provided: English, Spanish, Portuguese and Russian. .. _Django: https://www.djangoproject.com/ From 7c502703a627211280523e127ee2cb67eb08053d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 3 Nov 2011 20:38:30 -0400 Subject: [PATCH 023/220] Added animate.css to use CSS to animate flash messages with better fallback on non JS browsers --- .../static/packages/animate-custom.css | 713 ++++++++++++++++++ apps/web_theme/templates/web_theme_base.html | 10 +- 2 files changed, 718 insertions(+), 5 deletions(-) create mode 100644 apps/web_theme/static/packages/animate-custom.css diff --git a/apps/web_theme/static/packages/animate-custom.css b/apps/web_theme/static/packages/animate-custom.css new file mode 100644 index 0000000000..347f73df4e --- /dev/null +++ b/apps/web_theme/static/packages/animate-custom.css @@ -0,0 +1,713 @@ +/* +Animate.css - http://daneden.me/animate +LICENSED UNDER THE MIT LICENSE (MIT) + +Copyright (c) 2011 Dan Eden + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +.animated { + -webkit-animation: 1s ease; + -moz-animation: 1s ease; + -ms-animation: 1s ease; + -o-animation: 1s ease; + animation: 1s ease; +} + +.animated.hinge { + -webkit-animation: 2s ease; + -moz-animation: 2s ease; + -ms-animation: 2s ease; + -o-animation: 2s ease; + animation: 2s ease; +} + +@-webkit-keyframes shake { + 0%, 100% {-webkit-transform: translateX(0);} + 10%, 30%, 50%, 70%, 90% {-webkit-transform: translateX(-10px);} + 20%, 40%, 60%, 80% {-webkit-transform: translateX(10px);} +} + +@-moz-keyframes shake { + 0%, 100% {-moz-transform: translateX(0);} + 10%, 30%, 50%, 70%, 90% {-moz-transform: translateX(-10px);} + 20%, 40%, 60%, 80% {-moz-transform: translateX(10px);} +} + +@-ms-keyframes shake { + 0%, 100% {-ms-transform: translateX(0);} + 10%, 30%, 50%, 70%, 90% {-ms-transform: translateX(-10px);} + 20%, 40%, 60%, 80% {-ms-transform: translateX(10px);} +} + +@-o-keyframes shake { + 0%, 100% {-o-transform: translateX(0);} + 10%, 30%, 50%, 70%, 90% {-o-transform: translateX(-10px);} + 20%, 40%, 60%, 80% {-o-transform: translateX(10px);} +} + +@keyframes shake { + 0%, 100% {transform: translateX(0);} + 10%, 30%, 50%, 70%, 90% {transform: translateX(-10px);} + 20%, 40%, 60%, 80% {transform: translateX(10px);} +} + +.shake { + -webkit-animation-name: shake; + -moz-animation-name: shake; + -ms-animation-name: shake; + -o-animation-name: shake; + animation-name: shake; +} +@-webkit-keyframes bounce { + 0%, 20%, 50%, 80%, 100% {-webkit-transform: translateY(0);} + 40% {-webkit-transform: translateY(-30px);} + 60% {-webkit-transform: translateY(-15px);} +} + +@-moz-keyframes bounce { + 0%, 20%, 50%, 80%, 100% {-moz-transform: translateY(0);} + 40% {-moz-transform: translateY(-30px);} + 60% {-moz-transform: translateY(-15px);} +} + +@-ms-keyframes bounce { + 0%, 20%, 50%, 80%, 100% {-ms-transform: translateY(0);} + 40% {-ms-transform: translateY(-30px);} + 60% {-ms-transform: translateY(-15px);} +} + +@-o-keyframes bounce { + 0%, 20%, 50%, 80%, 100% {-o-transform: translateY(0);} + 40% {-o-transform: translateY(-30px);} + 60% {-o-transform: translateY(-15px);} +} +@keyframes bounce { + 0%, 20%, 50%, 80%, 100% {transform: translateY(0);} + 40% {transform: translateY(-30px);} + 60% {transform: translateY(-15px);} +} + +.bounce { + -webkit-animation-name: bounce; + -moz-animation-name: bounce; + -ms-animation-name: bounce; + -o-animation-name: bounce; + animation-name: bounce; +} +@-webkit-keyframes tada { + 0% {-webkit-transform: scale(1);} + 10%, 20% {-webkit-transform: scale(0.9) rotate(-3deg);} + 30%, 50%, 70%, 90% {-webkit-transform: scale(1.1) rotate(3deg);} + 40%, 60%, 80% {-webkit-transform: scale(1.1) rotate(-3deg);} + 100% {-webkit-transform: scale(1) rotate(0);} +} + +@-moz-keyframes tada { + 0% {-moz-transform: scale(1);} + 10%, 20% {-moz-transform: scale(0.9) rotate(-3deg);} + 30%, 50%, 70%, 90% {-moz-transform: scale(1.1) rotate(3deg);} + 40%, 60%, 80% {-moz-transform: scale(1.1) rotate(-3deg);} + 100% {-moz-transform: scale(1) rotate(0);} +} + +@-ms-keyframes tada { + 0% {-ms-transform: scale(1);} + 10%, 20% {-ms-transform: scale(0.9) rotate(-3deg);} + 30%, 50%, 70%, 90% {-ms-transform: scale(1.1) rotate(3deg);} + 40%, 60%, 80% {-ms-transform: scale(1.1) rotate(-3deg);} + 100% {-ms-transform: scale(1) rotate(0);} +} + +@-o-keyframes tada { + 0% {-o-transform: scale(1);} + 10%, 20% {-o-transform: scale(0.9) rotate(-3deg);} + 30%, 50%, 70%, 90% {-o-transform: scale(1.1) rotate(3deg);} + 40%, 60%, 80% {-o-transform: scale(1.1) rotate(-3deg);} + 100% {-o-transform: scale(1) rotate(0);} +} + +@keyframes tada { + 0% {transform: scale(1);} + 10%, 20% {transform: scale(0.9) rotate(-3deg);} + 30%, 50%, 70%, 90% {transform: scale(1.1) rotate(3deg);} + 40%, 60%, 80% {transform: scale(1.1) rotate(-3deg);} + 100% {transform: scale(1) rotate(0);} +} + +.tada { + -webkit-animation-name: tada; + -moz-animation-name: tada; + -ms-animation-name: tada; + -o-animation-name: tada; + animation-name: tada; +} +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + 0% { -webkit-transform: scale(1); } + 50% { -webkit-transform: scale(1.1); } + 100% { -webkit-transform: scale(1); } +} +@-moz-keyframes pulse { + 0% { -moz-transform: scale(1); } + 50% { -moz-transform: scale(1.1); } + 100% { -moz-transform: scale(1); } +} +@-ms-keyframes pulse { + 0% { -ms-transform: scale(1); } + 50% { -ms-transform: scale(1.1); } + 100% { -ms-transform: scale(1); } +} +@-o-keyframes pulse { + 0% { -o-transform: scale(1); } + 50% { -o-transform: scale(1.1); } + 100% { -o-transform: scale(1); } +} +@keyframes pulse { + 0% { transform: scale(1); } + 50% { transform: scale(1.1); } + 100% { transform: scale(1); } +} + +.pulse { + -webkit-animation-name: pulse; + -moz-animation-name: pulse; + -ms-animation-name: pulse; + -o-animation-name: pulse; + animation-name: pulse; +} +@-webkit-keyframes fadeIn { + 0% {opacity: 0;} + 100% {opacity: 1;} +} + +@-moz-keyframes fadeIn { + 0% {opacity: 0;} + 100% {opacity: 1;} +} + +@-ms-keyframes fadeIn { + 0% {opacity: 0;} + 100% {opacity: 1;} +} + +@-o-keyframes fadeIn { + 0% {opacity: 0;} + 100% {opacity: 1;} +} + +@keyframes fadeIn { + 0% {opacity: 0;} + 100% {opacity: 1;} +} + +.fadeIn { + -webkit-animation-name: fadeIn; + -moz-animation-name: fadeIn; + -ms-animation-name: fadeIn; + -o-animation-name: fadeIn; + animation-name: fadeIn; +} +@-webkit-keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translateY(20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + } +} + +@-moz-keyframes fadeInUp { + 0% { + opacity: 0; + -moz-transform: translateY(20px); + } + + 100% { + opacity: 1; + -moz-transform: translateY(0); + } +} + +@-ms-keyframes fadeInUp { + 0% { + opacity: 0; + -ms-transform: translateY(20px); + } + + 100% { + opacity: 1; + -ms-transform: translateY(0); + } +} + +@-o-keyframes fadeInUp { + 0% { + opacity: 0; + -o-transform: translateY(20px); + } + + 100% { + opacity: 1; + -o-transform: translateY(0); + } +} + +@keyframes fadeInUp { + 0% { + opacity: 0; + transform: translateY(20px); + } + + 100% { + opacity: 1; + transform: translateY(0); + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + -moz-animation-name: fadeInUp; + -ms-animation-name: fadeInUp; + -o-animation-name: fadeInUp; + animation-name: fadeInUp; +} +@-webkit-keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translateY(-20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateY(0); + } +} + +@-moz-keyframes fadeInDown { + 0% { + opacity: 0; + -moz-transform: translateY(-20px); + } + + 100% { + opacity: 1; + -moz-transform: translateY(0); + } +} + +@-ms-keyframes fadeInDown { + 0% { + opacity: 0; + -ms-transform: translateY(-20px); + } + + 100% { + opacity: 1; + -ms-transform: translateY(0); + } +} + +@-o-keyframes fadeInDown { + 0% { + opacity: 0; + -ms-transform: translateY(-20px); + } + + 100% { + opacity: 1; + -ms-transform: translateY(0); + } +} + +@keyframes fadeInDown { + 0% { + opacity: 0; + transform: translateY(-20px); + } + + 100% { + opacity: 1; + transform: translateY(0); + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + -moz-animation-name: fadeInDown; + -ms-animation-name: fadeInDown; + -o-animation-name: fadeInDown; + animation-name: fadeInDown; +} +@-webkit-keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translateX(-20px); + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + } +} + +@-moz-keyframes fadeInLeft { + 0% { + opacity: 0; + -moz-transform: translateX(-20px); + } + + 100% { + opacity: 1; + -moz-transform: translateX(0); + } +} + +@-ms-keyframes fadeInLeft { + 0% { + opacity: 0; + -ms-transform: translateX(-20px); + } + + 100% { + opacity: 1; + -ms-transform: translateX(0); + } +} + +@-o-keyframes fadeInLeft { + 0% { + opacity: 0; + -o-transform: translateX(-20px); + } + + 100% { + opacity: 1; + -o-transform: translateX(0); + } +} + +@keyframes fadeInLeft { + 0% { + opacity: 0; + transform: translateX(-20px); + } + + 100% { + opacity: 1; + transform: translateX(0); + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + -moz-animation-name: fadeInLeft; + -ms-animation-name: fadeInLeft; + -o-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} +@-webkit-keyframes fadeOut { + 0% {opacity: 1;} + 100% {opacity: 0;} +} + +@-moz-keyframes fadeOut { + 0% {opacity: 1;} + 100% {opacity: 0;} +} + +@-ms-keyframes fadeOut { + 0% {opacity: 1;} + 100% {opacity: 0;} +} + +@-o-keyframes fadeOut { + 0% {opacity: 1;} + 100% {opacity: 0;} +} + +@keyframes fadeOut { + 0% {opacity: 1;} + 100% {opacity: 0;} +} + +.fadeOut { + -webkit-animation-name: fadeOut; + -moz-animation-name: fadeOut; + -ms-animation-name: fadeOut; + -o-animation-name: fadeOut; + animation-name: fadeOut; +} +@-webkit-keyframes fadeOutUp { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(-20px); + } +} +@-moz-keyframes fadeOutUp { + 0% { + opacity: 1; + -moz-transform: translateY(0); + } + + 100% { + opacity: 0; + -moz-transform: translateY(-20px); + } +} +@-ms-keyframes fadeOutUp { + 0% { + opacity: 1; + -ms-transform: translateY(0); + } + + 100% { + opacity: 0; + -ms-transform: translateY(-20px); + } +} +@-o-keyframes fadeOutUp { + 0% { + opacity: 1; + -o-transform: translateY(0); + } + + 100% { + opacity: 0; + -o-transform: translateY(-20px); + } +} +@keyframes fadeOutUp { + 0% { + opacity: 1; + transform: translateY(0); + } + + 100% { + opacity: 0; + transform: translateY(-20px); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + -moz-animation-name: fadeOutUp; + -ms-animation-name: fadeOutUp; + -o-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} +@-webkit-keyframes fadeOutDown { + 0% { + opacity: 1; + -webkit-transform: translateY(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateY(20px); + } +} + +@-moz-keyframes fadeOutDown { + 0% { + opacity: 1; + -moz-transform: translateY(0); + } + + 100% { + opacity: 0; + -moz-transform: translateY(20px); + } +} + +@-ms-keyframes fadeOutDown { + 0% { + opacity: 1; + -ms-transform: translateY(0); + } + + 100% { + opacity: 0; + -ms-transform: translateY(20px); + } +} + +@-o-keyframes fadeOutDown { + 0% { + opacity: 1; + -o-transform: translateY(0); + } + + 100% { + opacity: 0; + -o-transform: translateY(20px); + } +} + +@keyframes fadeOutDown { + 0% { + opacity: 1; + transform: translateY(0); + } + + 100% { + opacity: 0; + transform: translateY(20px); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + -moz-animation-name: fadeOutDown; + -ms-animation-name: fadeOutDown; + -o-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} +@-webkit-keyframes fadeOutLeft { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(-20px); + } +} + +@-moz-keyframes fadeOutLeft { + 0% { + opacity: 1; + -moz-transform: translateX(0); + } + + 100% { + opacity: 0; + -moz-transform: translateX(-20px); + } +} + +@-ms-keyframes fadeOutLeft { + 0% { + opacity: 1; + -ms-transform: translateX(0); + } + + 100% { + opacity: 0; + -ms-transform: translateX(-20px); + } +} + +@-o-keyframes fadeOutLeft { + 0% { + opacity: 1; + -o-transform: translateX(0); + } + + 100% { + opacity: 0; + -o-transform: translateX(-20px); + } +} + +@keyframes fadeOutLeft { + 0% { + opacity: 1; + transform: translateX(0); + } + + 100% { + opacity: 0; + transform: translateX(-20px); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + -moz-animation-name: fadeOutLeft; + -ms-animation-name: fadeOutLeft; + -o-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} +@-webkit-keyframes fadeOutRight { + 0% { + opacity: 1; + -webkit-transform: translateX(0); + } + + 100% { + opacity: 0; + -webkit-transform: translateX(20px); + } +} + +@-moz-keyframes fadeOutRight { + 0% { + opacity: 1; + -moz-transform: translateX(0); + } + + 100% { + opacity: 0; + -moz-transform: translateX(20px); + } +} + +@-ms-keyframes fadeOutRight { + 0% { + opacity: 1; + -ms-transform: translateX(0); + } + + 100% { + opacity: 0; + -ms-transform: translateX(20px); + } +} + +@-o-keyframes fadeOutRight { + 0% { + opacity: 1; + -o-transform: translateX(0); + } + + 100% { + opacity: 0; + -o-transform: translateX(20px); + } +} + +@keyframes fadeOutRight { + 0% { + opacity: 1; + transform: translateX(0); + } + + 100% { + opacity: 0; + transform: translateX(20px); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + -moz-animation-name: fadeOutRight; + -ms-animation-name: fadeOutRight; + -o-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} diff --git a/apps/web_theme/templates/web_theme_base.html b/apps/web_theme/templates/web_theme_base.html index bbd4340355..28288591a8 100644 --- a/apps/web_theme/templates/web_theme_base.html +++ b/apps/web_theme/templates/web_theme_base.html @@ -33,7 +33,8 @@ text-decoration:none; font-weight:bold } - + + {% block web_theme_stylesheets %}{% endblock %} {% endcompress %} @@ -49,13 +50,12 @@ + {% if enable_scroll_js %} #} From 4e8f2c370bda463a8b4b537df76c317f09a030fc Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 00:56:56 -0400 Subject: [PATCH 091/220] Initial REST API version 0 alpha --- apps/rest_api/__init__.py | 0 apps/rest_api/models.py | 3 ++ apps/rest_api/resources.py | 38 ++++++++++++++++++++ apps/rest_api/tests.py | 1 + apps/rest_api/urls.py | 18 ++++++++++ apps/rest_api/views.py | 69 ++++++++++++++++++++++++++++++++++++ requirements/development.txt | 1 + requirements/production.txt | 1 + settings.py | 9 +++-- urls.py | 3 +- 10 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 apps/rest_api/__init__.py create mode 100644 apps/rest_api/models.py create mode 100644 apps/rest_api/resources.py create mode 100644 apps/rest_api/tests.py create mode 100644 apps/rest_api/urls.py create mode 100644 apps/rest_api/views.py diff --git a/apps/rest_api/__init__.py b/apps/rest_api/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/rest_api/models.py b/apps/rest_api/models.py new file mode 100644 index 0000000000..71a8362390 --- /dev/null +++ b/apps/rest_api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/apps/rest_api/resources.py b/apps/rest_api/resources.py new file mode 100644 index 0000000000..bbb8f52ebf --- /dev/null +++ b/apps/rest_api/resources.py @@ -0,0 +1,38 @@ +from django.core.urlresolvers import reverse + +from djangorestframework.resources import ModelResource + +from documents.models import Document +from converter.exceptions import UnknownFileFormat, UnkownConvertError + + +class DocumentResourceSimple(ModelResource): + model = Document + fields = ('url', 'pk', 'document_type', 'uuid', 'date_added', 'description', 'tags', 'comments', 'expensive_methods', 'files') + + def files(self, instance): + return [ + { + 'version': 1, + 'mimetype': instance.file_mimetype, + 'encoding': instance.file_mime_encoding, + 'filename': instance.get_fullname(), + 'date_updated': instance.date_updated, + 'checksum': instance.checksum, + 'size': instance.size, + 'exists': instance.exists(), + 'pages': [ + { + 'page_numer': page.page_number, + 'page_label': page.page_label, + #'content': + } + for page in instance.documentpage_set.all() + ] + } + ] + + def expensive_methods(self, instance): + return [ + {'is_zoomable': reverse('documents-expensive-is_zoomable', args=[instance.pk])}, + ] diff --git a/apps/rest_api/tests.py b/apps/rest_api/tests.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/apps/rest_api/tests.py @@ -0,0 +1 @@ + diff --git a/apps/rest_api/urls.py b/apps/rest_api/urls.py new file mode 100644 index 0000000000..b9eb0eea66 --- /dev/null +++ b/apps/rest_api/urls.py @@ -0,0 +1,18 @@ +from django.conf.urls.defaults import patterns, url + +from djangorestframework.views import ListModelView +from djangorestframework.views import ListOrCreateModelView, InstanceModelView + +from rest_api.views import APIBase, Version_0, ReadOnlyInstanceModelView, IsZoomable, Exists, Size +from rest_api.resources import DocumentResourceSimple + +urlpatterns = patterns('', + url(r'^$', APIBase.as_view(), name='api-root'), + url(r'^v0/$', Version_0.as_view(), name='api-version-0'), + + # Version 0 alpha API calls + url(r'^v0/document/(?P[0-9]+)/$', ReadOnlyInstanceModelView.as_view(resource=DocumentResourceSimple), name='documents-simple'), + url(r'^v0/document/(?P[0-9]+)/expensive/is_zoomable/$', IsZoomable.as_view(), name='documents-expensive-is_zoomable'), + url(r'^v0/document/(?P[0-9]+)/expensive/exists/$', IsZoomable.as_view(), name='documents-expensive-exists'), + url(r'^v0/document/(?P[0-9]+)/expensive/size/$', Size.as_view(), name='documents-expensive-size'), +) diff --git a/apps/rest_api/views.py b/apps/rest_api/views.py new file mode 100644 index 0000000000..06b5a46ce5 --- /dev/null +++ b/apps/rest_api/views.py @@ -0,0 +1,69 @@ +'''Views file for the rest_api app''' + +import logging + +from django.utils.translation import ugettext_lazy as _ +from django.shortcuts import get_object_or_404 +from django.core.urlresolvers import reverse + +from documents.models import Document +from converter.exceptions import UnknownFileFormat, UnkownConvertError + +from djangorestframework.views import View, ModelView, ListModelView, InstanceModelView +from djangorestframework.mixins import InstanceMixin, ReadModelMixin +from djangorestframework.response import Response +from djangorestframework import status + +logger = logging.getLogger(__name__) + + +class ReadOnlyInstanceModelView(InstanceModelView): + allowed_methods = ['GET'] + + +class APIBase(View): + """This is the REST API for Mayan EDMS (https://github.com/rosarior/mayan/). + + All the API calls can be navigated either through the browser or from the command line... + + bash: curl -X GET http://127.0.0.1:8000/api/ # (Use default renderer) + bash: curl -X GET http://127.0.0.1:8000/api/ -H 'Accept: text/plain' # (Use plaintext documentation renderer) + + """ + + def get(self, request): + return [ + {'name': 'Version 0 Alpha', 'url': reverse('api-version-0')} + ] + + +class Version_0(View): + def get(self, request): + return [ + {'name': 'Resources', 'resources': ['documents/']} + ] + + +class IsZoomable(View): + def get(self, request, pk): + logger.info('received is_zoomable call from: %s' % (request.META['REMOTE_ADDR'])) + document = get_object_or_404(Document, pk=pk) + try: + document.get_image_cache_name(1) # TODO: page + return {'result': True} + except (UnknownFileFormat, UnkownConvertError): + return {'result': False} + + +class Exists(View): + def get(self, request, pk): + logger.info('received exists call from: %s' % (request.META['REMOTE_ADDR'])) + document = get_object_or_404(Document, pk=pk) + return {'result': document.exists()} + + +class Size(View): + def get(self, request, pk): + logger.info('received size call from: %s' % (request.META['REMOTE_ADDR'])) + document = get_object_or_404(Document, pk=pk) + return {'result': document.size} diff --git a/requirements/development.txt b/requirements/development.txt index fe228d3604..e48c037891 100644 --- a/requirements/development.txt +++ b/requirements/development.txt @@ -19,3 +19,4 @@ Pillow==1.7.4 cssmin==0.1.4 django-compressor==1.1 -e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile +djangorestframework==0.2.3 diff --git a/requirements/production.txt b/requirements/production.txt index 39948f87ba..dd976f27a7 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -16,3 +16,4 @@ Pillow==1.7.4 cssmin==0.1.4 django-compressor==1.1 -e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile +djangorestframework==0.2.3 diff --git a/settings.py b/settings.py index ea37f7cbf0..5c025e3fc4 100644 --- a/settings.py +++ b/settings.py @@ -81,7 +81,8 @@ STATIC_URL = '/%s-static/' % PROJECT_NAME # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a # trailing slash. # Examples: "http://foo.com/media/", "/media/". -ADMIN_MEDIA_PREFIX = STATIC_URL + 'grappelli/' +#ADMIN_MEDIA_PREFIX = STATIC_URL + 'grappelli/' +ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/' # Make this unique, and don't share it with anybody. SECRET_KEY = 'om^a(i8^6&h+umbd2%pt91cj!qu_@oztw117rgxmn(n2lp^*c!' @@ -117,7 +118,7 @@ TEMPLATE_DIRS = ( ) INSTALLED_APPS = ( - 'grappelli', + #'grappelli', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', @@ -164,6 +165,8 @@ INSTALLED_APPS = ( 'history', 'main', 'compressor', + 'djangorestframework', + 'rest_api', ) TEMPLATE_CONTEXT_PROCESSORS = ( @@ -286,7 +289,7 @@ CELERY_DISABLE_RATE_LIMITS = True #--------- Web theme --------------- WEB_THEME_ENABLE_SCROLL_JS = False #--------- Grappelli ---------------- -GRAPPELLI_ADMIN_TITLE = PROJECT_TITLE +#GRAPPELLI_ADMIN_TITLE = PROJECT_TITLE #--------- Django ------------------- LOGIN_URL = '/login/' LOGIN_REDIRECT_URL = '/' diff --git a/urls.py b/urls.py index 4736d4d377..e23e774472 100644 --- a/urls.py +++ b/urls.py @@ -15,7 +15,7 @@ urlpatterns = patterns('', (r'^tags/', include('tags.urls')), (r'^admin/doc/', include('django.contrib.admindocs.urls')), (r'^admin/', include(admin.site.urls)), - (r'^grappelli/', include('grappelli.urls')), + #(r'^grappelli/', include('grappelli.urls')), (r'^sentry/', include('sentry.urls')), (r'^comments/', include('document_comments.urls')), (r'^user_management/', include('user_management.urls')), @@ -28,6 +28,7 @@ urlpatterns = patterns('', (r'^sources/', include('sources.urls')), (r'^project_setup/', include('project_setup.urls')), (r'^project_tools/', include('project_tools.urls')), + (r'^api/', include('rest_api.urls')), ) From a6a00cbc15c18b7fb63450f4632478227e201511 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 00:57:54 -0400 Subject: [PATCH 092/220] Document image serving uses now a fixed mimetype provided by converter.DEFAULT_FILE_FORMAT_MIMETYPE to help browser rendering --- apps/converter/literals.py | 1 + apps/documents/views.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/converter/literals.py b/apps/converter/literals.py index b567b30d14..14df18106d 100644 --- a/apps/converter/literals.py +++ b/apps/converter/literals.py @@ -5,6 +5,7 @@ DEFAULT_ZOOM_LEVEL = 100 DEFAULT_ROTATION = 0 DEFAULT_PAGE_NUMBER = 1 DEFAULT_FILE_FORMAT = u'jpeg' +DEFAULT_FILE_FORMAT_MIMETYPE = u'image/jpeg' DIMENSION_SEPARATOR = u'x' diff --git a/apps/documents/views.py b/apps/documents/views.py index b4251dc1b0..8c76416d7f 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -18,7 +18,7 @@ from common.literals import PAGE_SIZE_DIMENSIONS, \ PAGE_ORIENTATION_PORTRAIT, PAGE_ORIENTATION_LANDSCAPE from common.conf.settings import DEFAULT_PAPER_SIZE from converter.literals import DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, \ - DEFAULT_PAGE_NUMBER + DEFAULT_PAGE_NUMBER, DEFAULT_FILE_FORMAT_MIMETYPE from converter.office_converter import OfficeConverter from filetransfers.api import serve_file from metadata.forms import MetadataFormSet, MetadataSelectionForm @@ -288,7 +288,7 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE): rotation = int(request.GET.get('rotation', DEFAULT_ROTATION)) % 360 - return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation)) + return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation), mimetype=DEFAULT_FILE_FORMAT_MIMETYPE) def document_download(request, document_id): From f8dbfc068a45f45ac56d414524735620de5b1ed3 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 01:22:59 -0400 Subject: [PATCH 093/220] Added random named pipe support to the OfficeConverter pipe method --- apps/common/utils.py | 7 +++++++ apps/converter/office_converter.py | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/common/utils.py b/apps/common/utils.py index 61973996ac..1de970154a 100644 --- a/apps/common/utils.py +++ b/apps/common/utils.py @@ -3,6 +3,8 @@ import os import re import types import tempfile +import string +import random from django.utils.http import urlquote as django_urlquote from django.utils.http import urlencode as django_urlencode @@ -358,8 +360,13 @@ def validate_path(path): return True + def encapsulate(function): # Workaround Django ticket 15791 # Changeset 16045 # http://stackoverflow.com/questions/6861601/cannot-resolve-callable-context-variable/6955045#6955045 return lambda: function + + +def id_generator(size=6, chars=string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for x in range(size)) diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index 968ea3fcdc..cd6a20f9d8 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -3,6 +3,7 @@ import subprocess from mimetype.api import get_mimetype from common.conf.settings import TEMPORARY_DIRECTORY +from common.utils import id_generator from converter.conf.settings import UNOCONV_PATH, UNOCONV_USE_PIPE from converter.exceptions import (OfficeConversionError, @@ -89,12 +90,12 @@ class OfficeConverterBackendUnoconv(object): if UNOCONV_USE_PIPE: command.append(u'--pipe') - command.append(u'mayan') + command.append(u'mayan-%s' % id_generator()) command.append(u'--format=pdf') command.append(u'--output=%s' % self.output_filepath) command.append(self.input_filepath) - + try: proc = subprocess.Popen(command, close_fds=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE) return_code = proc.wait() From 9988a8f543b497a1123180aba0b728b3a2ed5d32 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 05:06:41 -0400 Subject: [PATCH 094/220] Invalidate cached values on reentry, added logging --- apps/converter/office_converter.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index cd6a20f9d8..dac7ea3d69 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -1,5 +1,6 @@ import os import subprocess +import logging from mimetype.api import get_mimetype from common.conf.settings import TEMPORARY_DIRECTORY @@ -27,10 +28,13 @@ CONVERTER_OFFICE_FILE_MIMETYPES = [ 'application/vnd.oasis.opendocument.graphics', ] +logger = logging.getLogger(__name__) + class OfficeConverter(object): def __init__(self): self.backend_class = OfficeConverterBackendUnoconv + self.backend = self.backend_class() self.exists = False self.mimetype = None self.encoding = None @@ -39,6 +43,10 @@ class OfficeConverter(object): return CONVERTER_OFFICE_FILE_MIMETYPES def convert(self, input_filepath, mimetype=None): + self.exists = False + self.mimetype = None + self.encoding = None + self.input_filepath = input_filepath # Make sure file is of a known office format @@ -53,7 +61,6 @@ class OfficeConverter(object): self.exists = os.path.exists(self.output_filepath) if not self.exists: try: - self.backend = self.backend_class() self.backend.convert(self.input_filepath, self.output_filepath) self.exists = True except OfficeBackendError, msg: @@ -65,11 +72,6 @@ class OfficeConverter(object): def __str__(self): return str(self.__unicode__()) - - def __nonzero__(self): - return self.exists - - __bool__ = __nonzero__ class OfficeConverterBackendUnoconv(object): @@ -79,9 +81,9 @@ class OfficeConverterBackendUnoconv(object): raise OfficeBackendError('cannot find unoconv executable') def convert(self, input_filepath, output_filepath): - """ + ''' Executes the program unoconv using subprocess's Popen - """ + ''' self.input_filepath = input_filepath self.output_filepath = output_filepath @@ -97,10 +99,15 @@ class OfficeConverterBackendUnoconv(object): command.append(self.input_filepath) try: + logger.debug('prev environment: %s' % os.environ) proc = subprocess.Popen(command, close_fds=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE) return_code = proc.wait() + logger.debug('post environment: %s' % os.environ) + readline = proc.stderr.readline() if return_code != 0: raise OfficeBackendError(proc.stderr.readline()) except OSError, msg: raise OfficeBackendError(msg) + except Exception, msg: + logger.error('Unhandled exception: %s' % msg) From 99e6bf652ff7d3a1a46b48e864d9c12d0d26601f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 05:07:19 -0400 Subject: [PATCH 095/220] Detect invalid office converter backend during initialization --- apps/converter/runtime.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/converter/runtime.py b/apps/converter/runtime.py index 54ea63394c..4d2a67cacc 100644 --- a/apps/converter/runtime.py +++ b/apps/converter/runtime.py @@ -1,3 +1,8 @@ from converter.office_converter import OfficeConverter +from converter.exceptions import OfficeBackendError -office_converter = OfficeConverter() + +try: + office_converter = OfficeConverter() +except OfficeBackendError: + office_converter = None From ba7016b0bcebf92fb0e29fe88e39201b90ccc4f2 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 05:08:04 -0400 Subject: [PATCH 096/220] Don't call office converter if not initialized --- apps/converter/api.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/converter/api.py b/apps/converter/api.py index 3567800d79..3988ab343e 100644 --- a/apps/converter/api.py +++ b/apps/converter/api.py @@ -50,17 +50,19 @@ def convert(input_filepath, output_filepath=None, cleanup_files=False, mimetype= if os.path.exists(output_filepath): return output_filepath - - office_converter.convert(input_filepath, mimetype=mimetype) + if office_converter: try: - input_filepath = office_converter.output_filepath - mimetype = 'application/pdf' + office_converter.convert(input_filepath, mimetype=mimetype) + if office_converter.exists: + input_filepath = office_converter.output_filepath + mimetype = 'application/pdf' + else: + # Recycle the already detected mimetype + mimetype = office_converter.mimetype + except OfficeConverter: - raise UnknownFileFormat('office converter exception') - else: - # Recycle the already detected mimetype - mimetype = office_converter.mimetype + raise UnknownFileFormat('office converter exception') if size: transformations.append( From da4457b258149c037fc8dfdcb422bd318f750430 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 05:51:02 -0400 Subject: [PATCH 097/220] Improve office documents page number detection --- apps/converter/api.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/converter/api.py b/apps/converter/api.py index 3988ab343e..f48bf88986 100644 --- a/apps/converter/api.py +++ b/apps/converter/api.py @@ -15,6 +15,7 @@ from converter.literals import DIMENSION_SEPARATOR from converter.literals import FILE_FORMATS from converter.utils import cleanup from converter.runtime import office_converter +from converter.exceptions import OfficeConversionError HASH_FUNCTION = lambda x: hashlib.sha256(x).hexdigest() @@ -61,7 +62,7 @@ def convert(input_filepath, output_filepath=None, cleanup_files=False, mimetype= # Recycle the already detected mimetype mimetype = office_converter.mimetype - except OfficeConverter: + except OfficeConversionError: raise UnknownFileFormat('office converter exception') if size: @@ -98,14 +99,15 @@ def convert(input_filepath, output_filepath=None, cleanup_files=False, mimetype= def get_page_count(input_filepath): - office_converter = OfficeConverter() - office_converter.convert(input_filepath) if office_converter: try: - input_filepath = office_converter.output_filepath - except OfficeConverter: - raise UnknownFileFormat('office converter exception') - + office_converter.convert(input_filepath) + if office_converter.exists: + input_filepath = office_converter.output_filepath + + except OfficeConversionError: + raise UnknownFileFormat('office converter exception') + return backend.get_page_count(input_filepath) From 2ee236e1c5e4d97fe97a4f4a38d0870261cffeae Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 05:51:30 -0400 Subject: [PATCH 098/220] Revert back to simple document widget --- apps/documents/widgets.py | 90 ++++++++++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 16 deletions(-) diff --git a/apps/documents/widgets.py b/apps/documents/widgets.py index 97de870f4e..6de68c8df7 100644 --- a/apps/documents/widgets.py +++ b/apps/documents/widgets.py @@ -37,21 +37,79 @@ def document_html_widget(document, size='document_thumbnail', click_view=None, p query_string = urlencode(query_dict) preview_view = u'%s?%s' % (reverse(size, args=[document.pk]), query_string) + print 'preview_view', preview_view + + zoomable_template = [] + if click_view: + zoomable_template.append(u'' % (gallery_template, fancybox_class, u'%s?%s' % (reverse(click_view, args=[document.pk]), query_string))) + zoomable_template.append(u'%s' % (preview_view, settings.STATIC_URL, alt_text)) + zoomable_template.append(u'' % (preview_view, alt_text)) + if click_view: + zoomable_template.append(u'') + + """ + plain_template = [] + plain_template.append(u'%s' % (preview_view, settings.STATIC_URL, alt_text)) + plain_template.append(u'' % (preview_view, alt_text)) + + result.append(u''' + + ''' % { + u'url': reverse('documents-expensive-is_zoomable', args=[document.pk]), + u'pk': document.pk, + u'page': page if page else 1, + u'zoomable_template': mark_safe(u''.join(zoomable_template)), + u'plain_template': mark_safe(u''.join(plain_template)), + } + ) + + result.append(u'

') + """ + + #Fancybox w/ jQuery live + """ + jQuery("a.fancybox-noscaling").live('click', function(){ + jQuery.fancybox({ + 'autoDimensions' : false, + 'width' : 'auto', + 'height' : 'auto', + 'href' : $(this).attr('href'), + 'titleShow' : false, + 'transitionIn' : 'elastic', + 'transitionOut' : 'elastic', + 'easingIn' : 'easeOutBack', + 'easingOut' : 'easeInBack', + 'type' : 'image', + 'autoScale' : false + + }); + return false; + }); + """ + result.append(u'
' % (document.pk, page if page else 1)) + result.extend(zoomable_template) + result.append(u'
') - try: - document.get_valid_image() - result.append('') - except (UnknownFileFormat, UnkownConvertError): - result.append('
') - result.append('%s' % (preview_view, settings.STATIC_URL, alt_text)) - result.append('' % (preview_view, alt_text)) - result.append('
') - return mark_safe(u''.join(result)) From 336a752dc2b5228f2b5825ca66f66bb3486b6193 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 07:46:31 -0400 Subject: [PATCH 099/220] Updated JqueryAsynchImageLoader from version 0.8 to version 0.9.7 --- .../static/packages/JqueryAsynchImageLoader-0.9.7.min.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 apps/main/static/packages/JqueryAsynchImageLoader-0.9.7.min.js diff --git a/apps/main/static/packages/JqueryAsynchImageLoader-0.9.7.min.js b/apps/main/static/packages/JqueryAsynchImageLoader-0.9.7.min.js new file mode 100644 index 0000000000..248aa4b264 --- /dev/null +++ b/apps/main/static/packages/JqueryAsynchImageLoader-0.9.7.min.js @@ -0,0 +1,9 @@ +/* +* JqueryAsynchImageLoader (JAIL) : plugin for jQuery +* +* Developed by +* Sebastiano Armeli-Battana (@sebarmeli) - http://www.sebastianoarmelibattana.com +* Dual licensed under the MIT or GPL Version 3 licenses. +* @version 0.9.7 +*/ +;(function(a){var b=a(window);a.fn.asynchImageLoader=a.fn.jail=function(d){d=a.extend({timeout:10,effect:false,speed:400,selector:null,offset:0,event:"load+scroll",callback:jQuery.noop,callbackAfterEachImage:jQuery.noop,placeholder:false,ignoreHiddenImages:false},d);var c=this;a.jail.initialStack=this;this.data("triggerEl",(d.selector)?a(d.selector):b);if(d.placeholder!==false){c.each(function(){a(this).attr("src",d.placeholder);});}if(/^load/.test(d.event)){a.asynchImageLoader.later.call(this,d);}else{a.asynchImageLoader.onEvent.call(this,d,c);}return this;};a.asynchImageLoader=a.jail={_purgeStack:function(c){var d=0;while(true){if(d===c.length){break;}else{if(c[d].getAttribute("data-href")){d++;}else{c.splice(d,1);}}}},_loadOnEvent:function(g){var f=a(this),d=g.data.options,c=g.data.images;a.asynchImageLoader._loadImageIfVisible(d,f);f.unbind(d.event,a.asynchImageLoader._loadOnEvent);a.asynchImageLoader._purgeStack(c);if(!!d.callback){a.asynchImageLoader._purgeStack(a.jail.initialStack);a.asynchImageLoader._launchCallback(a.jail.initialStack,d);}},_bufferedEventListener:function(g){var c=g.data.images,d=g.data.options,f=c.data("triggerEl");clearTimeout(c.data("poller"));c.data("poller",setTimeout(function(){c.each(function e(){a.asynchImageLoader._loadImageIfVisible(d,this,f);});a.asynchImageLoader._purgeStack(c);if(!!d.callback){a.asynchImageLoader._purgeStack(a.jail.initialStack);a.asynchImageLoader._launchCallback(a.jail.initialStack,d);}},d.timeout));},onEvent:function(d,c){c=c||this;if(d.event==="scroll"||d.selector){var e=c.data("triggerEl");if(c.length>0){e.bind(d.event,{images:c,options:d},a.asynchImageLoader._bufferedEventListener);if(d.event==="scroll"||!d.selector){b.resize({images:c,options:d},a.asynchImageLoader._bufferedEventListener);}return;}else{if(!!e){e.unbind(d.event,a.asynchImageLoader._bufferedEventListener);}}}else{c.bind(d.event,{options:d,images:c},a.asynchImageLoader._loadOnEvent);}},later:function(d){var c=this;if(d.event==="load"){c.each(function(){a.asynchImageLoader._loadImageIfVisible(d,this,c.data("triggerEl"));});}a.asynchImageLoader._purgeStack(c);a.asynchImageLoader._launchCallback(c,d);setTimeout(function(){if(d.event==="load"){c.each(function(){a.asynchImageLoader._loadImage(d,a(this));});}else{c.each(function(){a.asynchImageLoader._loadImageIfVisible(d,this,c.data("triggerEl"));});}a.asynchImageLoader._purgeStack(c);a.asynchImageLoader._launchCallback(c,d);if(d.event==="load+scroll"){d.event="scroll";a.asynchImageLoader.onEvent(d,c);}},d.timeout);},_launchCallback:function(c,d){if(c.length===0&&!a.jail.isCallback){d.callback.call(this,d);a.jail.isCallback=true;}},_loadImageIfVisible:function(e,h,g){var f=a(h),d=(/scroll/i.test(e.event))?g:b,c=true;if(e.ignoreHiddenImages){c=a.jail._isVisibleInOverflownContainer(f,e)&&f.is(":visible");}if(c&&a.asynchImageLoader._isInTheScreen(d,f,e.offset)){a.asynchImageLoader._loadImage(e,f);}},_isInTheScreen:function(j,c,h){var f=j[0]===window,n=(f?{top:0,left:0}:j.offset()),g=n.top+(f?j.scrollTop():0),i=n.left+(f?j.scrollLeft():0),e=i+j.width(),k=g+j.height(),m=c.offset(),l=c.width(),d=c.height();return(g-h)<=(m.top+d)&&(k+h)>=m.top&&(i-h)<=(m.left+l)&&(e+h)>=m.left;},_loadImage:function(c,d){d.hide();d.attr("src",d.attr("data-href"));d.removeAttr("data-href");if(c.effect){if(c.speed){d[c.effect](c.speed);}else{d[c.effect]();}}else{d.show();}c.callbackAfterEachImage.call(this,d,c);},_isVisibleInOverflownContainer:function(e,d){var f=e.parent(),c=true;while(f.get(0).tagName!=="BODY"){if(f.css("overflow")==="hidden"){if(!a.jail._isInTheScreen(f,e,d.offset)){c=false;break;}}if(f.css("visibility")==="hidden"||e.css("visibility")==="hidden"){c=false;break;}f=f.parent();}return c;}};}(jQuery)); \ No newline at end of file From 3a2900ff645dc31fb25e879ec178b5ad3d79258d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 07:47:41 -0400 Subject: [PATCH 100/220] Use jQuery's live to lauch fancybox --- apps/main/templates/base.html | 50 ++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 1a656df0d7..99bf043b29 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -108,7 +108,7 @@ {% block web_theme_javascript %} - + @@ -126,24 +126,36 @@ }); }); - $("a.fancybox").fancybox({ - 'titleShow' : false, - 'transitionIn' : 'elastic', - 'transitionOut' : 'elastic', - 'easingIn' : 'easeOutBack', - 'easingOut' : 'easeInBack', - 'type' : 'image', - 'autoScale' : true - }); - $("a.fancybox-noscaling").fancybox({ - 'titleShow' : false, - 'transitionIn' : 'elastic', - 'transitionOut' : 'elastic', - 'easingIn' : 'easeOutBack', - 'easingOut' : 'easeInBack', - 'type' : 'image', - 'autoScale' : false - }); + jQuery("a.fancybox").live('click', function(){ + jQuery.fancybox({ + 'href' : $(this).attr('href'), + 'titleShow' : false, + 'transitionIn' : 'elastic', + 'transitionOut' : 'elastic', + 'easingIn' : 'easeOutBack', + 'easingOut' : 'easeInBack', + 'type' : 'image', + 'autoScale' : true + + }); + return false; + }); + + jQuery("a.fancybox-noscaling").live('click', function(){ + jQuery.fancybox({ + 'href' : $(this).attr('href'), + 'titleShow' : false, + 'transitionIn' : 'elastic', + 'transitionOut' : 'elastic', + 'easingIn' : 'easeOutBack', + 'easingOut' : 'easeInBack', + 'type' : 'image', + 'autoScale' : false + + }); + return false; + }); + $("a.fancybox-iframe").fancybox({ 'titleShow' : false, 'transitionIn' : 'elastic', From b5a1f92a9ce0966fdcfcc6ccff4cb16fe3c8954f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 07:51:16 -0400 Subject: [PATCH 101/220] Added support for base64 encoded document images --- apps/documents/models.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index 97d5c848d8..914426a568 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -2,7 +2,9 @@ import os import tempfile import hashlib from ast import literal_eval - +import base64 +from StringIO import StringIO + from django.db import models from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext @@ -26,6 +28,8 @@ from documents.conf.settings import STORAGE_BACKEND from documents.conf.settings import PREVIEW_SIZE from documents.conf.settings import DISPLAY_SIZE from documents.conf.settings import CACHE_PATH +from documents.conf.settings import ZOOM_MAX_LEVEL +from documents.conf.settings import ZOOM_MIN_LEVEL from documents.managers import RecentDocumentManager, \ DocumentPageTransformationManager @@ -256,15 +260,31 @@ class Document(models.Model): image_cache_name = self.get_image_cache_name(page=page) return convert(image_cache_name, cleanup_files=False, size=size, zoom=zoom, rotation=rotation) - def get_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION): + def get_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, as_base64=False): + if zoom < ZOOM_MIN_LEVEL: + zoom = ZOOM_MIN_LEVEL + + if zoom > ZOOM_MAX_LEVEL: + zoom = ZOOM_MAX_LEVEL + + rotation = rotation % 360 + try: - return self.get_valid_image(size=size, page=page, zoom=zoom, rotation=rotation) + file_path = self.get_valid_image(size=size, page=page, zoom=zoom, rotation=rotation) except UnknownFileFormat: - return get_icon_file_path(self.file_mimetype) + file_path = get_icon_file_path(self.file_mimetype) except UnkownConvertError: - return get_error_icon_file_path() + file_path = get_error_icon_file_path() except: - return get_error_icon_file_path() + file_path = get_error_icon_file_path() + + if as_base64: + image = open(file_path, 'r') + out = StringIO() + base64.encode(image, out) + return u'data:%s;base64,%s' % (get_mimetype(open(file_path, 'r'), file_path, mimetype_only=True)[0], out.getvalue().replace('\n', '')) + else: + return file_path def invalidate_cached_image(self, page): try: From 4cf935925bba4cd5d5dc79a333da434aa6cf0270 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 07:52:55 -0400 Subject: [PATCH 102/220] Added views that return the document image as a base64 encoded string --- apps/documents/urls.py | 4 ++++ apps/documents/views.py | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/documents/urls.py b/apps/documents/urls.py index c20d04c47a..0d16fb3880 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -25,6 +25,10 @@ urlpatterns = patterns('documents.views', url(r'^(?P\d+)/display/$', 'get_document_image', {'size': DISPLAY_SIZE}, 'document_display'), url(r'^(?P\d+)/display/print/$', 'get_document_image', {'size': PRINT_SIZE}, 'document_display_print'), + url(r'^(?P\d+)/display/preview/base64/$', 'get_document_image', {'size': PREVIEW_SIZE, 'base64_version': True}, 'document_preview_base64'), + url(r'^(?P\d+)/display/preview/multipage/base64/$', 'get_document_image', {'size': MULTIPAGE_PREVIEW_SIZE, 'base64_version': True}, 'document_preview_multipage_base64'), + url(r'^(?P\d+)/display/thumbnail/base64/$', 'get_document_image', {'size': THUMBNAIL_SIZE, 'base64_version': True}, 'document_thumbnail_base64'), + url(r'^(?P\d+)/download/$', 'document_download', (), 'document_download'), url(r'^(?P\d+)/create/siblings/$', 'document_create_siblings', (), 'document_create_siblings'), url(r'^(?P\d+)/find_duplicates/$', 'document_find_duplicates', (), 'document_find_duplicates'), diff --git a/apps/documents/views.py b/apps/documents/views.py index 8c76416d7f..60a03ee74c 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -2,7 +2,7 @@ import urlparse import copy from django.utils.translation import ugettext_lazy as _ -from django.http import HttpResponseRedirect +from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.contrib import messages @@ -271,7 +271,7 @@ def document_edit(request, document_id): }, context_instance=RequestContext(request)) -def get_document_image(request, document_id, size=PREVIEW_SIZE): +def get_document_image(request, document_id, size=PREVIEW_SIZE, base64_version=False): check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) document = get_object_or_404(Document, pk=document_id) @@ -288,7 +288,12 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE): rotation = int(request.GET.get('rotation', DEFAULT_ROTATION)) % 360 - return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation), mimetype=DEFAULT_FILE_FORMAT_MIMETYPE) + if base64_version: + return HttpResponse(u'' % document.get_image(size=size, page=page, zoom=zoom, rotation=rotation, as_base64=True)) + else: + # TODO: hardcoded MIMETYPE + return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation), mimetype=DEFAULT_FILE_FORMAT_MIMETYPE) + def document_download(request, document_id): From 5097a8b180ed4d3a91c26a34f03e9d79e3b687b5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 07:53:51 -0400 Subject: [PATCH 103/220] Added get_error_icon_url() function to the mimetype app to be used for the new smarted document widget --- apps/mimetype/api.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/mimetype/api.py b/apps/mimetype/api.py index 4888aa5b8d..5790bce8a2 100644 --- a/apps/mimetype/api.py +++ b/apps/mimetype/api.py @@ -83,6 +83,9 @@ def get_error_icon_file_path(): else: return os.path.join(settings.STATIC_ROOT, MIMETYPE_ICONS_DIRECTORY_NAME, ERROR_FILE_NAME) +def get_error_icon_url(): + return os.path.join(MIMETYPE_ICONS_DIRECTORY_NAME, ERROR_FILE_NAME) + def get_mimetype(file_description, filepath, mimetype_only=False): """ From 9be2aebd3fa543ab8d7bed7b18889ed6cf4975da Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 09:01:13 -0400 Subject: [PATCH 104/220] Reverted back to the previous fancybox initialization method, added thin_border class for the new document widget, fixed a small typo --- apps/main/templates/base.html | 56 ++++++++++++++++------------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 99bf043b29..c1fcedd0cb 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -102,6 +102,10 @@ -webkit-box-shadow: -1px -1px 2px #004977; box-shadow: -1px -1px 2px #004977; } + + .thin_border { + border: 1px solid black; + } {% block stylesheets %}{% endblock %} {% endblock %} @@ -126,36 +130,26 @@ }); }); - jQuery("a.fancybox").live('click', function(){ - jQuery.fancybox({ - 'href' : $(this).attr('href'), - 'titleShow' : false, - 'transitionIn' : 'elastic', - 'transitionOut' : 'elastic', - 'easingIn' : 'easeOutBack', - 'easingOut' : 'easeInBack', - 'type' : 'image', - 'autoScale' : true - - }); - return false; - }); - - jQuery("a.fancybox-noscaling").live('click', function(){ - jQuery.fancybox({ - 'href' : $(this).attr('href'), - 'titleShow' : false, - 'transitionIn' : 'elastic', - 'transitionOut' : 'elastic', - 'easingIn' : 'easeOutBack', - 'easingOut' : 'easeInBack', - 'type' : 'image', - 'autoScale' : false - - }); - return false; - }); - + $("a.fancybox").fancybox({ + 'titleShow' : false, + 'transitionIn' : 'elastic', + 'transitionOut' : 'elastic', + 'easingIn' : 'easeOutBack', + 'easingOut' : 'easeInBack', + 'type' : 'image', + 'autoScale' : true + }); + + $("a.fancybox-noscaling").fancybox({ + 'titleShow' : false, + 'transitionIn' : 'elastic', + 'transitionOut' : 'elastic', + 'easingIn' : 'easeOutBack', + 'easingOut' : 'easeInBack', + 'type' : 'image', + 'autoScale' : false + }); + $("a.fancybox-iframe").fancybox({ 'titleShow' : false, 'transitionIn' : 'elastic', @@ -178,7 +172,7 @@ $('img.lazy-load').jail({ event: 'load', timeout: 10, - placeholder: '{{ STATIC_URL }}/images/ajax-loader.gif' + placeholder: '{{ STATIC_URL }}images/ajax-loader.gif' }); }); From 3f8e2b5640527b0fa1a011d664e67c7c9c09c0da Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 09:05:03 -0400 Subject: [PATCH 105/220] Finished new smarter document image widget --- apps/documents/widgets.py | 107 +++++++++++++------------------------- 1 file changed, 35 insertions(+), 72 deletions(-) diff --git a/apps/documents/widgets.py b/apps/documents/widgets.py index 6de68c8df7..ab66ad0c89 100644 --- a/apps/documents/widgets.py +++ b/apps/documents/widgets.py @@ -4,7 +4,12 @@ from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse from django.utils.http import urlencode +from converter.literals import DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, \ + DEFAULT_PAGE_NUMBER from converter.exceptions import UnknownFileFormat, UnkownConvertError +from mimetype.api import get_error_icon_url + +from documents.conf.settings import DISPLAY_SIZE def document_thumbnail(document): @@ -15,20 +20,15 @@ def document_link(document): return mark_safe(u'%s' % (reverse('document_view_simple', args=[document.pk]), document)) -def document_html_widget(document, size='document_thumbnail', click_view=None, page=None, zoom=None, rotation=None, gallery_name=None, fancybox_class='fancybox'): +def document_html_widget(document, view='document_thumbnail', click_view=None, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox'): result = [] alt_text = _(u'document page image') - query_dict = {} - - if page: - query_dict['page'] = page - - if zoom: - query_dict['zoom'] = zoom - - if rotation: - query_dict['rotation'] = rotation + query_dict = { + 'page': page, + 'zoom': zoom, + 'rotation': rotation, + } if gallery_name: gallery_template = u'rel="%s"' % gallery_name @@ -36,80 +36,43 @@ def document_html_widget(document, size='document_thumbnail', click_view=None, p gallery_template = u'' query_string = urlencode(query_dict) - preview_view = u'%s?%s' % (reverse(size, args=[document.pk]), query_string) - print 'preview_view', preview_view - - zoomable_template = [] - if click_view: - zoomable_template.append(u'' % (gallery_template, fancybox_class, u'%s?%s' % (reverse(click_view, args=[document.pk]), query_string))) - zoomable_template.append(u'%s' % (preview_view, settings.STATIC_URL, alt_text)) - zoomable_template.append(u'' % (preview_view, alt_text)) - if click_view: - zoomable_template.append(u'') - - """ + preview_view = u'%s?%s' % (reverse(view, args=[document.pk]), query_string) + plain_template = [] - plain_template.append(u'%s' % (preview_view, settings.STATIC_URL, alt_text)) - plain_template.append(u'' % (preview_view, alt_text)) + plain_template.append(u'%s' % (preview_view, alt_text)) + + result.append(u'') result.append(u''' ''' % { - u'url': reverse('documents-expensive-is_zoomable', args=[document.pk]), - u'pk': document.pk, - u'page': page if page else 1, - u'zoomable_template': mark_safe(u''.join(zoomable_template)), - u'plain_template': mark_safe(u''.join(plain_template)), + 'url': reverse('documents-expensive-is_zoomable', args=[document.pk]), + 'pk': document.pk, + 'page': page if page else 1, + 'plain_template': mark_safe(u''.join(plain_template)), + 'error_image': u''.join([settings.STATIC_URL, get_error_icon_url()]), } ) - - result.append(u'') - """ - - #Fancybox w/ jQuery live - """ - jQuery("a.fancybox-noscaling").live('click', function(){ - jQuery.fancybox({ - 'autoDimensions' : false, - 'width' : 'auto', - 'height' : 'auto', - 'href' : $(this).attr('href'), - 'titleShow' : false, - 'transitionIn' : 'elastic', - 'transitionOut' : 'elastic', - 'easingIn' : 'easeOutBack', - 'easingOut' : 'easeInBack', - 'type' : 'image', - 'autoScale' : false - - }); - return false; - }); - """ - result.append(u'
' % (document.pk, page if page else 1)) - result.extend(zoomable_template) - result.append(u'
') return mark_safe(u''.join(result)) From db89cdde5555c59079cf664312ee31bcd9de4a47 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 09:05:35 -0400 Subject: [PATCH 106/220] Updated apps to use the new document widget --- apps/documents/forms.py | 5 ++--- apps/linking/forms.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/documents/forms.py b/apps/documents/forms.py index a6f71c0a12..320b60bc71 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -15,7 +15,6 @@ from documents.models import Document, DocumentType, \ DocumentPage, DocumentPageTransformation, DocumentTypeFilename from documents.widgets import document_html_widget - # Document page forms class DocumentPageTransformationForm(forms.ModelForm): class Meta: @@ -35,7 +34,7 @@ class DocumentPageImageWidget(forms.widgets.Widget): output = [] output.append('
') - output.append(document_html_widget(value.document, size='document_display', page=value.page_number, zoom=zoom, rotation=rotation)) + output.append(document_html_widget(value.document, view='document_display', page=value.page_number, zoom=zoom, rotation=rotation)) output.append('
') return mark_safe(u''.join(output)) else: @@ -106,7 +105,7 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget): output.append( document_html_widget( page.document, - size='document_preview_multipage', + view='document_preview_multipage', click_view='document_display', page=page.page_number, gallery_name='document_pages', diff --git a/apps/linking/forms.py b/apps/linking/forms.py index 864b532dcc..9568994b89 100644 --- a/apps/linking/forms.py +++ b/apps/linking/forms.py @@ -48,7 +48,7 @@ class SmartLinkImageWidget(forms.widgets.Widget): output.append(u'
%s: %d
' % (ugettext(u'Pages'), document.documentpage_set.count())) output.append(get_tags_inline_widget(document)) output.append(u'
' % document) - output.append(document_html_widget(document, click_view='document_display', size='document_preview_multipage', fancybox_class='fancybox-noscaling', gallery_name=u'smart_link_%d_documents_gallery' % value['smart_link_instance'].pk)) + output.append(document_html_widget(document, click_view='document_display', view='document_preview_multipage', fancybox_class='fancybox-noscaling', gallery_name=u'smart_link_%d_documents_gallery' % value['smart_link_instance'].pk)) output.append(u'
') output.append(u'
') output.append(u'%s' % (reverse('document_view_simple', args=[document.pk]), ugettext(u'Select'))) From fc344d0c9e6cee22ffb4005f1f9cf17c33492629 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 09:22:49 -0400 Subject: [PATCH 107/220] Modified the is_zoomable API call to be document pk and document page number based --- apps/rest_api/resources.py | 6 +++--- apps/rest_api/urls.py | 6 ++---- apps/rest_api/views.py | 20 +++----------------- 3 files changed, 8 insertions(+), 24 deletions(-) diff --git a/apps/rest_api/resources.py b/apps/rest_api/resources.py index bbb8f52ebf..99a5c26613 100644 --- a/apps/rest_api/resources.py +++ b/apps/rest_api/resources.py @@ -25,6 +25,8 @@ class DocumentResourceSimple(ModelResource): { 'page_numer': page.page_number, 'page_label': page.page_label, + 'is_zoomable': reverse('documents-expensive-is_zoomable', args=[instance.pk, page.page_number]), + #'content': } for page in instance.documentpage_set.all() @@ -33,6 +35,4 @@ class DocumentResourceSimple(ModelResource): ] def expensive_methods(self, instance): - return [ - {'is_zoomable': reverse('documents-expensive-is_zoomable', args=[instance.pk])}, - ] + return [] diff --git a/apps/rest_api/urls.py b/apps/rest_api/urls.py index b9eb0eea66..3265dd7574 100644 --- a/apps/rest_api/urls.py +++ b/apps/rest_api/urls.py @@ -3,7 +3,7 @@ from django.conf.urls.defaults import patterns, url from djangorestframework.views import ListModelView from djangorestframework.views import ListOrCreateModelView, InstanceModelView -from rest_api.views import APIBase, Version_0, ReadOnlyInstanceModelView, IsZoomable, Exists, Size +from rest_api.views import APIBase, Version_0, ReadOnlyInstanceModelView, IsZoomable from rest_api.resources import DocumentResourceSimple urlpatterns = patterns('', @@ -12,7 +12,5 @@ urlpatterns = patterns('', # Version 0 alpha API calls url(r'^v0/document/(?P[0-9]+)/$', ReadOnlyInstanceModelView.as_view(resource=DocumentResourceSimple), name='documents-simple'), - url(r'^v0/document/(?P[0-9]+)/expensive/is_zoomable/$', IsZoomable.as_view(), name='documents-expensive-is_zoomable'), - url(r'^v0/document/(?P[0-9]+)/expensive/exists/$', IsZoomable.as_view(), name='documents-expensive-exists'), - url(r'^v0/document/(?P[0-9]+)/expensive/size/$', Size.as_view(), name='documents-expensive-size'), + url(r'^v0/document/(?P[0-9]+)/page/(?P[0-9]+)/expensive/is_zoomable/$', IsZoomable.as_view(), name='documents-expensive-is_zoomable'), ) diff --git a/apps/rest_api/views.py b/apps/rest_api/views.py index 06b5a46ce5..6a1b5dfc14 100644 --- a/apps/rest_api/views.py +++ b/apps/rest_api/views.py @@ -40,30 +40,16 @@ class APIBase(View): class Version_0(View): def get(self, request): return [ - {'name': 'Resources', 'resources': ['documents/']} + {'name': 'Resources', 'resources': ['document/']} ] class IsZoomable(View): - def get(self, request, pk): + def get(self, request, pk, page_number): logger.info('received is_zoomable call from: %s' % (request.META['REMOTE_ADDR'])) document = get_object_or_404(Document, pk=pk) try: - document.get_image_cache_name(1) # TODO: page + document.get_image_cache_name(int(page_number)) return {'result': True} except (UnknownFileFormat, UnkownConvertError): return {'result': False} - - -class Exists(View): - def get(self, request, pk): - logger.info('received exists call from: %s' % (request.META['REMOTE_ADDR'])) - document = get_object_or_404(Document, pk=pk) - return {'result': document.exists()} - - -class Size(View): - def get(self, request, pk): - logger.info('received size call from: %s' % (request.META['REMOTE_ADDR'])) - document = get_object_or_404(Document, pk=pk) - return {'result': document.size} From f73ce55c34df6252d6e5b447123715954f96f2c1 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 09:23:31 -0400 Subject: [PATCH 108/220] Updated the document smart widget for the new API call format --- apps/documents/widgets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/documents/widgets.py b/apps/documents/widgets.py index ab66ad0c89..e449ffc335 100644 --- a/apps/documents/widgets.py +++ b/apps/documents/widgets.py @@ -64,10 +64,10 @@ def document_html_widget(document, view='document_thumbnail', click_view=None, p .error(function(data) { $('#document-%(pk)d-%(page)d').html(''); }); - }); + }); ''' % { - 'url': reverse('documents-expensive-is_zoomable', args=[document.pk]), + 'url': reverse('documents-expensive-is_zoomable', args=[document.pk, page]), 'pk': document.pk, 'page': page if page else 1, 'plain_template': mark_safe(u''.join(plain_template)), From f7303c7eb8a31ac1f7e94c74846e01a31619bc88 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 09:48:24 -0400 Subject: [PATCH 109/220] Removed Grappelli dependency --- requirements/development.txt | 1 - requirements/production.txt | 1 - settings.py | 4 ---- urls.py | 1 - 4 files changed, 7 deletions(-) diff --git a/requirements/development.txt b/requirements/development.txt index e48c037891..d363fd07d9 100644 --- a/requirements/development.txt +++ b/requirements/development.txt @@ -14,7 +14,6 @@ slate==0.3 ghostscript==0.4.1 pdfminer==20110227 APScheduler==2.0.2 -django-grappelli==2.3.3 Pillow==1.7.4 cssmin==0.1.4 django-compressor==1.1 diff --git a/requirements/production.txt b/requirements/production.txt index dd976f27a7..e2654a82b1 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -11,7 +11,6 @@ slate==0.3 ghostscript==0.4.1 pdfminer==20110227 APScheduler==2.0.2 -django-grappelli==2.3.3 Pillow==1.7.4 cssmin==0.1.4 django-compressor==1.1 diff --git a/settings.py b/settings.py index 5c025e3fc4..27ef8c818f 100644 --- a/settings.py +++ b/settings.py @@ -81,7 +81,6 @@ STATIC_URL = '/%s-static/' % PROJECT_NAME # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a # trailing slash. # Examples: "http://foo.com/media/", "/media/". -#ADMIN_MEDIA_PREFIX = STATIC_URL + 'grappelli/' ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/' # Make this unique, and don't share it with anybody. @@ -118,7 +117,6 @@ TEMPLATE_DIRS = ( ) INSTALLED_APPS = ( - #'grappelli', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', @@ -288,8 +286,6 @@ CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' CELERY_DISABLE_RATE_LIMITS = True #--------- Web theme --------------- WEB_THEME_ENABLE_SCROLL_JS = False -#--------- Grappelli ---------------- -#GRAPPELLI_ADMIN_TITLE = PROJECT_TITLE #--------- Django ------------------- LOGIN_URL = '/login/' LOGIN_REDIRECT_URL = '/' diff --git a/urls.py b/urls.py index e23e774472..38ab8788b2 100644 --- a/urls.py +++ b/urls.py @@ -15,7 +15,6 @@ urlpatterns = patterns('', (r'^tags/', include('tags.urls')), (r'^admin/doc/', include('django.contrib.admindocs.urls')), (r'^admin/', include(admin.site.urls)), - #(r'^grappelli/', include('grappelli.urls')), (r'^sentry/', include('sentry.urls')), (r'^comments/', include('document_comments.urls')), (r'^user_management/', include('user_management.urls')), From 23f7126f10932e5cec3d21c009c8e3d6ae4c0352 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 09:48:41 -0400 Subject: [PATCH 110/220] Updated changelog --- docs/changelog.rst | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 3102f87c95..821d744db3 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,3 +1,46 @@ +Version 0.10 +------------ +* Added a proper setup views for the document grouping functionality +* Document grouping is now called smart linking as it relates better to + how it actually works. The data base schema was changed and users must + do the required:: + + $ ./manager syncdb + + for the new tables to be created. +* Grappelli is no longer required as can be uninstalled. +* New smarter document preview widget that doesn't allow zooming or viewing + unknown or invalid documents. +* New office document converter, requires: + + * LibreOffice (https://www.libreoffice.org/) + * unoconv [version 0.5] (https://github.com/dagwieers/unoconv) + +* The new office documents converter won't convert files with the extension + .docx becasue these files are recognized as zip files instead. This + is an issue of the libmagic library. + +* New configuration option added CONVERTER_UNOCONV_USE_PIPE that controls + how unoconv handles the communication with LibreOffice. The default of + `True` causes unoconv to use pipes, this approach is slower than using + TCP/IP ports but it is more stable. + +* Initial REST API that exposes documents properties and one method, this + new API is used by the new smart document widget and requires the + packaged `djangorestframework`, users must issue a:: + + $ pip install -r requirements/production.txt + + to install the new requirement. + +* MIME type detection and caching performance updates. +* Updated the included version of jQuery to 1.7 +* Updated the included version of JqueryAsynchImageLoader to 0.9.7 +* Document image serving response now specifies a MIME type for increased + browser compatibility. +* Small change in the scheduler that increases stability. + + Version 0.9.1 ------------- * Added handling percent encoded unicode query strings in search URL, From cbacdcb3487d2f1bc14263a510912b092b84e66e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 09:53:12 -0400 Subject: [PATCH 111/220] =?UTF-8?q?Russian=20translation=20updates=20?= =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=93=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D0=B0=20[Sergey=20Glita]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/locale/ru/LC_MESSAGES/django.mo | Bin 6414 -> 6422 bytes apps/common/locale/ru/LC_MESSAGES/django.po | 6 +- .../locale/ru/LC_MESSAGES/django.mo | Bin 494 -> 2228 bytes .../locale/ru/LC_MESSAGES/django.po | 63 +++++++++--------- apps/main/locale/ru/LC_MESSAGES/django.mo | Bin 3192 -> 3196 bytes apps/main/locale/ru/LC_MESSAGES/django.po | 4 +- .../locale/ru/LC_MESSAGES/django.mo | Bin 780 -> 780 bytes .../locale/ru/LC_MESSAGES/django.po | 4 +- .../locale/ru/LC_MESSAGES/django.mo | Bin 3800 -> 3777 bytes .../locale/ru/LC_MESSAGES/django.po | 20 +++--- .../locale/ru/LC_MESSAGES/django.mo | Bin 678 -> 665 bytes .../locale/ru/LC_MESSAGES/django.po | 4 +- .../locale/ru/LC_MESSAGES/django.mo | Bin 6084 -> 6086 bytes .../locale/ru/LC_MESSAGES/django.po | 4 +- 14 files changed, 53 insertions(+), 52 deletions(-) diff --git a/apps/common/locale/ru/LC_MESSAGES/django.mo b/apps/common/locale/ru/LC_MESSAGES/django.mo index 629768c6e257be1ab06c530e7b7e0be9638b7970..a1396fd34ee3aeacdf56befca5f45046d3fc4d8e 100644 GIT binary patch delta 355 zcmXZXF)RaN7{>9ZaVHl+q`hjXMje+R2EB-+Vlb14Sj5!DMVg9~-qxXunW52G%pw-a zkyzMl8Y*HU=_V$7C;t=E@6Gq*d%pKO_L|=Ha!-9iQX?+y;w?IuO-OyXf~&ZOz1YMB zJjVfi#VPFIIGVO}hAs}`!@n)0S|1qo{@@mNZPovR&7_o!Nj{Dc)P|)+JjHc$M6eXG}3$qXK@nCNTicAx3UZu91P(jMg{LUhu`70v2R)V yLe9%C&3oZ6y$30w_Q>Pb;RchPS%3)A9 XllbRqc$Id;LdrLj\n" "Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" @@ -32,7 +32,7 @@ msgstr "изменение сведений" #: __init__.py:23 __init__.py:29 msgid "about" -msgstr "о" +msgstr "инфо" #: __init__.py:24 msgid "changelog" @@ -297,7 +297,7 @@ msgstr "Отменить" #: templates/generic_list.html:6 templates/generic_list_horizontal.html:6 #, python-format msgid "List of %(stripped_title)s" -msgstr "Список %(stripped_title)s" +msgstr "Список \"%(stripped_title)s\"" #: templates/generic_list_horizontal_subtemplate.html:23 #: templates/generic_list_subtemplate.html:23 diff --git a/apps/document_comments/locale/ru/LC_MESSAGES/django.mo b/apps/document_comments/locale/ru/LC_MESSAGES/django.mo index 728bb26bddad734e2300017ef9d107ecc791cb66..718e22ed33a3325624031b4793f47e5524d516b3 100644 GIT binary patch literal 2228 zcmb`I%WoS+9LFb6Ugp_?5D1C}OKxLT>)j1OO}24ENK#ROg%#WgAue0*#9n0YS~I(G zBlVD`LPAQUN(dwb63-iONTQ^59!;elInDk9Tsd*##)A^gFR;7ecvTHx=X4ZiXKAz82ts&fH83f=;r1-}5F27d;h z1ouG``~}Q{e|GmzKS;>qSf2wQ0ndXf&LsE*_!f8qyaGN9e$ZXJ;1FUgfK%A7KSanp z_+yttFwSHBJ~#}nfX{Sq4?# zH4wk#CjLAHu7NLrUxAQH*RHfZh4~ET(Sh>&LusIfily{IT7p)z1}IT$3XqeSXqjZx z0^>1ErL)Sd$CT&MYS?VDAfi!7y|5aqXNTqlnc|Etg)tRz_o3~Jy0&5s7BL#tSjxKTweE7kqT-dx zC1dQ+PUTx*+?Wljp@(bW(6Ot2)GyVcJkFFGF?SorrI0sqX@iztisEY*X!=+j4sy0t zEZX$U8LA$wSBthyC#gkYj`hXjNbhK(II14Chc#ha^!oMG1vXY5J~n(t@);sOlLvA` zuFFl?Nmi0IDtEE5kDqOMH(8PE$+GOo9V+k2bt<=Twwv7So$5;^KTTHE$+p}{Zooqa z!fG#BgVO;`K9&dAMs&GN;k$)odw-uyeZ>FwupRx)A-^2hp8i_s7l+mhK`Pju z(&!k&4w2s>(;d}rsw=dRo5?Cf7$`9ue)wl?VD&AsDh+qFsLLv9FU6o&2am6lPw);m zkQT4-o_e8&?*Sd)tTVW#ZMk{;_msXld-Aptfy#|!RkxYG?c|o;p(t((;c-5wv>j;o z4azx4Zs11Yk|fK64N(U{pnr2w$>2vCm{M`K7NP!7-o0yHQ0O}Iv;zKed35XCI-YQ(Pu>LXn955JAX;7dDc%YhAUiZ z+f=4zkn-srp9@%uEDw{|&Gf6WEk;dQt?;HR8!QY1H%$thTCLj3Y-$Wts~MbozK=BC z5d2Fv9HDpNd1PXy->UxluXitahEak6huefj;mJc13s#|d&#zLzX1|WGnU-VCprJSs*Gh@qtiNW^WdE9, YEAR. -# -#, fuzzy +# +# Translators: +# Sergey Glita , 2011. msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"PO-Revision-Date: 2011-11-19 20:58+0000\n" +"Last-Translator: gsv70 \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:15 msgid "Create new comments" -msgstr "" +msgstr "Создать новые комментарии" #: __init__.py:16 msgid "Delete comments" -msgstr "" +msgstr "Удалить комментарии" #: __init__.py:17 msgid "Edit comments" -msgstr "" +msgstr "Редактировать комментарии" #: __init__.py:18 msgid "View comments" -msgstr "" +msgstr "Просмотр комментариев" #: __init__.py:20 msgid "Comments" -msgstr "" +msgstr "Комментарии" #: __init__.py:26 __init__.py:27 msgid "delete" -msgstr "" +msgstr "удалить" #: __init__.py:28 msgid "add comment" -msgstr "" +msgstr "добавить комментарий" #: __init__.py:29 utils.py:14 msgid "comments" -msgstr "" +msgstr "комментарии" #: __init__.py:33 msgid "date" -msgstr "" +msgstr "дата" #: __init__.py:37 msgid "user" -msgstr "" +msgstr "пользователь" #: __init__.py:41 msgid "comment" -msgstr "" +msgstr "комментарий" #: views.py:27 msgid "Must provide at least one comment." -msgstr "" +msgstr "Должен быть хотя бы один комментарий." #: views.py:37 #, python-format msgid "Comment \"%s\" deleted successfully." -msgstr "" +msgstr "Комментарий \"%s\" удален." #: views.py:39 #, python-format msgid "Error deleting comment \"%(comment)s\": %(error)s" -msgstr "" +msgstr "Ошибка при удалении комментариев \"%(comment)s\": %(error)s" #: views.py:54 #, python-format msgid "Are you sure you wish to delete the comment: %s?" -msgstr "" +msgstr "Вы действительно хотите удалить комментарий %s?" #: views.py:56 #, python-format msgid "Are you sure you wish to delete the comments: %s?" -msgstr "" +msgstr "Вы действительно хотите удалить комментарии %s?" #: views.py:86 msgid "Comment added successfully." -msgstr "" +msgstr "Комментарий добавлен." #: views.py:93 #, python-format msgid "Add comment to document: %s" -msgstr "" +msgstr "Добавить комментарий на документ: %s" #: views.py:109 #, python-format msgid "comments: %s" -msgstr "" +msgstr "комментарии: %s" + + diff --git a/apps/main/locale/ru/LC_MESSAGES/django.mo b/apps/main/locale/ru/LC_MESSAGES/django.mo index 84589cf8e27df5da38aaa1c37a33872fe6145e83..ea406179a23fa31da12baa3911e7d4a6e3109613 100644 GIT binary patch delta 107 zcmew%@ke6A9!6U}1_p*x+zbq2K>8+-<^j?lfV4i4{tKklfwV4AkPAqM0%8|><^j@gfV4i4{t2YjfwU%25Tq^;NV5Uy7$7YI qq?0%QWW3AFVPK+QXli9@y!jsM8&\n" "Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" @@ -36,7 +36,7 @@ msgstr "sentry" #: __init__.py:19 msgid "admin site" -msgstr "admin site" +msgstr "админка" #: __init__.py:30 msgid "home" diff --git a/apps/navigation/locale/ru/LC_MESSAGES/django.mo b/apps/navigation/locale/ru/LC_MESSAGES/django.mo index 918115e5f566c70b4583028a86af6519a255b3a4..61a3328f93422aee2cd31547bd71926e0b0f879a 100644 GIT binary patch delta 26 hcmeBS>tWkq&&XkDsbFMiWnjA5o$(+e%f1V{7ywtWkq&&Xk5tYBzvWn{S7o$(+e%hn6K7yw-`2c-Z2 diff --git a/apps/navigation/locale/ru/LC_MESSAGES/django.po b/apps/navigation/locale/ru/LC_MESSAGES/django.po index 7397fc9bcf..ad24581a70 100644 --- a/apps/navigation/locale/ru/LC_MESSAGES/django.po +++ b/apps/navigation/locale/ru/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-09-29 18:46-0400\n" -"PO-Revision-Date: 2011-11-03 17:21+0000\n" +"PO-Revision-Date: 2011-11-19 21:05+0000\n" "Last-Translator: gsv70 \n" "Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" @@ -24,7 +24,7 @@ msgstr "Массовое действие" #: widgets.py:28 msgid "icon" -msgstr "значек" +msgstr "значок" #: templatetags/navigation_tags.py:275 msgid "Selected item actions:" diff --git a/apps/permissions/locale/ru/LC_MESSAGES/django.mo b/apps/permissions/locale/ru/LC_MESSAGES/django.mo index 9b5dff673475bf0508dd38d6831130e895c34884..22f23c146cbcf41badd18722844b4914ab3d7eb5 100644 GIT binary patch delta 367 zcmZwBze@sP7zgm@1j{2l!n@POgL61=h{!<1cK?Z1M@O9^C{NNsBk<;+CEDar501nO z$F}F$TH6C@Y3}QFAi+(a=Y4*?&xf_K{4eE3Bce{8r~t1L@8JR7Pp|@CUfO`yyQ0y zr7shbfsEKk=%NtvD~H5$x#I{uq4$_?==-O*HqULROWya9UI@_0t9V%e0~t39eXui(E@Qf$7>%>J|U?QY#@mwR@IsBIA$d+-_t@D#qoTlfK8xPcY;3u`cM z6V>4zH1$VVgir7icA#P!KwdeLKKii?Scem<9{WhAVW+H4WK3bMq!h;( z8!?`6DkB-f*mNpQLMAgs;@RO+#fN5xHP$(yX#>gyK(;t=5 BmPG&n diff --git a/apps/permissions/locale/ru/LC_MESSAGES/django.po b/apps/permissions/locale/ru/LC_MESSAGES/django.po index 245f700d54..0ea1353e7d 100644 --- a/apps/permissions/locale/ru/LC_MESSAGES/django.po +++ b/apps/permissions/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-09-29 18:47-0400\n" -"PO-Revision-Date: 2011-11-04 12:02+0000\n" +"PO-Revision-Date: 2011-11-19 21:05+0000\n" "Last-Translator: gsv70 \n" "Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" @@ -43,7 +43,7 @@ msgstr "Отмена разрешений" #: __init__.py:20 models.py:75 views.py:33 msgid "roles" -msgstr "ролей" +msgstr "роли" #: __init__.py:21 msgid "create new role" @@ -55,7 +55,7 @@ msgstr "редактировать" #: __init__.py:23 msgid "members" -msgstr "элементы" +msgstr "участники" #: __init__.py:24 msgid "role permissions" @@ -83,7 +83,7 @@ msgstr "имя" #: models.py:13 models.py:70 msgid "label" -msgstr "этикетка" +msgstr "надпись" #: models.py:20 models.py:53 msgid "permission" @@ -95,11 +95,11 @@ msgstr "разрешения" #: models.py:61 msgid "permission holder" -msgstr "держатель разрешения" +msgstr "владелец разрешения" #: models.py:62 msgid "permission holders" -msgstr "разрешения владельцев" +msgstr "владельцы разрешения " #: models.py:74 models.py:92 views.py:69 views.py:79 views.py:103 views.py:203 msgid "role" @@ -107,11 +107,11 @@ msgstr "роль" #: models.py:103 msgid "role member" -msgstr "Роль члена" +msgstr "участник" #: models.py:104 msgid "role members" -msgstr "Роль членов" +msgstr "участники" #: views.py:56 msgid "state" @@ -160,12 +160,12 @@ msgstr "%(ct_name)s: %(requester)s не имеет разрешения \"%(perm #: views.py:199 #, python-format msgid "non members of role: %s" -msgstr "не участвует в %s" +msgstr "не входит в %s" #: views.py:200 #, python-format msgid "members of role: %s" -msgstr "участвует в %s" +msgstr "входит в %s" #: widgets.py:16 msgid "Revoke" diff --git a/apps/project_setup/locale/ru/LC_MESSAGES/django.mo b/apps/project_setup/locale/ru/LC_MESSAGES/django.mo index 7acccb67ee14a64ff206827a853098716862a183..8bc36db74190e19249a29578d270163c8b697c7d 100644 GIT binary patch delta 42 zcmV+_0M-Ad1(^kqL;(\n" "Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" @@ -24,6 +24,6 @@ msgstr "настройки" #: views.py:13 msgid "setup items" -msgstr "пункты настроек" +msgstr "настроек" diff --git a/apps/user_management/locale/ru/LC_MESSAGES/django.mo b/apps/user_management/locale/ru/LC_MESSAGES/django.mo index 6fa4c4352305f7ef4658af4b252ae39e1bdcb863..31694dab69a4a3ba1bb850117922e20fed8c3dda 100644 GIT binary patch delta 108 zcmX@2e@uUa3A3pX0|Ub^F$M+&Ak8bzz@Q4G^?)=GF@yjK2_T&Vq}73RE0n)>b0%{* yJBOjAf{~$>f%)bWTt+;?7ZzV^zp&wA6doS#`uWFGNd0C*M|bpQYW diff --git a/apps/user_management/locale/ru/LC_MESSAGES/django.po b/apps/user_management/locale/ru/LC_MESSAGES/django.po index 50a517d59f..ebb380fcf2 100644 --- a/apps/user_management/locale/ru/LC_MESSAGES/django.po +++ b/apps/user_management/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-09-29 18:49-0400\n" -"PO-Revision-Date: 2011-11-04 15:20+0000\n" +"PO-Revision-Date: 2011-11-19 21:07+0000\n" "Last-Translator: gsv70 \n" "Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" @@ -91,7 +91,7 @@ msgstr "создать новую группу" #: __init__.py:43 views.py:226 msgid "members" -msgstr "элементы" +msgstr "Участники" #: forms.py:13 msgid "New password" From 37eb1c04ccd31e25c624e9c8026a9a3213deefd1 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 09:54:15 -0400 Subject: [PATCH 112/220] Updated contributor file --- docs/contributors.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/contributors.rst b/docs/contributors.rst index 40d36c8007..f6179efb07 100644 --- a/docs/contributors.rst +++ b/docs/contributors.rst @@ -25,10 +25,12 @@ Bug reports Patches ------- * Meurig Freeman (https://github.com/meurig) +* Сергей Глита [Sergey Glita] (s.v.glita@gmail.com) Suggestions ----------- * Cezar Jenkins (https://twitter.com/#!/emperorcezar) +* Сергей Глита [Sergey Glita] (s.v.glita@gmail.com) Translations ------------ From 1773ed3c13fa350a8f60ccd06e599f6ac4d90ad5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 10:18:26 -0400 Subject: [PATCH 113/220] Updated translation related scripts and Transifex configuration file for the grouping -> linking app rename --- .tx/config | 10 +++++----- misc/compilemessages_all.sh | 2 +- misc/makemessages_all.sh | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.tx/config b/.tx/config index aadf05cd77..cbd85fb879 100644 --- a/.tx/config +++ b/.tx/config @@ -120,12 +120,12 @@ trans.es = apps/project_tools/locale/es/LC_MESSAGES/django.po trans.pt = apps/project_tools/locale/pt/LC_MESSAGES/django.po trans.ru = apps/project_tools/locale/ru/LC_MESSAGES/django.po -[mayan-edms.apps-grouping] -source_file = apps/grouping/locale/en/LC_MESSAGES/django.po +[mayan-edms.apps-linking] +source_file = apps/linking/locale/en/LC_MESSAGES/django.po source_lang = en -trans.es = apps/grouping/locale/es/LC_MESSAGES/django.po -trans.pt = apps/grouping/locale/pt/LC_MESSAGES/django.po -trans.ru = apps/grouping/locale/ru/LC_MESSAGES/django.po +trans.es = apps/linking/locale/es/LC_MESSAGES/django.po +trans.pt = apps/linking/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/linking/locale/ru/LC_MESSAGES/django.po [mayan-edms.apps-document_comments] source_file = apps/document_comments/locale/en/LC_MESSAGES/django.po diff --git a/misc/compilemessages_all.sh b/misc/compilemessages_all.sh index 2061c78616..4ad10e85ae 100755 --- a/misc/compilemessages_all.sh +++ b/misc/compilemessages_all.sh @@ -43,7 +43,7 @@ $COMPILEMESSAGES -l pt $COMPILEMESSAGES -l ru $COMPILEMESSAGES -l es -cd $BASE/apps/grouping +cd $BASE/apps/linking $COMPILEMESSAGES -l pt $COMPILEMESSAGES -l ru $COMPILEMESSAGES -l es diff --git a/misc/makemessages_all.sh b/misc/makemessages_all.sh index da30063c2c..ce3dc0e7a1 100755 --- a/misc/makemessages_all.sh +++ b/misc/makemessages_all.sh @@ -43,7 +43,7 @@ $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es -cd $BASE/apps/grouping +cd $BASE/apps/linking $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es From acbdd0bfd4f42e6cbde5c36a02c2832a7f205fb2 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 10:19:13 -0400 Subject: [PATCH 114/220] Updated changelog --- docs/changelog.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 821d744db3..d51e6768eb 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -39,7 +39,7 @@ Version 0.10 * Document image serving response now specifies a MIME type for increased browser compatibility. * Small change in the scheduler that increases stability. - +* Russian translation updates (Сергей Глита [Sergey Glita]) Version 0.9.1 ------------- From eabc694b56a70e074a0e86ec76551a116d6d4b33 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 11:29:21 -0400 Subject: [PATCH 115/220] Updated language source file --- apps/common/locale/en/LC_MESSAGES/django.po | 64 ++- apps/common/locale/es/LC_MESSAGES/django.po | 80 ++- apps/common/locale/pt/LC_MESSAGES/django.po | 87 ++-- apps/common/locale/ru/LC_MESSAGES/django.po | 87 ++-- .../converter/locale/en/LC_MESSAGES/django.po | 446 ++++++++-------- .../converter/locale/es/LC_MESSAGES/django.po | 468 ++++++++--------- .../converter/locale/pt/LC_MESSAGES/django.po | 479 ++++++++--------- .../converter/locale/ru/LC_MESSAGES/django.po | 482 +++++++++--------- .../locale/en/LC_MESSAGES/django.po | 2 +- .../locale/es/LC_MESSAGES/django.po | 13 +- .../locale/pt/LC_MESSAGES/django.po | 13 +- .../locale/ru/LC_MESSAGES/django.po | 16 +- .../locale/en/LC_MESSAGES/django.po | 2 +- .../locale/es/LC_MESSAGES/django.po | 17 +- .../locale/pt/LC_MESSAGES/django.po | 16 +- .../locale/ru/LC_MESSAGES/django.po | 16 +- .../documents/locale/en/LC_MESSAGES/django.po | 312 ++++++------ .../documents/locale/es/LC_MESSAGES/django.po | 355 +++++++------ .../documents/locale/pt/LC_MESSAGES/django.po | 359 +++++++------ .../documents/locale/ru/LC_MESSAGES/django.po | 359 +++++++------ .../locale/en/LC_MESSAGES/django.po | 14 +- .../locale/es/LC_MESSAGES/django.po | 25 +- .../locale/pt/LC_MESSAGES/django.po | 25 +- .../locale/ru/LC_MESSAGES/django.po | 31 +- apps/folders/locale/en/LC_MESSAGES/django.po | 2 +- apps/folders/locale/es/LC_MESSAGES/django.po | 17 +- apps/folders/locale/pt/LC_MESSAGES/django.po | 21 +- apps/folders/locale/ru/LC_MESSAGES/django.po | 24 +- apps/history/locale/en/LC_MESSAGES/django.po | 2 +- apps/history/locale/es/LC_MESSAGES/django.po | 13 +- apps/history/locale/pt/LC_MESSAGES/django.po | 13 +- apps/history/locale/ru/LC_MESSAGES/django.po | 16 +- apps/linking/locale/en/LC_MESSAGES/django.po | 217 ++++++-- apps/linking/locale/es/LC_MESSAGES/django.po | 271 +++++++--- apps/linking/locale/pt/LC_MESSAGES/django.po | 271 +++++++--- apps/linking/locale/ru/LC_MESSAGES/django.po | 274 +++++++--- apps/main/locale/en/LC_MESSAGES/django.po | 28 +- apps/main/locale/es/LC_MESSAGES/django.po | 43 +- apps/main/locale/pt/LC_MESSAGES/django.po | 43 +- apps/main/locale/ru/LC_MESSAGES/django.po | 46 +- apps/metadata/locale/en/LC_MESSAGES/django.po | 2 +- apps/metadata/locale/es/LC_MESSAGES/django.po | 40 +- apps/metadata/locale/pt/LC_MESSAGES/django.po | 53 +- apps/metadata/locale/ru/LC_MESSAGES/django.po | 51 +- .../locale/en/LC_MESSAGES/django.po | 2 +- .../locale/es/LC_MESSAGES/django.po | 13 +- .../locale/pt/LC_MESSAGES/django.po | 13 +- .../locale/ru/LC_MESSAGES/django.po | 16 +- apps/ocr/locale/en/LC_MESSAGES/django.po | 2 +- apps/ocr/locale/es/LC_MESSAGES/django.po | 25 +- apps/ocr/locale/pt/LC_MESSAGES/django.po | 25 +- apps/ocr/locale/ru/LC_MESSAGES/django.po | 24 +- .../locale/en/LC_MESSAGES/django.po | 113 ++-- .../locale/es/LC_MESSAGES/django.po | 138 ++--- .../locale/pt/LC_MESSAGES/django.po | 137 ++--- .../locale/ru/LC_MESSAGES/django.po | 140 ++--- .../locale/en/LC_MESSAGES/django.po | 2 +- .../locale/es/LC_MESSAGES/django.po | 13 +- .../locale/pt/LC_MESSAGES/django.po | 13 +- .../locale/ru/LC_MESSAGES/django.po | 16 +- .../locale/en/LC_MESSAGES/django.po | 2 +- .../locale/es/LC_MESSAGES/django.po | 13 +- .../locale/pt/LC_MESSAGES/django.po | 13 +- .../locale/ru/LC_MESSAGES/django.po | 6 +- .../locale/en/LC_MESSAGES/django.po | 2 +- .../locale/es/LC_MESSAGES/django.po | 13 +- .../locale/pt/LC_MESSAGES/django.po | 13 +- .../locale/ru/LC_MESSAGES/django.po | 16 +- apps/sources/locale/en/LC_MESSAGES/django.po | 10 +- apps/sources/locale/es/LC_MESSAGES/django.po | 24 +- apps/sources/locale/pt/LC_MESSAGES/django.po | 27 +- apps/sources/locale/ru/LC_MESSAGES/django.po | 33 +- apps/tags/locale/en/LC_MESSAGES/django.po | 4 +- apps/tags/locale/es/LC_MESSAGES/django.po | 15 +- apps/tags/locale/pt/LC_MESSAGES/django.po | 15 +- apps/tags/locale/ru/LC_MESSAGES/django.po | 18 +- .../locale/en/LC_MESSAGES/django.po | 2 +- .../locale/es/LC_MESSAGES/django.po | 17 +- .../locale/pt/LC_MESSAGES/django.po | 13 +- .../locale/ru/LC_MESSAGES/django.po | 20 +- .../web_theme/locale/en/LC_MESSAGES/django.po | 10 +- .../web_theme/locale/es/LC_MESSAGES/django.po | 25 +- .../web_theme/locale/pt/LC_MESSAGES/django.po | 27 +- .../web_theme/locale/ru/LC_MESSAGES/django.po | 24 +- 84 files changed, 3507 insertions(+), 2762 deletions(-) diff --git a/apps/common/locale/en/LC_MESSAGES/django.po b/apps/common/locale/en/LC_MESSAGES/django.po index 573d3f94f8..27835f371b 100644 --- a/apps/common/locale/en/LC_MESSAGES/django.po +++ b/apps/common/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-30 00:54-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -99,67 +99,67 @@ msgstr "" msgid "Landscape" msgstr "" -#: utils.py:289 +#: utils.py:291 msgid "function found" msgstr "" -#: utils.py:291 utils.py:293 +#: utils.py:293 utils.py:295 #, python-format msgid "class found: %s" msgstr "" -#: views.py:23 templates/password_change_done.html:5 +#: views.py:24 templates/password_change_done.html:5 msgid "Your password has been successfully changed." msgstr "" -#: views.py:39 +#: views.py:41 msgid "No action selected." msgstr "" -#: views.py:43 +#: views.py:45 msgid "Must select at least one item." msgstr "" -#: views.py:76 +#: views.py:86 #, python-format msgid "%(selection)s added successfully added to %(right_list_title)s." msgstr "" -#: views.py:79 views.py:96 +#: views.py:89 views.py:106 #, python-format msgid "Unable to add %(selection)s to %(right_list_title)s." msgstr "" -#: views.py:93 +#: views.py:103 #, python-format msgid "%(selection)s added successfully removed from %(right_list_title)s." msgstr "" -#: views.py:111 +#: views.py:121 msgid "Add" msgstr "" -#: views.py:122 +#: views.py:132 msgid "Remove" msgstr "" -#: views.py:145 +#: views.py:155 msgid "current user details" msgstr "" -#: views.py:162 +#: views.py:172 msgid "Current user's details updated." msgstr "" -#: views.py:171 +#: views.py:181 msgid "edit current user details" msgstr "" -#: views.py:197 +#: views.py:207 msgid "Changelog" msgstr "" -#: views.py:210 +#: views.py:220 msgid "License" msgstr "" @@ -237,25 +237,25 @@ msgstr "" msgid "Confirm delete" msgstr "" -#: templates/generic_confirm.html:28 +#: templates/generic_confirm.html:32 msgid "form icon" msgstr "" -#: templates/generic_confirm.html:36 +#: templates/generic_confirm.html:40 #, python-format msgid "Are you sure you wish to delete %(object_name)s: %(object)s?" msgstr "" -#: templates/generic_confirm.html:38 +#: templates/generic_confirm.html:42 #, python-format msgid "Are you sure you wish to delete: %(object)s?" msgstr "" -#: templates/generic_confirm.html:46 +#: templates/generic_confirm.html:50 msgid "Yes" msgstr "" -#: templates/generic_confirm.html:50 +#: templates/generic_confirm.html:54 msgid "No" msgstr "" @@ -268,8 +268,8 @@ msgstr "" #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:51 -#: templates/generic_list_subtemplate.html:171 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 msgid "Save" msgstr "" @@ -277,22 +277,18 @@ msgstr "" #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:51 -#: templates/generic_list_subtemplate.html:171 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 msgid "Submit" msgstr "" -#: templates/generic_form_subtemplate.html:82 -msgid "Cancel" -msgstr "" - #: templates/generic_list.html:6 templates/generic_list_horizontal.html:6 #, python-format msgid "List of %(stripped_title)s" msgstr "" #: templates/generic_list_horizontal_subtemplate.html:23 -#: templates/generic_list_subtemplate.html:23 +#: templates/generic_list_subtemplate.html:24 #, python-format msgid "" "List of %(title)s (%(start)s - %(end)s out of %(total)s) (Page " @@ -300,18 +296,16 @@ msgid "" msgstr "" #: templates/generic_list_horizontal_subtemplate.html:25 -#: templates/generic_list_subtemplate.html:25 +#: templates/generic_list_subtemplate.html:26 #, python-format msgid "List of %(title)s (%(total)s)" msgstr "" -#: templates/generic_list_horizontal_subtemplate.html:72 -#: templates/generic_list_subtemplate.html:71 +#: templates/generic_list_subtemplate.html:72 msgid "Identifier" msgstr "" -#: templates/generic_list_horizontal_subtemplate.html:146 -#: templates/generic_list_subtemplate.html:145 +#: templates/generic_list_subtemplate.html:152 #, python-format msgid "There are no %(stripped_title)s" msgstr "" diff --git a/apps/common/locale/es/LC_MESSAGES/django.po b/apps/common/locale/es/LC_MESSAGES/django.po index 8a29fb29a4..d4ccd9dd69 100644 --- a/apps/common/locale/es/LC_MESSAGES/django.po +++ b/apps/common/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-30 00:54-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 00:58+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:17 @@ -103,67 +104,67 @@ msgstr "Retrato" msgid "Landscape" msgstr "Paisaje" -#: utils.py:289 +#: utils.py:291 msgid "function found" msgstr "función encontrada" -#: utils.py:291 utils.py:293 +#: utils.py:293 utils.py:295 #, python-format msgid "class found: %s" msgstr "clase encontrada: %s" -#: views.py:23 templates/password_change_done.html:5 +#: views.py:24 templates/password_change_done.html:5 msgid "Your password has been successfully changed." msgstr "Su contraseña se ha modificado correctamente." -#: views.py:39 +#: views.py:41 msgid "No action selected." msgstr "Ninguna acción seleccionada." -#: views.py:43 +#: views.py:45 msgid "Must select at least one item." msgstr "Debe seleccionar al menos un artículo." -#: views.py:76 +#: views.py:86 #, python-format msgid "%(selection)s added successfully added to %(right_list_title)s." msgstr "Se agrego exitosamente %(selection)s a %(right_list_title)s." -#: views.py:79 views.py:96 +#: views.py:89 views.py:106 #, python-format msgid "Unable to add %(selection)s to %(right_list_title)s." msgstr "No se puede agregar %(selection)s a %(right_list_title)s." -#: views.py:93 +#: views.py:103 #, python-format msgid "%(selection)s added successfully removed from %(right_list_title)s." msgstr "Se removió exitosamente %(selection)s de %(right_list_title)s." -#: views.py:111 +#: views.py:121 msgid "Add" msgstr "Agregar" -#: views.py:122 +#: views.py:132 msgid "Remove" msgstr "Remover" -#: views.py:145 +#: views.py:155 msgid "current user details" msgstr "detalles del usuario corriente" -#: views.py:162 +#: views.py:172 msgid "Current user's details updated." msgstr "Datos del usuario corriente actualizados." -#: views.py:171 +#: views.py:181 msgid "edit current user details" msgstr "editar detalles del usuario corriente" -#: views.py:197 +#: views.py:207 msgid "Changelog" msgstr "Cambios" -#: views.py:210 +#: views.py:220 msgid "License" msgstr "Licencia" @@ -174,8 +175,8 @@ msgstr "Ninguno" #: conf/settings.py:15 msgid "" "Temporary directory used site wide to store thumbnails, previews and " -"temporary files. If none is specified, one will be created using " -"tempfile.mkdtemp()" +"temporary files. If none is specified, one will be created using tempfile." +"mkdtemp()" msgstr "" "Directorio temporal utilizado por todo el sitio para almacenar imágenes en " "miniatura, vistas previas y los archivos temporales. Si no se especifica " @@ -246,25 +247,25 @@ msgstr "Confirmar" msgid "Confirm delete" msgstr "Confirmar eliminación" -#: templates/generic_confirm.html:28 +#: templates/generic_confirm.html:32 msgid "form icon" msgstr "emblema de la forma" -#: templates/generic_confirm.html:36 +#: templates/generic_confirm.html:40 #, python-format msgid "Are you sure you wish to delete %(object_name)s: %(object)s?" msgstr "¿Está seguro que desea eliminar %(object_name)s: %(object)s?" -#: templates/generic_confirm.html:38 +#: templates/generic_confirm.html:42 #, python-format msgid "Are you sure you wish to delete: %(object)s?" msgstr "¿Está seguro que desea eliminar: %(object)s?" -#: templates/generic_confirm.html:46 +#: templates/generic_confirm.html:50 msgid "Yes" msgstr "Sí" -#: templates/generic_confirm.html:50 +#: templates/generic_confirm.html:54 msgid "No" msgstr "No" @@ -277,8 +278,8 @@ msgstr "requerido" #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:51 -#: templates/generic_list_subtemplate.html:171 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 msgid "Save" msgstr "Guardar" @@ -286,22 +287,18 @@ msgstr "Guardar" #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:51 -#: templates/generic_list_subtemplate.html:171 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 msgid "Submit" msgstr "Enviar" -#: templates/generic_form_subtemplate.html:82 -msgid "Cancel" -msgstr "Cancelar" - #: templates/generic_list.html:6 templates/generic_list_horizontal.html:6 #, python-format msgid "List of %(stripped_title)s" msgstr "Lista de %(stripped_title)s " #: templates/generic_list_horizontal_subtemplate.html:23 -#: templates/generic_list_subtemplate.html:23 +#: templates/generic_list_subtemplate.html:24 #, python-format msgid "" "List of %(title)s (%(start)s - %(end)s out of %(total)s) (Page " @@ -311,18 +308,16 @@ msgstr "" "%(page_number)s de %(total_pages)s)" #: templates/generic_list_horizontal_subtemplate.html:25 -#: templates/generic_list_subtemplate.html:25 +#: templates/generic_list_subtemplate.html:26 #, python-format msgid "List of %(title)s (%(total)s)" msgstr "Lista de %(title)s (%(total)s)" -#: templates/generic_list_horizontal_subtemplate.html:72 -#: templates/generic_list_subtemplate.html:71 +#: templates/generic_list_subtemplate.html:72 msgid "Identifier" msgstr "Identificador" -#: templates/generic_list_horizontal_subtemplate.html:146 -#: templates/generic_list_subtemplate.html:145 +#: templates/generic_list_subtemplate.html:152 #, python-format msgid "There are no %(stripped_title)s" msgstr "No hay %(stripped_title)s " @@ -336,4 +331,5 @@ msgstr "Iniciar sesión" msgid "Password change" msgstr "Cambio de contraseña" - +#~ msgid "Cancel" +#~ msgstr "Cancelar" diff --git a/apps/common/locale/pt/LC_MESSAGES/django.po b/apps/common/locale/pt/LC_MESSAGES/django.po index 0c99161e27..d609fa4bc9 100644 --- a/apps/common/locale/pt/LC_MESSAGES/django.po +++ b/apps/common/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-30 00:54-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 02:18+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:17 @@ -102,68 +103,67 @@ msgstr "Retrato" msgid "Landscape" msgstr "Paisagem" -#: utils.py:289 +#: utils.py:291 msgid "function found" msgstr "função encontrada" -#: utils.py:291 utils.py:293 +#: utils.py:293 utils.py:295 #, python-format msgid "class found: %s" msgstr "classe encontrada: %s" -#: views.py:23 templates/password_change_done.html:5 +#: views.py:24 templates/password_change_done.html:5 msgid "Your password has been successfully changed." msgstr "Sua senha foi alterada com êxito." -#: views.py:39 +#: views.py:41 msgid "No action selected." msgstr "Nenhuma ação selecionada." -#: views.py:43 +#: views.py:45 msgid "Must select at least one item." msgstr "Deve selecionar pelo menos um item." -#: views.py:76 +#: views.py:86 #, python-format msgid "%(selection)s added successfully added to %(right_list_title)s." msgstr "%(selection)s adicionadas com sucesso a %(right_list_title)s ." -#: views.py:79 views.py:96 +#: views.py:89 views.py:106 #, python-format msgid "Unable to add %(selection)s to %(right_list_title)s." msgstr "Não foi possível adicionar %(selection)s para %(right_list_title)s ." -#: views.py:93 +#: views.py:103 #, python-format msgid "%(selection)s added successfully removed from %(right_list_title)s." -msgstr "" -" %(selection)s adicionado com sucesso removidos %(right_list_title)s." +msgstr " %(selection)s adicionado com sucesso removidos %(right_list_title)s." -#: views.py:111 +#: views.py:121 msgid "Add" msgstr "Adicionar" -#: views.py:122 +#: views.py:132 msgid "Remove" msgstr "Remover" -#: views.py:145 +#: views.py:155 msgid "current user details" msgstr "detalhes atuais do usuário" -#: views.py:162 +#: views.py:172 msgid "Current user's details updated." msgstr "Detalhes do usuário atual atualizados." -#: views.py:171 +#: views.py:181 msgid "edit current user details" msgstr "editar os detalhes do usuário atual" -#: views.py:197 +#: views.py:207 msgid "Changelog" msgstr "Log de alterações" -#: views.py:210 +#: views.py:220 msgid "License" msgstr "Licença" @@ -174,12 +174,12 @@ msgstr "Nenhum" #: conf/settings.py:15 msgid "" "Temporary directory used site wide to store thumbnails, previews and " -"temporary files. If none is specified, one will be created using " -"tempfile.mkdtemp()" +"temporary files. If none is specified, one will be created using tempfile." +"mkdtemp()" msgstr "" "Diretório temporário usado para armazenar miniaturas, previews e arquivos " -"temporários. Se nenhum for especificado, um será criado usando " -"tempfile.mkdtemp()" +"temporários. Se nenhum for especificado, um será criado usando tempfile." +"mkdtemp()" #: conf/settings.py:65 msgid "" @@ -246,25 +246,25 @@ msgstr "Confirmar" msgid "Confirm delete" msgstr "Confirmar exclusão" -#: templates/generic_confirm.html:28 +#: templates/generic_confirm.html:32 msgid "form icon" msgstr "ícone de formulário" -#: templates/generic_confirm.html:36 +#: templates/generic_confirm.html:40 #, python-format msgid "Are you sure you wish to delete %(object_name)s: %(object)s?" msgstr "Tem certeza de que deseja excluir %(object_name)s: %(object)s ?" -#: templates/generic_confirm.html:38 +#: templates/generic_confirm.html:42 #, python-format msgid "Are you sure you wish to delete: %(object)s?" msgstr "Tem certeza de que deseja excluir: %(object)s ?" -#: templates/generic_confirm.html:46 +#: templates/generic_confirm.html:50 msgid "Yes" msgstr "Sim" -#: templates/generic_confirm.html:50 +#: templates/generic_confirm.html:54 msgid "No" msgstr "Não" @@ -277,8 +277,8 @@ msgstr "exigido" #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:51 -#: templates/generic_list_subtemplate.html:171 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 msgid "Save" msgstr "Salvar" @@ -286,22 +286,18 @@ msgstr "Salvar" #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:51 -#: templates/generic_list_subtemplate.html:171 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 msgid "Submit" msgstr "Submeter" -#: templates/generic_form_subtemplate.html:82 -msgid "Cancel" -msgstr "Cancelar" - #: templates/generic_list.html:6 templates/generic_list_horizontal.html:6 #, python-format msgid "List of %(stripped_title)s" msgstr "Lista de %(stripped_title)s " #: templates/generic_list_horizontal_subtemplate.html:23 -#: templates/generic_list_subtemplate.html:23 +#: templates/generic_list_subtemplate.html:24 #, python-format msgid "" "List of %(title)s (%(start)s - %(end)s out of %(total)s) (Page " @@ -311,18 +307,16 @@ msgstr "" "of %(total_pages)s)" #: templates/generic_list_horizontal_subtemplate.html:25 -#: templates/generic_list_subtemplate.html:25 +#: templates/generic_list_subtemplate.html:26 #, python-format msgid "List of %(title)s (%(total)s)" msgstr "Lista de %(title)s (%(total)s)" -#: templates/generic_list_horizontal_subtemplate.html:72 -#: templates/generic_list_subtemplate.html:71 +#: templates/generic_list_subtemplate.html:72 msgid "Identifier" msgstr "Identificador" -#: templates/generic_list_horizontal_subtemplate.html:146 -#: templates/generic_list_subtemplate.html:145 +#: templates/generic_list_subtemplate.html:152 #, python-format msgid "There are no %(stripped_title)s" msgstr "Não há %(stripped_title)s " @@ -336,4 +330,5 @@ msgstr "Login" msgid "Password change" msgstr "Alterar a senha" - +#~ msgid "Cancel" +#~ msgstr "Cancelar" diff --git a/apps/common/locale/ru/LC_MESSAGES/django.po b/apps/common/locale/ru/LC_MESSAGES/django.po index 72b700398e..cb155077a3 100644 --- a/apps/common/locale/ru/LC_MESSAGES/django.po +++ b/apps/common/locale/ru/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-30 00:54-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-19 21:02+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:17 msgid "change password" @@ -102,67 +104,67 @@ msgstr "Портрет" msgid "Landscape" msgstr "Пейзаж" -#: utils.py:289 +#: utils.py:291 msgid "function found" msgstr "Функция найдены" -#: utils.py:291 utils.py:293 +#: utils.py:293 utils.py:295 #, python-format msgid "class found: %s" msgstr "Класс найден: %s." -#: views.py:23 templates/password_change_done.html:5 +#: views.py:24 templates/password_change_done.html:5 msgid "Your password has been successfully changed." msgstr "Ваш пароль был успешно изменен." -#: views.py:39 +#: views.py:41 msgid "No action selected." msgstr "Никаких действий не выбрано." -#: views.py:43 +#: views.py:45 msgid "Must select at least one item." msgstr "Необходимо выбрать хотя бы один элемент." -#: views.py:76 +#: views.py:86 #, python-format msgid "%(selection)s added successfully added to %(right_list_title)s." msgstr "%(selection)s успешно добавлен в %(right_list_title)s ." -#: views.py:79 views.py:96 +#: views.py:89 views.py:106 #, python-format msgid "Unable to add %(selection)s to %(right_list_title)s." msgstr "Не удалось добавить %(selection)s до %(right_list_title)s ." -#: views.py:93 +#: views.py:103 #, python-format msgid "%(selection)s added successfully removed from %(right_list_title)s." msgstr "%(selection)s успешно удален из %(right_list_title)s ." -#: views.py:111 +#: views.py:121 msgid "Add" msgstr "Добавить" -#: views.py:122 +#: views.py:132 msgid "Remove" msgstr "Удалить" -#: views.py:145 +#: views.py:155 msgid "current user details" msgstr "данные пользователя" -#: views.py:162 +#: views.py:172 msgid "Current user's details updated." msgstr "Данные пользователя обновлены." -#: views.py:171 +#: views.py:181 msgid "edit current user details" msgstr "редактировать данные пользователя" -#: views.py:197 +#: views.py:207 msgid "Changelog" msgstr "Изменения" -#: views.py:210 +#: views.py:220 msgid "License" msgstr "Лицензия" @@ -173,8 +175,8 @@ msgstr "Ни один" #: conf/settings.py:15 msgid "" "Temporary directory used site wide to store thumbnails, previews and " -"temporary files. If none is specified, one will be created using " -"tempfile.mkdtemp()" +"temporary files. If none is specified, one will be created using tempfile." +"mkdtemp()" msgstr "" "Временный каталог, используемый сайтом для хранения миниатюр, превью и " "временных файлов. Если он не указан, он будет создан с использованием " @@ -245,25 +247,25 @@ msgstr "Подтверждать" msgid "Confirm delete" msgstr "Подтвердить удаление" -#: templates/generic_confirm.html:28 +#: templates/generic_confirm.html:32 msgid "form icon" msgstr "значок формы" -#: templates/generic_confirm.html:36 +#: templates/generic_confirm.html:40 #, python-format msgid "Are you sure you wish to delete %(object_name)s: %(object)s?" msgstr "Вы действительно хотите удалить %(object_name)s: %(object)s?" -#: templates/generic_confirm.html:38 +#: templates/generic_confirm.html:42 #, python-format msgid "Are you sure you wish to delete: %(object)s?" msgstr "Вы действительно хотите удалить: %(object)s?" -#: templates/generic_confirm.html:46 +#: templates/generic_confirm.html:50 msgid "Yes" msgstr "Да" -#: templates/generic_confirm.html:50 +#: templates/generic_confirm.html:54 msgid "No" msgstr "Нет" @@ -276,8 +278,8 @@ msgstr "требуется" #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:51 -#: templates/generic_list_subtemplate.html:171 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 msgid "Save" msgstr "Сохранить" @@ -285,43 +287,37 @@ msgstr "Сохранить" #: templates/generic_form_subtemplate.html:78 #: templates/generic_list_horizontal_subtemplate.html:51 #: templates/generic_list_horizontal_subtemplate.html:178 -#: templates/generic_list_subtemplate.html:51 -#: templates/generic_list_subtemplate.html:171 +#: templates/generic_list_subtemplate.html:52 +#: templates/generic_list_subtemplate.html:178 msgid "Submit" msgstr "Выполнить" -#: templates/generic_form_subtemplate.html:82 -msgid "Cancel" -msgstr "Отменить" - #: templates/generic_list.html:6 templates/generic_list_horizontal.html:6 #, python-format msgid "List of %(stripped_title)s" msgstr "Список \"%(stripped_title)s\"" #: templates/generic_list_horizontal_subtemplate.html:23 -#: templates/generic_list_subtemplate.html:23 +#: templates/generic_list_subtemplate.html:24 #, python-format msgid "" "List of %(title)s (%(start)s - %(end)s out of %(total)s) (Page " "%(page_number)s of %(total_pages)s)" msgstr "" -"Список %(title)s (%(start)s - %(end)s из %(total)s) (Page %(page_number)s из" -" %(total_pages)s)" +"Список %(title)s (%(start)s - %(end)s из %(total)s) (Page %(page_number)s из " +"%(total_pages)s)" #: templates/generic_list_horizontal_subtemplate.html:25 -#: templates/generic_list_subtemplate.html:25 +#: templates/generic_list_subtemplate.html:26 #, python-format msgid "List of %(title)s (%(total)s)" msgstr "Список %(title)s (%(total)s)" -#: templates/generic_list_horizontal_subtemplate.html:72 -#: templates/generic_list_subtemplate.html:71 +#: templates/generic_list_subtemplate.html:72 msgid "Identifier" msgstr "Идентификатор" -#: templates/generic_list_horizontal_subtemplate.html:146 -#: templates/generic_list_subtemplate.html:145 +#: templates/generic_list_subtemplate.html:152 #, python-format msgid "There are no %(stripped_title)s" msgstr "Нет %(stripped_title)s" @@ -335,4 +331,5 @@ msgstr "Войти" msgid "Password change" msgstr "Изменение пароля" - +#~ msgid "Cancel" +#~ msgstr "Отменить" diff --git a/apps/converter/locale/en/LC_MESSAGES/django.po b/apps/converter/locale/en/LC_MESSAGES/django.po index 4235891a3b..ec3951acca 100644 --- a/apps/converter/locale/en/LC_MESSAGES/django.po +++ b/apps/converter/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,861 +21,861 @@ msgstr "" msgid "file formats" msgstr "" -#: literals.py:18 +#: literals.py:19 msgid "Resize" msgstr "" -#: literals.py:19 +#: literals.py:20 msgid "Resize." msgstr "" -#: literals.py:21 literals.py:36 +#: literals.py:22 literals.py:37 msgid "width" msgstr "" -#: literals.py:22 literals.py:37 +#: literals.py:23 literals.py:38 msgid "height" msgstr "" -#: literals.py:26 +#: literals.py:27 msgid "Rotate" msgstr "" -#: literals.py:27 +#: literals.py:28 msgid "Rotate by n degress." msgstr "" -#: literals.py:29 +#: literals.py:30 msgid "degrees" msgstr "" -#: literals.py:33 +#: literals.py:34 msgid "Density" msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Change the resolution (ie: DPI) without resizing." msgstr "" -#: literals.py:41 +#: literals.py:42 msgid "Zoom" msgstr "" -#: literals.py:42 +#: literals.py:43 msgid "Zoom by n percent." msgstr "" -#: literals.py:44 +#: literals.py:45 msgid "percent" msgstr "" -#: literals.py:50 +#: literals.py:51 msgid "Hasselblad Photo RAW, CFV/H3D39II" msgstr "" -#: literals.py:51 literals.py:52 +#: literals.py:52 literals.py:53 msgid "Photoshop resource format" msgstr "" -#: literals.py:53 +#: literals.py:54 msgid "Photoshop resource text format" msgstr "" -#: literals.py:54 +#: literals.py:55 msgid "Photoshop resource wide text format" msgstr "" -#: literals.py:56 +#: literals.py:57 msgid "Raw alpha samples" msgstr "" -#: literals.py:57 +#: literals.py:58 msgid "Adobe Illustrator CS2" msgstr "" -#: literals.py:58 +#: literals.py:59 msgid "Raw application information" msgstr "" -#: literals.py:59 +#: literals.py:60 msgid "Raw JPEG binary data" msgstr "" -#: literals.py:60 +#: literals.py:61 msgid "PFS: 1st Publisher Clip Art" msgstr "" -#: literals.py:61 +#: literals.py:62 msgid "Sony Alpha DSLR Raw Image Format" msgstr "" -#: literals.py:62 +#: literals.py:63 msgid "Microsoft Audio/Visual Interleaved" msgstr "" -#: literals.py:63 +#: literals.py:64 msgid "AVS X image" msgstr "" -#: literals.py:65 +#: literals.py:66 msgid "Raw blue samples" msgstr "" -#: literals.py:66 +#: literals.py:67 msgid "Raw blue, green, and red samples" msgstr "" -#: literals.py:67 +#: literals.py:68 msgid "Raw blue, green, red and alpha samples" msgstr "" -#: literals.py:68 +#: literals.py:69 msgid "Microsoft Windows bitmap image" msgstr "" -#: literals.py:69 +#: literals.py:70 msgid "Microsoft Windows bitmap image version 2" msgstr "" -#: literals.py:70 +#: literals.py:71 msgid "Microsoft Windows bitmap image version 3" msgstr "" -#: literals.py:71 +#: literals.py:72 msgid "BRF ASCII Braille format" msgstr "" -#: literals.py:72 +#: literals.py:73 msgid "Raw blue, red, and green samples" msgstr "" -#: literals.py:74 +#: literals.py:75 msgid "Raw cyan samples" msgstr "" -#: literals.py:75 literals.py:180 +#: literals.py:76 literals.py:181 msgid "Magick Persistent Cache image format" msgstr "" -#: literals.py:76 literals.py:77 +#: literals.py:77 literals.py:78 msgid "Continuous Acquisition and Life-cycle Support Type 1 image" msgstr "" -#: literals.py:78 +#: literals.py:79 msgid "Image caption" msgstr "" -#: literals.py:79 +#: literals.py:80 msgid "Cineon Image File" msgstr "" -#: literals.py:80 +#: literals.py:81 msgid "Cisco IP phone image format" msgstr "" -#: literals.py:81 +#: literals.py:82 msgid "Image Clip Mask" msgstr "" -#: literals.py:82 +#: literals.py:83 msgid "Raw cyan, magenta, yellow, and black samples" msgstr "" -#: literals.py:83 +#: literals.py:84 msgid "Raw cyan, magenta, yellow, black, and opacity samples" msgstr "" -#: literals.py:84 literals.py:85 +#: literals.py:85 literals.py:86 msgid "Canon Digital Camera Raw Image Format" msgstr "" -#: literals.py:86 +#: literals.py:87 msgid "Microsoft Cursor Icon" msgstr "" -#: literals.py:87 +#: literals.py:88 msgid "DR Halo" msgstr "" -#: literals.py:89 +#: literals.py:90 msgid "Digital Imaging and Communications in Medicine image" msgstr "" -#: literals.py:90 +#: literals.py:91 msgid "Kodak Digital Camera Raw Image File" msgstr "" -#: literals.py:91 +#: literals.py:92 msgid "ZSoft IBM PC multi-page Paintbrush" msgstr "" -#: literals.py:92 +#: literals.py:93 msgid "Microsoft DirectDraw Surface" msgstr "" -#: literals.py:93 +#: literals.py:94 msgid "Multi-face font package (Freetype 2.4.2)" msgstr "" -#: literals.py:94 +#: literals.py:95 msgid "Déjà vu" msgstr "" -#: literals.py:95 +#: literals.py:96 msgid "Adobe Digital Negative" msgstr "" -#: literals.py:96 +#: literals.py:97 msgid "Graphviz" msgstr "" -#: literals.py:97 +#: literals.py:98 msgid "SMPTE 268M-2003 (DPX 2.0)" msgstr "" -#: literals.py:99 +#: literals.py:100 msgid "Encapsulated Portable Document Format" msgstr "" -#: literals.py:100 literals.py:105 +#: literals.py:101 literals.py:106 msgid "Adobe Encapsulated PostScript Interchange format" msgstr "" -#: literals.py:101 literals.py:104 +#: literals.py:102 literals.py:105 msgid "Adobe Encapsulated PostScript" msgstr "" -#: literals.py:102 +#: literals.py:103 msgid "Adobe Level II Encapsulated PostScript" msgstr "" -#: literals.py:103 +#: literals.py:104 msgid "Adobe Level III Encapsulated PostScript" msgstr "" -#: literals.py:106 +#: literals.py:107 msgid "Adobe Encapsulated PostScript with TIFF preview" msgstr "" -#: literals.py:107 +#: literals.py:108 msgid "Adobe Level II Encapsulated PostScript with TIFF preview" msgstr "" -#: literals.py:108 +#: literals.py:109 msgid "Adobe Level III Encapsulated PostScript with TIFF preview" msgstr "" -#: literals.py:109 +#: literals.py:110 msgid "Epson RAW Format" msgstr "" -#: literals.py:110 +#: literals.py:111 msgid "Exif digital camera binary data" msgstr "" -#: literals.py:111 +#: literals.py:112 msgid "High Dynamic-range (HDR)" msgstr "" -#: literals.py:113 +#: literals.py:114 msgid "Group 3 FAX (Not TIFF Group3 FAX)" msgstr "" -#: literals.py:114 +#: literals.py:115 msgid "Autodesk FLI animations file" msgstr "" -#: literals.py:115 +#: literals.py:116 msgid "Autodesk FLC animations file" msgstr "" -#: literals.py:116 literals.py:119 +#: literals.py:117 literals.py:120 msgid "Flexible Image Transport System" msgstr "" -#: literals.py:117 +#: literals.py:118 msgid "Kodak FlashPix file" msgstr "" -#: literals.py:118 literals.py:224 +#: literals.py:119 literals.py:225 msgid "Plasma fractal image" msgstr "" -#: literals.py:121 +#: literals.py:122 msgid "Raw green samples" msgstr "" -#: literals.py:122 +#: literals.py:123 msgid "Group 3 FAX" msgstr "" -#: literals.py:123 +#: literals.py:124 msgid "Raw green, blue, and red samples" msgstr "" -#: literals.py:124 +#: literals.py:125 msgid "GIMP brush file" msgstr "" -#: literals.py:125 +#: literals.py:126 msgid "CompuServe graphics interchange format (version 89a)" msgstr "" -#: literals.py:126 +#: literals.py:127 msgid "CompuServe graphics interchange format (version 87a)" msgstr "" -#: literals.py:127 +#: literals.py:128 msgid "Gradual passing from one shade to another" msgstr "" -#: literals.py:128 +#: literals.py:129 msgid "Raw gray samples" msgstr "" -#: literals.py:129 +#: literals.py:130 msgid "Raw green, red, and blue samples" msgstr "" -#: literals.py:130 +#: literals.py:131 msgid "Raw CCITT Group4" msgstr "" -#: literals.py:132 +#: literals.py:133 msgid "Histogram of the image" msgstr "" -#: literals.py:133 +#: literals.py:134 msgid "HRZ: Slow scan TV" msgstr "" -#: literals.py:134 literals.py:135 literals.py:254 +#: literals.py:135 literals.py:136 literals.py:255 msgid "Hypertext Markup Language and a client-side image map" msgstr "" -#: literals.py:137 literals.py:263 literals.py:278 literals.py:282 +#: literals.py:138 literals.py:264 literals.py:279 literals.py:283 msgid "Truevision Targa image" msgstr "" -#: literals.py:138 literals.py:139 +#: literals.py:139 literals.py:140 msgid "ICC Color Profile" msgstr "" -#: literals.py:140 literals.py:141 +#: literals.py:141 literals.py:142 msgid "Microsoft Icon" msgstr "" -#: literals.py:142 +#: literals.py:143 msgid "Hald CLUT identity image" msgstr "" -#: literals.py:143 +#: literals.py:144 msgid "LabEye image format" msgstr "" -#: literals.py:144 +#: literals.py:145 msgid "GraphicsMagick Embedded Image" msgstr "" -#: literals.py:145 +#: literals.py:146 msgid "The image format and characteristics" msgstr "" -#: literals.py:146 +#: literals.py:147 msgid "Base64-encoded inline images" msgstr "" -#: literals.py:147 +#: literals.py:148 msgid "IPL Image Sequence" msgstr "" -#: literals.py:148 +#: literals.py:149 msgid "IPTC Newsphoto" msgstr "" -#: literals.py:149 literals.py:150 +#: literals.py:150 literals.py:151 msgid "IPTC Newsphoto text format" msgstr "" -#: literals.py:151 +#: literals.py:152 msgid "ISO/TR 11548-1 format" msgstr "" -#: literals.py:153 literals.py:156 +#: literals.py:154 literals.py:157 msgid "JPEG-2000 Code Stream Syntax" msgstr "" -#: literals.py:154 +#: literals.py:155 msgid "JPEG Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:155 +#: literals.py:156 msgid "JPEG-2000 JP2 File Format Syntax" msgstr "" -#: literals.py:157 literals.py:158 +#: literals.py:158 literals.py:159 msgid "Joint Photographic Experts Group JFIF format (IJG JPEG 62)" msgstr "" -#: literals.py:159 +#: literals.py:160 msgid "JPEG-2000 File Format Syntax" msgstr "" -#: literals.py:161 +#: literals.py:162 msgid "Raw black samples" msgstr "" -#: literals.py:162 literals.py:163 +#: literals.py:163 literals.py:164 msgid "Kodak Digital Camera Raw Image Format" msgstr "" -#: literals.py:165 +#: literals.py:166 msgid "Image label" msgstr "" -#: literals.py:167 +#: literals.py:168 msgid "Raw magenta samples" msgstr "" -#: literals.py:168 literals.py:178 literals.py:181 literals.py:182 +#: literals.py:169 literals.py:179 literals.py:182 literals.py:183 msgid "MPEG Video Stream" msgstr "" -#: literals.py:169 +#: literals.py:170 msgid "Raw MPEG-4 Video" msgstr "" -#: literals.py:170 +#: literals.py:171 msgid "Colormap intensities and indices" msgstr "" -#: literals.py:171 +#: literals.py:172 msgid "MATLAB image format" msgstr "" -#: literals.py:172 +#: literals.py:173 msgid "MATTE raw opacity format" msgstr "" -#: literals.py:173 +#: literals.py:174 msgid "8-bit McIdas area file" msgstr "" -#: literals.py:174 +#: literals.py:175 msgid "Microsoft Image Composer (MIC) file" msgstr "" -#: literals.py:175 +#: literals.py:176 msgid "Magick Image File Format" msgstr "" -#: literals.py:176 +#: literals.py:177 msgid "" "Multiple-image Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:177 +#: literals.py:178 msgid "Raw Bi-level bitmap in least-significant-byte first order" msgstr "" -#: literals.py:179 +#: literals.py:180 msgid "MPEG-4 Video Stream" msgstr "" -#: literals.py:183 +#: literals.py:184 msgid "Sony (Minolta) Raw Image File" msgstr "" -#: literals.py:184 +#: literals.py:185 msgid "Magick Scripting Language" msgstr "" -#: literals.py:185 +#: literals.py:186 msgid "Windows 1 and 2 MSP file format" msgstr "" -#: literals.py:186 +#: literals.py:187 msgid "ImageMagick's own SVG internal renderer" msgstr "" -#: literals.py:187 +#: literals.py:188 msgid "MTV Raytracing image format" msgstr "" -#: literals.py:188 +#: literals.py:189 msgid "Magick Vector Graphics" msgstr "" -#: literals.py:190 +#: literals.py:191 msgid "Nikon Digital SLR Camera Raw Image File" msgstr "" -#: literals.py:191 +#: literals.py:192 msgid "Constant image of uniform color" msgstr "" -#: literals.py:193 +#: literals.py:194 msgid "Raw opacity samples" msgstr "" -#: literals.py:194 +#: literals.py:195 msgid "Olympus Digital Camera Raw Image File" msgstr "" -#: literals.py:195 +#: literals.py:196 msgid "On-the-air bitmap" msgstr "" -#: literals.py:196 +#: literals.py:197 msgid "Open Type font (Freetype 2.4.2)" msgstr "" -#: literals.py:198 +#: literals.py:199 msgid "Xv thumbnail format" msgstr "" -#: literals.py:199 literals.py:276 +#: literals.py:200 literals.py:277 msgid "16bit/pixel interleaved YUV" msgstr "" -#: literals.py:200 +#: literals.py:201 msgid "Palm pixmap" msgstr "" -#: literals.py:201 +#: literals.py:202 msgid "Common 2-dimensional bitmap format" msgstr "" -#: literals.py:202 +#: literals.py:203 msgid "Predefined pattern" msgstr "" -#: literals.py:203 +#: literals.py:204 msgid "Portable bitmap format (black and white)" msgstr "" -#: literals.py:204 literals.py:205 +#: literals.py:205 literals.py:206 msgid "Photo CD" msgstr "" -#: literals.py:206 +#: literals.py:207 msgid "Page Control Language" msgstr "" -#: literals.py:207 literals.py:220 +#: literals.py:208 literals.py:221 msgid "Apple Macintosh QuickDraw/PICT" msgstr "" -#: literals.py:208 +#: literals.py:209 msgid "ZSoft IBM PC Paintbrush" msgstr "" -#: literals.py:209 +#: literals.py:210 msgid "Palm Database ImageViewer Format" msgstr "" -#: literals.py:210 +#: literals.py:211 msgid "Portable Document Format" msgstr "" -#: literals.py:211 +#: literals.py:212 msgid "Portable Document Archive Format" msgstr "" -#: literals.py:212 +#: literals.py:213 msgid "Pentax Electronic File" msgstr "" -#: literals.py:213 +#: literals.py:214 msgid "Embrid Embroidery Format" msgstr "" -#: literals.py:214 +#: literals.py:215 msgid "Postscript Type 1 font (ASCII) (Freetype 2.4.2)" msgstr "" -#: literals.py:215 +#: literals.py:216 msgid "Postscript Type 1 font (binary) (Freetype 2.4.2)" msgstr "" -#: literals.py:216 +#: literals.py:217 msgid "Portable float format" msgstr "" -#: literals.py:217 +#: literals.py:218 msgid "Portable graymap format (gray scale)" msgstr "" -#: literals.py:218 +#: literals.py:219 msgid "JPEG-2000 VM Format" msgstr "" -#: literals.py:219 +#: literals.py:220 msgid "Personal Icon" msgstr "" -#: literals.py:221 +#: literals.py:222 msgid "Alias/Wavefront RLE image format" msgstr "" -#: literals.py:222 +#: literals.py:223 msgid "PIXAR raster file" msgstr "" -#: literals.py:223 +#: literals.py:224 msgid "Joint Photographic Experts Group JFIF format (62)" msgstr "" -#: literals.py:225 +#: literals.py:226 msgid "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:226 +#: literals.py:227 msgid "" "24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:227 +#: literals.py:228 msgid "" "32-bit RGBA PNG, semitransparency OK (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:228 +#: literals.py:229 msgid "" "8-bit indexed PNG, binary transparency only (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:229 +#: literals.py:230 msgid "Portable anymap" msgstr "" -#: literals.py:230 +#: literals.py:231 msgid "Portable pixmap format (color)" msgstr "" -#: literals.py:231 +#: literals.py:232 msgid "Show a preview an image enhancement, effect, or f/x" msgstr "" -#: literals.py:232 +#: literals.py:233 msgid "Adobe PostScript" msgstr "" -#: literals.py:233 +#: literals.py:234 msgid "Adobe Level II PostScript" msgstr "" -#: literals.py:234 +#: literals.py:235 msgid "Adobe Level III PostScript" msgstr "" -#: literals.py:235 +#: literals.py:236 msgid "Adobe Large Document Format" msgstr "" -#: literals.py:236 +#: literals.py:237 msgid "Adobe Photoshop bitmap" msgstr "" -#: literals.py:237 +#: literals.py:238 msgid "Pyramid encoded TIFF" msgstr "" -#: literals.py:238 literals.py:252 +#: literals.py:239 literals.py:253 msgid "Seattle Film Works" msgstr "" -#: literals.py:240 +#: literals.py:241 msgid "Raw red samples" msgstr "" -#: literals.py:241 +#: literals.py:242 msgid "Fuji CCD-RAW Graphic File" msgstr "" -#: literals.py:242 literals.py:258 +#: literals.py:243 literals.py:259 msgid "SUN Rasterfile" msgstr "" -#: literals.py:243 +#: literals.py:244 msgid "Raw red, blue, and green samples" msgstr "" -#: literals.py:244 +#: literals.py:245 msgid "Raw red, green, and blue samples" msgstr "" -#: literals.py:245 +#: literals.py:246 msgid "Raw red, green, blue, and matte samples" msgstr "" -#: literals.py:246 +#: literals.py:247 msgid "Raw red, green, blue, and opacity samples" msgstr "" -#: literals.py:247 +#: literals.py:248 msgid "Alias/Wavefront image" msgstr "" -#: literals.py:248 +#: literals.py:249 msgid "Utah Run length encoded image" msgstr "" -#: literals.py:250 +#: literals.py:251 msgid "ZX-Spectrum SCREEN$" msgstr "" -#: literals.py:251 +#: literals.py:252 msgid "Scitex HandShake" msgstr "" -#: literals.py:253 +#: literals.py:254 msgid "Irix RGB image" msgstr "" -#: literals.py:255 +#: literals.py:256 msgid "Sony Raw Format 2" msgstr "" -#: literals.py:256 +#: literals.py:257 msgid "Sony Raw Format" msgstr "" -#: literals.py:257 +#: literals.py:258 msgid "Steganographic image" msgstr "" -#: literals.py:259 +#: literals.py:260 msgid "Scalable Vector Graphics (XML 2.7.6, RSVG 2.32.0)" msgstr "" -#: literals.py:260 +#: literals.py:261 msgid "Scalable Vector Graphics (ZIP compressed) (XML 2.7.6, RSVG 2.32.0)" msgstr "" -#: literals.py:262 literals.py:272 +#: literals.py:263 literals.py:273 msgid "Text" msgstr "" -#: literals.py:264 +#: literals.py:265 msgid "EXIF Profile Thumbnail" msgstr "" -#: literals.py:265 +#: literals.py:266 msgid "Tagged Image File Format (LIBTIFF, Version 3.9.4)" msgstr "" -#: literals.py:266 +#: literals.py:267 msgid "Tagged Image File Format (64-bit) (LIBTIFF, Version 3.9.4)" msgstr "" -#: literals.py:267 +#: literals.py:268 msgid "Tile image with a texture" msgstr "" -#: literals.py:268 +#: literals.py:269 msgid "PSX TIM" msgstr "" -#: literals.py:269 +#: literals.py:270 msgid "TOPOL X Image" msgstr "" -#: literals.py:270 +#: literals.py:271 msgid "TrueType font collection (Freetype 2.4.2)" msgstr "" -#: literals.py:271 +#: literals.py:272 msgid "TrueType font (Freetype 2.4.2)" msgstr "" -#: literals.py:274 +#: literals.py:275 msgid "Unicode Text format" msgstr "" -#: literals.py:275 +#: literals.py:276 msgid "X-Motif UIL table" msgstr "" -#: literals.py:279 +#: literals.py:280 msgid "VICAR rasterfile format" msgstr "" -#: literals.py:280 +#: literals.py:281 msgid "Visual Image Directory" msgstr "" -#: literals.py:281 literals.py:298 +#: literals.py:282 literals.py:299 msgid "Khoros Visualization image" msgstr "" -#: literals.py:284 +#: literals.py:285 msgid "Wireless Bitmap (level 0) image" msgstr "" -#: literals.py:285 +#: literals.py:286 msgid "Windows Meta File" msgstr "" -#: literals.py:286 +#: literals.py:287 msgid "Word Perfect Graphics" msgstr "" -#: literals.py:287 +#: literals.py:288 msgid "Windows Media Video" msgstr "" -#: literals.py:288 +#: literals.py:289 msgid "Compressed Windows Meta File" msgstr "" -#: literals.py:290 +#: literals.py:291 msgid "X Window System" msgstr "" -#: literals.py:291 +#: literals.py:292 msgid "Foveon X3 (Sigma/Polaroid) Raw picture file" msgstr "" -#: literals.py:292 +#: literals.py:293 msgid "X Windows system bitmap (black and white)" msgstr "" -#: literals.py:293 +#: literals.py:294 msgid "Constant image uniform color" msgstr "" -#: literals.py:294 +#: literals.py:295 msgid "GIMP image" msgstr "" -#: literals.py:295 +#: literals.py:296 msgid "Adobe XML metadata" msgstr "" -#: literals.py:296 +#: literals.py:297 msgid "X Windows system pixmap (color)" msgstr "" -#: literals.py:297 +#: literals.py:298 msgid "Microsoft XML Paper Specification" msgstr "" -#: literals.py:299 +#: literals.py:300 msgid "XV thumbnail file" msgstr "" -#: literals.py:300 +#: literals.py:301 msgid "X Windows system window dump (color)" msgstr "" -#: literals.py:302 +#: literals.py:303 msgid "Raw yellow samples" msgstr "" -#: literals.py:303 +#: literals.py:304 msgid "CCIR 601 4:1:1 or 4:2:2 (8-bit only)" msgstr "" @@ -891,24 +891,34 @@ msgstr "" msgid "description" msgstr "" -#: conf/settings.py:10 +#: conf/settings.py:11 msgid "File path to imagemagick's convert program." msgstr "" -#: conf/settings.py:11 +#: conf/settings.py:12 msgid "File path to imagemagick's identify program." msgstr "" -#: conf/settings.py:12 +#: conf/settings.py:13 msgid "File path to graphicsmagick's program." msgstr "" -#: conf/settings.py:14 +#: conf/settings.py:15 msgid "" "Graphics conversion backend to use. Options are: converter.backends." "imagemagick, converter.backends.graphicsmagick and converter.backends.python." msgstr "" +#: conf/settings.py:16 +msgid "Path to the unoconv program." +msgstr "" + +#: conf/settings.py:17 +msgid "" +"Use alternate method of connection to LibreOffice using a pipe, it is slower " +"but less prone to segmentation faults." +msgstr "" + #: templates/converter_file_formats_help.html:3 msgid "Help" msgstr "" diff --git a/apps/converter/locale/es/LC_MESSAGES/django.po b/apps/converter/locale/es/LC_MESSAGES/django.po index 4569fd09e4..c6ce0d7469 100644 --- a/apps/converter/locale/es/LC_MESSAGES/django.po +++ b/apps/converter/locale/es/LC_MESSAGES/django.po @@ -1,882 +1,883 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-07 04:30+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:10 msgid "file formats" msgstr "formatos de archivo" -#: literals.py:18 +#: literals.py:19 msgid "Resize" msgstr "Cambiar el tamaño" -#: literals.py:19 +#: literals.py:20 msgid "Resize." msgstr "Cambiar el tamaño." -#: literals.py:21 literals.py:36 +#: literals.py:22 literals.py:37 msgid "width" msgstr "ancho" -#: literals.py:22 literals.py:37 +#: literals.py:23 literals.py:38 msgid "height" msgstr "altura" -#: literals.py:26 +#: literals.py:27 msgid "Rotate" msgstr "Girar" -#: literals.py:27 +#: literals.py:28 msgid "Rotate by n degress." msgstr "Girar n grados." -#: literals.py:29 +#: literals.py:30 msgid "degrees" msgstr "grados" -#: literals.py:33 +#: literals.py:34 msgid "Density" msgstr "Densidad" -#: literals.py:34 +#: literals.py:35 msgid "Change the resolution (ie: DPI) without resizing." msgstr "Cambia la resolución (es decir: DPI) sin cambiar el tamaño." -#: literals.py:41 +#: literals.py:42 msgid "Zoom" msgstr "Ampliar" -#: literals.py:42 +#: literals.py:43 msgid "Zoom by n percent." msgstr "Zoom por ciento n." -#: literals.py:44 +#: literals.py:45 msgid "percent" msgstr "por ciento" -#: literals.py:50 +#: literals.py:51 msgid "Hasselblad Photo RAW, CFV/H3D39II" msgstr "Foto Hasselblad RAW, CFV/H3D39II" -#: literals.py:51 literals.py:52 +#: literals.py:52 literals.py:53 msgid "Photoshop resource format" msgstr "Formato de recursos Photoshop" -#: literals.py:53 +#: literals.py:54 msgid "Photoshop resource text format" msgstr "Formato de recursos de texto Photoshop" -#: literals.py:54 +#: literals.py:55 msgid "Photoshop resource wide text format" msgstr "Formato a lo largo de recursos de texto Photoshop" -#: literals.py:56 +#: literals.py:57 msgid "Raw alpha samples" msgstr "Muestras crudas de transparencias" -#: literals.py:57 +#: literals.py:58 msgid "Adobe Illustrator CS2" msgstr "Adobe Illustrator CS2" -#: literals.py:58 +#: literals.py:59 msgid "Raw application information" msgstr "Información cruda de aplicación" -#: literals.py:59 +#: literals.py:60 msgid "Raw JPEG binary data" msgstr "Datos binarios crudos JPEG" -#: literals.py:60 +#: literals.py:61 msgid "PFS: 1st Publisher Clip Art" msgstr "Galería de imágenes de PFS: 1st Publisher" -#: literals.py:61 +#: literals.py:62 msgid "Sony Alpha DSLR Raw Image Format" msgstr "Formato de imagen crudas Sony Alpha DSLR" -#: literals.py:62 +#: literals.py:63 msgid "Microsoft Audio/Visual Interleaved" msgstr "Microsoft Audio / Visual Entrelazado" -#: literals.py:63 +#: literals.py:64 msgid "AVS X image" msgstr "Imagen AVS X" -#: literals.py:65 +#: literals.py:66 msgid "Raw blue samples" msgstr "Muestras crudas de color azul" -#: literals.py:66 +#: literals.py:67 msgid "Raw blue, green, and red samples" msgstr "Muestras crudas de colores azul, verde y rojo" -#: literals.py:67 +#: literals.py:68 msgid "Raw blue, green, red and alpha samples" msgstr "Muestras crudas de colores azul, verde, rojo y transparencias" -#: literals.py:68 +#: literals.py:69 msgid "Microsoft Windows bitmap image" msgstr "Microsoft Windows bitmap image" -#: literals.py:69 +#: literals.py:70 msgid "Microsoft Windows bitmap image version 2" msgstr "" -#: literals.py:70 +#: literals.py:71 msgid "Microsoft Windows bitmap image version 3" msgstr "" -#: literals.py:71 +#: literals.py:72 msgid "BRF ASCII Braille format" msgstr "Formato BRF ASCII Braille" -#: literals.py:72 +#: literals.py:73 msgid "Raw blue, red, and green samples" msgstr "Muestras crudas de colores azul, verde y rojo" -#: literals.py:74 +#: literals.py:75 msgid "Raw cyan samples" msgstr "Muestras crudas de color cian" -#: literals.py:75 literals.py:180 +#: literals.py:76 literals.py:181 msgid "Magick Persistent Cache image format" msgstr "" -#: literals.py:76 literals.py:77 +#: literals.py:77 literals.py:78 msgid "Continuous Acquisition and Life-cycle Support Type 1 image" msgstr "" -#: literals.py:78 +#: literals.py:79 msgid "Image caption" msgstr "Descripción de imagen" -#: literals.py:79 +#: literals.py:80 msgid "Cineon Image File" msgstr "Archivo de imagen Cineon" -#: literals.py:80 +#: literals.py:81 msgid "Cisco IP phone image format" msgstr "" -#: literals.py:81 +#: literals.py:82 msgid "Image Clip Mask" msgstr "" -#: literals.py:82 +#: literals.py:83 msgid "Raw cyan, magenta, yellow, and black samples" msgstr "" -#: literals.py:83 +#: literals.py:84 msgid "Raw cyan, magenta, yellow, black, and opacity samples" msgstr "" -#: literals.py:84 literals.py:85 +#: literals.py:85 literals.py:86 msgid "Canon Digital Camera Raw Image Format" msgstr "" -#: literals.py:86 +#: literals.py:87 msgid "Microsoft Cursor Icon" msgstr "Emblema de cursor Microsoft" -#: literals.py:87 +#: literals.py:88 msgid "DR Halo" msgstr "DR Halo" -#: literals.py:89 +#: literals.py:90 msgid "Digital Imaging and Communications in Medicine image" msgstr "" -#: literals.py:90 +#: literals.py:91 msgid "Kodak Digital Camera Raw Image File" msgstr "" -#: literals.py:91 +#: literals.py:92 msgid "ZSoft IBM PC multi-page Paintbrush" msgstr "" -#: literals.py:92 +#: literals.py:93 msgid "Microsoft DirectDraw Surface" msgstr "" -#: literals.py:93 +#: literals.py:94 msgid "Multi-face font package (Freetype 2.4.2)" msgstr "" -#: literals.py:94 +#: literals.py:95 msgid "Déjà vu" msgstr "Déjà vu" -#: literals.py:95 +#: literals.py:96 msgid "Adobe Digital Negative" msgstr "Adobe Digital Negative" -#: literals.py:96 +#: literals.py:97 msgid "Graphviz" msgstr "Graphviz" -#: literals.py:97 +#: literals.py:98 msgid "SMPTE 268M-2003 (DPX 2.0)" msgstr "" -#: literals.py:99 +#: literals.py:100 msgid "Encapsulated Portable Document Format" msgstr "" -#: literals.py:100 literals.py:105 +#: literals.py:101 literals.py:106 msgid "Adobe Encapsulated PostScript Interchange format" msgstr "" -#: literals.py:101 literals.py:104 +#: literals.py:102 literals.py:105 msgid "Adobe Encapsulated PostScript" msgstr "" -#: literals.py:102 +#: literals.py:103 msgid "Adobe Level II Encapsulated PostScript" msgstr "" -#: literals.py:103 +#: literals.py:104 msgid "Adobe Level III Encapsulated PostScript" msgstr "" -#: literals.py:106 +#: literals.py:107 msgid "Adobe Encapsulated PostScript with TIFF preview" msgstr "" -#: literals.py:107 +#: literals.py:108 msgid "Adobe Level II Encapsulated PostScript with TIFF preview" msgstr "" -#: literals.py:108 +#: literals.py:109 msgid "Adobe Level III Encapsulated PostScript with TIFF preview" msgstr "" -#: literals.py:109 +#: literals.py:110 msgid "Epson RAW Format" msgstr "" -#: literals.py:110 +#: literals.py:111 msgid "Exif digital camera binary data" msgstr "" -#: literals.py:111 +#: literals.py:112 msgid "High Dynamic-range (HDR)" msgstr "" -#: literals.py:113 +#: literals.py:114 msgid "Group 3 FAX (Not TIFF Group3 FAX)" msgstr "" -#: literals.py:114 +#: literals.py:115 msgid "Autodesk FLI animations file" msgstr "" -#: literals.py:115 +#: literals.py:116 msgid "Autodesk FLC animations file" msgstr "" -#: literals.py:116 literals.py:119 +#: literals.py:117 literals.py:120 msgid "Flexible Image Transport System" msgstr "" -#: literals.py:117 +#: literals.py:118 msgid "Kodak FlashPix file" msgstr "" -#: literals.py:118 literals.py:224 +#: literals.py:119 literals.py:225 msgid "Plasma fractal image" msgstr "" -#: literals.py:121 +#: literals.py:122 msgid "Raw green samples" msgstr "" -#: literals.py:122 +#: literals.py:123 msgid "Group 3 FAX" msgstr "" -#: literals.py:123 +#: literals.py:124 msgid "Raw green, blue, and red samples" msgstr "" -#: literals.py:124 +#: literals.py:125 msgid "GIMP brush file" msgstr "" -#: literals.py:125 +#: literals.py:126 msgid "CompuServe graphics interchange format (version 89a)" msgstr "" -#: literals.py:126 +#: literals.py:127 msgid "CompuServe graphics interchange format (version 87a)" msgstr "" -#: literals.py:127 +#: literals.py:128 msgid "Gradual passing from one shade to another" msgstr "" -#: literals.py:128 +#: literals.py:129 msgid "Raw gray samples" msgstr "" -#: literals.py:129 +#: literals.py:130 msgid "Raw green, red, and blue samples" msgstr "" -#: literals.py:130 +#: literals.py:131 msgid "Raw CCITT Group4" msgstr "" -#: literals.py:132 +#: literals.py:133 msgid "Histogram of the image" msgstr "" -#: literals.py:133 +#: literals.py:134 msgid "HRZ: Slow scan TV" msgstr "" -#: literals.py:134 literals.py:135 literals.py:254 +#: literals.py:135 literals.py:136 literals.py:255 msgid "Hypertext Markup Language and a client-side image map" msgstr "" -#: literals.py:137 literals.py:263 literals.py:278 literals.py:282 +#: literals.py:138 literals.py:264 literals.py:279 literals.py:283 msgid "Truevision Targa image" msgstr "" -#: literals.py:138 literals.py:139 +#: literals.py:139 literals.py:140 msgid "ICC Color Profile" msgstr "" -#: literals.py:140 literals.py:141 +#: literals.py:141 literals.py:142 msgid "Microsoft Icon" msgstr "" -#: literals.py:142 +#: literals.py:143 msgid "Hald CLUT identity image" msgstr "" -#: literals.py:143 +#: literals.py:144 msgid "LabEye image format" msgstr "" -#: literals.py:144 +#: literals.py:145 msgid "GraphicsMagick Embedded Image" msgstr "" -#: literals.py:145 +#: literals.py:146 msgid "The image format and characteristics" msgstr "" -#: literals.py:146 +#: literals.py:147 msgid "Base64-encoded inline images" msgstr "" -#: literals.py:147 +#: literals.py:148 msgid "IPL Image Sequence" msgstr "" -#: literals.py:148 +#: literals.py:149 msgid "IPTC Newsphoto" msgstr "" -#: literals.py:149 literals.py:150 +#: literals.py:150 literals.py:151 msgid "IPTC Newsphoto text format" msgstr "" -#: literals.py:151 +#: literals.py:152 msgid "ISO/TR 11548-1 format" msgstr "" -#: literals.py:153 literals.py:156 +#: literals.py:154 literals.py:157 msgid "JPEG-2000 Code Stream Syntax" msgstr "" -#: literals.py:154 +#: literals.py:155 msgid "JPEG Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:155 +#: literals.py:156 msgid "JPEG-2000 JP2 File Format Syntax" msgstr "" -#: literals.py:157 literals.py:158 +#: literals.py:158 literals.py:159 msgid "Joint Photographic Experts Group JFIF format (IJG JPEG 62)" msgstr "" -#: literals.py:159 +#: literals.py:160 msgid "JPEG-2000 File Format Syntax" msgstr "" -#: literals.py:161 +#: literals.py:162 msgid "Raw black samples" msgstr "" -#: literals.py:162 literals.py:163 +#: literals.py:163 literals.py:164 msgid "Kodak Digital Camera Raw Image Format" msgstr "" -#: literals.py:165 +#: literals.py:166 msgid "Image label" msgstr "" -#: literals.py:167 +#: literals.py:168 msgid "Raw magenta samples" msgstr "" -#: literals.py:168 literals.py:178 literals.py:181 literals.py:182 +#: literals.py:169 literals.py:179 literals.py:182 literals.py:183 msgid "MPEG Video Stream" msgstr "" -#: literals.py:169 +#: literals.py:170 msgid "Raw MPEG-4 Video" msgstr "" -#: literals.py:170 +#: literals.py:171 msgid "Colormap intensities and indices" msgstr "" -#: literals.py:171 +#: literals.py:172 msgid "MATLAB image format" msgstr "" -#: literals.py:172 +#: literals.py:173 msgid "MATTE raw opacity format" msgstr "" -#: literals.py:173 +#: literals.py:174 msgid "8-bit McIdas area file" msgstr "" -#: literals.py:174 +#: literals.py:175 msgid "Microsoft Image Composer (MIC) file" msgstr "" -#: literals.py:175 +#: literals.py:176 msgid "Magick Image File Format" msgstr "" -#: literals.py:176 +#: literals.py:177 msgid "" "Multiple-image Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:177 +#: literals.py:178 msgid "Raw Bi-level bitmap in least-significant-byte first order" msgstr "" -#: literals.py:179 +#: literals.py:180 msgid "MPEG-4 Video Stream" msgstr "" -#: literals.py:183 +#: literals.py:184 msgid "Sony (Minolta) Raw Image File" msgstr "" -#: literals.py:184 +#: literals.py:185 msgid "Magick Scripting Language" msgstr "" -#: literals.py:185 +#: literals.py:186 msgid "Windows 1 and 2 MSP file format" msgstr "" -#: literals.py:186 +#: literals.py:187 msgid "ImageMagick's own SVG internal renderer" msgstr "" -#: literals.py:187 +#: literals.py:188 msgid "MTV Raytracing image format" msgstr "" -#: literals.py:188 +#: literals.py:189 msgid "Magick Vector Graphics" msgstr "" -#: literals.py:190 +#: literals.py:191 msgid "Nikon Digital SLR Camera Raw Image File" msgstr "" -#: literals.py:191 +#: literals.py:192 msgid "Constant image of uniform color" msgstr "" -#: literals.py:193 +#: literals.py:194 msgid "Raw opacity samples" msgstr "" -#: literals.py:194 +#: literals.py:195 msgid "Olympus Digital Camera Raw Image File" msgstr "" -#: literals.py:195 +#: literals.py:196 msgid "On-the-air bitmap" msgstr "" -#: literals.py:196 +#: literals.py:197 msgid "Open Type font (Freetype 2.4.2)" msgstr "" -#: literals.py:198 +#: literals.py:199 msgid "Xv thumbnail format" msgstr "" -#: literals.py:199 literals.py:276 +#: literals.py:200 literals.py:277 msgid "16bit/pixel interleaved YUV" msgstr "" -#: literals.py:200 +#: literals.py:201 msgid "Palm pixmap" msgstr "" -#: literals.py:201 +#: literals.py:202 msgid "Common 2-dimensional bitmap format" msgstr "" -#: literals.py:202 +#: literals.py:203 msgid "Predefined pattern" msgstr "" -#: literals.py:203 +#: literals.py:204 msgid "Portable bitmap format (black and white)" msgstr "" -#: literals.py:204 literals.py:205 +#: literals.py:205 literals.py:206 msgid "Photo CD" msgstr "" -#: literals.py:206 +#: literals.py:207 msgid "Page Control Language" msgstr "" -#: literals.py:207 literals.py:220 +#: literals.py:208 literals.py:221 msgid "Apple Macintosh QuickDraw/PICT" msgstr "" -#: literals.py:208 +#: literals.py:209 msgid "ZSoft IBM PC Paintbrush" msgstr "" -#: literals.py:209 +#: literals.py:210 msgid "Palm Database ImageViewer Format" msgstr "" -#: literals.py:210 +#: literals.py:211 msgid "Portable Document Format" msgstr "" -#: literals.py:211 +#: literals.py:212 msgid "Portable Document Archive Format" msgstr "" -#: literals.py:212 +#: literals.py:213 msgid "Pentax Electronic File" msgstr "" -#: literals.py:213 +#: literals.py:214 msgid "Embrid Embroidery Format" msgstr "" -#: literals.py:214 +#: literals.py:215 msgid "Postscript Type 1 font (ASCII) (Freetype 2.4.2)" msgstr "" -#: literals.py:215 +#: literals.py:216 msgid "Postscript Type 1 font (binary) (Freetype 2.4.2)" msgstr "" -#: literals.py:216 +#: literals.py:217 msgid "Portable float format" msgstr "" -#: literals.py:217 +#: literals.py:218 msgid "Portable graymap format (gray scale)" msgstr "" -#: literals.py:218 +#: literals.py:219 msgid "JPEG-2000 VM Format" msgstr "" -#: literals.py:219 +#: literals.py:220 msgid "Personal Icon" msgstr "" -#: literals.py:221 +#: literals.py:222 msgid "Alias/Wavefront RLE image format" msgstr "" -#: literals.py:222 +#: literals.py:223 msgid "PIXAR raster file" msgstr "" -#: literals.py:223 +#: literals.py:224 msgid "Joint Photographic Experts Group JFIF format (62)" msgstr "" -#: literals.py:225 +#: literals.py:226 msgid "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:226 +#: literals.py:227 msgid "" "24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:227 +#: literals.py:228 msgid "" "32-bit RGBA PNG, semitransparency OK (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:228 +#: literals.py:229 msgid "" "8-bit indexed PNG, binary transparency only (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" msgstr "" -#: literals.py:229 +#: literals.py:230 msgid "Portable anymap" msgstr "" -#: literals.py:230 +#: literals.py:231 msgid "Portable pixmap format (color)" msgstr "" -#: literals.py:231 +#: literals.py:232 msgid "Show a preview an image enhancement, effect, or f/x" msgstr "" -#: literals.py:232 +#: literals.py:233 msgid "Adobe PostScript" msgstr "" -#: literals.py:233 +#: literals.py:234 msgid "Adobe Level II PostScript" msgstr "" -#: literals.py:234 +#: literals.py:235 msgid "Adobe Level III PostScript" msgstr "" -#: literals.py:235 +#: literals.py:236 msgid "Adobe Large Document Format" msgstr "" -#: literals.py:236 +#: literals.py:237 msgid "Adobe Photoshop bitmap" msgstr "" -#: literals.py:237 +#: literals.py:238 msgid "Pyramid encoded TIFF" msgstr "" -#: literals.py:238 literals.py:252 +#: literals.py:239 literals.py:253 msgid "Seattle Film Works" msgstr "" -#: literals.py:240 +#: literals.py:241 msgid "Raw red samples" msgstr "" -#: literals.py:241 +#: literals.py:242 msgid "Fuji CCD-RAW Graphic File" msgstr "" -#: literals.py:242 literals.py:258 +#: literals.py:243 literals.py:259 msgid "SUN Rasterfile" msgstr "" -#: literals.py:243 +#: literals.py:244 msgid "Raw red, blue, and green samples" msgstr "" -#: literals.py:244 +#: literals.py:245 msgid "Raw red, green, and blue samples" msgstr "" -#: literals.py:245 +#: literals.py:246 msgid "Raw red, green, blue, and matte samples" msgstr "" -#: literals.py:246 +#: literals.py:247 msgid "Raw red, green, blue, and opacity samples" msgstr "" -#: literals.py:247 +#: literals.py:248 msgid "Alias/Wavefront image" msgstr "" -#: literals.py:248 +#: literals.py:249 msgid "Utah Run length encoded image" msgstr "" -#: literals.py:250 +#: literals.py:251 msgid "ZX-Spectrum SCREEN$" msgstr "" -#: literals.py:251 +#: literals.py:252 msgid "Scitex HandShake" msgstr "" -#: literals.py:253 +#: literals.py:254 msgid "Irix RGB image" msgstr "" -#: literals.py:255 +#: literals.py:256 msgid "Sony Raw Format 2" msgstr "" -#: literals.py:256 +#: literals.py:257 msgid "Sony Raw Format" msgstr "" -#: literals.py:257 +#: literals.py:258 msgid "Steganographic image" msgstr "" -#: literals.py:259 +#: literals.py:260 msgid "Scalable Vector Graphics (XML 2.7.6, RSVG 2.32.0)" msgstr "" -#: literals.py:260 +#: literals.py:261 msgid "Scalable Vector Graphics (ZIP compressed) (XML 2.7.6, RSVG 2.32.0)" msgstr "" -#: literals.py:262 literals.py:272 +#: literals.py:263 literals.py:273 msgid "Text" msgstr "" -#: literals.py:264 +#: literals.py:265 msgid "EXIF Profile Thumbnail" msgstr "" -#: literals.py:265 +#: literals.py:266 msgid "Tagged Image File Format (LIBTIFF, Version 3.9.4)" msgstr "" -#: literals.py:266 +#: literals.py:267 msgid "Tagged Image File Format (64-bit) (LIBTIFF, Version 3.9.4)" msgstr "" -#: literals.py:267 +#: literals.py:268 msgid "Tile image with a texture" msgstr "" -#: literals.py:268 +#: literals.py:269 msgid "PSX TIM" msgstr "" -#: literals.py:269 +#: literals.py:270 msgid "TOPOL X Image" msgstr "" -#: literals.py:270 +#: literals.py:271 msgid "TrueType font collection (Freetype 2.4.2)" msgstr "" -#: literals.py:271 +#: literals.py:272 msgid "TrueType font (Freetype 2.4.2)" msgstr "" -#: literals.py:274 +#: literals.py:275 msgid "Unicode Text format" msgstr "" -#: literals.py:275 +#: literals.py:276 msgid "X-Motif UIL table" msgstr "" -#: literals.py:279 +#: literals.py:280 msgid "VICAR rasterfile format" msgstr "" -#: literals.py:280 +#: literals.py:281 msgid "Visual Image Directory" msgstr "" -#: literals.py:281 literals.py:298 +#: literals.py:282 literals.py:299 msgid "Khoros Visualization image" msgstr "" -#: literals.py:284 +#: literals.py:285 msgid "Wireless Bitmap (level 0) image" msgstr "" -#: literals.py:285 +#: literals.py:286 msgid "Windows Meta File" msgstr "" -#: literals.py:286 +#: literals.py:287 msgid "Word Perfect Graphics" msgstr "" -#: literals.py:287 +#: literals.py:288 msgid "Windows Media Video" msgstr "" -#: literals.py:288 +#: literals.py:289 msgid "Compressed Windows Meta File" msgstr "" -#: literals.py:290 +#: literals.py:291 msgid "X Window System" msgstr "" -#: literals.py:291 +#: literals.py:292 msgid "Foveon X3 (Sigma/Polaroid) Raw picture file" msgstr "" -#: literals.py:292 +#: literals.py:293 msgid "X Windows system bitmap (black and white)" msgstr "" -#: literals.py:293 +#: literals.py:294 msgid "Constant image uniform color" msgstr "" -#: literals.py:294 +#: literals.py:295 msgid "GIMP image" msgstr "" -#: literals.py:295 +#: literals.py:296 msgid "Adobe XML metadata" msgstr "" -#: literals.py:296 +#: literals.py:297 msgid "X Windows system pixmap (color)" msgstr "" -#: literals.py:297 +#: literals.py:298 msgid "Microsoft XML Paper Specification" msgstr "" -#: literals.py:299 +#: literals.py:300 msgid "XV thumbnail file" msgstr "" -#: literals.py:300 +#: literals.py:301 msgid "X Windows system window dump (color)" msgstr "" -#: literals.py:302 +#: literals.py:303 msgid "Raw yellow samples" msgstr "" -#: literals.py:303 +#: literals.py:304 msgid "CCIR 601 4:1:1 or 4:2:2 (8-bit only)" msgstr "" @@ -892,27 +893,36 @@ msgstr "nombre" msgid "description" msgstr "descripción" -#: conf/settings.py:10 +#: conf/settings.py:11 msgid "File path to imagemagick's convert program." msgstr "Ruta de archivo al programa de imagemagick, convert." -#: conf/settings.py:11 +#: conf/settings.py:12 msgid "File path to imagemagick's identify program." msgstr "Ruta de archivo al programa de imagemagick, identify." -#: conf/settings.py:12 +#: conf/settings.py:13 msgid "File path to graphicsmagick's program." msgstr "Ruta de archivo al programa imagemagick." -#: conf/settings.py:14 +#: conf/settings.py:15 msgid "" -"Graphics conversion backend to use. Options are: " -"converter.backends.imagemagick, converter.backends.graphicsmagick and " -"converter.backends.python." +"Graphics conversion backend to use. Options are: converter.backends." +"imagemagick, converter.backends.graphicsmagick and converter.backends.python." +msgstr "" +"Manejador de conversión a usarse. Opciones son: converter.backends." +"imagemagick, converter.backends.graphicsmagick y converter.backends.python." + +#: conf/settings.py:16 +#, fuzzy +msgid "Path to the unoconv program." +msgstr "Ruta de archivo al programa de imagemagick, convert." + +#: conf/settings.py:17 +msgid "" +"Use alternate method of connection to LibreOffice using a pipe, it is slower " +"but less prone to segmentation faults." msgstr "" -"Manejador de conversión a usarse. Opciones son: " -"converter.backends.imagemagick, converter.backends.graphicsmagick y " -"converter.backends.python." #: templates/converter_file_formats_help.html:3 msgid "Help" @@ -926,5 +936,3 @@ msgid "" msgstr "" "Estos son los formatos de archivo apoyados por el servidor del convertidor " "seleccionado. En este caso: '%(backend)s'" - - diff --git a/apps/converter/locale/pt/LC_MESSAGES/django.po b/apps/converter/locale/pt/LC_MESSAGES/django.po index e97db7bdf0..47d15e7686 100644 --- a/apps/converter/locale/pt/LC_MESSAGES/django.po +++ b/apps/converter/locale/pt/LC_MESSAGES/django.po @@ -1,654 +1,654 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. # Renata Oliveira , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 00:24+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:10 msgid "file formats" msgstr "formatos de arquivo" -#: literals.py:18 +#: literals.py:19 msgid "Resize" msgstr "Redimensionar" -#: literals.py:19 +#: literals.py:20 msgid "Resize." msgstr "Redimensionar." -#: literals.py:21 literals.py:36 +#: literals.py:22 literals.py:37 msgid "width" msgstr "largura" -#: literals.py:22 literals.py:37 +#: literals.py:23 literals.py:38 msgid "height" msgstr "altura" -#: literals.py:26 +#: literals.py:27 msgid "Rotate" msgstr "Rodar" -#: literals.py:27 +#: literals.py:28 msgid "Rotate by n degress." msgstr "Rodar por n graus." -#: literals.py:29 +#: literals.py:30 msgid "degrees" msgstr "graus" -#: literals.py:33 +#: literals.py:34 msgid "Density" msgstr "Densidade" -#: literals.py:34 +#: literals.py:35 msgid "Change the resolution (ie: DPI) without resizing." msgstr "Alterar a resolução (ie: DPI), sem redimensionamento." -#: literals.py:41 +#: literals.py:42 msgid "Zoom" msgstr "Zoom" -#: literals.py:42 +#: literals.py:43 msgid "Zoom by n percent." msgstr "Zoom por n percento." -#: literals.py:44 +#: literals.py:45 msgid "percent" msgstr "por cento" -#: literals.py:50 +#: literals.py:51 msgid "Hasselblad Photo RAW, CFV/H3D39II" msgstr "Hasselblad Photo RAW, CFV/H3D39II" -#: literals.py:51 literals.py:52 +#: literals.py:52 literals.py:53 msgid "Photoshop resource format" msgstr "Recurso de formato do Photoshop" -#: literals.py:53 +#: literals.py:54 msgid "Photoshop resource text format" msgstr "Recurso de formato de texto do Photoshop" -#: literals.py:54 +#: literals.py:55 msgid "Photoshop resource wide text format" msgstr "Recurso de formato de texto de largura do Photoshop" -#: literals.py:56 +#: literals.py:57 msgid "Raw alpha samples" msgstr "Amostras Raw alpha" -#: literals.py:57 +#: literals.py:58 msgid "Adobe Illustrator CS2" msgstr "Adobe Illustrator CS2" -#: literals.py:58 +#: literals.py:59 msgid "Raw application information" msgstr "Informações do aplicativo RAW" -#: literals.py:59 +#: literals.py:60 msgid "Raw JPEG binary data" msgstr "Dados binários de RAW JPEG" -#: literals.py:60 +#: literals.py:61 msgid "PFS: 1st Publisher Clip Art" msgstr "PFS: 1st Publisher Clip Art" -#: literals.py:61 +#: literals.py:62 msgid "Sony Alpha DSLR Raw Image Format" msgstr "Sony Alpha DSLR formato de imagem RAW" -#: literals.py:62 +#: literals.py:63 msgid "Microsoft Audio/Visual Interleaved" msgstr "Microsoft Audio/Visual Interleaved" -#: literals.py:63 +#: literals.py:64 msgid "AVS X image" msgstr "AVS X imagem" -#: literals.py:65 +#: literals.py:66 msgid "Raw blue samples" msgstr "Amostras RAW azul" -#: literals.py:66 +#: literals.py:67 msgid "Raw blue, green, and red samples" msgstr "Amostras RAW azul, verde e vermelho." -#: literals.py:67 +#: literals.py:68 msgid "Raw blue, green, red and alpha samples" msgstr "Amostras Raw azul, verde, vermelho e alfa" -#: literals.py:68 +#: literals.py:69 msgid "Microsoft Windows bitmap image" msgstr "Imagem bitmap do Microsoft Windows" -#: literals.py:69 +#: literals.py:70 msgid "Microsoft Windows bitmap image version 2" msgstr "Imagem bitmap Microsoft Windows versão 2 " -#: literals.py:70 +#: literals.py:71 msgid "Microsoft Windows bitmap image version 3" msgstr "Imagem bitmap Microsoft Windows versão 3" -#: literals.py:71 +#: literals.py:72 msgid "BRF ASCII Braille format" msgstr "BRF ASCII Braille format" -#: literals.py:72 +#: literals.py:73 msgid "Raw blue, red, and green samples" msgstr "Amostras Raw Azul, vermelho, verde" -#: literals.py:74 +#: literals.py:75 msgid "Raw cyan samples" msgstr "Amostras Raw ciano" -#: literals.py:75 literals.py:180 +#: literals.py:76 literals.py:181 msgid "Magick Persistent Cache image format" msgstr "Magick Persistent Cache image format" -#: literals.py:76 literals.py:77 +#: literals.py:77 literals.py:78 msgid "Continuous Acquisition and Life-cycle Support Type 1 image" msgstr "Continuous Acquisition and Life-cycle Support Type 1 image" -#: literals.py:78 +#: literals.py:79 msgid "Image caption" msgstr "Legenda da foto" -#: literals.py:79 +#: literals.py:80 msgid "Cineon Image File" msgstr "Cineon Arquivo de Imagem" -#: literals.py:80 +#: literals.py:81 msgid "Cisco IP phone image format" msgstr "Cisco IP phone image format" -#: literals.py:81 +#: literals.py:82 msgid "Image Clip Mask" msgstr "Image Clip Mask" -#: literals.py:82 +#: literals.py:83 msgid "Raw cyan, magenta, yellow, and black samples" msgstr "Amostras Raw ciano, magenta, amarelo e preto" -#: literals.py:83 +#: literals.py:84 msgid "Raw cyan, magenta, yellow, black, and opacity samples" msgstr "Amostras Raw ciano, magenta, amarelo, preto e opacidade" -#: literals.py:84 literals.py:85 +#: literals.py:85 literals.py:86 msgid "Canon Digital Camera Raw Image Format" msgstr "Canon Digital Camera Raw Image Format" -#: literals.py:86 +#: literals.py:87 msgid "Microsoft Cursor Icon" msgstr "Microsoft Cursor Icon" -#: literals.py:87 +#: literals.py:88 msgid "DR Halo" msgstr "DR Halo" -#: literals.py:89 +#: literals.py:90 msgid "Digital Imaging and Communications in Medicine image" msgstr "Digital Imaging and Communications in Medicine imagem" -#: literals.py:90 +#: literals.py:91 msgid "Kodak Digital Camera Raw Image File" msgstr "Kodak Digital Camera Raw Image File" -#: literals.py:91 +#: literals.py:92 msgid "ZSoft IBM PC multi-page Paintbrush" msgstr "ZSoft IBM PC multi-page Paintbrush" -#: literals.py:92 +#: literals.py:93 msgid "Microsoft DirectDraw Surface" msgstr "Microsoft DirectDraw Surface" -#: literals.py:93 +#: literals.py:94 msgid "Multi-face font package (Freetype 2.4.2)" msgstr "Multi-face font package (Freetype 2.4.2)" -#: literals.py:94 +#: literals.py:95 msgid "Déjà vu" msgstr "Déjà vu" -#: literals.py:95 +#: literals.py:96 msgid "Adobe Digital Negative" msgstr "Adobe Digital Negative" -#: literals.py:96 +#: literals.py:97 msgid "Graphviz" msgstr "Graphviz" -#: literals.py:97 +#: literals.py:98 msgid "SMPTE 268M-2003 (DPX 2.0)" msgstr "SMPTE 268M-2003 (DPX 2.0)" -#: literals.py:99 +#: literals.py:100 msgid "Encapsulated Portable Document Format" msgstr "Formato de Documento Portátil encapsulado" -#: literals.py:100 literals.py:105 +#: literals.py:101 literals.py:106 msgid "Adobe Encapsulated PostScript Interchange format" msgstr "Adobe PostScript formato encapsulado Interchange" -#: literals.py:101 literals.py:104 +#: literals.py:102 literals.py:105 msgid "Adobe Encapsulated PostScript" msgstr "Adobe Encapsulated PostScript" -#: literals.py:102 +#: literals.py:103 msgid "Adobe Level II Encapsulated PostScript" msgstr "Adobe Level II Encapsulated PostScript" -#: literals.py:103 +#: literals.py:104 msgid "Adobe Level III Encapsulated PostScript" msgstr "Adobe Level III Encapsulated PostScript" -#: literals.py:106 +#: literals.py:107 msgid "Adobe Encapsulated PostScript with TIFF preview" msgstr "Adobe Encapsulated PostScript with TIFF preview" -#: literals.py:107 +#: literals.py:108 msgid "Adobe Level II Encapsulated PostScript with TIFF preview" msgstr "Adobe Level II Encapsulated PostScript with TIFF preview" -#: literals.py:108 +#: literals.py:109 msgid "Adobe Level III Encapsulated PostScript with TIFF preview" msgstr "Adobe Level III Encapsulated PostScript with TIFF preview" -#: literals.py:109 +#: literals.py:110 msgid "Epson RAW Format" msgstr "Formato RAW Epson" -#: literals.py:110 +#: literals.py:111 msgid "Exif digital camera binary data" msgstr "Exif binário de dados digitais da câmera" -#: literals.py:111 +#: literals.py:112 msgid "High Dynamic-range (HDR)" msgstr "High Dynamic-range (HDR)" -#: literals.py:113 +#: literals.py:114 msgid "Group 3 FAX (Not TIFF Group3 FAX)" msgstr "Group 3 FAX (Not TIFF Group3 FAX)" -#: literals.py:114 +#: literals.py:115 msgid "Autodesk FLI animations file" msgstr "Autodesk FLI animations file" -#: literals.py:115 +#: literals.py:116 msgid "Autodesk FLC animations file" msgstr "Autodesk FLC animations file" -#: literals.py:116 literals.py:119 +#: literals.py:117 literals.py:120 msgid "Flexible Image Transport System" msgstr "Flexible Image Transport System" -#: literals.py:117 +#: literals.py:118 msgid "Kodak FlashPix file" msgstr "Kodak FlashPix file" -#: literals.py:118 literals.py:224 +#: literals.py:119 literals.py:225 msgid "Plasma fractal image" msgstr "Plasma fractal image" -#: literals.py:121 +#: literals.py:122 msgid "Raw green samples" msgstr "Amostras RAW verdes" -#: literals.py:122 +#: literals.py:123 msgid "Group 3 FAX" msgstr "Group 3 FAX" -#: literals.py:123 +#: literals.py:124 msgid "Raw green, blue, and red samples" msgstr "Amostras RAW verde, azul e vermelho" -#: literals.py:124 +#: literals.py:125 msgid "GIMP brush file" msgstr "GIMP brush file" -#: literals.py:125 +#: literals.py:126 msgid "CompuServe graphics interchange format (version 89a)" msgstr "CompuServe graphics interchange format (version 89a)" -#: literals.py:126 +#: literals.py:127 msgid "CompuServe graphics interchange format (version 87a)" msgstr "CompuServe graphics interchange format (version 87a)" -#: literals.py:127 +#: literals.py:128 msgid "Gradual passing from one shade to another" msgstr "Passagem gradual de um tom para outro" -#: literals.py:128 +#: literals.py:129 msgid "Raw gray samples" msgstr "Amostras RAW cinza" -#: literals.py:129 +#: literals.py:130 msgid "Raw green, red, and blue samples" msgstr "Amostras RAW verde, vermelho e azul" -#: literals.py:130 +#: literals.py:131 msgid "Raw CCITT Group4" msgstr "Raw CCITT Group4" -#: literals.py:132 +#: literals.py:133 msgid "Histogram of the image" msgstr "Histograma da imagem" -#: literals.py:133 +#: literals.py:134 msgid "HRZ: Slow scan TV" msgstr "HRZ: Slow scan TV" -#: literals.py:134 literals.py:135 literals.py:254 +#: literals.py:135 literals.py:136 literals.py:255 msgid "Hypertext Markup Language and a client-side image map" msgstr "Hypertext Markup Language e um mapa de imagem do lado do cliente" -#: literals.py:137 literals.py:263 literals.py:278 literals.py:282 +#: literals.py:138 literals.py:264 literals.py:279 literals.py:283 msgid "Truevision Targa image" msgstr "Truevision Targa image" -#: literals.py:138 literals.py:139 +#: literals.py:139 literals.py:140 msgid "ICC Color Profile" msgstr "ICC Color Profile" -#: literals.py:140 literals.py:141 +#: literals.py:141 literals.py:142 msgid "Microsoft Icon" msgstr "Microsoft Icon" -#: literals.py:142 +#: literals.py:143 msgid "Hald CLUT identity image" msgstr "Hald CLUT identity image" -#: literals.py:143 +#: literals.py:144 msgid "LabEye image format" msgstr "LabEye image format" -#: literals.py:144 +#: literals.py:145 msgid "GraphicsMagick Embedded Image" msgstr "GraphicsMagick Embedded Image" -#: literals.py:145 +#: literals.py:146 msgid "The image format and characteristics" msgstr "Formato de imagem e características" -#: literals.py:146 +#: literals.py:147 msgid "Base64-encoded inline images" msgstr "Base64-encoded imagens inline" -#: literals.py:147 +#: literals.py:148 msgid "IPL Image Sequence" msgstr "IPL Sequência de Imagens" -#: literals.py:148 +#: literals.py:149 msgid "IPTC Newsphoto" msgstr "IPTC Newsphoto" -#: literals.py:149 literals.py:150 +#: literals.py:150 literals.py:151 msgid "IPTC Newsphoto text format" msgstr "IPTC Newsphoto text format" -#: literals.py:151 +#: literals.py:152 msgid "ISO/TR 11548-1 format" msgstr "ISO/TR 11548-1 format" -#: literals.py:153 literals.py:156 +#: literals.py:154 literals.py:157 msgid "JPEG-2000 Code Stream Syntax" msgstr "JPEG-2000 Code Stream Syntax" -#: literals.py:154 +#: literals.py:155 msgid "JPEG Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "JPEG Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" -#: literals.py:155 +#: literals.py:156 msgid "JPEG-2000 JP2 File Format Syntax" msgstr "JPEG-2000 JP2 File Format Syntax" -#: literals.py:157 literals.py:158 +#: literals.py:158 literals.py:159 msgid "Joint Photographic Experts Group JFIF format (IJG JPEG 62)" msgstr "Joint Photographic Experts Group JFIF format (IJG JPEG 62)" -#: literals.py:159 +#: literals.py:160 msgid "JPEG-2000 File Format Syntax" msgstr "JPEG-2000 File Format Syntax" -#: literals.py:161 +#: literals.py:162 msgid "Raw black samples" msgstr "Amostras RAW preto" -#: literals.py:162 literals.py:163 +#: literals.py:163 literals.py:164 msgid "Kodak Digital Camera Raw Image Format" msgstr "Kodak Digital Camera Raw Image Format" -#: literals.py:165 +#: literals.py:166 msgid "Image label" msgstr "Rótulo de imagem" -#: literals.py:167 +#: literals.py:168 msgid "Raw magenta samples" msgstr "Amostras Raw magenta" -#: literals.py:168 literals.py:178 literals.py:181 literals.py:182 +#: literals.py:169 literals.py:179 literals.py:182 literals.py:183 msgid "MPEG Video Stream" msgstr "MPEG Video Stream" -#: literals.py:169 +#: literals.py:170 msgid "Raw MPEG-4 Video" msgstr "Raw MPEG-4 Video" -#: literals.py:170 +#: literals.py:171 msgid "Colormap intensities and indices" msgstr "Intensidades do mapa de cores e índices" -#: literals.py:171 +#: literals.py:172 msgid "MATLAB image format" msgstr "MATLAB image format" -#: literals.py:172 +#: literals.py:173 msgid "MATTE raw opacity format" msgstr "MATTE raw opacity format" -#: literals.py:173 +#: literals.py:174 msgid "8-bit McIdas area file" msgstr "8-bit McIdas area file" -#: literals.py:174 +#: literals.py:175 msgid "Microsoft Image Composer (MIC) file" msgstr "Microsoft Image Composer (MIC) file" -#: literals.py:175 +#: literals.py:176 msgid "Magick Image File Format" msgstr "Magick Image File Format" -#: literals.py:176 +#: literals.py:177 msgid "" "Multiple-image Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" "Multiple-image Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" -#: literals.py:177 +#: literals.py:178 msgid "Raw Bi-level bitmap in least-significant-byte first order" msgstr "Raw Bi-level bitmap in least-significant-byte first order" -#: literals.py:179 +#: literals.py:180 msgid "MPEG-4 Video Stream" msgstr "MPEG-4 Video Stream" -#: literals.py:183 +#: literals.py:184 msgid "Sony (Minolta) Raw Image File" msgstr "Sony (Minolta) Raw Image File" -#: literals.py:184 +#: literals.py:185 msgid "Magick Scripting Language" msgstr "Magick Scripting Language" -#: literals.py:185 +#: literals.py:186 msgid "Windows 1 and 2 MSP file format" msgstr "Windows 1 and 2 MSP file format" -#: literals.py:186 +#: literals.py:187 msgid "ImageMagick's own SVG internal renderer" msgstr "ImageMagick's own SVG internal renderer" -#: literals.py:187 +#: literals.py:188 msgid "MTV Raytracing image format" msgstr "MTV Raytracing image format" -#: literals.py:188 +#: literals.py:189 msgid "Magick Vector Graphics" msgstr "Magick Vector Graphics" -#: literals.py:190 +#: literals.py:191 msgid "Nikon Digital SLR Camera Raw Image File" msgstr "Nikon Digital SLR Camera Raw Image File" -#: literals.py:191 +#: literals.py:192 msgid "Constant image of uniform color" msgstr "Imagem constante de cor uniforme" -#: literals.py:193 +#: literals.py:194 msgid "Raw opacity samples" msgstr "Amostras Raw de opacidade" -#: literals.py:194 +#: literals.py:195 msgid "Olympus Digital Camera Raw Image File" msgstr "Olympus Digital Camera Raw Image File" -#: literals.py:195 +#: literals.py:196 msgid "On-the-air bitmap" msgstr "On-the-air bitmap" -#: literals.py:196 +#: literals.py:197 msgid "Open Type font (Freetype 2.4.2)" msgstr "Open Type font (Freetype 2.4.2)" -#: literals.py:198 +#: literals.py:199 msgid "Xv thumbnail format" msgstr "Xv thumbnail format" -#: literals.py:199 literals.py:276 +#: literals.py:200 literals.py:277 msgid "16bit/pixel interleaved YUV" msgstr "16bit/pixel interleaved YUV" -#: literals.py:200 +#: literals.py:201 msgid "Palm pixmap" msgstr "Palm pixmap" -#: literals.py:201 +#: literals.py:202 msgid "Common 2-dimensional bitmap format" msgstr "Common 2-dimensional bitmap format" -#: literals.py:202 +#: literals.py:203 msgid "Predefined pattern" msgstr "Padrão pré-definido" -#: literals.py:203 +#: literals.py:204 msgid "Portable bitmap format (black and white)" msgstr "Formato bitmap portátil (preto e branco)" -#: literals.py:204 literals.py:205 +#: literals.py:205 literals.py:206 msgid "Photo CD" msgstr "Photo CD" -#: literals.py:206 +#: literals.py:207 msgid "Page Control Language" msgstr "Page Control Language" -#: literals.py:207 literals.py:220 +#: literals.py:208 literals.py:221 msgid "Apple Macintosh QuickDraw/PICT" msgstr "Apple Macintosh QuickDraw/PICT" -#: literals.py:208 +#: literals.py:209 msgid "ZSoft IBM PC Paintbrush" msgstr "ZSoft IBM PC Paintbrush" -#: literals.py:209 +#: literals.py:210 msgid "Palm Database ImageViewer Format" msgstr "Palm Database ImageViewer Format" -#: literals.py:210 +#: literals.py:211 msgid "Portable Document Format" msgstr "Portable Document Format" -#: literals.py:211 +#: literals.py:212 msgid "Portable Document Archive Format" msgstr "Portable Document Archive Format" -#: literals.py:212 +#: literals.py:213 msgid "Pentax Electronic File" msgstr "Pentax Electronic File" -#: literals.py:213 +#: literals.py:214 msgid "Embrid Embroidery Format" msgstr "Embrid Embroidery Format" -#: literals.py:214 +#: literals.py:215 msgid "Postscript Type 1 font (ASCII) (Freetype 2.4.2)" msgstr "Postscript Type 1 font (ASCII) (Freetype 2.4.2)" -#: literals.py:215 +#: literals.py:216 msgid "Postscript Type 1 font (binary) (Freetype 2.4.2)" msgstr "Postscript Type 1 font (binary) (Freetype 2.4.2)" -#: literals.py:216 +#: literals.py:217 msgid "Portable float format" msgstr "Portable float format" -#: literals.py:217 +#: literals.py:218 msgid "Portable graymap format (gray scale)" msgstr "Portable graymap format (gray scale)" -#: literals.py:218 +#: literals.py:219 msgid "JPEG-2000 VM Format" msgstr "JPEG-2000 VM Format" -#: literals.py:219 +#: literals.py:220 msgid "Personal Icon" msgstr "Ícone pessoal" -#: literals.py:221 +#: literals.py:222 msgid "Alias/Wavefront RLE image format" msgstr "Alias/Wavefront RLE image format" -#: literals.py:222 +#: literals.py:223 msgid "PIXAR raster file" msgstr "PIXAR raster file" -#: literals.py:223 +#: literals.py:224 msgid "Joint Photographic Experts Group JFIF format (62)" msgstr "Joint Photographic Experts Group JFIF format (62)" -#: literals.py:225 -msgid "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" -msgstr "" -"Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" - #: literals.py:226 -msgid "" -"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" -msgstr "" -"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgid "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" #: literals.py:227 msgid "" +"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" +"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" + +#: literals.py:228 +msgid "" "32-bit RGBA PNG, semitransparency OK (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" msgstr "" "32-bit RGBA PNG, semitransparency OK (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" -#: literals.py:228 +#: literals.py:229 msgid "" "8-bit indexed PNG, binary transparency only (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" @@ -656,235 +656,235 @@ msgstr "" "8-bit indexed PNG, binary transparency only (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" -#: literals.py:229 +#: literals.py:230 msgid "Portable anymap" msgstr "Portable anymap" -#: literals.py:230 +#: literals.py:231 msgid "Portable pixmap format (color)" msgstr "Portable pixmap format (color)" -#: literals.py:231 +#: literals.py:232 msgid "Show a preview an image enhancement, effect, or f/x" msgstr "Mostrar uma visualização uma melhoria de imagem, efeito, ou f/x" -#: literals.py:232 +#: literals.py:233 msgid "Adobe PostScript" msgstr "Adobe PostScript" -#: literals.py:233 +#: literals.py:234 msgid "Adobe Level II PostScript" msgstr "Adobe Level II PostScript" -#: literals.py:234 +#: literals.py:235 msgid "Adobe Level III PostScript" msgstr "Adobe Level III PostScript" -#: literals.py:235 +#: literals.py:236 msgid "Adobe Large Document Format" msgstr "Adobe Large Document Format" -#: literals.py:236 +#: literals.py:237 msgid "Adobe Photoshop bitmap" msgstr "Adobe Photoshop bitmap" -#: literals.py:237 +#: literals.py:238 msgid "Pyramid encoded TIFF" msgstr "Pyramid encoded TIFF" -#: literals.py:238 literals.py:252 +#: literals.py:239 literals.py:253 msgid "Seattle Film Works" msgstr "Seattle Film Works" -#: literals.py:240 +#: literals.py:241 msgid "Raw red samples" msgstr "Amostras RAW vermelhas" -#: literals.py:241 +#: literals.py:242 msgid "Fuji CCD-RAW Graphic File" msgstr "Fuji CCD-RAW Graphic File" -#: literals.py:242 literals.py:258 +#: literals.py:243 literals.py:259 msgid "SUN Rasterfile" msgstr "SUN Rasterfile" -#: literals.py:243 +#: literals.py:244 msgid "Raw red, blue, and green samples" msgstr "Amostras RAW vermelhas, azul, verde" -#: literals.py:244 +#: literals.py:245 msgid "Raw red, green, and blue samples" msgstr "Amostras Raw vermelho, verde, azul" -#: literals.py:245 +#: literals.py:246 msgid "Raw red, green, blue, and matte samples" msgstr "Raw red, green, blue, and matte samples" -#: literals.py:246 +#: literals.py:247 msgid "Raw red, green, blue, and opacity samples" msgstr "Amostras Raw vermelho, verde, azul, e opacidade" -#: literals.py:247 +#: literals.py:248 msgid "Alias/Wavefront image" msgstr "Alias/Wavefront image" -#: literals.py:248 +#: literals.py:249 msgid "Utah Run length encoded image" msgstr "Utah Run length encoded image" -#: literals.py:250 +#: literals.py:251 msgid "ZX-Spectrum SCREEN$" msgstr "ZX-Spectrum SCREEN$" -#: literals.py:251 +#: literals.py:252 msgid "Scitex HandShake" msgstr "Scitex HandShake" -#: literals.py:253 +#: literals.py:254 msgid "Irix RGB image" msgstr "Irix RGB image" -#: literals.py:255 +#: literals.py:256 msgid "Sony Raw Format 2" msgstr "Sony Raw Format 2" -#: literals.py:256 +#: literals.py:257 msgid "Sony Raw Format" msgstr "Sony Raw Format" -#: literals.py:257 +#: literals.py:258 msgid "Steganographic image" msgstr "Steganographic image" -#: literals.py:259 +#: literals.py:260 msgid "Scalable Vector Graphics (XML 2.7.6, RSVG 2.32.0)" msgstr "Scalable Vector Graphics (XML 2.7.6, RSVG 2.32.0)" -#: literals.py:260 +#: literals.py:261 msgid "Scalable Vector Graphics (ZIP compressed) (XML 2.7.6, RSVG 2.32.0)" msgstr "Scalable Vector Graphics (ZIP compressed) (XML 2.7.6, RSVG 2.32.0)" -#: literals.py:262 literals.py:272 +#: literals.py:263 literals.py:273 msgid "Text" msgstr "Texto" -#: literals.py:264 +#: literals.py:265 msgid "EXIF Profile Thumbnail" msgstr "EXIF Profile Thumbnail" -#: literals.py:265 +#: literals.py:266 msgid "Tagged Image File Format (LIBTIFF, Version 3.9.4)" msgstr "Tagged Image File Format (LIBTIFF, Version 3.9.4)" -#: literals.py:266 +#: literals.py:267 msgid "Tagged Image File Format (64-bit) (LIBTIFF, Version 3.9.4)" msgstr "Tagged Image File Format (64-bit) (LIBTIFF, Version 3.9.4)" -#: literals.py:267 +#: literals.py:268 msgid "Tile image with a texture" msgstr "Imagem da telha com uma textura" -#: literals.py:268 +#: literals.py:269 msgid "PSX TIM" msgstr "PSX TIM" -#: literals.py:269 +#: literals.py:270 msgid "TOPOL X Image" msgstr "TOPOL X Image" -#: literals.py:270 +#: literals.py:271 msgid "TrueType font collection (Freetype 2.4.2)" msgstr "TrueType font collection (Freetype 2.4.2)" -#: literals.py:271 +#: literals.py:272 msgid "TrueType font (Freetype 2.4.2)" msgstr "TrueType font (Freetype 2.4.2)" -#: literals.py:274 +#: literals.py:275 msgid "Unicode Text format" msgstr "Formato de texto Unicode" -#: literals.py:275 +#: literals.py:276 msgid "X-Motif UIL table" msgstr "X-Motif UIL table" -#: literals.py:279 +#: literals.py:280 msgid "VICAR rasterfile format" msgstr "VICAR rasterfile format" -#: literals.py:280 +#: literals.py:281 msgid "Visual Image Directory" msgstr "Visual Image Directory" -#: literals.py:281 literals.py:298 +#: literals.py:282 literals.py:299 msgid "Khoros Visualization image" msgstr "Khoros Visualization image" -#: literals.py:284 +#: literals.py:285 msgid "Wireless Bitmap (level 0) image" msgstr "Wireless Bitmap (level 0) image" -#: literals.py:285 +#: literals.py:286 msgid "Windows Meta File" msgstr "Windows Meta File" -#: literals.py:286 +#: literals.py:287 msgid "Word Perfect Graphics" msgstr "Word Perfect Graphics" -#: literals.py:287 +#: literals.py:288 msgid "Windows Media Video" msgstr "Windows Media Video" -#: literals.py:288 +#: literals.py:289 msgid "Compressed Windows Meta File" msgstr "Compressed Windows Meta File" -#: literals.py:290 +#: literals.py:291 msgid "X Window System" msgstr "X Window System" -#: literals.py:291 +#: literals.py:292 msgid "Foveon X3 (Sigma/Polaroid) Raw picture file" msgstr "Foveon X3 (Sigma/Polaroid) Raw picture file" -#: literals.py:292 +#: literals.py:293 msgid "X Windows system bitmap (black and white)" msgstr "X Windows system bitmap (black and white)" -#: literals.py:293 +#: literals.py:294 msgid "Constant image uniform color" msgstr "Constant image uniform color" -#: literals.py:294 +#: literals.py:295 msgid "GIMP image" msgstr "imagem GIMP" -#: literals.py:295 +#: literals.py:296 msgid "Adobe XML metadata" msgstr "matadados Adobe XML" -#: literals.py:296 +#: literals.py:297 msgid "X Windows system pixmap (color)" msgstr "X Windows system pixmap (color)" -#: literals.py:297 +#: literals.py:298 msgid "Microsoft XML Paper Specification" msgstr "Microsoft XML Paper Specification" -#: literals.py:299 +#: literals.py:300 msgid "XV thumbnail file" msgstr "XV thumbnail file" -#: literals.py:300 +#: literals.py:301 msgid "X Windows system window dump (color)" msgstr "X Windows system window dump (color)" -#: literals.py:302 +#: literals.py:303 msgid "Raw yellow samples" msgstr "Amostras Raw amarelas" -#: literals.py:303 +#: literals.py:304 msgid "CCIR 601 4:1:1 or 4:2:2 (8-bit only)" msgstr "CCIR 601 4:1:1 or 4:2:2 (8-bit only)" @@ -900,27 +900,36 @@ msgstr "nome" msgid "description" msgstr "descrição" -#: conf/settings.py:10 +#: conf/settings.py:11 msgid "File path to imagemagick's convert program." msgstr "Caminho do arquivo para o programa imagemagick converter." -#: conf/settings.py:11 +#: conf/settings.py:12 msgid "File path to imagemagick's identify program." msgstr "Caminho do arquivo para o programa imagemagick identificar." -#: conf/settings.py:12 +#: conf/settings.py:13 msgid "File path to graphicsmagick's program." msgstr "Caminho do arquivo para o programa graphicsmagick." -#: conf/settings.py:14 +#: conf/settings.py:15 msgid "" -"Graphics conversion backend to use. Options are: " -"converter.backends.imagemagick, converter.backends.graphicsmagick and " -"converter.backends.python." +"Graphics conversion backend to use. Options are: converter.backends." +"imagemagick, converter.backends.graphicsmagick and converter.backends.python." +msgstr "" +"Gráficos de conversão backend para usar. As opções são: converter.backends." +"imagemagick, converter.backends.graphicsmagick and converter.backends.python." + +#: conf/settings.py:16 +#, fuzzy +msgid "Path to the unoconv program." +msgstr "Caminho do arquivo para o programa imagemagick converter." + +#: conf/settings.py:17 +msgid "" +"Use alternate method of connection to LibreOffice using a pipe, it is slower " +"but less prone to segmentation faults." msgstr "" -"Gráficos de conversão backend para usar. As opções são: " -"converter.backends.imagemagick, converter.backends.graphicsmagick and " -"converter.backends.python." #: templates/converter_file_formats_help.html:3 msgid "Help" @@ -934,5 +943,3 @@ msgid "" msgstr "" "Estes são os formatos de arquivos suportados pelo servidor conversor " "selecionado. Neste caso: ' %(backend)s '" - - diff --git a/apps/converter/locale/ru/LC_MESSAGES/django.po b/apps/converter/locale/ru/LC_MESSAGES/django.po index ff7409097e..9244a1f2d9 100644 --- a/apps/converter/locale/ru/LC_MESSAGES/django.po +++ b/apps/converter/locale/ru/LC_MESSAGES/django.po @@ -1,652 +1,653 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 22:25+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:10 msgid "file formats" msgstr "форматы файлов" -#: literals.py:18 +#: literals.py:19 msgid "Resize" msgstr "Изменение размера" -#: literals.py:19 +#: literals.py:20 msgid "Resize." msgstr "Изменить размер." -#: literals.py:21 literals.py:36 +#: literals.py:22 literals.py:37 msgid "width" msgstr "ширина" -#: literals.py:22 literals.py:37 +#: literals.py:23 literals.py:38 msgid "height" msgstr "высота" -#: literals.py:26 +#: literals.py:27 msgid "Rotate" msgstr "Вращать" -#: literals.py:27 +#: literals.py:28 msgid "Rotate by n degress." msgstr "Поворот на n градусов." -#: literals.py:29 +#: literals.py:30 msgid "degrees" msgstr "градусы" -#: literals.py:33 +#: literals.py:34 msgid "Density" msgstr "Плотность" -#: literals.py:34 +#: literals.py:35 msgid "Change the resolution (ie: DPI) without resizing." msgstr "Изменение разрешения (т.е. точек на дюйм) без изменения размера." -#: literals.py:41 +#: literals.py:42 msgid "Zoom" msgstr "Увеличить" -#: literals.py:42 +#: literals.py:43 msgid "Zoom by n percent." msgstr "Увеличить на n %." -#: literals.py:44 +#: literals.py:45 msgid "percent" msgstr "процент" -#: literals.py:50 +#: literals.py:51 msgid "Hasselblad Photo RAW, CFV/H3D39II" msgstr "Hasselblad Photo RAW, CFV/H3D39II" -#: literals.py:51 literals.py:52 +#: literals.py:52 literals.py:53 msgid "Photoshop resource format" msgstr "Photoshop resource format" -#: literals.py:53 +#: literals.py:54 msgid "Photoshop resource text format" msgstr "Photoshop resource text format" -#: literals.py:54 +#: literals.py:55 msgid "Photoshop resource wide text format" msgstr "Photoshop resource wide text format" -#: literals.py:56 +#: literals.py:57 msgid "Raw alpha samples" msgstr "Raw alpha samples" -#: literals.py:57 +#: literals.py:58 msgid "Adobe Illustrator CS2" msgstr "Adobe Illustrator CS2" -#: literals.py:58 +#: literals.py:59 msgid "Raw application information" msgstr "Raw application information" -#: literals.py:59 +#: literals.py:60 msgid "Raw JPEG binary data" msgstr "Raw JPEG binary data" -#: literals.py:60 +#: literals.py:61 msgid "PFS: 1st Publisher Clip Art" msgstr "PFS: 1st Publisher Clip Art" -#: literals.py:61 +#: literals.py:62 msgid "Sony Alpha DSLR Raw Image Format" msgstr "Sony Alpha DSLR Raw Image Format" -#: literals.py:62 +#: literals.py:63 msgid "Microsoft Audio/Visual Interleaved" msgstr "Microsoft Audio/Visual Interleaved" -#: literals.py:63 +#: literals.py:64 msgid "AVS X image" msgstr "AVS X image" -#: literals.py:65 +#: literals.py:66 msgid "Raw blue samples" msgstr "Raw blue samples" -#: literals.py:66 +#: literals.py:67 msgid "Raw blue, green, and red samples" msgstr "Raw blue, green, and red samples" -#: literals.py:67 +#: literals.py:68 msgid "Raw blue, green, red and alpha samples" msgstr "Raw blue, green, red and alpha samples" -#: literals.py:68 +#: literals.py:69 msgid "Microsoft Windows bitmap image" msgstr "Microsoft Windows bitmap image" -#: literals.py:69 +#: literals.py:70 msgid "Microsoft Windows bitmap image version 2" msgstr "Microsoft Windows bitmap image version 2" -#: literals.py:70 +#: literals.py:71 msgid "Microsoft Windows bitmap image version 3" msgstr "Microsoft Windows bitmap image version 3" -#: literals.py:71 +#: literals.py:72 msgid "BRF ASCII Braille format" msgstr "BRF ASCII Braille format" -#: literals.py:72 +#: literals.py:73 msgid "Raw blue, red, and green samples" msgstr "Raw blue, red, and green samples" -#: literals.py:74 +#: literals.py:75 msgid "Raw cyan samples" msgstr "Raw cyan samples" -#: literals.py:75 literals.py:180 +#: literals.py:76 literals.py:181 msgid "Magick Persistent Cache image format" msgstr "Magick Persistent Cache image format" -#: literals.py:76 literals.py:77 +#: literals.py:77 literals.py:78 msgid "Continuous Acquisition and Life-cycle Support Type 1 image" msgstr "Continuous Acquisition and Life-cycle Support Type 1 image" -#: literals.py:78 +#: literals.py:79 msgid "Image caption" msgstr "описание изображения" -#: literals.py:79 +#: literals.py:80 msgid "Cineon Image File" msgstr "Cineon Image File" -#: literals.py:80 +#: literals.py:81 msgid "Cisco IP phone image format" msgstr "Cisco IP phone image format" -#: literals.py:81 +#: literals.py:82 msgid "Image Clip Mask" msgstr "Image Clip Mask" -#: literals.py:82 +#: literals.py:83 msgid "Raw cyan, magenta, yellow, and black samples" msgstr "Raw cyan, magenta, yellow, and black samples" -#: literals.py:83 +#: literals.py:84 msgid "Raw cyan, magenta, yellow, black, and opacity samples" msgstr "Raw cyan, magenta, yellow, black, and opacity samples" -#: literals.py:84 literals.py:85 +#: literals.py:85 literals.py:86 msgid "Canon Digital Camera Raw Image Format" msgstr "Canon Digital Camera Raw Image Format" -#: literals.py:86 +#: literals.py:87 msgid "Microsoft Cursor Icon" msgstr "Microsoft Cursor Icon" -#: literals.py:87 +#: literals.py:88 msgid "DR Halo" msgstr "DR Halo" -#: literals.py:89 +#: literals.py:90 msgid "Digital Imaging and Communications in Medicine image" msgstr "Digital Imaging and Communications in Medicine image (DICOM)" -#: literals.py:90 +#: literals.py:91 msgid "Kodak Digital Camera Raw Image File" msgstr "Kodak Digital Camera Raw Image File" -#: literals.py:91 +#: literals.py:92 msgid "ZSoft IBM PC multi-page Paintbrush" msgstr "ZSoft IBM PC multi-page Paintbrush" -#: literals.py:92 +#: literals.py:93 msgid "Microsoft DirectDraw Surface" msgstr "Microsoft DirectDraw Surface" -#: literals.py:93 +#: literals.py:94 msgid "Multi-face font package (Freetype 2.4.2)" msgstr "Multi-face font package (Freetype 2.4.2)" -#: literals.py:94 +#: literals.py:95 msgid "Déjà vu" msgstr "Déjà vu" -#: literals.py:95 +#: literals.py:96 msgid "Adobe Digital Negative" msgstr "Adobe Digital Negative" -#: literals.py:96 +#: literals.py:97 msgid "Graphviz" msgstr "Graphviz" -#: literals.py:97 +#: literals.py:98 msgid "SMPTE 268M-2003 (DPX 2.0)" msgstr "SMPTE 268M-2003 (DPX 2.0)" -#: literals.py:99 +#: literals.py:100 msgid "Encapsulated Portable Document Format" msgstr "Encapsulated Portable Document Format" -#: literals.py:100 literals.py:105 +#: literals.py:101 literals.py:106 msgid "Adobe Encapsulated PostScript Interchange format" msgstr "Adobe Encapsulated PostScript Interchange format" -#: literals.py:101 literals.py:104 +#: literals.py:102 literals.py:105 msgid "Adobe Encapsulated PostScript" msgstr "Adobe Encapsulated PostScript" -#: literals.py:102 +#: literals.py:103 msgid "Adobe Level II Encapsulated PostScript" msgstr "Adobe Level II Encapsulated PostScript" -#: literals.py:103 +#: literals.py:104 msgid "Adobe Level III Encapsulated PostScript" msgstr "Adobe Level III Encapsulated PostScript" -#: literals.py:106 +#: literals.py:107 msgid "Adobe Encapsulated PostScript with TIFF preview" msgstr "Adobe Encapsulated PostScript with TIFF preview" -#: literals.py:107 +#: literals.py:108 msgid "Adobe Level II Encapsulated PostScript with TIFF preview" msgstr "Adobe Level II Encapsulated PostScript with TIFF preview" -#: literals.py:108 +#: literals.py:109 msgid "Adobe Level III Encapsulated PostScript with TIFF preview" msgstr "Adobe Level III Encapsulated PostScript with TIFF preview" -#: literals.py:109 +#: literals.py:110 msgid "Epson RAW Format" msgstr "Epson RAW Format" -#: literals.py:110 +#: literals.py:111 msgid "Exif digital camera binary data" msgstr "Exif digital camera binary data" -#: literals.py:111 +#: literals.py:112 msgid "High Dynamic-range (HDR)" msgstr "High Dynamic-range (HDR)" -#: literals.py:113 +#: literals.py:114 msgid "Group 3 FAX (Not TIFF Group3 FAX)" msgstr "Group 3 FAX (Not TIFF Group3 FAX)" -#: literals.py:114 +#: literals.py:115 msgid "Autodesk FLI animations file" msgstr "Autodesk FLI animations file" -#: literals.py:115 +#: literals.py:116 msgid "Autodesk FLC animations file" msgstr "Autodesk FLC animations file" -#: literals.py:116 literals.py:119 +#: literals.py:117 literals.py:120 msgid "Flexible Image Transport System" msgstr "Flexible Image Transport System" -#: literals.py:117 +#: literals.py:118 msgid "Kodak FlashPix file" msgstr "Kodak FlashPix file" -#: literals.py:118 literals.py:224 +#: literals.py:119 literals.py:225 msgid "Plasma fractal image" msgstr "Plasma fractal image" -#: literals.py:121 +#: literals.py:122 msgid "Raw green samples" msgstr "Raw green samples" -#: literals.py:122 +#: literals.py:123 msgid "Group 3 FAX" msgstr "Group 3 FAX" -#: literals.py:123 +#: literals.py:124 msgid "Raw green, blue, and red samples" msgstr "Raw green, blue, and red samples" -#: literals.py:124 +#: literals.py:125 msgid "GIMP brush file" msgstr "GIMP brush file" -#: literals.py:125 +#: literals.py:126 msgid "CompuServe graphics interchange format (version 89a)" msgstr "CompuServe graphics interchange format (version 89a)" -#: literals.py:126 +#: literals.py:127 msgid "CompuServe graphics interchange format (version 87a)" msgstr "CompuServe graphics interchange format (version 87a)" -#: literals.py:127 +#: literals.py:128 msgid "Gradual passing from one shade to another" msgstr "Gradual passing from one shade to another" -#: literals.py:128 +#: literals.py:129 msgid "Raw gray samples" msgstr "Raw gray samples" -#: literals.py:129 +#: literals.py:130 msgid "Raw green, red, and blue samples" msgstr "Raw green, red, and blue samples" -#: literals.py:130 +#: literals.py:131 msgid "Raw CCITT Group4" msgstr "Raw CCITT Group4" -#: literals.py:132 +#: literals.py:133 msgid "Histogram of the image" msgstr "Гистограмма изображения" -#: literals.py:133 +#: literals.py:134 msgid "HRZ: Slow scan TV" msgstr "HRZ: Slow scan TV" -#: literals.py:134 literals.py:135 literals.py:254 +#: literals.py:135 literals.py:136 literals.py:255 msgid "Hypertext Markup Language and a client-side image map" msgstr "Hypertext Markup Language and a client-side image map" -#: literals.py:137 literals.py:263 literals.py:278 literals.py:282 +#: literals.py:138 literals.py:264 literals.py:279 literals.py:283 msgid "Truevision Targa image" msgstr "Truevision Targa image" -#: literals.py:138 literals.py:139 +#: literals.py:139 literals.py:140 msgid "ICC Color Profile" msgstr "ICC Color Profile" -#: literals.py:140 literals.py:141 +#: literals.py:141 literals.py:142 msgid "Microsoft Icon" msgstr "Microsoft Icon" -#: literals.py:142 +#: literals.py:143 msgid "Hald CLUT identity image" msgstr "Hald CLUT identity image" -#: literals.py:143 +#: literals.py:144 msgid "LabEye image format" msgstr "LabEye image format" -#: literals.py:144 +#: literals.py:145 msgid "GraphicsMagick Embedded Image" msgstr "GraphicsMagick Embedded Image" -#: literals.py:145 +#: literals.py:146 msgid "The image format and characteristics" msgstr "Формат изображения и характеристики" -#: literals.py:146 +#: literals.py:147 msgid "Base64-encoded inline images" msgstr "Base64-encoded inline images" -#: literals.py:147 +#: literals.py:148 msgid "IPL Image Sequence" msgstr "IPL Image Sequence" -#: literals.py:148 +#: literals.py:149 msgid "IPTC Newsphoto" msgstr "IPTC Newsphoto" -#: literals.py:149 literals.py:150 +#: literals.py:150 literals.py:151 msgid "IPTC Newsphoto text format" msgstr "IPTC Newsphoto text format" -#: literals.py:151 +#: literals.py:152 msgid "ISO/TR 11548-1 format" msgstr "ISO/TR 11548-1 format" -#: literals.py:153 literals.py:156 +#: literals.py:154 literals.py:157 msgid "JPEG-2000 Code Stream Syntax" msgstr "JPEG-2000 Code Stream Syntax" -#: literals.py:154 +#: literals.py:155 msgid "JPEG Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "JPEG Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" -#: literals.py:155 +#: literals.py:156 msgid "JPEG-2000 JP2 File Format Syntax" msgstr "JPEG-2000 JP2 File Format Syntax" -#: literals.py:157 literals.py:158 +#: literals.py:158 literals.py:159 msgid "Joint Photographic Experts Group JFIF format (IJG JPEG 62)" msgstr "Joint Photographic Experts Group JFIF format (IJG JPEG 62)" -#: literals.py:159 +#: literals.py:160 msgid "JPEG-2000 File Format Syntax" msgstr "JPEG-2000 File Format Syntax" -#: literals.py:161 +#: literals.py:162 msgid "Raw black samples" msgstr "Raw black samples" -#: literals.py:162 literals.py:163 +#: literals.py:163 literals.py:164 msgid "Kodak Digital Camera Raw Image Format" msgstr "Kodak Digital Camera Raw Image Format" -#: literals.py:165 +#: literals.py:166 msgid "Image label" msgstr "этикетка изображения" -#: literals.py:167 +#: literals.py:168 msgid "Raw magenta samples" msgstr "Raw magenta samples" -#: literals.py:168 literals.py:178 literals.py:181 literals.py:182 +#: literals.py:169 literals.py:179 literals.py:182 literals.py:183 msgid "MPEG Video Stream" msgstr "MPEG Video Stream" -#: literals.py:169 +#: literals.py:170 msgid "Raw MPEG-4 Video" msgstr "Raw MPEG-4 Video" -#: literals.py:170 +#: literals.py:171 msgid "Colormap intensities and indices" msgstr "Colormap intensities and indices" -#: literals.py:171 +#: literals.py:172 msgid "MATLAB image format" msgstr "MATLAB image format" -#: literals.py:172 +#: literals.py:173 msgid "MATTE raw opacity format" msgstr "MATTE raw opacity format" -#: literals.py:173 +#: literals.py:174 msgid "8-bit McIdas area file" msgstr "8-bit McIdas area file" -#: literals.py:174 +#: literals.py:175 msgid "Microsoft Image Composer (MIC) file" msgstr "Microsoft Image Composer (MIC) file" -#: literals.py:175 +#: literals.py:176 msgid "Magick Image File Format" msgstr "Magick Image File Format" -#: literals.py:176 +#: literals.py:177 msgid "" "Multiple-image Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" msgstr "" "Multiple-image Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" -#: literals.py:177 +#: literals.py:178 msgid "Raw Bi-level bitmap in least-significant-byte first order" msgstr "Raw Bi-level bitmap in least-significant-byte first order" -#: literals.py:179 +#: literals.py:180 msgid "MPEG-4 Video Stream" msgstr "MPEG-4 Video Stream" -#: literals.py:183 +#: literals.py:184 msgid "Sony (Minolta) Raw Image File" msgstr "Sony (Minolta) Raw Image File" -#: literals.py:184 +#: literals.py:185 msgid "Magick Scripting Language" msgstr "Magick Scripting Language" -#: literals.py:185 +#: literals.py:186 msgid "Windows 1 and 2 MSP file format" msgstr "Windows 1 and 2 MSP file format" -#: literals.py:186 +#: literals.py:187 msgid "ImageMagick's own SVG internal renderer" msgstr "собственный рендер SVG ImageMagick" -#: literals.py:187 +#: literals.py:188 msgid "MTV Raytracing image format" msgstr "MTV Raytracing image format" -#: literals.py:188 +#: literals.py:189 msgid "Magick Vector Graphics" msgstr "Magick Vector Graphics" -#: literals.py:190 +#: literals.py:191 msgid "Nikon Digital SLR Camera Raw Image File" msgstr "Nikon Digital SLR Camera Raw Image File" -#: literals.py:191 +#: literals.py:192 msgid "Constant image of uniform color" msgstr "Constant image of uniform color" -#: literals.py:193 +#: literals.py:194 msgid "Raw opacity samples" msgstr "Raw opacity samples" -#: literals.py:194 +#: literals.py:195 msgid "Olympus Digital Camera Raw Image File" msgstr "Olympus Digital Camera Raw Image File" -#: literals.py:195 +#: literals.py:196 msgid "On-the-air bitmap" msgstr "On-the-air bitmap" -#: literals.py:196 +#: literals.py:197 msgid "Open Type font (Freetype 2.4.2)" msgstr "Open Type font (Freetype 2.4.2)" -#: literals.py:198 +#: literals.py:199 msgid "Xv thumbnail format" msgstr "Xv thumbnail format" -#: literals.py:199 literals.py:276 +#: literals.py:200 literals.py:277 msgid "16bit/pixel interleaved YUV" msgstr "16bit/pixel interleaved YUV" -#: literals.py:200 +#: literals.py:201 msgid "Palm pixmap" msgstr "Palm pixmap" -#: literals.py:201 +#: literals.py:202 msgid "Common 2-dimensional bitmap format" msgstr "Common 2-dimensional bitmap format" -#: literals.py:202 +#: literals.py:203 msgid "Predefined pattern" msgstr "Предопределенные шаблоны" -#: literals.py:203 +#: literals.py:204 msgid "Portable bitmap format (black and white)" msgstr "Portable bitmap format (black and white)" -#: literals.py:204 literals.py:205 +#: literals.py:205 literals.py:206 msgid "Photo CD" msgstr "Photo CD" -#: literals.py:206 +#: literals.py:207 msgid "Page Control Language" msgstr "Page Control Language" -#: literals.py:207 literals.py:220 +#: literals.py:208 literals.py:221 msgid "Apple Macintosh QuickDraw/PICT" msgstr "Apple Macintosh QuickDraw/PICT" -#: literals.py:208 +#: literals.py:209 msgid "ZSoft IBM PC Paintbrush" msgstr "ZSoft IBM PC Paintbrush" -#: literals.py:209 +#: literals.py:210 msgid "Palm Database ImageViewer Format" msgstr "ZSoft IBM PC Paintbrush" -#: literals.py:210 +#: literals.py:211 msgid "Portable Document Format" msgstr "Portable Document Format" -#: literals.py:211 +#: literals.py:212 msgid "Portable Document Archive Format" msgstr "Portable Document Archive Format" -#: literals.py:212 +#: literals.py:213 msgid "Pentax Electronic File" msgstr "Pentax Electronic File" -#: literals.py:213 +#: literals.py:214 msgid "Embrid Embroidery Format" msgstr "Embrid Embroidery Format" -#: literals.py:214 +#: literals.py:215 msgid "Postscript Type 1 font (ASCII) (Freetype 2.4.2)" msgstr "Postscript Type 1 font (ASCII) (Freetype 2.4.2)" -#: literals.py:215 +#: literals.py:216 msgid "Postscript Type 1 font (binary) (Freetype 2.4.2)" msgstr "Postscript Type 1 font (binary) (Freetype 2.4.2)" -#: literals.py:216 +#: literals.py:217 msgid "Portable float format" msgstr "Portable float format" -#: literals.py:217 +#: literals.py:218 msgid "Portable graymap format (gray scale)" msgstr "Portable graymap format (gray scale)" -#: literals.py:218 +#: literals.py:219 msgid "JPEG-2000 VM Format" msgstr "JPEG-2000 VM Format" -#: literals.py:219 +#: literals.py:220 msgid "Personal Icon" msgstr "Personal Icon" -#: literals.py:221 +#: literals.py:222 msgid "Alias/Wavefront RLE image format" msgstr "Alias/Wavefront RLE image format" -#: literals.py:222 +#: literals.py:223 msgid "PIXAR raster file" msgstr "PIXAR raster file" -#: literals.py:223 +#: literals.py:224 msgid "Joint Photographic Experts Group JFIF format (62)" msgstr "Joint Photographic Experts Group JFIF format (62)" -#: literals.py:225 -msgid "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" -msgstr "" -"Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" - #: literals.py:226 -msgid "" -"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" -msgstr "" -"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgid "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" #: literals.py:227 msgid "" +"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" +"24-bit RGB PNG, opaque only (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" + +#: literals.py:228 +msgid "" "32-bit RGBA PNG, semitransparency OK (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" msgstr "" "32-bit RGBA PNG, semitransparency OK (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" -#: literals.py:228 +#: literals.py:229 msgid "" "8-bit indexed PNG, binary transparency only (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" @@ -654,235 +655,235 @@ msgstr "" "8-bit indexed PNG, binary transparency only (libpng 1.2.42,1.2.44, zlib " "1.2.3.3,1.2.3.4)" -#: literals.py:229 +#: literals.py:230 msgid "Portable anymap" msgstr "Portable anymap" -#: literals.py:230 +#: literals.py:231 msgid "Portable pixmap format (color)" msgstr "Portable pixmap format (color)" -#: literals.py:231 +#: literals.py:232 msgid "Show a preview an image enhancement, effect, or f/x" msgstr "Show a preview an image enhancement, effect, or f/x" -#: literals.py:232 +#: literals.py:233 msgid "Adobe PostScript" msgstr "Adobe PostScript" -#: literals.py:233 +#: literals.py:234 msgid "Adobe Level II PostScript" msgstr "Adobe Level II PostScript" -#: literals.py:234 +#: literals.py:235 msgid "Adobe Level III PostScript" msgstr "Adobe Level III PostScript" -#: literals.py:235 +#: literals.py:236 msgid "Adobe Large Document Format" msgstr "Adobe Large Document Format" -#: literals.py:236 +#: literals.py:237 msgid "Adobe Photoshop bitmap" msgstr "Adobe Photoshop bitmap" -#: literals.py:237 +#: literals.py:238 msgid "Pyramid encoded TIFF" msgstr "Pyramid encoded TIFF" -#: literals.py:238 literals.py:252 +#: literals.py:239 literals.py:253 msgid "Seattle Film Works" msgstr "Seattle Film Works" -#: literals.py:240 +#: literals.py:241 msgid "Raw red samples" msgstr "Raw red samples" -#: literals.py:241 +#: literals.py:242 msgid "Fuji CCD-RAW Graphic File" msgstr "Fuji CCD-RAW Graphic File" -#: literals.py:242 literals.py:258 +#: literals.py:243 literals.py:259 msgid "SUN Rasterfile" msgstr "SUN Rasterfile" -#: literals.py:243 +#: literals.py:244 msgid "Raw red, blue, and green samples" msgstr "Raw red, blue, and green samples" -#: literals.py:244 +#: literals.py:245 msgid "Raw red, green, and blue samples" msgstr "Raw red, green, and blue samples" -#: literals.py:245 +#: literals.py:246 msgid "Raw red, green, blue, and matte samples" msgstr "Raw red, green, blue, and matte samples" -#: literals.py:246 +#: literals.py:247 msgid "Raw red, green, blue, and opacity samples" msgstr "Raw red, green, blue, and opacity samples" -#: literals.py:247 +#: literals.py:248 msgid "Alias/Wavefront image" msgstr "Alias/Wavefront image" -#: literals.py:248 +#: literals.py:249 msgid "Utah Run length encoded image" msgstr "Utah Run length encoded image" -#: literals.py:250 +#: literals.py:251 msgid "ZX-Spectrum SCREEN$" msgstr "ZX-Spectrum SCREEN$" -#: literals.py:251 +#: literals.py:252 msgid "Scitex HandShake" msgstr "Scitex HandShake" -#: literals.py:253 +#: literals.py:254 msgid "Irix RGB image" msgstr "Irix RGB image" -#: literals.py:255 +#: literals.py:256 msgid "Sony Raw Format 2" msgstr "Sony Raw Format 2" -#: literals.py:256 +#: literals.py:257 msgid "Sony Raw Format" msgstr "Sony Raw Format" -#: literals.py:257 +#: literals.py:258 msgid "Steganographic image" msgstr "Steganographic image" -#: literals.py:259 +#: literals.py:260 msgid "Scalable Vector Graphics (XML 2.7.6, RSVG 2.32.0)" msgstr "Scalable Vector Graphics (XML 2.7.6, RSVG 2.32.0)" -#: literals.py:260 +#: literals.py:261 msgid "Scalable Vector Graphics (ZIP compressed) (XML 2.7.6, RSVG 2.32.0)" msgstr "Scalable Vector Graphics (ZIP compressed) (XML 2.7.6, RSVG 2.32.0)" -#: literals.py:262 literals.py:272 +#: literals.py:263 literals.py:273 msgid "Text" msgstr "Текст" -#: literals.py:264 +#: literals.py:265 msgid "EXIF Profile Thumbnail" msgstr "EXIF Profile Thumbnail" -#: literals.py:265 +#: literals.py:266 msgid "Tagged Image File Format (LIBTIFF, Version 3.9.4)" msgstr "Tagged Image File Format (LIBTIFF, Version 3.9.4)" -#: literals.py:266 +#: literals.py:267 msgid "Tagged Image File Format (64-bit) (LIBTIFF, Version 3.9.4)" msgstr "Tagged Image File Format (64-bit) (LIBTIFF, Version 3.9.4)" -#: literals.py:267 +#: literals.py:268 msgid "Tile image with a texture" msgstr "Tile image with a texture" -#: literals.py:268 +#: literals.py:269 msgid "PSX TIM" msgstr "PSX TIM" -#: literals.py:269 +#: literals.py:270 msgid "TOPOL X Image" msgstr "TOPOL X Image" -#: literals.py:270 +#: literals.py:271 msgid "TrueType font collection (Freetype 2.4.2)" msgstr "TrueType font collection (Freetype 2.4.2)" -#: literals.py:271 +#: literals.py:272 msgid "TrueType font (Freetype 2.4.2)" msgstr "TrueType font (Freetype 2.4.2)" -#: literals.py:274 +#: literals.py:275 msgid "Unicode Text format" msgstr "Текстовый формат Unicode" -#: literals.py:275 +#: literals.py:276 msgid "X-Motif UIL table" msgstr "X-Motif UIL table" -#: literals.py:279 +#: literals.py:280 msgid "VICAR rasterfile format" msgstr "VICAR rasterfile format" -#: literals.py:280 +#: literals.py:281 msgid "Visual Image Directory" msgstr "Visual Image Directory" -#: literals.py:281 literals.py:298 +#: literals.py:282 literals.py:299 msgid "Khoros Visualization image" msgstr "Khoros Visualization image" -#: literals.py:284 +#: literals.py:285 msgid "Wireless Bitmap (level 0) image" msgstr "Wireless Bitmap (level 0) image" -#: literals.py:285 +#: literals.py:286 msgid "Windows Meta File" msgstr "Windows Meta File" -#: literals.py:286 +#: literals.py:287 msgid "Word Perfect Graphics" msgstr "Word Perfect Graphics" -#: literals.py:287 +#: literals.py:288 msgid "Windows Media Video" msgstr "Windows Media Video" -#: literals.py:288 +#: literals.py:289 msgid "Compressed Windows Meta File" msgstr "Compressed Windows Meta File" -#: literals.py:290 +#: literals.py:291 msgid "X Window System" msgstr "X Window System" -#: literals.py:291 +#: literals.py:292 msgid "Foveon X3 (Sigma/Polaroid) Raw picture file" msgstr "Foveon X3 (Sigma/Polaroid) Raw picture file" -#: literals.py:292 +#: literals.py:293 msgid "X Windows system bitmap (black and white)" msgstr "X Windows system bitmap (black and white" -#: literals.py:293 +#: literals.py:294 msgid "Constant image uniform color" msgstr "Constant image uniform color" -#: literals.py:294 +#: literals.py:295 msgid "GIMP image" msgstr "GIMP image" -#: literals.py:295 +#: literals.py:296 msgid "Adobe XML metadata" msgstr "Adobe XML metadata" -#: literals.py:296 +#: literals.py:297 msgid "X Windows system pixmap (color)" msgstr "X Windows system pixmap (color)" -#: literals.py:297 +#: literals.py:298 msgid "Microsoft XML Paper Specification" msgstr "Microsoft XML Paper Specification" -#: literals.py:299 +#: literals.py:300 msgid "XV thumbnail file" msgstr "XV thumbnail file" -#: literals.py:300 +#: literals.py:301 msgid "X Windows system window dump (color)" msgstr "X Windows system window dump (color)" -#: literals.py:302 +#: literals.py:303 msgid "Raw yellow samples" msgstr "Raw yellow samples" -#: literals.py:303 +#: literals.py:304 msgid "CCIR 601 4:1:1 or 4:2:2 (8-bit only)" msgstr "CCIR 601 4:1:1 or 4:2:2 (8-bit only)" @@ -898,27 +899,36 @@ msgstr "имя" msgid "description" msgstr "описание" -#: conf/settings.py:10 +#: conf/settings.py:11 msgid "File path to imagemagick's convert program." msgstr "Путь к утилите convert из пакета ImageMagick." -#: conf/settings.py:11 +#: conf/settings.py:12 msgid "File path to imagemagick's identify program." msgstr "Путь к утилите identify из пакета ImageMagick." -#: conf/settings.py:12 +#: conf/settings.py:13 msgid "File path to graphicsmagick's program." msgstr "Путь к файлу программs GraphicsMagick." -#: conf/settings.py:14 +#: conf/settings.py:15 msgid "" -"Graphics conversion backend to use. Options are: " -"converter.backends.imagemagick, converter.backends.graphicsmagick and " -"converter.backends.python." +"Graphics conversion backend to use. Options are: converter.backends." +"imagemagick, converter.backends.graphicsmagick and converter.backends.python." +msgstr "" +"Конвертер графических файлов. Возможные варианты: converter.backends." +"imagemagick, converter.backends.graphicsmagick и converter.backends.python." + +#: conf/settings.py:16 +#, fuzzy +msgid "Path to the unoconv program." +msgstr "Путь к утилите convert из пакета ImageMagick." + +#: conf/settings.py:17 +msgid "" +"Use alternate method of connection to LibreOffice using a pipe, it is slower " +"but less prone to segmentation faults." msgstr "" -"Конвертер графических файлов. Возможные варианты: " -"converter.backends.imagemagick, converter.backends.graphicsmagick и " -"converter.backends.python." #: templates/converter_file_formats_help.html:3 msgid "Help" @@ -931,5 +941,3 @@ msgid "" "backend. In this case: '%(backend)s'" msgstr "" "Эти форматы поддерживают выбранный конвертер. Сейчас это: '%(backend)s'" - - diff --git a/apps/document_comments/locale/en/LC_MESSAGES/django.po b/apps/document_comments/locale/en/LC_MESSAGES/django.po index dff22232c6..5c78a1a8aa 100644 --- a/apps/document_comments/locale/en/LC_MESSAGES/django.po +++ b/apps/document_comments/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/document_comments/locale/es/LC_MESSAGES/django.po b/apps/document_comments/locale/es/LC_MESSAGES/django.po index 44980dced4..233ac4ce9e 100644 --- a/apps/document_comments/locale/es/LC_MESSAGES/django.po +++ b/apps/document_comments/locale/es/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 04:34+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:15 @@ -98,5 +99,3 @@ msgstr "Añadir comentario al documento: %s" #, python-format msgid "comments: %s" msgstr "comentarios: %s" - - diff --git a/apps/document_comments/locale/pt/LC_MESSAGES/django.po b/apps/document_comments/locale/pt/LC_MESSAGES/django.po index 66500690bb..8a190abb59 100644 --- a/apps/document_comments/locale/pt/LC_MESSAGES/django.po +++ b/apps/document_comments/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 21:14+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:15 @@ -99,5 +100,3 @@ msgstr "Adicionar comentário ao documento: %s" #, python-format msgid "comments: %s" msgstr "comentários: %s" - - diff --git a/apps/document_comments/locale/ru/LC_MESSAGES/django.po b/apps/document_comments/locale/ru/LC_MESSAGES/django.po index 236b0f1dac..394a1bcad3 100644 --- a/apps/document_comments/locale/ru/LC_MESSAGES/django.po +++ b/apps/document_comments/locale/ru/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:44-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-19 20:58+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:15 msgid "Create new comments" @@ -99,5 +101,3 @@ msgstr "Добавить комментарий на документ: %s" #, python-format msgid "comments: %s" msgstr "комментарии: %s" - - diff --git a/apps/document_indexing/locale/en/LC_MESSAGES/django.po b/apps/document_indexing/locale/en/LC_MESSAGES/django.po index e7244ec289..58bc82a104 100644 --- a/apps/document_indexing/locale/en/LC_MESSAGES/django.po +++ b/apps/document_indexing/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/document_indexing/locale/es/LC_MESSAGES/django.po b/apps/document_indexing/locale/es/LC_MESSAGES/django.po index 25f537e0cc..b5e2ae10dd 100644 --- a/apps/document_indexing/locale/es/LC_MESSAGES/django.po +++ b/apps/document_indexing/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 17:05+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:12 @@ -186,8 +187,8 @@ msgstr "¿Está seguro que desea reconstruir todos los índices?" #: views.py:83 msgid "On large databases this operation may take some time to execute." msgstr "" -"En bases de datos de gran tamaño esta operación puede tardar algún tiempo en" -" ejecutarse." +"En bases de datos de gran tamaño esta operación puede tardar algún tiempo en " +"ejecutarse." #: views.py:89 msgid "Index rebuild completed successfully." @@ -211,5 +212,3 @@ msgstr "¿Que son los índices?" msgid "Indexes group documents into a tree like hierarchical structure." msgstr "" "Los índices agrupan documentos en una estructura jerárquica tipo árbol. " - - diff --git a/apps/document_indexing/locale/pt/LC_MESSAGES/django.po b/apps/document_indexing/locale/pt/LC_MESSAGES/django.po index 6503982432..f8dd4bf8c3 100644 --- a/apps/document_indexing/locale/pt/LC_MESSAGES/django.po +++ b/apps/document_indexing/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Renata Oliveira , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 02:59+0000\n" "Last-Translator: renataoliveira \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:12 @@ -186,8 +187,7 @@ msgstr "Tem certeza de que deseja reconstruir todos os índices?" #: views.py:83 msgid "On large databases this operation may take some time to execute." msgstr "" -"Em grandes bases de dados esta operação pode levar algum tempo para " -"executar." +"Em grandes bases de dados esta operação pode levar algum tempo para executar." #: views.py:89 msgid "Index rebuild completed successfully." @@ -211,5 +211,3 @@ msgstr "Quais são os índices?" msgid "Indexes group documents into a tree like hierarchical structure." msgstr "" "Indexar documentos agrupados em uma árvore como uma estrutura hierárquica." - - diff --git a/apps/document_indexing/locale/ru/LC_MESSAGES/django.po b/apps/document_indexing/locale/ru/LC_MESSAGES/django.po index 62f39e1af4..13de1dddad 100644 --- a/apps/document_indexing/locale/ru/LC_MESSAGES/django.po +++ b/apps/document_indexing/locale/ru/LC_MESSAGES/django.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 22:42+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:12 msgid "View document indexes" @@ -209,5 +211,3 @@ msgstr "что за индексы?" #: templates/indexing_help.html:4 msgid "Indexes group documents into a tree like hierarchical structure." msgstr "Индексы группы документов в древовидной иерархической структуре." - - diff --git a/apps/documents/locale/en/LC_MESSAGES/django.po b/apps/documents/locale/en/LC_MESSAGES/django.po index d0337648a7..65016db1b2 100644 --- a/apps/documents/locale/en/LC_MESSAGES/django.po +++ b/apps/documents/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:43-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,66 +17,77 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: __init__.py:50 __init__.py:159 +#: __init__.py:49 __init__.py:159 msgid "Documents" msgstr "" -#: __init__.py:61 +#: __init__.py:60 msgid "Documents setup" msgstr "" -#: __init__.py:71 +#: __init__.py:70 msgid "all documents" msgstr "" -#: __init__.py:72 models.py:381 views.py:672 +#: __init__.py:71 models.py:415 views.py:709 msgid "recent documents" msgstr "" -#: __init__.py:73 +#: __init__.py:72 msgid "upload new documents" msgstr "" -#: __init__.py:74 +#: __init__.py:73 msgid "clone metadata" msgstr "" -#: __init__.py:75 +#: __init__.py:74 msgid "details" msgstr "" -#: __init__.py:76 +#: __init__.py:75 msgid "properties" msgstr "" -#: __init__.py:77 __init__.py:78 __init__.py:92 __init__.py:114 +#: __init__.py:76 __init__.py:77 __init__.py:92 __init__.py:114 #: __init__.py:120 msgid "delete" msgstr "" -#: __init__.py:79 __init__.py:91 __init__.py:113 __init__.py:119 +#: __init__.py:78 __init__.py:91 __init__.py:113 __init__.py:119 msgid "edit" msgstr "" -#: __init__.py:80 +#: __init__.py:79 msgid "preview" msgstr "" -#: __init__.py:81 +#: __init__.py:80 msgid "download" msgstr "" -#: __init__.py:82 +#: __init__.py:81 msgid "find duplicates" msgstr "" -#: __init__.py:83 +#: __init__.py:82 msgid "find all duplicates" msgstr "" +#: __init__.py:82 +msgid "" +"Search all the documents' checksums and return a list of the exact matches." +msgstr "" + +#: __init__.py:83 +msgid "update office documents' page count" +msgstr "" + #: __init__.py:83 msgid "" -"Search all the documents' checksums and return a list of the exact matches." +"Update the page count of the office type documents. This is useful when " +"enabling office document support after there were already office type " +"documents in the database." msgstr "" #: __init__.py:84 __init__.py:85 @@ -99,7 +110,7 @@ msgstr "" msgid "create new transformation" msgstr "" -#: __init__.py:94 forms.py:49 +#: __init__.py:94 msgid "page image" msgstr "" @@ -155,7 +166,7 @@ msgstr "" msgid "document type list" msgstr "" -#: __init__.py:111 views.py:840 +#: __init__.py:111 views.py:877 msgid "document types" msgstr "" @@ -163,7 +174,7 @@ msgstr "" msgid "documents of this type" msgstr "" -#: __init__.py:115 views.py:953 +#: __init__.py:115 views.py:990 msgid "create document type" msgstr "" @@ -175,76 +186,68 @@ msgstr "" msgid "add filename to document type" msgstr "" -#: __init__.py:161 __init__.py:187 models.py:97 views.py:68 +#: __init__.py:161 __init__.py:186 models.py:101 views.py:69 msgid "documents" msgstr "" -#: __init__.py:174 widgets.py:13 +#: __init__.py:173 msgid "thumbnail" msgstr "" -#: __init__.py:177 +#: __init__.py:176 msgid "tags" msgstr "" -#: __init__.py:180 +#: __init__.py:179 msgid "metadata" msgstr "" -#: forms.py:72 +#: forms.py:60 msgid "Page image" msgstr "" -#: forms.py:82 forms.py:232 +#: forms.py:70 forms.py:209 msgid "Contents" msgstr "" -#: forms.py:135 -msgid "Page" -msgstr "" - -#: forms.py:136 +#: forms.py:116 msgid "Details" msgstr "" -#: forms.py:138 models.py:312 models.py:349 -msgid "document page" -msgstr "" - -#: forms.py:144 +#: forms.py:121 msgid "Click on the image for full size preview" msgstr "" -#: forms.py:154 +#: forms.py:131 #, python-format msgid "Document pages (%s)" msgstr "" -#: forms.py:189 +#: forms.py:166 msgid "Quick document rename" msgstr "" -#: forms.py:192 +#: forms.py:169 msgid "New document filename" msgstr "" -#: forms.py:246 +#: forms.py:223 msgid "Page size" msgstr "" -#: forms.py:247 +#: forms.py:224 msgid "Custom page width" msgstr "" -#: forms.py:248 +#: forms.py:225 msgid "Custom page height" msgstr "" -#: forms.py:249 +#: forms.py:226 msgid "Page orientation" msgstr "" -#: forms.py:250 +#: forms.py:227 msgid "Page range" msgstr "" @@ -337,160 +340,164 @@ msgstr "" msgid "Document \"%(document)s\" deleted on %(datetime)s by %(fullname)s." msgstr "" -#: models.py:59 +#: models.py:63 msgid "name" msgstr "" -#: models.py:65 models.py:74 models.py:281 views.py:859 views.py:889 -#: views.py:918 views.py:923 views.py:966 views.py:1012 views.py:1046 +#: models.py:69 models.py:78 models.py:315 views.py:896 views.py:926 +#: views.py:955 views.py:960 views.py:1003 views.py:1049 views.py:1083 msgid "document type" msgstr "" -#: models.py:66 +#: models.py:70 msgid "documents types" msgstr "" -#: models.py:75 +#: models.py:79 msgid "file" msgstr "" -#: models.py:82 +#: models.py:86 msgid "added" msgstr "" -#: models.py:83 +#: models.py:87 msgid "updated" msgstr "" -#: models.py:84 +#: models.py:88 msgid "checksum" msgstr "" -#: models.py:85 +#: models.py:89 msgid "description" msgstr "" -#: models.py:96 models.py:298 models.py:370 models.py:385 views.py:208 +#: models.py:100 models.py:332 models.py:404 models.py:419 views.py:209 msgid "document" msgstr "" -#: models.py:177 +#: models.py:181 msgid "" "This document's file format is not known, the page count has therefore " "defaulted to 1." msgstr "" -#: models.py:282 +#: models.py:316 msgid "filename" msgstr "" -#: models.py:283 views.py:973 +#: models.py:317 views.py:1010 msgid "enabled" msgstr "" -#: models.py:290 +#: models.py:324 msgid "document type quick rename filename" msgstr "" -#: models.py:291 +#: models.py:325 msgid "document types quick rename filenames" msgstr "" -#: models.py:299 +#: models.py:333 msgid "content" msgstr "" -#: models.py:300 +#: models.py:334 msgid "page label" msgstr "" -#: models.py:301 +#: models.py:335 msgid "page number" msgstr "" -#: models.py:304 +#: models.py:338 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "" -#: models.py:313 +#: models.py:346 models.py:383 +msgid "document page" +msgstr "" + +#: models.py:347 msgid "document pages" msgstr "" -#: models.py:324 +#: models.py:358 msgid "Enter a valid value." msgstr "" -#: models.py:350 views.py:327 +#: models.py:384 views.py:333 msgid "order" msgstr "" -#: models.py:351 views.py:328 views.py:383 views.py:412 +#: models.py:385 views.py:334 views.py:389 views.py:418 msgid "transformation" msgstr "" -#: models.py:352 views.py:329 +#: models.py:386 views.py:335 msgid "arguments" msgstr "" -#: models.py:352 +#: models.py:386 #, python-format msgid "Use dictionaries to indentify arguments, example: %s" msgstr "" -#: models.py:360 +#: models.py:394 msgid "document page transformation" msgstr "" -#: models.py:361 +#: models.py:395 msgid "document page transformations" msgstr "" -#: models.py:369 +#: models.py:403 msgid "user" msgstr "" -#: models.py:371 +#: models.py:405 msgid "accessed" msgstr "" -#: models.py:380 +#: models.py:414 msgid "recent document" msgstr "" -#: models.py:386 +#: models.py:420 msgid "Document type" msgstr "" -#: models.py:387 +#: models.py:421 msgid "MIME type" msgstr "" -#: models.py:388 views.py:116 +#: models.py:422 views.py:117 msgid "Filename" msgstr "" -#: models.py:389 +#: models.py:423 msgid "Filename extension" msgstr "" -#: models.py:390 +#: models.py:424 msgid "Metadata value" msgstr "" -#: models.py:391 +#: models.py:425 msgid "Content" msgstr "" -#: models.py:392 +#: models.py:426 msgid "Description" msgstr "" -#: models.py:393 +#: models.py:427 msgid "Tags" msgstr "" -#: models.py:394 +#: models.py:428 msgid "Comments" msgstr "" @@ -540,305 +547,322 @@ msgstr "" msgid "Document statistics" msgstr "" -#: views.py:117 +#: views.py:118 msgid "File extension" msgstr "" -#: views.py:118 +#: views.py:119 msgid "File mimetype" msgstr "" -#: views.py:119 +#: views.py:120 msgid "File mime encoding" msgstr "" -#: views.py:120 +#: views.py:121 msgid "File size" msgstr "" -#: views.py:121 +#: views.py:122 msgid "Exists in storage" msgstr "" -#: views.py:122 +#: views.py:123 msgid "File path in storage" msgstr "" -#: views.py:123 +#: views.py:124 msgid "Date added" msgstr "" -#: views.py:124 +#: views.py:125 msgid "Time added" msgstr "" -#: views.py:125 +#: views.py:126 msgid "Checksum" msgstr "" -#: views.py:126 +#: views.py:127 msgid "UUID" msgstr "" -#: views.py:127 +#: views.py:128 msgid "Pages" msgstr "" -#: views.py:136 +#: views.py:137 #, python-format msgid "document properties for: %s" msgstr "" -#: views.py:158 +#: views.py:159 msgid "document data" msgstr "" -#: views.py:183 views.py:484 +#: views.py:184 views.py:521 msgid "Must provide at least one document." msgstr "" -#: views.py:199 +#: views.py:200 #, python-format msgid "Document: %s deleted successfully." msgstr "" -#: views.py:201 +#: views.py:202 #, python-format msgid "Document: %(document)s delete error: %(error)s" msgstr "" -#: views.py:216 +#: views.py:217 #, python-format msgid "Are you sure you wish to delete the document: %s?" msgstr "" -#: views.py:218 +#: views.py:219 #, python-format msgid "Are you sure you wish to delete the documents: %s?" msgstr "" -#: views.py:255 +#: views.py:256 #, python-format msgid "Document \"%s\" edited successfully." msgstr "" -#: views.py:323 +#: views.py:329 #, python-format msgid "transformations for: %s" msgstr "" -#: views.py:347 +#: views.py:353 msgid "Document page transformation created successfully." msgstr "" -#: views.py:356 +#: views.py:362 #, python-format msgid "Create new transformation for page: %(page)s of document: %(document)s" msgstr "" -#: views.py:372 +#: views.py:378 msgid "Document page transformation edited successfully." msgstr "" -#: views.py:385 +#: views.py:391 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(document_page)s" msgstr "" -#: views.py:403 +#: views.py:409 msgid "Document page transformation deleted successfully." msgstr "" -#: views.py:414 +#: views.py:420 #, python-format msgid "" "Are you sure you wish to delete transformation \"%(transformation)s\" for: " "%(document_page)s" msgstr "" -#: views.py:428 +#: views.py:434 #, python-format msgid "duplicates of: %s" msgstr "" -#: views.py:440 +#: views.py:446 msgid "Are you sure you wish to find all duplicates?" msgstr "" -#: views.py:441 views.py:534 +#: views.py:447 views.py:506 views.py:571 msgid "On large databases this operation may take some time to execute." msgstr "" -#: views.py:456 +#: views.py:462 msgid "duplicated documents" msgstr "" #: views.py:497 #, python-format msgid "" +"Page count update complete. Documents processed: %(total)d, documents with " +"changed page count: %(change)d" +msgstr "" + +#: views.py:505 +#, python-format +msgid "" +"Are you sure you wish to update the page count for the office documents (%d)?" +msgstr "" + +#: views.py:534 +#, python-format +msgid "" "All the page transformations for document: %s, have been deleted " "successfully." msgstr "" -#: views.py:499 +#: views.py:536 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "" -#: views.py:505 +#: views.py:542 msgid "document transformation" msgstr "" -#: views.py:514 +#: views.py:551 #, python-format msgid "" "Are you sure you wish to clear all the page transformations for document: %s?" msgstr "" -#: views.py:516 +#: views.py:553 #, python-format msgid "" "Are you sure you wish to clear all the page transformations for documents: " "%s?" msgstr "" -#: views.py:544 +#: views.py:581 msgid "missing documents" msgstr "" -#: views.py:557 views.py:595 +#: views.py:594 views.py:632 #, python-format msgid "details for: %s" msgstr "" -#: views.py:610 +#: views.py:647 msgid "Document page edited successfully." msgstr "" -#: views.py:619 +#: views.py:656 #, python-format msgid "edit: %s" msgstr "" -#: views.py:630 +#: views.py:667 msgid "There are no more pages in this document" msgstr "" -#: views.py:643 +#: views.py:680 msgid "You are already at the first page of this document" msgstr "" -#: views.py:786 +#: views.py:823 #, python-format msgid "print: %s" msgstr "" -#: views.py:857 +#: views.py:894 #, python-format msgid "documents of type \"%s\"" msgstr "" -#: views.py:877 +#: views.py:914 msgid "Document type edited successfully" msgstr "" -#: views.py:880 +#: views.py:917 #, python-format msgid "Error editing document type; %s" msgstr "" -#: views.py:885 +#: views.py:922 #, python-format msgid "edit document type: %s" msgstr "" -#: views.py:910 +#: views.py:947 #, python-format msgid "Document type: %s deleted successfully." msgstr "" -#: views.py:912 +#: views.py:949 #, python-format msgid "Document type: %(document_type)s delete error: %(error)s" msgstr "" -#: views.py:927 +#: views.py:964 #, python-format msgid "Are you sure you wish to delete the document type: %s?" msgstr "" -#: views.py:928 +#: views.py:965 msgid "" "The document type of all documents using this document type will be set to " "none." msgstr "" -#: views.py:944 +#: views.py:981 msgid "Document type created successfully" msgstr "" -#: views.py:947 +#: views.py:984 #, python-format msgid "Error creating document type; %(error)s" msgstr "" -#: views.py:965 +#: views.py:1002 #, python-format msgid "filenames for document type: %s" msgstr "" -#: views.py:996 +#: views.py:1033 msgid "Document type filename edited successfully" msgstr "" -#: views.py:999 +#: views.py:1036 #, python-format msgid "Error editing document type filename; %s" msgstr "" -#: views.py:1004 +#: views.py:1041 #, python-format msgid "edit filename \"%(filename)s\" from document type \"%(document_type)s\"" msgstr "" -#: views.py:1013 views.py:1039 views.py:1047 +#: views.py:1050 views.py:1076 views.py:1084 msgid "document type filename" msgstr "" -#: views.py:1031 +#: views.py:1068 #, python-format msgid "Document type filename: %s deleted successfully." msgstr "" -#: views.py:1033 +#: views.py:1070 #, python-format msgid "" "Document type filename: %(document_type_filename)s delete error: %(error)s" msgstr "" -#: views.py:1049 +#: views.py:1086 #, python-format msgid "" "Are you sure you wish to delete the filename: %(filename)s, from document " "type \"%(document_type)s\"?" msgstr "" -#: views.py:1074 +#: views.py:1111 msgid "Document type filename created successfully" msgstr "" -#: views.py:1077 +#: views.py:1114 #, python-format msgid "Error creating document type filename; %(error)s" msgstr "" -#: views.py:1083 +#: views.py:1120 #, python-format msgid "create filename for document type: %s" msgstr "" +#: widgets.py:26 +msgid "document page image" +msgstr "" + #: wizards.py:34 msgid "step 1 of 3: Document type" msgstr "" diff --git a/apps/documents/locale/es/LC_MESSAGES/django.po b/apps/documents/locale/es/LC_MESSAGES/django.po index cb1756d2aa..f7d5c70f5a 100644 --- a/apps/documents/locale/es/LC_MESSAGES/django.po +++ b/apps/documents/locale/es/LC_MESSAGES/django.po @@ -1,87 +1,99 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:43-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 00:54+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: __init__.py:50 __init__.py:159 +#: __init__.py:49 __init__.py:159 msgid "Documents" msgstr "Documentos" -#: __init__.py:61 +#: __init__.py:60 msgid "Documents setup" msgstr "Configuración de documentos" -#: __init__.py:71 +#: __init__.py:70 msgid "all documents" msgstr "todos los documentos" -#: __init__.py:72 models.py:381 views.py:672 +#: __init__.py:71 models.py:415 views.py:709 msgid "recent documents" msgstr "documentos recientes" -#: __init__.py:73 +#: __init__.py:72 msgid "upload new documents" msgstr "subir nuevos documentos" -#: __init__.py:74 +#: __init__.py:73 msgid "clone metadata" msgstr "clonar metadatos" -#: __init__.py:75 +#: __init__.py:74 msgid "details" msgstr "detalles" -#: __init__.py:76 +#: __init__.py:75 msgid "properties" msgstr "propiedades" -#: __init__.py:77 __init__.py:78 __init__.py:92 __init__.py:114 +#: __init__.py:76 __init__.py:77 __init__.py:92 __init__.py:114 #: __init__.py:120 msgid "delete" msgstr "eliminar" -#: __init__.py:79 __init__.py:91 __init__.py:113 __init__.py:119 +#: __init__.py:78 __init__.py:91 __init__.py:113 __init__.py:119 msgid "edit" msgstr "editar" -#: __init__.py:80 +#: __init__.py:79 msgid "preview" msgstr "muestra" -#: __init__.py:81 +#: __init__.py:80 msgid "download" msgstr "descarga" -#: __init__.py:82 +#: __init__.py:81 msgid "find duplicates" msgstr "encontrar duplicados" -#: __init__.py:83 +#: __init__.py:82 msgid "find all duplicates" msgstr "encontrar todos los duplicados" -#: __init__.py:83 +#: __init__.py:82 msgid "" "Search all the documents' checksums and return a list of the exact matches." msgstr "" "Buscar todas las sumas de comprobación de los documentos y devolver una " "lista de las coincidencias exactas." +#: __init__.py:83 +msgid "update office documents' page count" +msgstr "" + +#: __init__.py:83 +msgid "" +"Update the page count of the office type documents. This is useful when " +"enabling office document support after there were already office type " +"documents in the database." +msgstr "" + #: __init__.py:84 __init__.py:85 msgid "clear transformations" msgstr "borrar transformaciones" @@ -102,7 +114,7 @@ msgstr "transformaciones de la página" msgid "create new transformation" msgstr "crear nueva transformación" -#: __init__.py:94 forms.py:49 +#: __init__.py:94 msgid "page image" msgstr "imagen de la página" @@ -158,7 +170,7 @@ msgstr "Buscar archivos de documentos perdidos" msgid "document type list" msgstr "ista de tipos de documentos" -#: __init__.py:111 views.py:840 +#: __init__.py:111 views.py:877 msgid "document types" msgstr "tipos de documentos" @@ -166,7 +178,7 @@ msgstr "tipos de documentos" msgid "documents of this type" msgstr "documentos de este tipo" -#: __init__.py:115 views.py:953 +#: __init__.py:115 views.py:990 msgid "create document type" msgstr "crear tipo de documento" @@ -178,76 +190,68 @@ msgstr "nombres de archivo" msgid "add filename to document type" msgstr "Añadir nombre de archivo para tipo de documento" -#: __init__.py:161 __init__.py:187 models.py:97 views.py:68 +#: __init__.py:161 __init__.py:186 models.py:101 views.py:69 msgid "documents" msgstr "documentos" -#: __init__.py:174 widgets.py:13 +#: __init__.py:173 msgid "thumbnail" msgstr "miniatura" -#: __init__.py:177 +#: __init__.py:176 msgid "tags" msgstr "etiquetas" -#: __init__.py:180 +#: __init__.py:179 msgid "metadata" msgstr "metadatos" -#: forms.py:72 +#: forms.py:60 msgid "Page image" msgstr "Imagen de la página" -#: forms.py:82 forms.py:232 +#: forms.py:70 forms.py:209 msgid "Contents" msgstr "Contenido" -#: forms.py:135 -msgid "Page" -msgstr "Página" - -#: forms.py:136 +#: forms.py:116 msgid "Details" msgstr "Detalles" -#: forms.py:138 models.py:312 models.py:349 -msgid "document page" -msgstr "página de documento" - -#: forms.py:144 +#: forms.py:121 msgid "Click on the image for full size preview" msgstr "Haga clic en la imagen para ver una muestra de tamaño completo" -#: forms.py:154 +#: forms.py:131 #, python-format msgid "Document pages (%s)" msgstr "Páginas del documento (%s)" -#: forms.py:189 +#: forms.py:166 msgid "Quick document rename" msgstr "Cambio rápido de nombre" -#: forms.py:192 +#: forms.py:169 msgid "New document filename" msgstr "Nuevo nombre del archivo" -#: forms.py:246 +#: forms.py:223 msgid "Page size" msgstr "Tamaño de la página" -#: forms.py:247 +#: forms.py:224 msgid "Custom page width" msgstr "Ancho de página alterno" -#: forms.py:248 +#: forms.py:225 msgid "Custom page height" msgstr "Alto de página alterno" -#: forms.py:249 +#: forms.py:226 msgid "Page orientation" msgstr "Orientación de la página" -#: forms.py:250 +#: forms.py:227 msgid "Page range" msgstr "Rango de páginas" @@ -306,7 +310,8 @@ msgstr "Documento \"%(content_object)s\", creado por %(fullname)s." #: literals.py:25 #, python-format -msgid "Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." +msgid "" +"Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." msgstr "" "Documento \"%(content_object)s\", creado en %(datetime)s por %(fullname)s." @@ -322,8 +327,8 @@ msgstr "Documento \"%(content_object)s\", editado por %(fullname)s." #: literals.py:33 #, python-format msgid "" -"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s." -" The following changes took place: %(changes)s." +"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s. " +"The following changes took place: %(changes)s." msgstr "" "Documento \"%(content_object)s\" fue editado en \"%(datetime)s por " "%(fullname)s. Los siguientes cambios tuvieron lugar: %(changes)s." @@ -342,44 +347,44 @@ msgstr "Documento \"%(document)s\" eliminado por %(fullname)s." msgid "Document \"%(document)s\" deleted on %(datetime)s by %(fullname)s." msgstr "Documento \"%(document)s\" eliminado en %(datetime)s por %(fullname)s." -#: models.py:59 +#: models.py:63 msgid "name" msgstr "nombre" -#: models.py:65 models.py:74 models.py:281 views.py:859 views.py:889 -#: views.py:918 views.py:923 views.py:966 views.py:1012 views.py:1046 +#: models.py:69 models.py:78 models.py:315 views.py:896 views.py:926 +#: views.py:955 views.py:960 views.py:1003 views.py:1049 views.py:1083 msgid "document type" msgstr "tipo de documento" -#: models.py:66 +#: models.py:70 msgid "documents types" msgstr "tipos de documentos" -#: models.py:75 +#: models.py:79 msgid "file" msgstr "archivo" -#: models.py:82 +#: models.py:86 msgid "added" msgstr "agregado" -#: models.py:83 +#: models.py:87 msgid "updated" msgstr "actualizado" -#: models.py:84 +#: models.py:88 msgid "checksum" msgstr "suma de comprobación" -#: models.py:85 +#: models.py:89 msgid "description" msgstr "descripción" -#: models.py:96 models.py:298 models.py:370 models.py:385 views.py:208 +#: models.py:100 models.py:332 models.py:404 models.py:419 views.py:209 msgid "document" msgstr "documento" -#: models.py:177 +#: models.py:181 msgid "" "This document's file format is not known, the page count has therefore " "defaulted to 1." @@ -387,118 +392,122 @@ msgstr "" "El formato de este archivo de documento no se conoce, el número de páginas " "por lo tanto sera 1." -#: models.py:282 +#: models.py:316 msgid "filename" msgstr "nombre de archivo" -#: models.py:283 views.py:973 +#: models.py:317 views.py:1010 msgid "enabled" msgstr "habilitado" -#: models.py:290 +#: models.py:324 msgid "document type quick rename filename" msgstr "nombre de archivo para cambio rápido de nombre para tipo de documento" -#: models.py:291 +#: models.py:325 msgid "document types quick rename filenames" msgstr "" "nombres de archivos para cambio rápido de nombre para tipo de documentos" -#: models.py:299 +#: models.py:333 msgid "content" msgstr "contenido" -#: models.py:300 +#: models.py:334 msgid "page label" msgstr "etiqueta de la página" -#: models.py:301 +#: models.py:335 msgid "page number" msgstr "número de página" -#: models.py:304 +#: models.py:338 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Pagína %(page_num)d de %(total_pages)d de %(document)s " -#: models.py:313 +#: models.py:346 models.py:383 +msgid "document page" +msgstr "página de documento" + +#: models.py:347 msgid "document pages" msgstr "páginas de documentos" -#: models.py:324 +#: models.py:358 msgid "Enter a valid value." msgstr "Introduzca un valor válido." -#: models.py:350 views.py:327 +#: models.py:384 views.py:333 msgid "order" msgstr "orden" -#: models.py:351 views.py:328 views.py:383 views.py:412 +#: models.py:385 views.py:334 views.py:389 views.py:418 msgid "transformation" msgstr "transformación" -#: models.py:352 views.py:329 +#: models.py:386 views.py:335 msgid "arguments" msgstr "argumentos" -#: models.py:352 +#: models.py:386 #, python-format msgid "Use dictionaries to indentify arguments, example: %s" msgstr "Utilize diccionarios para indentificar argumentos, por ejemplo: %s" -#: models.py:360 +#: models.py:394 msgid "document page transformation" msgstr "transformación de página de documento" -#: models.py:361 +#: models.py:395 msgid "document page transformations" msgstr "transformaciones de páginas de documentos" -#: models.py:369 +#: models.py:403 msgid "user" msgstr "usuario" -#: models.py:371 +#: models.py:405 msgid "accessed" msgstr "accesado" -#: models.py:380 +#: models.py:414 msgid "recent document" msgstr "documento reciente" -#: models.py:386 +#: models.py:420 msgid "Document type" msgstr "Tipo de documento" -#: models.py:387 +#: models.py:421 msgid "MIME type" msgstr "Tipo MIME" -#: models.py:388 views.py:116 +#: models.py:422 views.py:117 msgid "Filename" msgstr "Nombre del archivo" -#: models.py:389 +#: models.py:423 msgid "Filename extension" msgstr "Extensión de archivo" -#: models.py:390 +#: models.py:424 msgid "Metadata value" msgstr "Valor de metadatos" -#: models.py:391 +#: models.py:425 msgid "Content" msgstr "Contenido" -#: models.py:392 +#: models.py:426 msgid "Description" msgstr "Descripción" -#: models.py:393 +#: models.py:427 msgid "Tags" msgstr "Etiquetas" -#: models.py:394 +#: models.py:428 msgid "Comments" msgstr "Comentarios" @@ -520,8 +529,8 @@ msgstr "Documentos en almacenamiento: %d" #: statistics.py:46 #, python-format msgid "" -"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d" -" bytes" +"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d " +"bytes" msgstr "" "Espacio utilizado en el almacenamiento: %(base_2)s (base 2), %(base_10)s " "(base 10), %(bytes)d bytes" @@ -550,118 +559,118 @@ msgstr "Promedio de páginas por documento: %(page_count__avg)f" msgid "Document statistics" msgstr "Estadísticas de documentos" -#: views.py:117 +#: views.py:118 msgid "File extension" msgstr "Extensión de archivo" -#: views.py:118 +#: views.py:119 msgid "File mimetype" msgstr "Tipo MIME del archivo" -#: views.py:119 +#: views.py:120 msgid "File mime encoding" msgstr "Codificación de archivos MIME" -#: views.py:120 +#: views.py:121 msgid "File size" msgstr "Tamaños del archivo" -#: views.py:121 +#: views.py:122 msgid "Exists in storage" msgstr "Existe en el almacenamiento" -#: views.py:122 +#: views.py:123 msgid "File path in storage" msgstr "Ruta de archivos en el almacenamiento" -#: views.py:123 +#: views.py:124 msgid "Date added" msgstr "Fecha en que se agregó" -#: views.py:124 +#: views.py:125 msgid "Time added" msgstr "El tiempo añadido" -#: views.py:125 +#: views.py:126 msgid "Checksum" msgstr "Suma de comprobación" -#: views.py:126 +#: views.py:127 msgid "UUID" msgstr "UUID" -#: views.py:127 +#: views.py:128 msgid "Pages" msgstr "Páginas" -#: views.py:136 +#: views.py:137 #, python-format msgid "document properties for: %s" msgstr "propiedades del documento: %s" -#: views.py:158 +#: views.py:159 msgid "document data" msgstr "datos del documento" -#: views.py:183 views.py:484 +#: views.py:184 views.py:521 msgid "Must provide at least one document." msgstr "Debe proveer al menos un documento." -#: views.py:199 +#: views.py:200 #, python-format msgid "Document: %s deleted successfully." msgstr "Documento: %s eliminado con éxito." -#: views.py:201 +#: views.py:202 #, python-format msgid "Document: %(document)s delete error: %(error)s" msgstr "Documento: %(document)s, error de eliminación: %(error)s " -#: views.py:216 +#: views.py:217 #, python-format msgid "Are you sure you wish to delete the document: %s?" msgstr "¿Está seguro que desea eliminar el documento: %s?" -#: views.py:218 +#: views.py:219 #, python-format msgid "Are you sure you wish to delete the documents: %s?" msgstr "¿Está seguro que desea eliminar los documentos: %s?" -#: views.py:255 +#: views.py:256 #, python-format msgid "Document \"%s\" edited successfully." msgstr "Documento \"%s\" editado exitosamente." -#: views.py:323 +#: views.py:329 #, python-format msgid "transformations for: %s" msgstr "transformaciones para: %s" -#: views.py:347 +#: views.py:353 msgid "Document page transformation created successfully." msgstr "Transformación de página de documento creada con exitosamente." -#: views.py:356 +#: views.py:362 #, python-format msgid "Create new transformation for page: %(page)s of document: %(document)s" msgstr "" "Crear nueva transformación de la página: %(page)s del documento: " "%(document)s " -#: views.py:372 +#: views.py:378 msgid "Document page transformation edited successfully." msgstr "Transformación de página de documento editada con exitosamente." -#: views.py:385 +#: views.py:391 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(document_page)s" msgstr "Editar transformación \" %(transformation)s\" para: %(document_page)s" -#: views.py:403 +#: views.py:409 msgid "Document page transformation deleted successfully." msgstr "Transformación de página de documento eliminada exitosamente." -#: views.py:414 +#: views.py:420 #, python-format msgid "" "Are you sure you wish to delete transformation \"%(transformation)s\" for: " @@ -670,35 +679,48 @@ msgstr "" "¿Está seguro que desea eliminar la transformación \"%(transformation)s\" " "para: %(document_page)s" -#: views.py:428 +#: views.py:434 #, python-format msgid "duplicates of: %s" msgstr "duplicados de: %s" -#: views.py:440 +#: views.py:446 msgid "Are you sure you wish to find all duplicates?" msgstr "¿Está seguro que desea encontrar todos los duplicados?" -#: views.py:441 views.py:534 +#: views.py:447 views.py:506 views.py:571 msgid "On large databases this operation may take some time to execute." msgstr "" -"En bases de datos de gran tamaño esta operación puede tardar algún tiempo en" -" ejecutarse." +"En bases de datos de gran tamaño esta operación puede tardar algún tiempo en " +"ejecutarse." -#: views.py:456 +#: views.py:462 msgid "duplicated documents" msgstr "documentos duplicados" #: views.py:497 #, python-format msgid "" +"Page count update complete. Documents processed: %(total)d, documents with " +"changed page count: %(change)d" +msgstr "" + +#: views.py:505 +#, fuzzy, python-format +msgid "" +"Are you sure you wish to update the page count for the office documents (%d)?" +msgstr "¿Está seguro que desea eliminar los documentos: %s?" + +#: views.py:534 +#, python-format +msgid "" "All the page transformations for document: %s, have been deleted " "successfully." msgstr "" "Todas las transformaciones de la página de documento: %s, se han eliminado " "con éxito." -#: views.py:499 +#: views.py:536 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " @@ -707,20 +729,19 @@ msgstr "" "Error al eliminar las transformaciones de página para el documento: " "%(document)s; %(error)s." -#: views.py:505 +#: views.py:542 msgid "document transformation" msgstr "transformación de documento" -#: views.py:514 +#: views.py:551 #, python-format msgid "" -"Are you sure you wish to clear all the page transformations for document: " -"%s?" +"Are you sure you wish to clear all the page transformations for document: %s?" msgstr "" "¿Está seguro que desea eliminar todas las transformaciones de página del " "documento: %s?" -#: views.py:516 +#: views.py:553 #, python-format msgid "" "Are you sure you wish to clear all the page transformations for documents: " @@ -729,73 +750,73 @@ msgstr "" "¿Está seguro que desea eliminar las transformaciones de página de los " "documentos: %s?" -#: views.py:544 +#: views.py:581 msgid "missing documents" msgstr "documentos perdidos" -#: views.py:557 views.py:595 +#: views.py:594 views.py:632 #, python-format msgid "details for: %s" msgstr "detalles para: %s" -#: views.py:610 +#: views.py:647 msgid "Document page edited successfully." msgstr "Página del documento se ha editado correctamente." -#: views.py:619 +#: views.py:656 #, python-format msgid "edit: %s" msgstr "editar: %s" -#: views.py:630 +#: views.py:667 msgid "There are no more pages in this document" msgstr "No hay más páginas en este documento" -#: views.py:643 +#: views.py:680 msgid "You are already at the first page of this document" msgstr "Usted ya está en la primera página de este documento" -#: views.py:786 +#: views.py:823 #, python-format msgid "print: %s" msgstr "Imprimir: %s" -#: views.py:857 +#: views.py:894 #, python-format msgid "documents of type \"%s\"" msgstr "documentos de tipo \"%s\"" -#: views.py:877 +#: views.py:914 msgid "Document type edited successfully" msgstr "Tipo de documento editado exitosamente" -#: views.py:880 +#: views.py:917 #, python-format msgid "Error editing document type; %s" msgstr "Error al modificar el tipo de documento; %s" -#: views.py:885 +#: views.py:922 #, python-format msgid "edit document type: %s" msgstr "editar tipo de documento: %s" -#: views.py:910 +#: views.py:947 #, python-format msgid "Document type: %s deleted successfully." msgstr "Tipo de documento: %s eliminado exitosamente." -#: views.py:912 +#: views.py:949 #, python-format msgid "Document type: %(document_type)s delete error: %(error)s" msgstr "" "Error de eliminación: %(error)s para tipo de documento: %(document_type)s " -#: views.py:927 +#: views.py:964 #, python-format msgid "Are you sure you wish to delete the document type: %s?" msgstr "¿Está seguro que desea eliminar el tipo de documento: %s?" -#: views.py:928 +#: views.py:965 msgid "" "The document type of all documents using this document type will be set to " "none." @@ -803,54 +824,54 @@ msgstr "" "El tipo de documento de todos los documentos que utilizan este tipo de " "documentos será borrado." -#: views.py:944 +#: views.py:981 msgid "Document type created successfully" msgstr "Tipo de documento creado exitosamente." -#: views.py:947 +#: views.py:984 #, python-format msgid "Error creating document type; %(error)s" msgstr "Error documento creando tipo de documento; %(error)s " -#: views.py:965 +#: views.py:1002 #, python-format msgid "filenames for document type: %s" msgstr "nombres de archivo para tipo de documento: %s" -#: views.py:996 +#: views.py:1033 msgid "Document type filename edited successfully" msgstr "Nombre de archivo de tipo de documento editado con exitosamente" -#: views.py:999 +#: views.py:1036 #, python-format msgid "Error editing document type filename; %s" msgstr "Error al modificar el nombre de archivo para tipo de document; %s" -#: views.py:1004 +#: views.py:1041 #, python-format msgid "edit filename \"%(filename)s\" from document type \"%(document_type)s\"" msgstr "" "editar nombre de archivo \"%(filename)s\" del tipo de documento " "\"%(document_type)s\"" -#: views.py:1013 views.py:1039 views.py:1047 +#: views.py:1050 views.py:1076 views.py:1084 msgid "document type filename" msgstr "nombre de archivo para tipo de documento" -#: views.py:1031 +#: views.py:1068 #, python-format msgid "Document type filename: %s deleted successfully." msgstr "Nombre de archivo para tipo de documento: %s eliminado exitosamente." -#: views.py:1033 +#: views.py:1070 #, python-format msgid "" "Document type filename: %(document_type_filename)s delete error: %(error)s" msgstr "" -"Error de eliminación: %(error)s para nombre de archivo de tipo de documento:" -" %(document_type_filename)s " +"Error de eliminación: %(error)s para nombre de archivo de tipo de documento: " +"%(document_type_filename)s " -#: views.py:1049 +#: views.py:1086 #, python-format msgid "" "Are you sure you wish to delete the filename: %(filename)s, from document " @@ -859,20 +880,25 @@ msgstr "" "¿Está seguro que desea eliminar el nombre del archivo: %(filename)s, del " "tipo de documento \"%(document_type)s\"?" -#: views.py:1074 +#: views.py:1111 msgid "Document type filename created successfully" msgstr "Nombre de archivo de tipo de documento creado exitosamente." -#: views.py:1077 +#: views.py:1114 #, python-format msgid "Error creating document type filename; %(error)s" msgstr "Error al crear nombre de archivo para tipo de documento; %(error)s" -#: views.py:1083 +#: views.py:1120 #, python-format msgid "create filename for document type: %s" msgstr "crear nombre de archivo para tipo de documento: %s" +#: widgets.py:26 +#, fuzzy +msgid "document page image" +msgstr "página de documento" + #: wizards.py:34 msgid "step 1 of 3: Document type" msgstr "paso 1 de 3: Tipo de documento" @@ -891,8 +917,8 @@ msgstr "Siguiente paso" #: conf/settings.py:38 msgid "" -"Maximum number of recent (created, edited, viewed) documents to remember per" -" user." +"Maximum number of recent (created, edited, viewed) documents to remember per " +"user." msgstr "" "El número máximo de documentos recientes (creados, editados, vistos) a " "recordar por usuario." @@ -939,8 +965,8 @@ msgstr "" "Los tipos de documentos definene una clase que representa a un grupo amplio " "de documentos, tales como: facturas, reglamentos o manuales. La ventaja de " "utilizar los tipos de documentos son: la asignación de una lista de nombres " -"de archivos típicos para el cambio de nombre rápido durante la creación, así" -" como la asignación de tipos de metadatos y grupos por defecto." +"de archivos típicos para el cambio de nombre rápido durante la creación, así " +"como la asignación de tipos de metadatos y grupos por defecto." #: templates/recent_document_list_help.html:3 msgid "What are recent documents?" @@ -955,4 +981,5 @@ msgstr "" "Aquí encontrará los últimos %(recent_count)s documentos que haya creado o " "editado de alguna manera." - +#~ msgid "Page" +#~ msgstr "Página" diff --git a/apps/documents/locale/pt/LC_MESSAGES/django.po b/apps/documents/locale/pt/LC_MESSAGES/django.po index 07c4f5271a..97034e32f9 100644 --- a/apps/documents/locale/pt/LC_MESSAGES/django.po +++ b/apps/documents/locale/pt/LC_MESSAGES/django.po @@ -1,87 +1,99 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:43-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 21:10+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: __init__.py:50 __init__.py:159 +#: __init__.py:49 __init__.py:159 msgid "Documents" msgstr "Documentos" -#: __init__.py:61 +#: __init__.py:60 msgid "Documents setup" msgstr "Configuração de documentos" -#: __init__.py:71 +#: __init__.py:70 msgid "all documents" msgstr "todos os documentos" -#: __init__.py:72 models.py:381 views.py:672 +#: __init__.py:71 models.py:415 views.py:709 msgid "recent documents" msgstr "documentos recentes" -#: __init__.py:73 +#: __init__.py:72 msgid "upload new documents" msgstr "upload de novos documentos" -#: __init__.py:74 +#: __init__.py:73 msgid "clone metadata" msgstr "clonar metadados" -#: __init__.py:75 +#: __init__.py:74 msgid "details" msgstr "detalhes" -#: __init__.py:76 +#: __init__.py:75 msgid "properties" msgstr "propriedades" -#: __init__.py:77 __init__.py:78 __init__.py:92 __init__.py:114 +#: __init__.py:76 __init__.py:77 __init__.py:92 __init__.py:114 #: __init__.py:120 msgid "delete" msgstr "excluir" -#: __init__.py:79 __init__.py:91 __init__.py:113 __init__.py:119 +#: __init__.py:78 __init__.py:91 __init__.py:113 __init__.py:119 msgid "edit" msgstr "editar" -#: __init__.py:80 +#: __init__.py:79 msgid "preview" msgstr "visualização" -#: __init__.py:81 +#: __init__.py:80 msgid "download" msgstr "baixar" -#: __init__.py:82 +#: __init__.py:81 msgid "find duplicates" msgstr "encontrar duplicatas" -#: __init__.py:83 +#: __init__.py:82 msgid "find all duplicates" msgstr "encontrar todas as duplicatas" -#: __init__.py:83 +#: __init__.py:82 msgid "" "Search all the documents' checksums and return a list of the exact matches." msgstr "" "Pesquisar todas as somas de verificação de documentos e retornar uma lista " "de correspondências exatas." +#: __init__.py:83 +msgid "update office documents' page count" +msgstr "" + +#: __init__.py:83 +msgid "" +"Update the page count of the office type documents. This is useful when " +"enabling office document support after there were already office type " +"documents in the database." +msgstr "" + #: __init__.py:84 __init__.py:85 msgid "clear transformations" msgstr "remover transformações" @@ -102,7 +114,7 @@ msgstr "transformações de página" msgid "create new transformation" msgstr "criar nova transformação" -#: __init__.py:94 forms.py:49 +#: __init__.py:94 msgid "page image" msgstr "imagem da página" @@ -158,7 +170,7 @@ msgstr "Encontrar arquivos de documentos em falta" msgid "document type list" msgstr "lista de tipo de documento" -#: __init__.py:111 views.py:840 +#: __init__.py:111 views.py:877 msgid "document types" msgstr "tipos de documentos" @@ -166,7 +178,7 @@ msgstr "tipos de documentos" msgid "documents of this type" msgstr "documentos deste tipo" -#: __init__.py:115 views.py:953 +#: __init__.py:115 views.py:990 msgid "create document type" msgstr "criar tipo de documento" @@ -178,76 +190,68 @@ msgstr "nomes de arquivos" msgid "add filename to document type" msgstr "adicionar nome do arquivo para o tipo de documento" -#: __init__.py:161 __init__.py:187 models.py:97 views.py:68 +#: __init__.py:161 __init__.py:186 models.py:101 views.py:69 msgid "documents" msgstr "documentos" -#: __init__.py:174 widgets.py:13 +#: __init__.py:173 msgid "thumbnail" msgstr "miniatura" -#: __init__.py:177 +#: __init__.py:176 msgid "tags" msgstr "tags" -#: __init__.py:180 +#: __init__.py:179 msgid "metadata" msgstr "metadado" -#: forms.py:72 +#: forms.py:60 msgid "Page image" msgstr "Imagem da página" -#: forms.py:82 forms.py:232 +#: forms.py:70 forms.py:209 msgid "Contents" msgstr "Conteúdos" -#: forms.py:135 -msgid "Page" -msgstr "Página" - -#: forms.py:136 +#: forms.py:116 msgid "Details" msgstr "Detalhes" -#: forms.py:138 models.py:312 models.py:349 -msgid "document page" -msgstr "página do documento" - -#: forms.py:144 +#: forms.py:121 msgid "Click on the image for full size preview" msgstr "Clique na imagem para visualizar em tamanho completo" -#: forms.py:154 +#: forms.py:131 #, python-format msgid "Document pages (%s)" msgstr "Páginas do documento (%s)" -#: forms.py:189 +#: forms.py:166 msgid "Quick document rename" msgstr "Renomear documento rápido" -#: forms.py:192 +#: forms.py:169 msgid "New document filename" msgstr "Novo nome de arquivo" -#: forms.py:246 +#: forms.py:223 msgid "Page size" msgstr "Tamanho da página" -#: forms.py:247 +#: forms.py:224 msgid "Custom page width" msgstr "Largura da página personalizada" -#: forms.py:248 +#: forms.py:225 msgid "Custom page height" msgstr "Altura da página personalizada" -#: forms.py:249 +#: forms.py:226 msgid "Page orientation" msgstr "Orientação da página" -#: forms.py:250 +#: forms.py:227 msgid "Page range" msgstr "Intervalo de páginas" @@ -306,8 +310,10 @@ msgstr "Documento \"%(content_object)s\" criado por %(fullname)s." #: literals.py:25 #, python-format -msgid "Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." -msgstr "Documento \"%(content_object)s\" criado em %(datetime)s por %(fullname)s." +msgid "" +"Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." +msgstr "" +"Documento \"%(content_object)s\" criado em %(datetime)s por %(fullname)s." #: literals.py:31 msgid "Document edited" @@ -321,8 +327,8 @@ msgstr "Documento \"%(content_object)s\" editado por %(fullname)s." #: literals.py:33 #, python-format msgid "" -"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s." -" The following changes took place: %(changes)s." +"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s. " +"The following changes took place: %(changes)s." msgstr "" "Documento \"%(content_object)s\" foi editado em %(datetime)s por " "%(fullname)s. As seguintes alterações foram realizadas: %(changes)s." @@ -341,162 +347,166 @@ msgstr "Documento \"%(document)s\" deletado por %(fullname)s." msgid "Document \"%(document)s\" deleted on %(datetime)s by %(fullname)s." msgstr "Documento \"%(document)s\" deletado em %(datetime)s por %(fullname)s." -#: models.py:59 +#: models.py:63 msgid "name" msgstr "nome" -#: models.py:65 models.py:74 models.py:281 views.py:859 views.py:889 -#: views.py:918 views.py:923 views.py:966 views.py:1012 views.py:1046 +#: models.py:69 models.py:78 models.py:315 views.py:896 views.py:926 +#: views.py:955 views.py:960 views.py:1003 views.py:1049 views.py:1083 msgid "document type" msgstr "tipo de documento" -#: models.py:66 +#: models.py:70 msgid "documents types" msgstr "tipos de documentos" -#: models.py:75 +#: models.py:79 msgid "file" msgstr "arquivo" -#: models.py:82 +#: models.py:86 msgid "added" msgstr "adicionado" -#: models.py:83 +#: models.py:87 msgid "updated" msgstr "atualizado" -#: models.py:84 +#: models.py:88 msgid "checksum" msgstr "verificações" -#: models.py:85 +#: models.py:89 msgid "description" msgstr "descrição" -#: models.py:96 models.py:298 models.py:370 models.py:385 views.py:208 +#: models.py:100 models.py:332 models.py:404 models.py:419 views.py:209 msgid "document" msgstr "documento" -#: models.py:177 +#: models.py:181 msgid "" "This document's file format is not known, the page count has therefore " "defaulted to 1." msgstr "" -"Este formato de arquivo não é conhecida, a contagem de página, portanto, tem" -" o padrão 1." +"Este formato de arquivo não é conhecida, a contagem de página, portanto, tem " +"o padrão 1." -#: models.py:282 +#: models.py:316 msgid "filename" msgstr "nome do arquivo" -#: models.py:283 views.py:973 +#: models.py:317 views.py:1010 msgid "enabled" msgstr "habilitado" -#: models.py:290 +#: models.py:324 msgid "document type quick rename filename" msgstr "tipo de documento renomear rápido" -#: models.py:291 +#: models.py:325 msgid "document types quick rename filenames" msgstr "tipos de documentos renomear rápido" -#: models.py:299 +#: models.py:333 msgid "content" msgstr "conteúdo" -#: models.py:300 +#: models.py:334 msgid "page label" msgstr "etiqueta da página" -#: models.py:301 +#: models.py:335 msgid "page number" msgstr "número da página" -#: models.py:304 +#: models.py:338 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Pagina %(page_num)d de %(total_pages)d em %(document)s" -#: models.py:313 +#: models.py:346 models.py:383 +msgid "document page" +msgstr "página do documento" + +#: models.py:347 msgid "document pages" msgstr "páginas do documento" -#: models.py:324 +#: models.py:358 msgid "Enter a valid value." msgstr "Digite um valor válido." -#: models.py:350 views.py:327 +#: models.py:384 views.py:333 msgid "order" msgstr "ordem" -#: models.py:351 views.py:328 views.py:383 views.py:412 +#: models.py:385 views.py:334 views.py:389 views.py:418 msgid "transformation" msgstr "transformação" -#: models.py:352 views.py:329 +#: models.py:386 views.py:335 msgid "arguments" msgstr "argumentos" -#: models.py:352 +#: models.py:386 #, python-format msgid "Use dictionaries to indentify arguments, example: %s" msgstr "Use dicionários para identificar os argumentos, exemplo: %s" -#: models.py:360 +#: models.py:394 msgid "document page transformation" msgstr "página de transformações do documento" -#: models.py:361 +#: models.py:395 msgid "document page transformations" msgstr "Página de transformações de documentos" -#: models.py:369 +#: models.py:403 msgid "user" msgstr "usuário" -#: models.py:371 +#: models.py:405 msgid "accessed" msgstr "acessado" -#: models.py:380 +#: models.py:414 msgid "recent document" msgstr "documento recente" -#: models.py:386 +#: models.py:420 msgid "Document type" msgstr "Tipo de documento" -#: models.py:387 +#: models.py:421 msgid "MIME type" msgstr "Tipo MIME" -#: models.py:388 views.py:116 +#: models.py:422 views.py:117 msgid "Filename" msgstr "Nome do arquivo" -#: models.py:389 +#: models.py:423 msgid "Filename extension" msgstr "Extensão do arquivo" -#: models.py:390 +#: models.py:424 msgid "Metadata value" msgstr "Valor de metadados" -#: models.py:391 +#: models.py:425 msgid "Content" msgstr "Conteúdo" -#: models.py:392 +#: models.py:426 msgid "Description" msgstr "Descrição" -#: models.py:393 +#: models.py:427 msgid "Tags" msgstr "Tags" -#: models.py:394 +#: models.py:428 msgid "Comments" msgstr "Comentários" @@ -518,8 +528,8 @@ msgstr "Documentos no armazenamento: %d" #: statistics.py:46 #, python-format msgid "" -"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d" -" bytes" +"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d " +"bytes" msgstr "" "Espaço usado no armazenamento: %(base_2)s (base 2), %(base_10)s (base 10), " "%(bytes)d bytes" @@ -548,117 +558,117 @@ msgstr "Quantidade média de páginas por documento: %(page_count__avg)f" msgid "Document statistics" msgstr "Estatísticas do documento" -#: views.py:117 +#: views.py:118 msgid "File extension" msgstr "Extensão de arquivo" -#: views.py:118 +#: views.py:119 msgid "File mimetype" msgstr "Mimetype do arquivo" -#: views.py:119 +#: views.py:120 msgid "File mime encoding" msgstr "Codificação MIME do arquivo" -#: views.py:120 +#: views.py:121 msgid "File size" msgstr "Tamanho do arquivo" -#: views.py:121 +#: views.py:122 msgid "Exists in storage" msgstr "Existe no armazenamento" -#: views.py:122 +#: views.py:123 msgid "File path in storage" msgstr "Caminho do arquivo no armazenamento" -#: views.py:123 +#: views.py:124 msgid "Date added" msgstr "Data de adição" -#: views.py:124 +#: views.py:125 msgid "Time added" msgstr "Horario de adição" -#: views.py:125 +#: views.py:126 msgid "Checksum" msgstr "Verificação" -#: views.py:126 +#: views.py:127 msgid "UUID" msgstr "UUID" -#: views.py:127 +#: views.py:128 msgid "Pages" msgstr "Páginas" -#: views.py:136 +#: views.py:137 #, python-format msgid "document properties for: %s" msgstr "propriedades de documento para: %s" -#: views.py:158 +#: views.py:159 msgid "document data" msgstr "dados do documento" -#: views.py:183 views.py:484 +#: views.py:184 views.py:521 msgid "Must provide at least one document." msgstr "Deve fornecer pelo menos um documento." -#: views.py:199 +#: views.py:200 #, python-format msgid "Document: %s deleted successfully." msgstr "Documento: %s apagado com sucesso." -#: views.py:201 +#: views.py:202 #, python-format msgid "Document: %(document)s delete error: %(error)s" msgstr "Erro ao excluir documento %(document)s: %(error)s" -#: views.py:216 +#: views.py:217 #, python-format msgid "Are you sure you wish to delete the document: %s?" msgstr "Tem certeza de que deseja excluir o documento: %s?" -#: views.py:218 +#: views.py:219 #, python-format msgid "Are you sure you wish to delete the documents: %s?" msgstr "Tem certeza de que deseja excluir os documentos: %s?" -#: views.py:255 +#: views.py:256 #, python-format msgid "Document \"%s\" edited successfully." msgstr "Documento \"%s\", editado com sucesso." -#: views.py:323 +#: views.py:329 #, python-format msgid "transformations for: %s" msgstr "transformações para: %s" -#: views.py:347 +#: views.py:353 msgid "Document page transformation created successfully." msgstr "Transformação para página do documento criada com sucesso." -#: views.py:356 +#: views.py:362 #, python-format msgid "Create new transformation for page: %(page)s of document: %(document)s" msgstr "" "Criar nova transformação para página: %(page)s do documento: %(document)s" -#: views.py:372 +#: views.py:378 msgid "Document page transformation edited successfully." msgstr "Transformação para página do documento editada com sucesso." -#: views.py:385 +#: views.py:391 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(document_page)s" msgstr "Editar transformação \"%(transformation)s\" para: %(document_page)s " -#: views.py:403 +#: views.py:409 msgid "Document page transformation deleted successfully." msgstr "Transformação para página do documento excluida com sucesso." -#: views.py:414 +#: views.py:420 #, python-format msgid "" "Are you sure you wish to delete transformation \"%(transformation)s\" for: " @@ -667,35 +677,47 @@ msgstr "" "Tem certeza de que deseja excluir \"%(transformation)s\" para: " "%(document_page)s " -#: views.py:428 +#: views.py:434 #, python-format msgid "duplicates of: %s" msgstr "duplicatas de: %s" -#: views.py:440 +#: views.py:446 msgid "Are you sure you wish to find all duplicates?" msgstr "Tem certeza de que deseja encontrar todas as duplicatas?" -#: views.py:441 views.py:534 +#: views.py:447 views.py:506 views.py:571 msgid "On large databases this operation may take some time to execute." msgstr "" -"Em grandes bases de dados esta operação pode levar algum tempo para " -"executar." +"Em grandes bases de dados esta operação pode levar algum tempo para executar." -#: views.py:456 +#: views.py:462 msgid "duplicated documents" msgstr "documentos duplicados" #: views.py:497 #, python-format msgid "" +"Page count update complete. Documents processed: %(total)d, documents with " +"changed page count: %(change)d" +msgstr "" + +#: views.py:505 +#, fuzzy, python-format +msgid "" +"Are you sure you wish to update the page count for the office documents (%d)?" +msgstr "Tem certeza de que deseja excluir os documentos: %s?" + +#: views.py:534 +#, python-format +msgid "" "All the page transformations for document: %s, have been deleted " "successfully." msgstr "" "Todas as transformações de página para o documento: %s, foram excluídas com " "sucesso." -#: views.py:499 +#: views.py:536 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " @@ -704,20 +726,19 @@ msgstr "" "Erro ao excluir as transformações de página para o documento: %(document)s; " "%(error)s ." -#: views.py:505 +#: views.py:542 msgid "document transformation" msgstr "transformação de documento" -#: views.py:514 +#: views.py:551 #, python-format msgid "" -"Are you sure you wish to clear all the page transformations for document: " -"%s?" +"Are you sure you wish to clear all the page transformations for document: %s?" msgstr "" "Tem certeza de que deseja limpar todas as transformações de página para o " "documento: %s?" -#: views.py:516 +#: views.py:553 #, python-format msgid "" "Are you sure you wish to clear all the page transformations for documents: " @@ -726,72 +747,72 @@ msgstr "" "Tem certeza de que deseja limpar todas as transformações de página para os " "documentos: %s?" -#: views.py:544 +#: views.py:581 msgid "missing documents" msgstr "documentos em falta" -#: views.py:557 views.py:595 +#: views.py:594 views.py:632 #, python-format msgid "details for: %s" msgstr "detalhes para: %s" -#: views.py:610 +#: views.py:647 msgid "Document page edited successfully." msgstr "Página do documento editado com sucesso." -#: views.py:619 +#: views.py:656 #, python-format msgid "edit: %s" msgstr "editar: %s" -#: views.py:630 +#: views.py:667 msgid "There are no more pages in this document" msgstr "Não há mais páginas neste documento" -#: views.py:643 +#: views.py:680 msgid "You are already at the first page of this document" msgstr "Você já está na primeira página deste documento" -#: views.py:786 +#: views.py:823 #, python-format msgid "print: %s" msgstr "imprimir: %s" -#: views.py:857 +#: views.py:894 #, python-format msgid "documents of type \"%s\"" msgstr "documentos do tipo \"%s\"" -#: views.py:877 +#: views.py:914 msgid "Document type edited successfully" msgstr "Tipo de documento editado com sucesso" -#: views.py:880 +#: views.py:917 #, python-format msgid "Error editing document type; %s" msgstr "Erro ao editar tipo de documento; %s" -#: views.py:885 +#: views.py:922 #, python-format msgid "edit document type: %s" msgstr "editar tipo de documento: %s" -#: views.py:910 +#: views.py:947 #, python-format msgid "Document type: %s deleted successfully." msgstr "Tipo de documento: %s apagado com sucesso." -#: views.py:912 +#: views.py:949 #, python-format msgid "Document type: %(document_type)s delete error: %(error)s" msgstr "Tipo de documento: %(document_type)s erro ao excluir: %(error)s " -#: views.py:927 +#: views.py:964 #, python-format msgid "Are you sure you wish to delete the document type: %s?" msgstr "Tem certeza de que deseja excluir o tipo de documento: %s?" -#: views.py:928 +#: views.py:965 msgid "" "The document type of all documents using this document type will be set to " "none." @@ -799,46 +820,46 @@ msgstr "" "O tipo de documento de todos os documentos usando este tipo de documento " "será definido como \"nenhum\"." -#: views.py:944 +#: views.py:981 msgid "Document type created successfully" msgstr "Tipo de documento criado com sucesso" -#: views.py:947 +#: views.py:984 #, python-format msgid "Error creating document type; %(error)s" msgstr "Erro ao criar tipo de documento; %(error)s " -#: views.py:965 +#: views.py:1002 #, python-format msgid "filenames for document type: %s" msgstr "nomes de arquivos para o tipo de documento: %s" -#: views.py:996 +#: views.py:1033 msgid "Document type filename edited successfully" msgstr "Nome de arquivo para tipo de documento editado com sucesso" -#: views.py:999 +#: views.py:1036 #, python-format msgid "Error editing document type filename; %s" msgstr "Erro ao editar nome de arquivo do tipo de documento: %s" -#: views.py:1004 +#: views.py:1041 #, python-format msgid "edit filename \"%(filename)s\" from document type \"%(document_type)s\"" msgstr "" "Editar nome de arquivo \"%(filename)s\" do tipo de documento " "\"%(document_type)s\"" -#: views.py:1013 views.py:1039 views.py:1047 +#: views.py:1050 views.py:1076 views.py:1084 msgid "document type filename" msgstr "nome de arquivo do tipo de documento" -#: views.py:1031 +#: views.py:1068 #, python-format msgid "Document type filename: %s deleted successfully." msgstr "Nome de arquivo do tipo de documento: %s excluido com sucesso." -#: views.py:1033 +#: views.py:1070 #, python-format msgid "" "Document type filename: %(document_type_filename)s delete error: %(error)s" @@ -846,7 +867,7 @@ msgstr "" "Nome de arquivo do tipo de documento: %(document_type_filename)s erro ao " "excluir: %(error)s" -#: views.py:1049 +#: views.py:1086 #, python-format msgid "" "Are you sure you wish to delete the filename: %(filename)s, from document " @@ -855,20 +876,25 @@ msgstr "" "Tem certeza de que deseja excluir o nome do arquivo: %(filename)s , do tipo " "de documento \" %(document_type)s \"?" -#: views.py:1074 +#: views.py:1111 msgid "Document type filename created successfully" msgstr "Nome de arquivo do tipo de documento criado com sucesso" -#: views.py:1077 +#: views.py:1114 #, python-format msgid "Error creating document type filename; %(error)s" msgstr "Erro ao criar nome de arquivo do tipo de documento; %(error)s" -#: views.py:1083 +#: views.py:1120 #, python-format msgid "create filename for document type: %s" msgstr "criar nome de arquivo para o tipo de documento: %s" +#: widgets.py:26 +#, fuzzy +msgid "document page image" +msgstr "página do documento" + #: wizards.py:34 msgid "step 1 of 3: Document type" msgstr "passo 1 de 3: Tipo de documento" @@ -887,8 +913,8 @@ msgstr "Próximo passo" #: conf/settings.py:38 msgid "" -"Maximum number of recent (created, edited, viewed) documents to remember per" -" user." +"Maximum number of recent (created, edited, viewed) documents to remember per " +"user." msgstr "" "Número máximo de documentos recentes (criado, editado, visualizado) à ser " "lembrado, por usuário." @@ -932,9 +958,9 @@ msgid "" "creation, as well as assigning default metadata types and sets to it." msgstr "" "Tipos de documentos definir uma classe que representa um grupo de " -"documentos, tais como: notas fiscais, regulamentos ou manuais. A vantagem de" -" usar os tipos de documentos são: a atribuição de uma lista de nomes típicos" -" para renomear rápidamente durante a criação, bem como atribuir tipos de " +"documentos, tais como: notas fiscais, regulamentos ou manuais. A vantagem de " +"usar os tipos de documentos são: a atribuição de uma lista de nomes típicos " +"para renomear rápidamente durante a criação, bem como atribuir tipos de " "padrão de metadados e conjuntos para ele." #: templates/recent_document_list_help.html:3 @@ -950,4 +976,5 @@ msgstr "" "Aqui você encontrará os últimos %(recent_count)s documentos que você tenha " "criado ou editado de alguma maneira." - +#~ msgid "Page" +#~ msgstr "Página" diff --git a/apps/documents/locale/ru/LC_MESSAGES/django.po b/apps/documents/locale/ru/LC_MESSAGES/django.po index cf8ae6ddd9..035feb5633 100644 --- a/apps/documents/locale/ru/LC_MESSAGES/django.po +++ b/apps/documents/locale/ru/LC_MESSAGES/django.po @@ -1,85 +1,98 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:43-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 16:20+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" -#: __init__.py:50 __init__.py:159 +#: __init__.py:49 __init__.py:159 msgid "Documents" msgstr "Документы" -#: __init__.py:61 +#: __init__.py:60 msgid "Documents setup" msgstr "Настройки для документов" -#: __init__.py:71 +#: __init__.py:70 msgid "all documents" msgstr "все документы" -#: __init__.py:72 models.py:381 views.py:672 +#: __init__.py:71 models.py:415 views.py:709 msgid "recent documents" msgstr "последние документы" -#: __init__.py:73 +#: __init__.py:72 msgid "upload new documents" msgstr "загрузить новые документы" -#: __init__.py:74 +#: __init__.py:73 msgid "clone metadata" msgstr "клонировать метаданные" -#: __init__.py:75 +#: __init__.py:74 msgid "details" msgstr "детали" -#: __init__.py:76 +#: __init__.py:75 msgid "properties" msgstr "свойства" -#: __init__.py:77 __init__.py:78 __init__.py:92 __init__.py:114 +#: __init__.py:76 __init__.py:77 __init__.py:92 __init__.py:114 #: __init__.py:120 msgid "delete" msgstr "удалить" -#: __init__.py:79 __init__.py:91 __init__.py:113 __init__.py:119 +#: __init__.py:78 __init__.py:91 __init__.py:113 __init__.py:119 msgid "edit" msgstr "редактировать" -#: __init__.py:80 +#: __init__.py:79 msgid "preview" msgstr "предварительный просмотр" -#: __init__.py:81 +#: __init__.py:80 msgid "download" msgstr "скачать" -#: __init__.py:82 +#: __init__.py:81 msgid "find duplicates" msgstr "поиска дубликатов" -#: __init__.py:83 +#: __init__.py:82 msgid "find all duplicates" msgstr "найти все дубликаты" -#: __init__.py:83 +#: __init__.py:82 msgid "" "Search all the documents' checksums and return a list of the exact matches." msgstr "" "Искать все контрольные суммы документов и вернуть список точных совпадений." +#: __init__.py:83 +msgid "update office documents' page count" +msgstr "" + +#: __init__.py:83 +msgid "" +"Update the page count of the office type documents. This is useful when " +"enabling office document support after there were already office type " +"documents in the database." +msgstr "" + #: __init__.py:84 __init__.py:85 msgid "clear transformations" msgstr "очистить преобразования" @@ -100,7 +113,7 @@ msgstr " преобразования страницы" msgid "create new transformation" msgstr "создать новое преобразование" -#: __init__.py:94 forms.py:49 +#: __init__.py:94 msgid "page image" msgstr "изображение страницы" @@ -156,7 +169,7 @@ msgstr "Найти недостающие файлы документов" msgid "document type list" msgstr "Список типов документов" -#: __init__.py:111 views.py:840 +#: __init__.py:111 views.py:877 msgid "document types" msgstr "типы документов" @@ -164,7 +177,7 @@ msgstr "типы документов" msgid "documents of this type" msgstr "документы этого типа" -#: __init__.py:115 views.py:953 +#: __init__.py:115 views.py:990 msgid "create document type" msgstr "создать тип документа" @@ -176,76 +189,68 @@ msgstr "Имена файлов" msgid "add filename to document type" msgstr "добавить имя файла для типа документа" -#: __init__.py:161 __init__.py:187 models.py:97 views.py:68 +#: __init__.py:161 __init__.py:186 models.py:101 views.py:69 msgid "documents" msgstr "документы" -#: __init__.py:174 widgets.py:13 +#: __init__.py:173 msgid "thumbnail" msgstr "миниатюра" -#: __init__.py:177 +#: __init__.py:176 msgid "tags" msgstr "метки" -#: __init__.py:180 +#: __init__.py:179 msgid "metadata" msgstr "метаданные" -#: forms.py:72 +#: forms.py:60 msgid "Page image" msgstr "Страница изображения" -#: forms.py:82 forms.py:232 +#: forms.py:70 forms.py:209 msgid "Contents" msgstr "Содержание" -#: forms.py:135 -msgid "Page" -msgstr "Страница" - -#: forms.py:136 +#: forms.py:116 msgid "Details" msgstr "Детали" -#: forms.py:138 models.py:312 models.py:349 -msgid "document page" -msgstr "страница документа" - -#: forms.py:144 +#: forms.py:121 msgid "Click on the image for full size preview" msgstr "Нажмите на изображение для полного просмотра размера" -#: forms.py:154 +#: forms.py:131 #, python-format msgid "Document pages (%s)" msgstr "Страницы документа (%s)" -#: forms.py:189 +#: forms.py:166 msgid "Quick document rename" msgstr "Быстро переименовать документ" -#: forms.py:192 +#: forms.py:169 msgid "New document filename" msgstr "Новое имя файла документа" -#: forms.py:246 +#: forms.py:223 msgid "Page size" msgstr "Размер страницы" -#: forms.py:247 +#: forms.py:224 msgid "Custom page width" msgstr "Своя ширина страницы" -#: forms.py:248 +#: forms.py:225 msgid "Custom page height" msgstr "Своя высота страницы" -#: forms.py:249 +#: forms.py:226 msgid "Page orientation" msgstr "Ориентация страницы" -#: forms.py:250 +#: forms.py:227 msgid "Page range" msgstr "Диапазон страниц" @@ -304,7 +309,8 @@ msgstr "Документ \"%(content_object)s\", создан %(fullname)s ." #: literals.py:25 #, python-format -msgid "Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." +msgid "" +"Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." msgstr "" "Документ \"%(content_object)s\" создан %(datetime)s пользователем " "%(fullname)s." @@ -321,11 +327,11 @@ msgstr "Документ \"%(content_object)s\" редактировал %(fulln #: literals.py:33 #, python-format msgid "" -"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s." -" The following changes took place: %(changes)s." +"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s. " +"The following changes took place: %(changes)s." msgstr "" -"Документ \"%(content_object)s\" был изменён %(datetime)s %(fullname)s. Были" -" внесены изменения: %(changes)s." +"Документ \"%(content_object)s\" был изменён %(datetime)s %(fullname)s. Были " +"внесены изменения: %(changes)s." #: literals.py:42 msgid "Document deleted" @@ -341,161 +347,164 @@ msgstr "Документ \"%(document)s\" удалил %(fullname)s." msgid "Document \"%(document)s\" deleted on %(datetime)s by %(fullname)s." msgstr "Документ\"%(document)s\" удалил %(datetime)s %(fullname)s." -#: models.py:59 +#: models.py:63 msgid "name" msgstr "имя" -#: models.py:65 models.py:74 models.py:281 views.py:859 views.py:889 -#: views.py:918 views.py:923 views.py:966 views.py:1012 views.py:1046 +#: models.py:69 models.py:78 models.py:315 views.py:896 views.py:926 +#: views.py:955 views.py:960 views.py:1003 views.py:1049 views.py:1083 msgid "document type" msgstr "тип документа" -#: models.py:66 +#: models.py:70 msgid "documents types" msgstr "типы документов" -#: models.py:75 +#: models.py:79 msgid "file" msgstr "файл" -#: models.py:82 +#: models.py:86 msgid "added" msgstr "добавлено" -#: models.py:83 +#: models.py:87 msgid "updated" msgstr "обновлено" -#: models.py:84 +#: models.py:88 msgid "checksum" msgstr "Контрольная сумма" -#: models.py:85 +#: models.py:89 msgid "description" msgstr "описание" -#: models.py:96 models.py:298 models.py:370 models.py:385 views.py:208 +#: models.py:100 models.py:332 models.py:404 models.py:419 views.py:209 msgid "document" msgstr "документ" -#: models.py:177 +#: models.py:181 msgid "" "This document's file format is not known, the page count has therefore " "defaulted to 1." -msgstr "" -"Этот формат файла документа не известен, количество страниц поэтому 1." +msgstr "Этот формат файла документа не известен, количество страниц поэтому 1." -#: models.py:282 +#: models.py:316 msgid "filename" msgstr "имя файла" -#: models.py:283 views.py:973 +#: models.py:317 views.py:1010 msgid "enabled" msgstr "разрешено" -#: models.py:290 +#: models.py:324 msgid "document type quick rename filename" msgstr "имя файла для быстрого переименования документа определённого типа " -#: models.py:291 +#: models.py:325 msgid "document types quick rename filenames" msgstr "имена файлов для быстрого переименования документа определённых типов" -#: models.py:299 +#: models.py:333 msgid "content" msgstr "содержание" -#: models.py:300 +#: models.py:334 msgid "page label" msgstr "метка страницы" -#: models.py:301 +#: models.py:335 msgid "page number" msgstr "номер страницы" -#: models.py:304 +#: models.py:338 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Страница %(page_num)d из %(total_pages)d %(document)s" -#: models.py:313 +#: models.py:346 models.py:383 +msgid "document page" +msgstr "страница документа" + +#: models.py:347 msgid "document pages" msgstr "страницы документа" -#: models.py:324 +#: models.py:358 msgid "Enter a valid value." msgstr "Введите допустимое значение." -#: models.py:350 views.py:327 +#: models.py:384 views.py:333 msgid "order" msgstr "порядок" -#: models.py:351 views.py:328 views.py:383 views.py:412 +#: models.py:385 views.py:334 views.py:389 views.py:418 msgid "transformation" msgstr "преобразование" -#: models.py:352 views.py:329 +#: models.py:386 views.py:335 msgid "arguments" msgstr "аргументы" -#: models.py:352 +#: models.py:386 #, python-format msgid "Use dictionaries to indentify arguments, example: %s" msgstr "Использовать словари для идентификации аргументов, например %s" -#: models.py:360 +#: models.py:394 msgid "document page transformation" msgstr "преобразование страницы документа" -#: models.py:361 +#: models.py:395 msgid "document page transformations" msgstr "преобразования документов страницу" -#: models.py:369 +#: models.py:403 msgid "user" msgstr "пользователь" -#: models.py:371 +#: models.py:405 msgid "accessed" msgstr "допущен" -#: models.py:380 +#: models.py:414 msgid "recent document" msgstr "недавний документ" -#: models.py:386 +#: models.py:420 msgid "Document type" msgstr "Тип документа" -#: models.py:387 +#: models.py:421 msgid "MIME type" msgstr "MIME-тип" -#: models.py:388 views.py:116 +#: models.py:422 views.py:117 msgid "Filename" msgstr "Имя файла" -#: models.py:389 +#: models.py:423 msgid "Filename extension" msgstr "Расширение файла" -#: models.py:390 +#: models.py:424 msgid "Metadata value" msgstr "Метаданны значение" -#: models.py:391 +#: models.py:425 msgid "Content" msgstr "Содержимое" -#: models.py:392 +#: models.py:426 msgid "Description" msgstr "Описание" -#: models.py:393 +#: models.py:427 msgid "Tags" msgstr "Метки" -#: models.py:394 +#: models.py:428 msgid "Comments" msgstr "Комментарии" @@ -517,8 +526,8 @@ msgstr "Документы в хранилище: %d." #: statistics.py:46 #, python-format msgid "" -"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d" -" bytes" +"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d " +"bytes" msgstr "" "Использовано:%(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d bytes" @@ -546,117 +555,117 @@ msgstr "Среднее количество страниц в документе msgid "Document statistics" msgstr "Статистика документов" -#: views.py:117 +#: views.py:118 msgid "File extension" msgstr "Расширение файла" -#: views.py:118 +#: views.py:119 msgid "File mimetype" msgstr "Mime тип файла" -#: views.py:119 +#: views.py:120 msgid "File mime encoding" msgstr "Mime-кодировка файла" -#: views.py:120 +#: views.py:121 msgid "File size" msgstr "Размер" -#: views.py:121 +#: views.py:122 msgid "Exists in storage" msgstr "Существует в хранилище" -#: views.py:122 +#: views.py:123 msgid "File path in storage" msgstr "Путь к файлу в хранилище" -#: views.py:123 +#: views.py:124 msgid "Date added" msgstr "Дата добавления" -#: views.py:124 +#: views.py:125 msgid "Time added" msgstr "Время добавления" -#: views.py:125 +#: views.py:126 msgid "Checksum" msgstr "Контрольная сумма" -#: views.py:126 +#: views.py:127 msgid "UUID" msgstr "UUID" -#: views.py:127 +#: views.py:128 msgid "Pages" msgstr "Страницы" -#: views.py:136 +#: views.py:137 #, python-format msgid "document properties for: %s" msgstr "Свойства документа для: %s" -#: views.py:158 +#: views.py:159 msgid "document data" msgstr "данные документа" -#: views.py:183 views.py:484 +#: views.py:184 views.py:521 msgid "Must provide at least one document." msgstr "Необходимо предоставить хотя бы один документ." -#: views.py:199 +#: views.py:200 #, python-format msgid "Document: %s deleted successfully." msgstr "Документ: %s успешно удален. " -#: views.py:201 +#: views.py:202 #, python-format msgid "Document: %(document)s delete error: %(error)s" msgstr "Документ:%(document)s ошибка удаления: %(error)s" -#: views.py:216 +#: views.py:217 #, python-format msgid "Are you sure you wish to delete the document: %s?" msgstr "Вы действительно хотите удалить документ: %s?" -#: views.py:218 +#: views.py:219 #, python-format msgid "Are you sure you wish to delete the documents: %s?" msgstr "Вы действительно хотите удалить документы: %s?" -#: views.py:255 +#: views.py:256 #, python-format msgid "Document \"%s\" edited successfully." msgstr "Документ \"%s\" изменен." -#: views.py:323 +#: views.py:329 #, python-format msgid "transformations for: %s" msgstr "преобразования для: %s" -#: views.py:347 +#: views.py:353 msgid "Document page transformation created successfully." msgstr "Преобразование страницы документа создано успешно." -#: views.py:356 +#: views.py:362 #, python-format msgid "Create new transformation for page: %(page)s of document: %(document)s" msgstr "" "Создать новое преобразование для страницы: %(page)s документа: %(document)s" -#: views.py:372 +#: views.py:378 msgid "Document page transformation edited successfully." msgstr "Преобразование страницы успешно изменено." -#: views.py:385 +#: views.py:391 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(document_page)s" msgstr "Изменить преобразования \"%(transformation)s\" for: %(document_page)s" -#: views.py:403 +#: views.py:409 msgid "Document page transformation deleted successfully." msgstr "Преобразование страницы успешно удалено." -#: views.py:414 +#: views.py:420 #, python-format msgid "" "Are you sure you wish to delete transformation \"%(transformation)s\" for: " @@ -665,33 +674,46 @@ msgstr "" "Вы действительно хотите удалить преобразования \"%(transformation)s\" for: " "%(document_page)s\"" -#: views.py:428 +#: views.py:434 #, python-format msgid "duplicates of: %s" msgstr "дубликатов: %s" -#: views.py:440 +#: views.py:446 msgid "Are you sure you wish to find all duplicates?" msgstr "Вы действительно хотите найти все дубликаты?" -#: views.py:441 views.py:534 +#: views.py:447 views.py:506 views.py:571 msgid "On large databases this operation may take some time to execute." msgstr "" "В больших базах данных эта операция может занять некоторое время для " "выполнения." -#: views.py:456 +#: views.py:462 msgid "duplicated documents" msgstr "дубликаты документов" #: views.py:497 #, python-format msgid "" +"Page count update complete. Documents processed: %(total)d, documents with " +"changed page count: %(change)d" +msgstr "" + +#: views.py:505 +#, fuzzy, python-format +msgid "" +"Are you sure you wish to update the page count for the office documents (%d)?" +msgstr "Вы действительно хотите удалить документы: %s?" + +#: views.py:534 +#, python-format +msgid "" "All the page transformations for document: %s, have been deleted " "successfully." msgstr "Все преобразования страницы для документа: %s успешно удалены." -#: views.py:499 +#: views.py:536 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " @@ -700,19 +722,18 @@ msgstr "" "Ошибка при удалении страницы для преобразования документов: %(document)s; " "%(error)s." -#: views.py:505 +#: views.py:542 msgid "document transformation" msgstr "преобразование документа" -#: views.py:514 +#: views.py:551 #, python-format msgid "" -"Are you sure you wish to clear all the page transformations for document: " -"%s?" +"Are you sure you wish to clear all the page transformations for document: %s?" msgstr "" "Вы действительно хотите удалить все преобразования странице документа: %s?" -#: views.py:516 +#: views.py:553 #, python-format msgid "" "Are you sure you wish to clear all the page transformations for documents: " @@ -721,115 +742,116 @@ msgstr "" "Вы действительно хотите удалить все преобразования страницы для документов: " "%s?" -#: views.py:544 +#: views.py:581 msgid "missing documents" msgstr "недостающие документы" -#: views.py:557 views.py:595 +#: views.py:594 views.py:632 #, python-format msgid "details for: %s" msgstr "подробности: %s" -#: views.py:610 +#: views.py:647 msgid "Document page edited successfully." msgstr "Страница документа успешно изменена." -#: views.py:619 +#: views.py:656 #, python-format msgid "edit: %s" msgstr "редактировать: %s" -#: views.py:630 +#: views.py:667 msgid "There are no more pages in this document" msgstr " Нет более страниц в этом документе" -#: views.py:643 +#: views.py:680 msgid "You are already at the first page of this document" msgstr "Вы уже на первой странице этого документа" -#: views.py:786 +#: views.py:823 #, python-format msgid "print: %s" msgstr "печать: %s" -#: views.py:857 +#: views.py:894 #, python-format msgid "documents of type \"%s\"" msgstr "документы типа \"%s\"" -#: views.py:877 +#: views.py:914 msgid "Document type edited successfully" msgstr "Тип документа успешно изменен" -#: views.py:880 +#: views.py:917 #, python-format msgid "Error editing document type; %s" msgstr "Ошибка редактирования типа документа; %s" -#: views.py:885 +#: views.py:922 #, python-format msgid "edit document type: %s" msgstr "редактировать тип документа: %s" -#: views.py:910 +#: views.py:947 #, python-format msgid "Document type: %s deleted successfully." msgstr "Вид документа: %s успешно удален." -#: views.py:912 +#: views.py:949 #, python-format msgid "Document type: %(document_type)s delete error: %(error)s" msgstr "Тип документа: %(document_type)s ошибка удаления: %(error)s" -#: views.py:927 +#: views.py:964 #, python-format msgid "Are you sure you wish to delete the document type: %s?" msgstr "Вы действительно хотите удалить тип документа: %s?" -#: views.py:928 +#: views.py:965 msgid "" "The document type of all documents using this document type will be set to " "none." msgstr "Тип документа всех документов этого типа станет неопределённым." -#: views.py:944 +#: views.py:981 msgid "Document type created successfully" msgstr "Тип документа успешно создан" -#: views.py:947 +#: views.py:984 #, python-format msgid "Error creating document type; %(error)s" msgstr "Ошибка при создании типа документа; %(error)s" -#: views.py:965 +#: views.py:1002 #, python-format msgid "filenames for document type: %s" msgstr "имена файлов для типа документа: %s" -#: views.py:996 +#: views.py:1033 msgid "Document type filename edited successfully" msgstr "Имя файла для типа документа успешно изменено" -#: views.py:999 +#: views.py:1036 #, python-format msgid "Error editing document type filename; %s" msgstr "Ошибка редактирования документа введите имя файла; %s" -#: views.py:1004 +#: views.py:1041 #, python-format msgid "edit filename \"%(filename)s\" from document type \"%(document_type)s\"" -msgstr "редактирование файла \"%(filename)s из типа документа \"%(document_type)s\"" +msgstr "" +"редактирование файла \"%(filename)s из типа документа \"%(document_type)s\"" -#: views.py:1013 views.py:1039 views.py:1047 +#: views.py:1050 views.py:1076 views.py:1084 msgid "document type filename" msgstr "имя файла для типа документа" -#: views.py:1031 +#: views.py:1068 #, python-format msgid "Document type filename: %s deleted successfully." msgstr "Имя файла для типа документа: %s успешно удалено." -#: views.py:1033 +#: views.py:1070 #, python-format msgid "" "Document type filename: %(document_type_filename)s delete error: %(error)s" @@ -837,7 +859,7 @@ msgstr "" "При удалении имени файла для типа документа %(document_type_filename)s " "произошла ошибка %(error)s" -#: views.py:1049 +#: views.py:1086 #, python-format msgid "" "Are you sure you wish to delete the filename: %(filename)s, from document " @@ -846,20 +868,25 @@ msgstr "" "Вы действительно хотите удалить имя файла: %(filename)s из типа документа " "\"%(document_type)s\"?" -#: views.py:1074 +#: views.py:1111 msgid "Document type filename created successfully" msgstr "Имя файла для типа документа успешно создан" -#: views.py:1077 +#: views.py:1114 #, python-format msgid "Error creating document type filename; %(error)s" msgstr "Ошибка создания имени файла для типа документа; %(error)s" -#: views.py:1083 +#: views.py:1120 #, python-format msgid "create filename for document type: %s" msgstr "создание имени файла для типа документа: %s" +#: widgets.py:26 +#, fuzzy +msgid "document page image" +msgstr "страница документа" + #: wizards.py:34 msgid "step 1 of 3: Document type" msgstr "Шаг 1 из 3: Тип документа" @@ -878,8 +905,8 @@ msgstr "Далее" #: conf/settings.py:38 msgid "" -"Maximum number of recent (created, edited, viewed) documents to remember per" -" user." +"Maximum number of recent (created, edited, viewed) documents to remember per " +"user." msgstr "" "Максимальное количество последних (созданных, измененных, просмотренных) " "документов, запоминаемых для каждого пользователя." @@ -898,8 +925,7 @@ msgstr "Максимальный процент увеличения стран msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." -msgstr "" -"Процент уменьшения масштаба страницы документа в интерактивном режиме." +msgstr "Процент уменьшения масштаба страницы документа в интерактивном режиме." #: conf/settings.py:42 msgid "Amount in degrees to rotate a document page per user interaction." @@ -935,4 +961,5 @@ msgstr "" "Здесь вы найдете последние %(recent_count)s документов созданные или " "отредактированные вами." - +#~ msgid "Page" +#~ msgstr "Страница" diff --git a/apps/dynamic_search/locale/en/LC_MESSAGES/django.po b/apps/dynamic_search/locale/en/LC_MESSAGES/django.po index d7c262ced4..9cea6f8909 100644 --- a/apps/dynamic_search/locale/en/LC_MESSAGES/django.po +++ b/apps/dynamic_search/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -33,27 +33,27 @@ msgstr "" msgid "Search terms" msgstr "" -#: models.py:18 +#: models.py:20 msgid "user" msgstr "" -#: models.py:19 +#: models.py:21 msgid "query" msgstr "" -#: models.py:20 +#: models.py:22 msgid "datetime created" msgstr "" -#: models.py:21 +#: models.py:23 msgid "hits" msgstr "" -#: models.py:59 +#: models.py:61 msgid "recent search" msgstr "" -#: models.py:60 +#: models.py:62 msgid "recent searches" msgstr "" diff --git a/apps/dynamic_search/locale/es/LC_MESSAGES/django.po b/apps/dynamic_search/locale/es/LC_MESSAGES/django.po index 2811642d41..b7c928d60c 100644 --- a/apps/dynamic_search/locale/es/LC_MESSAGES/django.po +++ b/apps/dynamic_search/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 17:06+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:5 @@ -34,27 +35,27 @@ msgstr "buscar de nuevo" msgid "Search terms" msgstr "Términos de búsqueda" -#: models.py:18 +#: models.py:20 msgid "user" msgstr "usuario" -#: models.py:19 +#: models.py:21 msgid "query" msgstr "pregunta" -#: models.py:20 +#: models.py:22 msgid "datetime created" msgstr "fecha y hora creados" -#: models.py:21 +#: models.py:23 msgid "hits" msgstr "accesos" -#: models.py:59 +#: models.py:61 msgid "recent search" msgstr "búsqueda reciente" -#: models.py:60 +#: models.py:62 msgid "recent searches" msgstr "búsquedas recientes" @@ -117,5 +118,3 @@ msgstr "Tiempo transcurrido: %(time_delta)s segundos" #, python-format msgid "recent searches (maximum of %d)" msgstr "búsquedas recientes (máximo de %d)" - - diff --git a/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po b/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po index 8f0cb6d4e2..cd156fba16 100644 --- a/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po +++ b/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 02:32+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:5 @@ -34,27 +35,27 @@ msgstr "pesquisar novamente" msgid "Search terms" msgstr "Termos de pesquisa" -#: models.py:18 +#: models.py:20 msgid "user" msgstr "usuário" -#: models.py:19 +#: models.py:21 msgid "query" msgstr "pergunta" -#: models.py:20 +#: models.py:22 msgid "datetime created" msgstr "Data e hora da criação" -#: models.py:21 +#: models.py:23 msgid "hits" msgstr "visitas" -#: models.py:59 +#: models.py:61 msgid "recent search" msgstr "pesquisa recente" -#: models.py:60 +#: models.py:62 msgid "recent searches" msgstr "pesquisas recentes" @@ -116,5 +117,3 @@ msgstr "Tempo decorrido: %(time_delta)s segundos" #, python-format msgid "recent searches (maximum of %d)" msgstr "pesquisas recentes (maximum of %d)" - - diff --git a/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po b/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po index 47283aec7a..758ddcbf0e 100644 --- a/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po +++ b/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 22:40+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:5 msgid "search" @@ -33,27 +35,27 @@ msgstr "искать ещё раз" msgid "Search terms" msgstr "Слова для поиска" -#: models.py:18 +#: models.py:20 msgid "user" msgstr "пользователь" -#: models.py:19 +#: models.py:21 msgid "query" msgstr "запрос" -#: models.py:20 +#: models.py:22 msgid "datetime created" msgstr "даты и время создания" -#: models.py:21 +#: models.py:23 msgid "hits" msgstr "хитов" -#: models.py:59 +#: models.py:61 msgid "recent search" msgstr "недавний поиск" -#: models.py:60 +#: models.py:62 msgid "recent searches" msgstr "последние запросы" @@ -83,8 +85,7 @@ msgstr "Поиск" #: conf/settings.py:12 msgid "Maximum amount search hits to fetch and display." -msgstr "" -"Максимальное количество отображаемых документов из результатов поиска." +msgstr "Максимальное количество отображаемых документов из результатов поиска." #: conf/settings.py:13 msgid "Maximum number of search queries to remember per user." @@ -118,5 +119,3 @@ msgstr "Прошедшее время в секундах: %(time_delta)s" #, python-format msgid "recent searches (maximum of %d)" msgstr "Последние запросы (максимум %d)" - - diff --git a/apps/folders/locale/en/LC_MESSAGES/django.po b/apps/folders/locale/en/LC_MESSAGES/django.po index f512b1be97..f44a557331 100644 --- a/apps/folders/locale/en/LC_MESSAGES/django.po +++ b/apps/folders/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/folders/locale/es/LC_MESSAGES/django.po b/apps/folders/locale/es/LC_MESSAGES/django.po index 0b317dc8d6..39c54e00b2 100644 --- a/apps/folders/locale/es/LC_MESSAGES/django.po +++ b/apps/folders/locale/es/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 05:10+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:10 @@ -192,8 +193,8 @@ msgstr "" #: views.py:268 #, python-format msgid "" -"Are you sure you wish to remove the documents: %(documents)s from the folder" -" \"%(folder)s\"?" +"Are you sure you wish to remove the documents: %(documents)s from the folder " +"\"%(folder)s\"?" msgstr "" "¿Está seguro que desea eliminar los documentos: %(documents)s de la carpeta " "\"%(folder)s\"?" @@ -218,5 +219,3 @@ msgstr "" #: templatetags/folder_tags.py:17 msgid "Add document to a folder" msgstr "Agregar documento a una carpeta" - - diff --git a/apps/folders/locale/pt/LC_MESSAGES/django.po b/apps/folders/locale/pt/LC_MESSAGES/django.po index 7e938f3a56..40ab6db2d2 100644 --- a/apps/folders/locale/pt/LC_MESSAGES/django.po +++ b/apps/folders/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Renata Oliveira , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 03:33+0000\n" "Last-Translator: renataoliveira \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:10 @@ -192,8 +193,8 @@ msgstr "" #: views.py:268 #, python-format msgid "" -"Are you sure you wish to remove the documents: %(documents)s from the folder" -" \"%(folder)s\"?" +"Are you sure you wish to remove the documents: %(documents)s from the folder " +"\"%(folder)s\"?" msgstr "" "Tem certeza de que deseja remover os documentos: %(documents)s da pasta " "\"%(folder)s\"?" @@ -209,8 +210,8 @@ msgid "" "created by one user and the documents contained by them don't affect any " "other user folders or documents." msgstr "" -"Estas pastas também podem ser descritas como pastas de usuário. Elas são uma" -" maneira de permitir que os usuários individuais criem os seus próprios " +"Estas pastas também podem ser descritas como pastas de usuário. Elas são uma " +"maneira de permitir que os usuários individuais criem os seus próprios " "métodos de organização do documento. Pastas criadas por um usuário e os " "documentos contidos nelas não afetam todas as pastas de outros usuários ou " "documentos." @@ -218,5 +219,3 @@ msgstr "" #: templatetags/folder_tags.py:17 msgid "Add document to a folder" msgstr "Adicionar documento à uma pasta" - - diff --git a/apps/folders/locale/ru/LC_MESSAGES/django.po b/apps/folders/locale/ru/LC_MESSAGES/django.po index ace34d7713..6c43201638 100644 --- a/apps/folders/locale/ru/LC_MESSAGES/django.po +++ b/apps/folders/locale/ru/LC_MESSAGES/django.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 16:56+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:10 msgid "folder list" @@ -185,14 +187,14 @@ msgid "" "Are you sure you wish to remove the document: %(document)s from the folder " "\"%(folder)s\"?" msgstr "" -"Вы действительно хотите удалить документ: %(document)s из папки \"%(folder)s" -" \"?" +"Вы действительно хотите удалить документ: %(document)s из папки \"%(folder)s " +"\"?" #: views.py:268 #, python-format msgid "" -"Are you sure you wish to remove the documents: %(documents)s from the folder" -" \"%(folder)s\"?" +"Are you sure you wish to remove the documents: %(documents)s from the folder " +"\"%(folder)s\"?" msgstr "" "Вы действительно хотите удалить документы: %(documents)s из папки " "\"%(folder)s\"?" @@ -215,5 +217,3 @@ msgstr "" #: templatetags/folder_tags.py:17 msgid "Add document to a folder" msgstr "Добавить документ в папку" - - diff --git a/apps/history/locale/en/LC_MESSAGES/django.po b/apps/history/locale/en/LC_MESSAGES/django.po index 03d90c2b94..c16d3cc85d 100644 --- a/apps/history/locale/en/LC_MESSAGES/django.po +++ b/apps/history/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/history/locale/es/LC_MESSAGES/django.po b/apps/history/locale/es/LC_MESSAGES/django.po index d030134719..1d198465b4 100644 --- a/apps/history/locale/es/LC_MESSAGES/django.po +++ b/apps/history/locale/es/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 05:10+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:6 @@ -102,5 +103,3 @@ msgstr "Detalles del evento" #, python-format msgid "details for: %s" msgstr "Detalles para: %s" - - diff --git a/apps/history/locale/pt/LC_MESSAGES/django.po b/apps/history/locale/pt/LC_MESSAGES/django.po index 7e81b1541b..6ed4ecd216 100644 --- a/apps/history/locale/pt/LC_MESSAGES/django.po +++ b/apps/history/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 03:22+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:6 @@ -103,5 +104,3 @@ msgstr "Detalhes do evento" #, python-format msgid "details for: %s" msgstr "detalhes para: %s" - - diff --git a/apps/history/locale/ru/LC_MESSAGES/django.po b/apps/history/locale/ru/LC_MESSAGES/django.po index 24c2e5b878..78cf703a30 100644 --- a/apps/history/locale/ru/LC_MESSAGES/django.po +++ b/apps/history/locale/ru/LC_MESSAGES/django.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 23:30+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:6 msgid "Access the history app" @@ -102,5 +104,3 @@ msgstr "Подробности события" #, python-format msgid "details for: %s" msgstr "подробности: %s" - - diff --git a/apps/linking/locale/en/LC_MESSAGES/django.po b/apps/linking/locale/en/LC_MESSAGES/django.po index a72d9392de..17272844d4 100644 --- a/apps/linking/locale/en/LC_MESSAGES/django.po +++ b/apps/linking/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,27 +17,67 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: __init__.py:8 -msgid "group actions" +#: __init__.py:11 +msgid "View existing smart links" msgstr "" -#: __init__.py:9 -msgid "groups" +#: __init__.py:12 +msgid "Create new smart links" msgstr "" -#: forms.py:55 +#: __init__.py:13 +msgid "Delete smart links" +msgstr "" + +#: __init__.py:14 +msgid "Edit smart links" +msgstr "" + +#: __init__.py:16 +msgid "Smart links" +msgstr "" + +#: __init__.py:22 +msgid "smart links actions" +msgstr "" + +#: __init__.py:23 __init__.py:25 models.py:21 views.py:105 +msgid "smart links" +msgstr "" + +#: __init__.py:26 +msgid "smart links list" +msgstr "" + +#: __init__.py:27 +msgid "create new smart link" +msgstr "" + +#: __init__.py:28 __init__.py:33 +msgid "edit" +msgstr "" + +#: __init__.py:29 __init__.py:34 +msgid "delete" +msgstr "" + +#: __init__.py:31 +msgid "conditions" +msgstr "" + +#: __init__.py:32 +msgid "create condition" +msgstr "" + +#: forms.py:48 msgid "Pages" msgstr "" -#: forms.py:56 +#: forms.py:54 msgid "Select" msgstr "" #: forms.py:61 -msgid "group document" -msgstr "" - -#: forms.py:66 msgid "Click on the image for full size view of the first page." msgstr "" @@ -113,20 +153,23 @@ msgstr "" msgid "title" msgstr "" -#: models.py:11 +#: models.py:11 views.py:108 msgid "dynamic title" msgstr "" -#: models.py:12 models.py:33 +#: models.py:11 models.py:29 +msgid "" +"This expression will be evaluated against the current selected document. " +"The document metadata is available as variables `metadata` and document " +"properties under the variable `document`." +msgstr "" + +#: models.py:12 models.py:31 views.py:109 views.py:196 msgid "enabled" msgstr "" -#: models.py:20 models.py:25 -msgid "document group" -msgstr "" - -#: models.py:21 -msgid "document groups" +#: models.py:20 models.py:25 views.py:256 views.py:287 +msgid "smart link" msgstr "" #: models.py:26 @@ -143,56 +186,144 @@ msgid "" "`document.` and `metadata.`." msgstr "" -#: models.py:31 +#: models.py:29 msgid "expression" msgstr "" -#: models.py:31 -msgid "" -"This expression will be evaluated against the current selected document. " -"The document metadata is available as variables `metadata` and document " -"properties under the variable `document`." -msgstr "" - -#: models.py:32 +#: models.py:30 msgid "negated" msgstr "" -#: models.py:32 +#: models.py:30 msgid "Inverts the logic of the operator." msgstr "" -#: models.py:36 +#: models.py:34 msgid "not" msgstr "" -#: models.py:39 -msgid "group item" +#: models.py:37 +msgid "link condition" msgstr "" -#: models.py:40 -msgid "group items" +#: models.py:38 +msgid "link conditions" msgstr "" -#: views.py:21 +#: views.py:32 msgid "No action selected." msgstr "" -#: views.py:34 +#: views.py:47 #, python-format -msgid "documents in group: %(group)s" +msgid "documents in smart link: %(group)s" msgstr "" -#: views.py:50 +#: views.py:65 #, python-format -msgid "Document group query error: %s" +msgid "Smart link query error: %s" msgstr "" -#: views.py:61 +#: views.py:76 #, python-format -msgid "document groups (%s)" +msgid "smart links (%s)" msgstr "" -#: views.py:75 -msgid "There no defined groups for the current document." +#: views.py:90 +msgid "There no defined smart links for the current document." +msgstr "" + +#: views.py:124 +#, python-format +msgid "Smart link: %s created successfully." +msgstr "" + +#: views.py:131 +msgid "Create new smart link" +msgstr "" + +#: views.py:144 +#, python-format +msgid "Smart link: %s edited successfully." +msgstr "" + +#: views.py:153 +#, python-format +msgid "Edit smart link: %s" +msgstr "" + +#: views.py:168 +#, python-format +msgid "Smart link: %s deleted successfully." +msgstr "" + +#: views.py:170 +#, python-format +msgid "Error deleting smart link: %(smart_link)s; %(error)s." +msgstr "" + +#: views.py:180 +#, python-format +msgid "Are you sure you wish to delete smart link: %s?" +msgstr "" + +#: views.py:193 +#, python-format +msgid "conditions for smart link: %s" +msgstr "" + +#: views.py:216 +#, python-format +msgid "Smart link condition: \"%s\" created successfully." +msgstr "" + +#: views.py:223 +#, python-format +msgid "Add new conditions to smart link: \"%s\"" +msgstr "" + +#: views.py:243 +#, python-format +msgid "Smart link condition: \"%s\" edited successfully." +msgstr "" + +#: views.py:250 +msgid "Edit smart link condition" +msgstr "" + +#: views.py:257 views.py:288 +msgid "condition" +msgstr "" + +#: views.py:274 +#, python-format +msgid "Smart link condition: \"%s\" deleted successfully." +msgstr "" + +#: views.py:276 +#, python-format +msgid "" +"Error deleting smart link condition: %(smart_link_condition)s; %(error)s." +msgstr "" + +#: views.py:290 +#, python-format +msgid "Are you sure you wish to delete smart link condition: \"%s\"?" +msgstr "" + +#: conf/settings.py:11 +msgid "Show smart link that don't return any documents." +msgstr "" + +#: templates/smart_links_help.html:3 +msgid "What are smart links?" +msgstr "" + +#: templates/smart_links_help.html:4 +msgid "" +"Smart links are a set of conditional statements that are used to query the " +"database using the current document the user is accessing as the data " +"source, the results of these queries are a list of documents that relate in " +"some manner to the document being displayed and allow users the ability to " +"jump to and from linked documents very easily." msgstr "" diff --git a/apps/linking/locale/es/LC_MESSAGES/django.po b/apps/linking/locale/es/LC_MESSAGES/django.po index b2b5e43308..ee3230d5e2 100644 --- a/apps/linking/locale/es/LC_MESSAGES/django.po +++ b/apps/linking/locale/es/LC_MESSAGES/django.po @@ -1,44 +1,85 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 00:55+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: __init__.py:8 -msgid "group actions" -msgstr "acciones de grupo" +#: __init__.py:11 +msgid "View existing smart links" +msgstr "" -#: __init__.py:9 -msgid "groups" -msgstr "grupos" +#: __init__.py:12 +msgid "Create new smart links" +msgstr "" -#: forms.py:55 +#: __init__.py:13 +msgid "Delete smart links" +msgstr "" + +#: __init__.py:14 +msgid "Edit smart links" +msgstr "" + +#: __init__.py:16 +msgid "Smart links" +msgstr "" + +#: __init__.py:22 +msgid "smart links actions" +msgstr "" + +#: __init__.py:23 __init__.py:25 models.py:21 views.py:105 +msgid "smart links" +msgstr "" + +#: __init__.py:26 +msgid "smart links list" +msgstr "" + +#: __init__.py:27 +msgid "create new smart link" +msgstr "" + +#: __init__.py:28 __init__.py:33 +msgid "edit" +msgstr "" + +#: __init__.py:29 __init__.py:34 +msgid "delete" +msgstr "" + +#: __init__.py:31 +msgid "conditions" +msgstr "" + +#: __init__.py:32 +msgid "create condition" +msgstr "" + +#: forms.py:48 msgid "Pages" msgstr "Páginas" -#: forms.py:56 +#: forms.py:54 msgid "Select" msgstr "Seleccionar" #: forms.py:61 -msgid "group document" -msgstr "documento del grupo" - -#: forms.py:66 msgid "Click on the image for full size view of the first page." msgstr "" "Haga clic en la imagen para ver el tamaño completo de la primera página." @@ -115,21 +156,27 @@ msgstr "está en la expresión regular (mayúsculas y minúsculas)" msgid "title" msgstr "título" -#: models.py:11 +#: models.py:11 views.py:108 msgid "dynamic title" msgstr "título dinámico" -#: models.py:12 models.py:33 +#: models.py:11 models.py:29 +msgid "" +"This expression will be evaluated against the current selected document. " +"The document metadata is available as variables `metadata` and document " +"properties under the variable `document`." +msgstr "" +"Esta expresión sera evaluada con respecto al documento seleccionado actual. " +"Los metadatos del documento están disponible como variables `metadata` y las " +"propiedades del documento en la variable `document`." + +#: models.py:12 models.py:31 views.py:109 views.py:196 msgid "enabled" msgstr "habilitado" -#: models.py:20 models.py:25 -msgid "document group" -msgstr "grupo de documento" - -#: models.py:21 -msgid "document groups" -msgstr "grupos de documentos" +#: models.py:20 models.py:25 views.py:256 views.py:287 +msgid "smart link" +msgstr "" #: models.py:26 msgid "The inclusion is ignored for the first item." @@ -148,61 +195,169 @@ msgstr "" "disponibles: `document.` y `metadata.`." -#: models.py:31 +#: models.py:29 msgid "expression" msgstr "expresión" -#: models.py:31 -msgid "" -"This expression will be evaluated against the current selected document. " -"The document metadata is available as variables `metadata` and document " -"properties under the variable `document`." -msgstr "" -"Esta expresión sera evaluada con respecto al documento seleccionado actual." -" Los metadatos del documento están disponible como variables `metadata` y " -"las propiedades del documento en la variable `document`." - -#: models.py:32 +#: models.py:30 msgid "negated" msgstr "negado" -#: models.py:32 +#: models.py:30 msgid "Inverts the logic of the operator." msgstr "Invierte la lógica del operador." -#: models.py:36 +#: models.py:34 msgid "not" msgstr "no" -#: models.py:39 -msgid "group item" -msgstr "artículo del grupo" +#: models.py:37 +msgid "link condition" +msgstr "" -#: models.py:40 -msgid "group items" -msgstr "artículo del grupo" +#: models.py:38 +msgid "link conditions" +msgstr "" -#: views.py:21 +#: views.py:32 msgid "No action selected." msgstr "Ninguna acción seleccionada." -#: views.py:34 -#, python-format -msgid "documents in group: %(group)s" +#: views.py:47 +#, fuzzy, python-format +msgid "documents in smart link: %(group)s" msgstr "documentos en el grupo: %(group)s " -#: views.py:50 -#, python-format -msgid "Document group query error: %s" +#: views.py:65 +#, fuzzy, python-format +msgid "Smart link query error: %s" msgstr "Error en consulta de grupo de documentos: %s" -#: views.py:61 +#: views.py:76 #, python-format -msgid "document groups (%s)" -msgstr "grupos de documentos (%s)" +msgid "smart links (%s)" +msgstr "" -#: views.py:75 -msgid "There no defined groups for the current document." +#: views.py:90 +#, fuzzy +msgid "There no defined smart links for the current document." msgstr "No hay grupos definidos para el documento actual." +#: views.py:124 +#, python-format +msgid "Smart link: %s created successfully." +msgstr "" +#: views.py:131 +msgid "Create new smart link" +msgstr "" + +#: views.py:144 +#, python-format +msgid "Smart link: %s edited successfully." +msgstr "" + +#: views.py:153 +#, python-format +msgid "Edit smart link: %s" +msgstr "" + +#: views.py:168 +#, python-format +msgid "Smart link: %s deleted successfully." +msgstr "" + +#: views.py:170 +#, python-format +msgid "Error deleting smart link: %(smart_link)s; %(error)s." +msgstr "" + +#: views.py:180 +#, python-format +msgid "Are you sure you wish to delete smart link: %s?" +msgstr "" + +#: views.py:193 +#, python-format +msgid "conditions for smart link: %s" +msgstr "" + +#: views.py:216 +#, python-format +msgid "Smart link condition: \"%s\" created successfully." +msgstr "" + +#: views.py:223 +#, python-format +msgid "Add new conditions to smart link: \"%s\"" +msgstr "" + +#: views.py:243 +#, python-format +msgid "Smart link condition: \"%s\" edited successfully." +msgstr "" + +#: views.py:250 +msgid "Edit smart link condition" +msgstr "" + +#: views.py:257 views.py:288 +msgid "condition" +msgstr "" + +#: views.py:274 +#, python-format +msgid "Smart link condition: \"%s\" deleted successfully." +msgstr "" + +#: views.py:276 +#, python-format +msgid "" +"Error deleting smart link condition: %(smart_link_condition)s; %(error)s." +msgstr "" + +#: views.py:290 +#, python-format +msgid "Are you sure you wish to delete smart link condition: \"%s\"?" +msgstr "" + +#: conf/settings.py:11 +msgid "Show smart link that don't return any documents." +msgstr "" + +#: templates/smart_links_help.html:3 +msgid "What are smart links?" +msgstr "" + +#: templates/smart_links_help.html:4 +msgid "" +"Smart links are a set of conditional statements that are used to query the " +"database using the current document the user is accessing as the data " +"source, the results of these queries are a list of documents that relate in " +"some manner to the document being displayed and allow users the ability to " +"jump to and from linked documents very easily." +msgstr "" + +#~ msgid "group actions" +#~ msgstr "acciones de grupo" + +#~ msgid "groups" +#~ msgstr "grupos" + +#~ msgid "group document" +#~ msgstr "documento del grupo" + +#~ msgid "document group" +#~ msgstr "grupo de documento" + +#~ msgid "document groups" +#~ msgstr "grupos de documentos" + +#~ msgid "group item" +#~ msgstr "artículo del grupo" + +#~ msgid "group items" +#~ msgstr "artículo del grupo" + +#~ msgid "document groups (%s)" +#~ msgstr "grupos de documentos (%s)" diff --git a/apps/linking/locale/pt/LC_MESSAGES/django.po b/apps/linking/locale/pt/LC_MESSAGES/django.po index 03d9614e7c..120688a322 100644 --- a/apps/linking/locale/pt/LC_MESSAGES/django.po +++ b/apps/linking/locale/pt/LC_MESSAGES/django.po @@ -1,44 +1,85 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 05:05+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: __init__.py:8 -msgid "group actions" -msgstr "ações do grupo" +#: __init__.py:11 +msgid "View existing smart links" +msgstr "" -#: __init__.py:9 -msgid "groups" -msgstr "grupos" +#: __init__.py:12 +msgid "Create new smart links" +msgstr "" -#: forms.py:55 +#: __init__.py:13 +msgid "Delete smart links" +msgstr "" + +#: __init__.py:14 +msgid "Edit smart links" +msgstr "" + +#: __init__.py:16 +msgid "Smart links" +msgstr "" + +#: __init__.py:22 +msgid "smart links actions" +msgstr "" + +#: __init__.py:23 __init__.py:25 models.py:21 views.py:105 +msgid "smart links" +msgstr "" + +#: __init__.py:26 +msgid "smart links list" +msgstr "" + +#: __init__.py:27 +msgid "create new smart link" +msgstr "" + +#: __init__.py:28 __init__.py:33 +msgid "edit" +msgstr "" + +#: __init__.py:29 __init__.py:34 +msgid "delete" +msgstr "" + +#: __init__.py:31 +msgid "conditions" +msgstr "" + +#: __init__.py:32 +msgid "create condition" +msgstr "" + +#: forms.py:48 msgid "Pages" msgstr "Páginas" -#: forms.py:56 +#: forms.py:54 msgid "Select" msgstr "Selecionar" #: forms.py:61 -msgid "group document" -msgstr "agrupar documento" - -#: forms.py:66 msgid "Click on the image for full size view of the first page." msgstr "Clique na imagem para ver em tamanho grande a primeira página." @@ -114,21 +155,27 @@ msgstr "está em expressão regular (case insensitive)" msgid "title" msgstr "título" -#: models.py:11 +#: models.py:11 views.py:108 msgid "dynamic title" msgstr "título dinâmico" -#: models.py:12 models.py:33 +#: models.py:11 models.py:29 +msgid "" +"This expression will be evaluated against the current selected document. " +"The document metadata is available as variables `metadata` and document " +"properties under the variable `document`." +msgstr "" +"Esta expressão será avaliada em relação ao documento atual selecionado. Os " +"metadados do documento estão disponíveis como variáveis \"​metadados \" e " +"propriedades do documento em variáveis `documento`." + +#: models.py:12 models.py:31 views.py:109 views.py:196 msgid "enabled" msgstr "habilitado" -#: models.py:20 models.py:25 -msgid "document group" -msgstr "grupo de documentos" - -#: models.py:21 -msgid "document groups" -msgstr "grupos de documentos" +#: models.py:20 models.py:25 views.py:256 views.py:287 +msgid "smart link" +msgstr "" #: models.py:26 msgid "The inclusion is ignored for the first item." @@ -146,61 +193,169 @@ msgstr "" "Isto representa os metadados de todos os outros documentos. Objetos " "disponíveis: `document. ` e ` metadata. `." -#: models.py:31 +#: models.py:29 msgid "expression" msgstr "expressão" -#: models.py:31 -msgid "" -"This expression will be evaluated against the current selected document. " -"The document metadata is available as variables `metadata` and document " -"properties under the variable `document`." -msgstr "" -"Esta expressão será avaliada em relação ao documento atual selecionado. Os " -"metadados do documento estão disponíveis como variáveis \"​metadados \" e " -"propriedades do documento em variáveis `documento`." - -#: models.py:32 +#: models.py:30 msgid "negated" msgstr "negada" -#: models.py:32 +#: models.py:30 msgid "Inverts the logic of the operator." msgstr "Inverte a lógica do operador." -#: models.py:36 +#: models.py:34 msgid "not" msgstr "não" -#: models.py:39 -msgid "group item" -msgstr "item do grupo" +#: models.py:37 +msgid "link condition" +msgstr "" -#: models.py:40 -msgid "group items" -msgstr "itens do grupo" +#: models.py:38 +msgid "link conditions" +msgstr "" -#: views.py:21 +#: views.py:32 msgid "No action selected." msgstr "Nenhuma ação selecionada." -#: views.py:34 -#, python-format -msgid "documents in group: %(group)s" +#: views.py:47 +#, fuzzy, python-format +msgid "documents in smart link: %(group)s" msgstr "documentos no grupo: %(group)s " -#: views.py:50 -#, python-format -msgid "Document group query error: %s" +#: views.py:65 +#, fuzzy, python-format +msgid "Smart link query error: %s" msgstr "Erro na consulta de grupo do documento: %s" -#: views.py:61 +#: views.py:76 #, python-format -msgid "document groups (%s)" -msgstr "grupos do documento (%s)" +msgid "smart links (%s)" +msgstr "" -#: views.py:75 -msgid "There no defined groups for the current document." +#: views.py:90 +#, fuzzy +msgid "There no defined smart links for the current document." msgstr "Não há grupos definidos para o documento atual." +#: views.py:124 +#, python-format +msgid "Smart link: %s created successfully." +msgstr "" +#: views.py:131 +msgid "Create new smart link" +msgstr "" + +#: views.py:144 +#, python-format +msgid "Smart link: %s edited successfully." +msgstr "" + +#: views.py:153 +#, python-format +msgid "Edit smart link: %s" +msgstr "" + +#: views.py:168 +#, python-format +msgid "Smart link: %s deleted successfully." +msgstr "" + +#: views.py:170 +#, python-format +msgid "Error deleting smart link: %(smart_link)s; %(error)s." +msgstr "" + +#: views.py:180 +#, python-format +msgid "Are you sure you wish to delete smart link: %s?" +msgstr "" + +#: views.py:193 +#, python-format +msgid "conditions for smart link: %s" +msgstr "" + +#: views.py:216 +#, python-format +msgid "Smart link condition: \"%s\" created successfully." +msgstr "" + +#: views.py:223 +#, python-format +msgid "Add new conditions to smart link: \"%s\"" +msgstr "" + +#: views.py:243 +#, python-format +msgid "Smart link condition: \"%s\" edited successfully." +msgstr "" + +#: views.py:250 +msgid "Edit smart link condition" +msgstr "" + +#: views.py:257 views.py:288 +msgid "condition" +msgstr "" + +#: views.py:274 +#, python-format +msgid "Smart link condition: \"%s\" deleted successfully." +msgstr "" + +#: views.py:276 +#, python-format +msgid "" +"Error deleting smart link condition: %(smart_link_condition)s; %(error)s." +msgstr "" + +#: views.py:290 +#, python-format +msgid "Are you sure you wish to delete smart link condition: \"%s\"?" +msgstr "" + +#: conf/settings.py:11 +msgid "Show smart link that don't return any documents." +msgstr "" + +#: templates/smart_links_help.html:3 +msgid "What are smart links?" +msgstr "" + +#: templates/smart_links_help.html:4 +msgid "" +"Smart links are a set of conditional statements that are used to query the " +"database using the current document the user is accessing as the data " +"source, the results of these queries are a list of documents that relate in " +"some manner to the document being displayed and allow users the ability to " +"jump to and from linked documents very easily." +msgstr "" + +#~ msgid "group actions" +#~ msgstr "ações do grupo" + +#~ msgid "groups" +#~ msgstr "grupos" + +#~ msgid "group document" +#~ msgstr "agrupar documento" + +#~ msgid "document group" +#~ msgstr "grupo de documentos" + +#~ msgid "document groups" +#~ msgstr "grupos de documentos" + +#~ msgid "group item" +#~ msgstr "item do grupo" + +#~ msgid "group items" +#~ msgstr "itens do grupo" + +#~ msgid "document groups (%s)" +#~ msgstr "grupos do documento (%s)" diff --git a/apps/linking/locale/ru/LC_MESSAGES/django.po b/apps/linking/locale/ru/LC_MESSAGES/django.po index 173b84391c..acbfae0bc4 100644 --- a/apps/linking/locale/ru/LC_MESSAGES/django.po +++ b/apps/linking/locale/ru/LC_MESSAGES/django.po @@ -1,44 +1,86 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:45-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 10:53+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" -#: __init__.py:8 -msgid "group actions" -msgstr "групповые действия" +#: __init__.py:11 +msgid "View existing smart links" +msgstr "" -#: __init__.py:9 -msgid "groups" -msgstr "группы" +#: __init__.py:12 +msgid "Create new smart links" +msgstr "" -#: forms.py:55 +#: __init__.py:13 +msgid "Delete smart links" +msgstr "" + +#: __init__.py:14 +msgid "Edit smart links" +msgstr "" + +#: __init__.py:16 +msgid "Smart links" +msgstr "" + +#: __init__.py:22 +msgid "smart links actions" +msgstr "" + +#: __init__.py:23 __init__.py:25 models.py:21 views.py:105 +msgid "smart links" +msgstr "" + +#: __init__.py:26 +msgid "smart links list" +msgstr "" + +#: __init__.py:27 +msgid "create new smart link" +msgstr "" + +#: __init__.py:28 __init__.py:33 +msgid "edit" +msgstr "" + +#: __init__.py:29 __init__.py:34 +msgid "delete" +msgstr "" + +#: __init__.py:31 +msgid "conditions" +msgstr "" + +#: __init__.py:32 +msgid "create condition" +msgstr "" + +#: forms.py:48 msgid "Pages" msgstr "Страницы" -#: forms.py:56 +#: forms.py:54 msgid "Select" msgstr "Выбрать" #: forms.py:61 -msgid "group document" -msgstr "group document" - -#: forms.py:66 msgid "Click on the image for full size view of the first page." msgstr "" "Нажмите на изображение для просмотра первой страницы в полном размере." @@ -115,21 +157,27 @@ msgstr "В регулярном выражении (без учета регис msgid "title" msgstr "название" -#: models.py:11 +#: models.py:11 views.py:108 msgid "dynamic title" msgstr "динамический заголовок" -#: models.py:12 models.py:33 +#: models.py:11 models.py:29 +msgid "" +"This expression will be evaluated against the current selected document. " +"The document metadata is available as variables `metadata` and document " +"properties under the variable `document`." +msgstr "" +"Это выражение будет вычислено вмето выбранного документа. Метаданные " +"документа доступны как переменные `metadata` и свойства документа в " +"переменной `document`." + +#: models.py:12 models.py:31 views.py:109 views.py:196 msgid "enabled" msgstr "разрешено" -#: models.py:20 models.py:25 -msgid "document group" -msgstr "document group" - -#: models.py:21 -msgid "document groups" -msgstr "document groups" +#: models.py:20 models.py:25 views.py:256 views.py:287 +msgid "smart link" +msgstr "" #: models.py:26 msgid "The inclusion is ignored for the first item." @@ -147,61 +195,169 @@ msgstr "" "Это представляет метаданные всех других документов. Доступные объекты: " "`document. ` и `metadata. `." -#: models.py:31 +#: models.py:29 msgid "expression" msgstr "выражение" -#: models.py:31 -msgid "" -"This expression will be evaluated against the current selected document. " -"The document metadata is available as variables `metadata` and document " -"properties under the variable `document`." -msgstr "" -"Это выражение будет вычислено вмето выбранного документа. Метаданные " -"документа доступны как переменные `metadata` и свойства документа в " -"переменной `document`." - -#: models.py:32 +#: models.py:30 msgid "negated" msgstr "отрицание" -#: models.py:32 +#: models.py:30 msgid "Inverts the logic of the operator." msgstr "Инвертирует логику оператора." -#: models.py:36 +#: models.py:34 msgid "not" msgstr "не" -#: models.py:39 -msgid "group item" -msgstr "член группы" +#: models.py:37 +msgid "link condition" +msgstr "" -#: models.py:40 -msgid "group items" -msgstr "члены группы" +#: models.py:38 +msgid "link conditions" +msgstr "" -#: views.py:21 +#: views.py:32 msgid "No action selected." msgstr "Никаких действий не выбрано." -#: views.py:34 -#, python-format -msgid "documents in group: %(group)s" +#: views.py:47 +#, fuzzy, python-format +msgid "documents in smart link: %(group)s" msgstr "Документы в группе: %(group)s" -#: views.py:50 -#, python-format -msgid "Document group query error: %s" +#: views.py:65 +#, fuzzy, python-format +msgid "Smart link query error: %s" msgstr "Документ группы запросов ошибка: %s" -#: views.py:61 +#: views.py:76 #, python-format -msgid "document groups (%s)" -msgstr "группы документов (%s)" +msgid "smart links (%s)" +msgstr "" -#: views.py:75 -msgid "There no defined groups for the current document." +#: views.py:90 +#, fuzzy +msgid "There no defined smart links for the current document." msgstr "Для текущего документа не выбрана группа" +#: views.py:124 +#, python-format +msgid "Smart link: %s created successfully." +msgstr "" +#: views.py:131 +msgid "Create new smart link" +msgstr "" + +#: views.py:144 +#, python-format +msgid "Smart link: %s edited successfully." +msgstr "" + +#: views.py:153 +#, python-format +msgid "Edit smart link: %s" +msgstr "" + +#: views.py:168 +#, python-format +msgid "Smart link: %s deleted successfully." +msgstr "" + +#: views.py:170 +#, python-format +msgid "Error deleting smart link: %(smart_link)s; %(error)s." +msgstr "" + +#: views.py:180 +#, python-format +msgid "Are you sure you wish to delete smart link: %s?" +msgstr "" + +#: views.py:193 +#, python-format +msgid "conditions for smart link: %s" +msgstr "" + +#: views.py:216 +#, python-format +msgid "Smart link condition: \"%s\" created successfully." +msgstr "" + +#: views.py:223 +#, python-format +msgid "Add new conditions to smart link: \"%s\"" +msgstr "" + +#: views.py:243 +#, python-format +msgid "Smart link condition: \"%s\" edited successfully." +msgstr "" + +#: views.py:250 +msgid "Edit smart link condition" +msgstr "" + +#: views.py:257 views.py:288 +msgid "condition" +msgstr "" + +#: views.py:274 +#, python-format +msgid "Smart link condition: \"%s\" deleted successfully." +msgstr "" + +#: views.py:276 +#, python-format +msgid "" +"Error deleting smart link condition: %(smart_link_condition)s; %(error)s." +msgstr "" + +#: views.py:290 +#, python-format +msgid "Are you sure you wish to delete smart link condition: \"%s\"?" +msgstr "" + +#: conf/settings.py:11 +msgid "Show smart link that don't return any documents." +msgstr "" + +#: templates/smart_links_help.html:3 +msgid "What are smart links?" +msgstr "" + +#: templates/smart_links_help.html:4 +msgid "" +"Smart links are a set of conditional statements that are used to query the " +"database using the current document the user is accessing as the data " +"source, the results of these queries are a list of documents that relate in " +"some manner to the document being displayed and allow users the ability to " +"jump to and from linked documents very easily." +msgstr "" + +#~ msgid "group actions" +#~ msgstr "групповые действия" + +#~ msgid "groups" +#~ msgstr "группы" + +#~ msgid "group document" +#~ msgstr "group document" + +#~ msgid "document group" +#~ msgstr "document group" + +#~ msgid "document groups" +#~ msgstr "document groups" + +#~ msgid "group item" +#~ msgstr "член группы" + +#~ msgid "group items" +#~ msgstr "члены группы" + +#~ msgid "document groups (%s)" +#~ msgstr "группы документов (%s)" diff --git a/apps/main/locale/en/LC_MESSAGES/django.po b/apps/main/locale/en/LC_MESSAGES/django.po index cbf37a080d..ad9034e619 100644 --- a/apps/main/locale/en/LC_MESSAGES/django.po +++ b/apps/main/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -75,58 +75,58 @@ msgstr "" msgid "(DEBUG)" msgstr "" -#: templates/base.html:117 +#: templates/base.html:183 msgid "User" msgstr "" -#: templates/base.html:119 +#: templates/base.html:185 msgid "Anonymous" msgstr "" -#: templates/base.html:122 +#: templates/base.html:188 msgid "User details" msgstr "" -#: templates/base.html:139 +#: templates/base.html:205 msgid "Login" msgstr "" -#: templates/base.html:139 +#: templates/base.html:205 msgid "Logout" msgstr "" -#: templates/base.html:219 +#: templates/base.html:285 msgid "Secondary menu" msgstr "" -#: templates/base.html:236 +#: templates/base.html:302 #, python-format msgid "Actions for %(name)s: %(navigation_object)s" msgstr "" -#: templates/base.html:238 templates/base.html.py:270 +#: templates/base.html:304 templates/base.html.py:336 #, python-format msgid "Actions for: %(navigation_object)s" msgstr "" -#: templates/base.html:241 +#: templates/base.html:307 msgid "Available actions" msgstr "" -#: templates/base.html:253 templates/base.html.py:285 +#: templates/base.html:319 templates/base.html.py:351 msgid "Related actions" msgstr "" -#: templates/base.html:268 +#: templates/base.html:334 #, python-format msgid "Actions for %(object_name)s: %(navigation_object)s" msgstr "" -#: templates/base.html:273 +#: templates/base.html:339 msgid "Actions" msgstr "" -#: templates/base.html:298 +#: templates/base.html:364 msgid "Other available actions" msgstr "" diff --git a/apps/main/locale/es/LC_MESSAGES/django.po b/apps/main/locale/es/LC_MESSAGES/django.po index 4463185f53..c530cc4628 100644 --- a/apps/main/locale/es/LC_MESSAGES/django.po +++ b/apps/main/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 00:56+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:15 @@ -60,8 +61,8 @@ msgstr "Diagnósticos" #: conf/settings.py:12 msgid "" -"Controls whether the search functionality is provided by a sidebar widget or" -" by a menu entry." +"Controls whether the search functionality is provided by a sidebar widget or " +"by a menu entry." msgstr "" "Controla si la funcionalidad de búsqueda es proporcionada por una barra " "lateral o por una entrada de menú." @@ -78,58 +79,58 @@ msgstr "Versión" msgid "(DEBUG)" msgstr "(DEBUG)" -#: templates/base.html:117 +#: templates/base.html:183 msgid "User" msgstr "Usuario" -#: templates/base.html:119 +#: templates/base.html:185 msgid "Anonymous" msgstr "Anónimo" -#: templates/base.html:122 +#: templates/base.html:188 msgid "User details" msgstr "Detalles de usuario" -#: templates/base.html:139 +#: templates/base.html:205 msgid "Login" msgstr "Iniciar sesión" -#: templates/base.html:139 +#: templates/base.html:205 msgid "Logout" msgstr "Desconectarse" -#: templates/base.html:219 +#: templates/base.html:285 msgid "Secondary menu" msgstr "Menú secundario" -#: templates/base.html:236 +#: templates/base.html:302 #, python-format msgid "Actions for %(name)s: %(navigation_object)s" msgstr "Acciones para %(name)s: %(navigation_object)s " -#: templates/base.html:238 templates/base.html.py:270 +#: templates/base.html:304 templates/base.html.py:336 #, python-format msgid "Actions for: %(navigation_object)s" msgstr "Acciones para: %(navigation_object)s " -#: templates/base.html:241 +#: templates/base.html:307 msgid "Available actions" msgstr "Acciones disponibles" -#: templates/base.html:253 templates/base.html.py:285 +#: templates/base.html:319 templates/base.html.py:351 msgid "Related actions" msgstr "Acciones relacionadas" -#: templates/base.html:268 +#: templates/base.html:334 #, python-format msgid "Actions for %(object_name)s: %(navigation_object)s" msgstr "Acciones para %(object_name)s: %(navigation_object)s " -#: templates/base.html:273 +#: templates/base.html:339 msgid "Actions" msgstr "Acciones" -#: templates/base.html:298 +#: templates/base.html:364 msgid "Other available actions" msgstr "Otras acciones disponibles" @@ -145,5 +146,3 @@ msgstr "" #: templates/project_description.html:15 msgid "Released under the GPL V3 License" msgstr "Publicado bajo la licencia GPL v3" - - diff --git a/apps/main/locale/pt/LC_MESSAGES/django.po b/apps/main/locale/pt/LC_MESSAGES/django.po index f70e86b2b9..02ed418063 100644 --- a/apps/main/locale/pt/LC_MESSAGES/django.po +++ b/apps/main/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 21:55+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:15 @@ -60,8 +61,8 @@ msgstr "Diagnósticos" #: conf/settings.py:12 msgid "" -"Controls whether the search functionality is provided by a sidebar widget or" -" by a menu entry." +"Controls whether the search functionality is provided by a sidebar widget or " +"by a menu entry." msgstr "" "Controla-se a funcionalidade de pesquisa é fornecido por um widget da barra " "lateral ou por uma entrada de menu." @@ -78,58 +79,58 @@ msgstr "Versão" msgid "(DEBUG)" msgstr "(DEBUG)" -#: templates/base.html:117 +#: templates/base.html:183 msgid "User" msgstr "Usuário" -#: templates/base.html:119 +#: templates/base.html:185 msgid "Anonymous" msgstr "Anônimo" -#: templates/base.html:122 +#: templates/base.html:188 msgid "User details" msgstr "Detalhes do usuário" -#: templates/base.html:139 +#: templates/base.html:205 msgid "Login" msgstr "Login" -#: templates/base.html:139 +#: templates/base.html:205 msgid "Logout" msgstr "Sair" -#: templates/base.html:219 +#: templates/base.html:285 msgid "Secondary menu" msgstr "Menu secundário" -#: templates/base.html:236 +#: templates/base.html:302 #, python-format msgid "Actions for %(name)s: %(navigation_object)s" msgstr "Ações para %(name)s: %(navigation_object)s " -#: templates/base.html:238 templates/base.html.py:270 +#: templates/base.html:304 templates/base.html.py:336 #, python-format msgid "Actions for: %(navigation_object)s" msgstr "Ações para: %(navigation_object)s " -#: templates/base.html:241 +#: templates/base.html:307 msgid "Available actions" msgstr "Ações disponíveis" -#: templates/base.html:253 templates/base.html.py:285 +#: templates/base.html:319 templates/base.html.py:351 msgid "Related actions" msgstr "Ações relacionadas" -#: templates/base.html:268 +#: templates/base.html:334 #, python-format msgid "Actions for %(object_name)s: %(navigation_object)s" msgstr "Ações para %(object_name)s : %(navigation_object)s " -#: templates/base.html:273 +#: templates/base.html:339 msgid "Actions" msgstr "Ações" -#: templates/base.html:298 +#: templates/base.html:364 msgid "Other available actions" msgstr "Outras ações disponíveis" @@ -145,5 +146,3 @@ msgstr "" #: templates/project_description.html:15 msgid "Released under the GPL V3 License" msgstr "Liberado sob a licença GPL V3" - - diff --git a/apps/main/locale/ru/LC_MESSAGES/django.po b/apps/main/locale/ru/LC_MESSAGES/django.po index bad0d0558c..068fcbe6a4 100644 --- a/apps/main/locale/ru/LC_MESSAGES/django.po +++ b/apps/main/locale/ru/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-19 21:04+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:15 msgid "maintenance" @@ -60,8 +62,8 @@ msgstr "Диагностика" #: conf/settings.py:12 msgid "" -"Controls whether the search functionality is provided by a sidebar widget or" -" by a menu entry." +"Controls whether the search functionality is provided by a sidebar widget or " +"by a menu entry." msgstr "" "Определяет, будет ли функция поиска обеспечивается виджетом боковой панели " "или пунктом меню." @@ -78,58 +80,58 @@ msgstr "Версия" msgid "(DEBUG)" msgstr "(DEBUG)" -#: templates/base.html:117 +#: templates/base.html:183 msgid "User" msgstr "Пользователь" -#: templates/base.html:119 +#: templates/base.html:185 msgid "Anonymous" msgstr "Анонимно" -#: templates/base.html:122 +#: templates/base.html:188 msgid "User details" msgstr "сведения о пользователе" -#: templates/base.html:139 +#: templates/base.html:205 msgid "Login" msgstr "Войти" -#: templates/base.html:139 +#: templates/base.html:205 msgid "Logout" msgstr "Выход" -#: templates/base.html:219 +#: templates/base.html:285 msgid "Secondary menu" msgstr "Вторичное меню" -#: templates/base.html:236 +#: templates/base.html:302 #, python-format msgid "Actions for %(name)s: %(navigation_object)s" msgstr "Действия для %(name)s: %(navigation_object)s" -#: templates/base.html:238 templates/base.html.py:270 +#: templates/base.html:304 templates/base.html.py:336 #, python-format msgid "Actions for: %(navigation_object)s" msgstr "Действия для: %(navigation_object)s" -#: templates/base.html:241 +#: templates/base.html:307 msgid "Available actions" msgstr "Доступные действия" -#: templates/base.html:253 templates/base.html.py:285 +#: templates/base.html:319 templates/base.html.py:351 msgid "Related actions" msgstr "Связанные действия" -#: templates/base.html:268 +#: templates/base.html:334 #, python-format msgid "Actions for %(object_name)s: %(navigation_object)s" msgstr "Действия для %(object_name)s: %(navigation_object)s" -#: templates/base.html:273 +#: templates/base.html:339 msgid "Actions" msgstr "Действия" -#: templates/base.html:298 +#: templates/base.html:364 msgid "Other available actions" msgstr "Другие возможные действия" @@ -145,5 +147,3 @@ msgstr "" #: templates/project_description.html:15 msgid "Released under the GPL V3 License" msgstr "Выпущено под лицензией GPL V3" - - diff --git a/apps/metadata/locale/en/LC_MESSAGES/django.po b/apps/metadata/locale/en/LC_MESSAGES/django.po index 2322266259..6f75f44ea8 100644 --- a/apps/metadata/locale/en/LC_MESSAGES/django.po +++ b/apps/metadata/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/metadata/locale/es/LC_MESSAGES/django.po b/apps/metadata/locale/es/LC_MESSAGES/django.po index b0d5a08f59..03f08e5442 100644 --- a/apps/metadata/locale/es/LC_MESSAGES/django.po +++ b/apps/metadata/locale/es/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 05:09+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:12 @@ -191,8 +192,8 @@ msgid "" "Enter a string to be evaluated. Example: [user.get_full_name() for user in " "User.objects.all()].%s" msgstr "" -"Introduzca una cadena para ser evaluada. Ejemplo: [user.get_full_name() for" -" user in User.objects.all ()].%s" +"Introduzca una cadena para ser evaluada. Ejemplo: [user.get_full_name() for " +"user in User.objects.all ()].%s" #: models.py:32 models.py:57 views.py:331 views.py:376 msgid "metadata type" @@ -287,8 +288,7 @@ msgstr "Editar metadatos para documentos: %s" #: views.py:148 #, python-format msgid "" -"Metadata type: %(metadata_type)s successfully added to document " -"%(document)s." +"Metadata type: %(metadata_type)s successfully added to document %(document)s." msgstr "" "Typo de metadatos: %(metadata_type)s agregado exitosamente al documento " "%(document)s." @@ -453,15 +453,15 @@ msgstr "¿Cuáles son los tipos de metadatos?" #: templates/metadata_type_help.html:4 msgid "" -"A metadata type defines the characteristics of a value of some kind that can" -" be attached to a document. Examples of metadata types are: a client name, " -"a date, or a project to which several documents belong. A metadata type's " +"A metadata type defines the characteristics of a value of some kind that can " +"be attached to a document. Examples of metadata types are: a client name, a " +"date, or a project to which several documents belong. A metadata type's " "name is the internal identifier with which it can be referenced to by other " -"modules such as the indexing module, the title is the value that is shown to" -" the users, the default value is the value an instance of this metadata type" -" will have initially, and the lookup value turns an instance of a metadata " -"of this type into a choice list which options are the result of the lookup's" -" code execution." +"modules such as the indexing module, the title is the value that is shown to " +"the users, the default value is the value an instance of this metadata type " +"will have initially, and the lookup value turns an instance of a metadata of " +"this type into a choice list which options are the result of the lookup's " +"code execution." msgstr "" "Un tipo de metadatos define las características de un valor de algún tipo " "que se puede conectar a un documento. Ejemplos de tipos de metadatos son: " @@ -471,7 +471,5 @@ msgstr "" "indexación, el título es el valor que se muestra a los usuarios, el valor " "por defecto es el valor que una instancia de este tipo de metadatos tendrá " "inicialmente, y el valor de búsqueda vuelve a una instancia de metadatos de " -"este tipo en una lista de opciones donde las opciones son el resultado de la" -" ejecución del valor de búsqueda." - - +"este tipo en una lista de opciones donde las opciones son el resultado de la " +"ejecución del valor de búsqueda." diff --git a/apps/metadata/locale/pt/LC_MESSAGES/django.po b/apps/metadata/locale/pt/LC_MESSAGES/django.po index 5d17befb78..4d7805cb79 100644 --- a/apps/metadata/locale/pt/LC_MESSAGES/django.po +++ b/apps/metadata/locale/pt/LC_MESSAGES/django.po @@ -1,22 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. # Renata Oliveira , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 00:42+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:12 @@ -289,8 +290,7 @@ msgstr "Editar os metadados do documentos: %s" #: views.py:148 #, python-format msgid "" -"Metadata type: %(metadata_type)s successfully added to document " -"%(document)s." +"Metadata type: %(metadata_type)s successfully added to document %(document)s." msgstr "" "Tipo de metadados: %(metadata_type)s adicionado com sucesso para documento " "%(document)s." @@ -300,8 +300,7 @@ msgstr "" msgid "" "Metadata type: %(metadata_type)s already present in document %(document)s." msgstr "" -"Tipo de metadados: %(metadata_type)s já presente no documento %(document)s " -"." +"Tipo de metadados: %(metadata_type)s já presente no documento %(document)s ." #: views.py:175 #, python-format @@ -454,24 +453,22 @@ msgstr "Quais são os tipos de metadados?" #: templates/metadata_type_help.html:4 msgid "" -"A metadata type defines the characteristics of a value of some kind that can" -" be attached to a document. Examples of metadata types are: a client name, " -"a date, or a project to which several documents belong. A metadata type's " +"A metadata type defines the characteristics of a value of some kind that can " +"be attached to a document. Examples of metadata types are: a client name, a " +"date, or a project to which several documents belong. A metadata type's " "name is the internal identifier with which it can be referenced to by other " -"modules such as the indexing module, the title is the value that is shown to" -" the users, the default value is the value an instance of this metadata type" -" will have initially, and the lookup value turns an instance of a metadata " -"of this type into a choice list which options are the result of the lookup's" -" code execution." +"modules such as the indexing module, the title is the value that is shown to " +"the users, the default value is the value an instance of this metadata type " +"will have initially, and the lookup value turns an instance of a metadata of " +"this type into a choice list which options are the result of the lookup's " +"code execution." msgstr "" -"Um tipo de metadados define as características de um valor de algum tipo que" -" pode ser anexado a um documento. Exemplos de tipos de metadados são: um " -"nome de cliente, uma data ou um projeto ao qual pertencem vários documentos." -" O nome de um tipo de metadados é o identificador interno com o qual ele " -"pode ser referenciado pelos outros módulos, como o módulo de indexação, o " -"título é o valor que é mostrado para os usuários, o valor padrão é o valor " -"de uma instância desse tipo de metadados terá inicialmente, o valor de " -"pesquisa e vira um exemplo de um metadados deste tipo em uma lista de " -"escolha de quais opções são o resultado da execução a pesquisa de código." - - +"Um tipo de metadados define as características de um valor de algum tipo que " +"pode ser anexado a um documento. Exemplos de tipos de metadados são: um nome " +"de cliente, uma data ou um projeto ao qual pertencem vários documentos. O " +"nome de um tipo de metadados é o identificador interno com o qual ele pode " +"ser referenciado pelos outros módulos, como o módulo de indexação, o título " +"é o valor que é mostrado para os usuários, o valor padrão é o valor de uma " +"instância desse tipo de metadados terá inicialmente, o valor de pesquisa e " +"vira um exemplo de um metadados deste tipo em uma lista de escolha de quais " +"opções são o resultado da execução a pesquisa de código." diff --git a/apps/metadata/locale/ru/LC_MESSAGES/django.po b/apps/metadata/locale/ru/LC_MESSAGES/django.po index d814f239dc..bb28056cda 100644 --- a/apps/metadata/locale/ru/LC_MESSAGES/django.po +++ b/apps/metadata/locale/ru/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 10:20+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:12 msgid "Edit a document's metadata" @@ -289,11 +291,9 @@ msgstr "Редактирование метаданных для докумен #: views.py:148 #, python-format msgid "" -"Metadata type: %(metadata_type)s successfully added to document " -"%(document)s." +"Metadata type: %(metadata_type)s successfully added to document %(document)s." msgstr "" -"Тип метаданных: %(metadata_type)s успешно добавлены к документу " -"%(document)s." +"Тип метаданных: %(metadata_type)s успешно добавлены к документу %(document)s." #: views.py:151 #, python-format @@ -442,8 +442,8 @@ msgid "" "attaches it's member metadata types to said document." msgstr "" "Набор метаданных это группа из одного или более типов метаданных. Наборы " -"метаданных полезны при создании новых документов; указание набора метаданных" -" автоматически добавляет метаданные набора к документу." +"метаданных полезны при создании новых документов; указание набора " +"метаданных автоматически добавляет метаданные набора к документу." #: templates/metadata_type_help.html:3 msgid "What are metadata types?" @@ -451,22 +451,25 @@ msgstr "Что такое типы метаданных?" #: templates/metadata_type_help.html:4 msgid "" -"A metadata type defines the characteristics of a value of some kind that can" -" be attached to a document. Examples of metadata types are: a client name, " -"a date, or a project to which several documents belong. A metadata type's " +"A metadata type defines the characteristics of a value of some kind that can " +"be attached to a document. Examples of metadata types are: a client name, a " +"date, or a project to which several documents belong. A metadata type's " "name is the internal identifier with which it can be referenced to by other " -"modules such as the indexing module, the title is the value that is shown to" -" the users, the default value is the value an instance of this metadata type" -" will have initially, and the lookup value turns an instance of a metadata " -"of this type into a choice list which options are the result of the lookup's" -" code execution." +"modules such as the indexing module, the title is the value that is shown to " +"the users, the default value is the value an instance of this metadata type " +"will have initially, and the lookup value turns an instance of a metadata of " +"this type into a choice list which options are the result of the lookup's " +"code execution." msgstr "" -"Тип метаданных определяет характеристики информации которая может быть присоединена к документу. Примеры типов метаданных : имя клиента, дата или проект, к которому принадлежат несколько документов. Имя типа метаданных является внутренним идентификатором, на который могут ссылаться другие модули, такие как модуль индексирования\n" +"Тип метаданных определяет характеристики информации которая может быть " +"присоединена к документу. Примеры типов метаданных : имя клиента, дата или " +"проект, к которому принадлежат несколько документов. Имя типа метаданных " +"является внутренним идентификатором, на который могут ссылаться другие " +"модули, такие как модуль индексирования\n" "\n" "Имя это значение, которое показано пользователям\n" "\n" -"Значение по умолчанию - значение экземпляра этого типа метаданных будет на начальном этапе,\n" +"Значение по умолчанию - значение экземпляра этого типа метаданных будет на " +"начальном этапе,\n" "\n" "Краткое имя служит для выбора из списка значений в результатах поиска." - - diff --git a/apps/navigation/locale/en/LC_MESSAGES/django.po b/apps/navigation/locale/en/LC_MESSAGES/django.po index a78e1f4d21..073df2fae0 100644 --- a/apps/navigation/locale/en/LC_MESSAGES/django.po +++ b/apps/navigation/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/navigation/locale/es/LC_MESSAGES/django.po b/apps/navigation/locale/es/LC_MESSAGES/django.po index 4586fe7562..4fa778b876 100644 --- a/apps/navigation/locale/es/LC_MESSAGES/django.po +++ b/apps/navigation/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 16:58+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: forms.py:14 @@ -29,5 +30,3 @@ msgstr "emblema" #: templatetags/navigation_tags.py:275 msgid "Selected item actions:" msgstr "Acciones para el artículo seleccionado:" - - diff --git a/apps/navigation/locale/pt/LC_MESSAGES/django.po b/apps/navigation/locale/pt/LC_MESSAGES/django.po index 969427872c..7f003b944a 100644 --- a/apps/navigation/locale/pt/LC_MESSAGES/django.po +++ b/apps/navigation/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 01:24+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: forms.py:14 @@ -29,5 +30,3 @@ msgstr "ícone" #: templatetags/navigation_tags.py:275 msgid "Selected item actions:" msgstr "Ações de item selecionadas:" - - diff --git a/apps/navigation/locale/ru/LC_MESSAGES/django.po b/apps/navigation/locale/ru/LC_MESSAGES/django.po index ad24581a70..ac633acf3c 100644 --- a/apps/navigation/locale/ru/LC_MESSAGES/django.po +++ b/apps/navigation/locale/ru/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:46-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-19 21:05+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: forms.py:14 msgid "Multi item action" @@ -29,5 +31,3 @@ msgstr "значок" #: templatetags/navigation_tags.py:275 msgid "Selected item actions:" msgstr "Действия с выбранными пунктами: " - - diff --git a/apps/ocr/locale/en/LC_MESSAGES/django.po b/apps/ocr/locale/en/LC_MESSAGES/django.po index c24615c055..8aa482cb75 100644 --- a/apps/ocr/locale/en/LC_MESSAGES/django.po +++ b/apps/ocr/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/ocr/locale/es/LC_MESSAGES/django.po b/apps/ocr/locale/es/LC_MESSAGES/django.po index bfc258d045..6905387d1e 100644 --- a/apps/ocr/locale/es/LC_MESSAGES/django.po +++ b/apps/ocr/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-07 04:17+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:28 @@ -291,8 +292,7 @@ msgstr "Documento: %(document)s ya está en cola." #, python-format msgid "Document: %s is already being processed and can't be re-queded." msgstr "" -"El documento: %s ya está en proceso y no se puede volver a agregar a la " -"cola." +"El documento: %s ya está en proceso y no se puede volver a agregar a la cola." #: views.py:173 #, python-format @@ -414,8 +414,8 @@ msgstr "Error al tratar de borrar la transformación de cola; %(error)s " msgid "" "Are you sure you wish to delete queue transformation \"%(transformation)s\"" msgstr "" -"¿Está seguro que desea borrar la transformación de cola " -"\"%(transformation)s\"" +"¿Está seguro que desea borrar la transformación de cola \"%(transformation)s" +"\"" #: views.py:434 msgid "Queue transformation created successfully" @@ -451,9 +451,8 @@ msgstr "Agregar automáticamente la cola de OCR los documentos creados." #: conf/settings.py:17 msgid "" -"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend" -" to use for locking. Multiple hosts can be specified separated by a " -"semicolon." +"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend " +"to use for locking. Multiple hosts can be specified separated by a semicolon." msgstr "" "URI de la forma: \"memcached:/ /127.0.0.1:11211/\" para especificar un " "servidor de caché para usar de bloqueo. Multiple servidores se pueden " @@ -466,5 +465,3 @@ msgstr "La ruta de archivo del programa unpaper." #: parsers/__init__.py:23 msgid "Text extracted from PDF" msgstr "Texto extraído de PDF" - - diff --git a/apps/ocr/locale/pt/LC_MESSAGES/django.po b/apps/ocr/locale/pt/LC_MESSAGES/django.po index ae9be2eb84..a7d598736f 100644 --- a/apps/ocr/locale/pt/LC_MESSAGES/django.po +++ b/apps/ocr/locale/pt/LC_MESSAGES/django.po @@ -1,22 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. # Renata Oliveira , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 05:10+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:28 @@ -347,8 +348,7 @@ msgstr "Tem certeza de que deseja limpar todo o conteúdo das páginas?" #: views.py:266 msgid "On large databases this operation may take some time to execute." msgstr "" -"Em grandes bases de dados esta operação pode levar algum tempo para " -"executar." +"Em grandes bases de dados esta operação pode levar algum tempo para executar." #: views.py:272 msgid "Document pages content clean up complete." @@ -408,8 +408,8 @@ msgstr "Erro ao deletar transformação de lista; %(error)s " msgid "" "Are you sure you wish to delete queue transformation \"%(transformation)s\"" msgstr "" -"Tem certeza que deseja deletar a transformação de lista " -"\"%(transformation)s\"" +"Tem certeza que deseja deletar a transformação de lista \"%(transformation)s" +"\"" #: views.py:434 msgid "Queue transformation created successfully" @@ -444,9 +444,8 @@ msgstr "Listar automaticamente os novos documentos criados para OCR " #: conf/settings.py:17 msgid "" -"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend" -" to use for locking. Multiple hosts can be specified separated by a " -"semicolon." +"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend " +"to use for locking. Multiple hosts can be specified separated by a semicolon." msgstr "" "URI na forma: \"memcached: / / 127.0.0.1:11211 /\" para especificar um " "backend de cache para usar para o bloqueio. Hosts múltiplos podem ser " @@ -459,5 +458,3 @@ msgstr "Caminho do arquivo para o programa unpaper." #: parsers/__init__.py:23 msgid "Text extracted from PDF" msgstr "Texto extraído de PDF" - - diff --git a/apps/ocr/locale/ru/LC_MESSAGES/django.po b/apps/ocr/locale/ru/LC_MESSAGES/django.po index 1b94794188..e4dd103e6d 100644 --- a/apps/ocr/locale/ru/LC_MESSAGES/django.po +++ b/apps/ocr/locale/ru/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 10:48+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:28 msgid "Submit document for OCR" @@ -408,8 +410,7 @@ msgstr "Ошибка при удалении преобразования оче msgid "" "Are you sure you wish to delete queue transformation \"%(transformation)s\"" msgstr "" -"Вы действительно хотите удалить преобразование очереди " -"\"%(transformation)s\"" +"Вы действительно хотите удалить преобразование очереди \"%(transformation)s\"" #: views.py:434 msgid "Queue transformation created successfully" @@ -445,9 +446,8 @@ msgstr "" #: conf/settings.py:17 msgid "" -"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend" -" to use for locking. Multiple hosts can be specified separated by a " -"semicolon." +"URI in the form: \"memcached://127.0.0.1:11211/\" to specify a cache backend " +"to use for locking. Multiple hosts can be specified separated by a semicolon." msgstr "" "URI в виде: \"memcached://127.0.0.1:11211/\", для определения обработчика, " "используемого для блокирования. Несколько хостов могут быть указаны через " @@ -460,5 +460,3 @@ msgstr "Путь к программе unpaper." #: parsers/__init__.py:23 msgid "Text extracted from PDF" msgstr "Текст, извлеченный из PDF" - - diff --git a/apps/permissions/locale/en/LC_MESSAGES/django.po b/apps/permissions/locale/en/LC_MESSAGES/django.po index 49538bc2d8..a2354e2728 100644 --- a/apps/permissions/locale/en/LC_MESSAGES/django.po +++ b/apps/permissions/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,30 +41,38 @@ msgstr "" msgid "Revoke permissions" msgstr "" -#: __init__.py:20 models.py:75 views.py:33 +#: __init__.py:19 models.py:87 views.py:38 msgid "roles" msgstr "" -#: __init__.py:21 +#: __init__.py:20 msgid "create new role" msgstr "" -#: __init__.py:22 +#: __init__.py:21 msgid "edit" msgstr "" -#: __init__.py:23 +#: __init__.py:22 msgid "members" msgstr "" -#: __init__.py:24 +#: __init__.py:23 msgid "role permissions" msgstr "" -#: __init__.py:25 +#: __init__.py:24 msgid "delete" msgstr "" +#: __init__.py:26 +msgid "grant" +msgstr "" + +#: __init__.py:27 +msgid "revoke" +msgstr "" + #: api.py:22 msgid "Permissions" msgstr "" @@ -73,93 +81,98 @@ msgstr "" msgid "Insufficient permissions." msgstr "" -#: models.py:11 views.py:53 +#: models.py:11 views.py:58 msgid "namespace" msgstr "" -#: models.py:12 views.py:54 +#: models.py:12 views.py:59 msgid "name" msgstr "" -#: models.py:13 models.py:70 +#: models.py:13 models.py:82 msgid "label" msgstr "" -#: models.py:20 models.py:53 +#: models.py:20 models.py:65 views.py:145 views.py:204 msgid "permission" msgstr "" -#: models.py:21 views.py:50 +#: models.py:21 views.py:55 views.py:147 views.py:206 msgid "permissions" msgstr "" -#: models.py:61 +#: models.py:73 msgid "permission holder" msgstr "" -#: models.py:62 +#: models.py:74 msgid "permission holders" msgstr "" -#: models.py:74 models.py:92 views.py:69 views.py:79 views.py:103 views.py:203 +#: models.py:86 models.py:104 views.py:74 views.py:91 views.py:115 +#: views.py:282 msgid "role" msgstr "" -#: models.py:103 +#: models.py:115 msgid "role member" msgstr "" -#: models.py:104 +#: models.py:116 msgid "role members" msgstr "" -#: views.py:56 -msgid "state" +#: views.py:61 +msgid "has permission" msgstr "" -#: views.py:116 +#: views.py:142 views.py:201 +msgid " and " +msgstr "" + +#: views.py:142 views.py:201 +#, python-format +msgid "%(permissions)s to %(requester)s" +msgstr "" + +#: views.py:152 +#, python-format +msgid "Permission \"%(permission)s\" granted to: %(requester)s." +msgstr "" + +#: views.py:155 +#, python-format +msgid "%(requester)s, already had the permission \"%(permission)s\" granted." +msgstr "" + +#: views.py:167 #, python-format msgid "" -"Are you sure you wish to grant the permission \"%(permission)s\" to " -"%(ct_name)s: %(requester)s" +"Are you sure you wish to grant the %(permissions_label)s %(title_suffix)s?" msgstr "" -#: views.py:121 +#: views.py:211 +#, python-format +msgid "Permission \"%(permission)s\" revoked from: %(requester)s." +msgstr "" + +#: views.py:214 +#, python-format +msgid "%(requester)s, doesn't have the permission \"%(permission)s\" granted." +msgstr "" + +#: views.py:226 #, python-format msgid "" -"Are you sure you wish to revoke the permission \"%(permission)s\" from " -"%(ct_name)s: %(requester)s" +"Are you sure you wish to revoke the %(permissions_label)s %(title_suffix)s?" msgstr "" -#: views.py:134 -#, python-format -msgid "Permission \"%(permission)s\" granted to %(ct_name)s: %(requester)s." -msgstr "" - -#: views.py:137 -#, python-format -msgid "" -"%(ct_name)s: %(requester)s, already had the permission \"%(permission)s\" " -"granted." -msgstr "" - -#: views.py:143 -#, python-format -msgid "Permission \"%(permission)s\" revoked from %(ct_name)s: %(requester)s." -msgstr "" - -#: views.py:146 -#, python-format -msgid "" -"%(ct_name)s: %(requester)s doesn't have the permission \"%(permission)s\"." -msgstr "" - -#: views.py:199 +#: views.py:278 #, python-format msgid "non members of role: %s" msgstr "" -#: views.py:200 +#: views.py:279 #, python-format msgid "members of role: %s" msgstr "" diff --git a/apps/permissions/locale/es/LC_MESSAGES/django.po b/apps/permissions/locale/es/LC_MESSAGES/django.po index a24d3a6387..5a931bb0e9 100644 --- a/apps/permissions/locale/es/LC_MESSAGES/django.po +++ b/apps/permissions/locale/es/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 05:09+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:12 @@ -41,30 +42,40 @@ msgstr "Conceder permisos" msgid "Revoke permissions" msgstr "Revocar permisos" -#: __init__.py:20 models.py:75 views.py:33 +#: __init__.py:19 models.py:87 views.py:38 msgid "roles" msgstr "funciones" -#: __init__.py:21 +#: __init__.py:20 msgid "create new role" msgstr "crear nueva función" -#: __init__.py:22 +#: __init__.py:21 msgid "edit" msgstr "editar" -#: __init__.py:23 +#: __init__.py:22 msgid "members" msgstr "miembros" -#: __init__.py:24 +#: __init__.py:23 msgid "role permissions" msgstr "permisos de la funcion" -#: __init__.py:25 +#: __init__.py:24 msgid "delete" msgstr "eliminar" +#: __init__.py:26 +#, fuzzy +msgid "grant" +msgstr "Otorgar" + +#: __init__.py:27 +#, fuzzy +msgid "revoke" +msgstr "Revocar" + #: api.py:22 msgid "Permissions" msgstr "Permisos" @@ -73,98 +84,104 @@ msgstr "Permisos" msgid "Insufficient permissions." msgstr "Permisos insuficientes." -#: models.py:11 views.py:53 +#: models.py:11 views.py:58 msgid "namespace" msgstr "espacio de nombres" -#: models.py:12 views.py:54 +#: models.py:12 views.py:59 msgid "name" msgstr "nombre" -#: models.py:13 models.py:70 +#: models.py:13 models.py:82 msgid "label" msgstr "etiqueta" -#: models.py:20 models.py:53 +#: models.py:20 models.py:65 views.py:145 views.py:204 msgid "permission" msgstr "permiso" -#: models.py:21 views.py:50 +#: models.py:21 views.py:55 views.py:147 views.py:206 msgid "permissions" msgstr "permisos" -#: models.py:61 +#: models.py:73 msgid "permission holder" msgstr "titular de la autorización" -#: models.py:62 +#: models.py:74 msgid "permission holders" msgstr "titulares de autorización" -#: models.py:74 models.py:92 views.py:69 views.py:79 views.py:103 views.py:203 +#: models.py:86 models.py:104 views.py:74 views.py:91 views.py:115 +#: views.py:282 msgid "role" msgstr "función" -#: models.py:103 +#: models.py:115 msgid "role member" msgstr "miembro de la función" -#: models.py:104 +#: models.py:116 msgid "role members" msgstr "miembros de las functiones" -#: views.py:56 -msgid "state" -msgstr "estado" +#: views.py:61 +#, fuzzy +msgid "has permission" +msgstr "permiso" -#: views.py:116 -#, python-format -msgid "" -"Are you sure you wish to grant the permission \"%(permission)s\" to " -"%(ct_name)s: %(requester)s" +#: views.py:142 views.py:201 +msgid " and " msgstr "" -"¿Está seguro que desea conceder el permiso \"%(permission)s\" a %(ct_name)s:" -" %(requester)s?" -#: views.py:121 -#, python-format -msgid "" -"Are you sure you wish to revoke the permission \"%(permission)s\" from " -"%(ct_name)s: %(requester)s" -msgstr "" -"¿Está seguro que desea revocar el permiso \"%(permission)s\" de %(ct_name)s:" -" %(requester)s?" - -#: views.py:134 -#, python-format -msgid "Permission \"%(permission)s\" granted to %(ct_name)s: %(requester)s." +#: views.py:142 views.py:201 +#, fuzzy, python-format +msgid "%(permissions)s to %(requester)s" msgstr "Permiso \"%(permission)s\" otorgado a %(ct_name)s: %(requester)s" -#: views.py:137 -#, python-format -msgid "" -"%(ct_name)s: %(requester)s, already had the permission \"%(permission)s\" " -"granted." -msgstr "" -" %(ct_name)s: %(requester)s, ya tenía el permiso \"%(permission)s\" " -"otorgado." +#: views.py:152 +#, fuzzy, python-format +msgid "Permission \"%(permission)s\" granted to: %(requester)s." +msgstr "Permiso \"%(permission)s\" otorgado a %(ct_name)s: %(requester)s" -#: views.py:143 -#, python-format -msgid "Permission \"%(permission)s\" revoked from %(ct_name)s: %(requester)s." +#: views.py:155 +#, fuzzy, python-format +msgid "%(requester)s, already had the permission \"%(permission)s\" granted." +msgstr "" +" %(ct_name)s: %(requester)s, ya tenía el permiso \"%(permission)s\" otorgado." + +#: views.py:167 +#, fuzzy, python-format +msgid "" +"Are you sure you wish to grant the %(permissions_label)s %(title_suffix)s?" +msgstr "" +"¿Está seguro que desea conceder el permiso \"%(permission)s\" a %(ct_name)s: " +"%(requester)s?" + +#: views.py:211 +#, fuzzy, python-format +msgid "Permission \"%(permission)s\" revoked from: %(requester)s." msgstr "Permiso \"%(permission)s\" revocado de %(ct_name)s: %(requester)s" -#: views.py:146 -#, python-format -msgid "%(ct_name)s: %(requester)s doesn't have the permission \"%(permission)s\"." +#: views.py:214 +#, fuzzy, python-format +msgid "%(requester)s, doesn't have the permission \"%(permission)s\" granted." msgstr " %(ct_name)s: %(requester)s, no tiene el permiso \"%(permission)s\"." -#: views.py:199 +#: views.py:226 +#, fuzzy, python-format +msgid "" +"Are you sure you wish to revoke the %(permissions_label)s %(title_suffix)s?" +msgstr "" +"¿Está seguro que desea revocar el permiso \"%(permission)s\" de %(ct_name)s: " +"%(requester)s?" + +#: views.py:278 #, python-format msgid "non members of role: %s" msgstr "no miembros de la función: %s" -#: views.py:200 +#: views.py:279 #, python-format msgid "members of role: %s" msgstr "miembros de la función: %s" @@ -185,4 +202,5 @@ msgstr "" "Una lista de funciones existentes que se asignan automáticamente a los " "usuarios nuevos" - +#~ msgid "state" +#~ msgstr "estado" diff --git a/apps/permissions/locale/pt/LC_MESSAGES/django.po b/apps/permissions/locale/pt/LC_MESSAGES/django.po index 3385a71985..dd93d53119 100644 --- a/apps/permissions/locale/pt/LC_MESSAGES/django.po +++ b/apps/permissions/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 04:52+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:12 @@ -42,30 +43,40 @@ msgstr "Conceder permissões" msgid "Revoke permissions" msgstr "Revogar as permissões" -#: __init__.py:20 models.py:75 views.py:33 +#: __init__.py:19 models.py:87 views.py:38 msgid "roles" msgstr "funções" -#: __init__.py:21 +#: __init__.py:20 msgid "create new role" msgstr "criar nova função" -#: __init__.py:22 +#: __init__.py:21 msgid "edit" msgstr "editar" -#: __init__.py:23 +#: __init__.py:22 msgid "members" msgstr "membros" -#: __init__.py:24 +#: __init__.py:23 msgid "role permissions" msgstr "permissões de função" -#: __init__.py:25 +#: __init__.py:24 msgid "delete" msgstr "excluir" +#: __init__.py:26 +#, fuzzy +msgid "grant" +msgstr "Conceder" + +#: __init__.py:27 +#, fuzzy +msgid "revoke" +msgstr "Revogar" + #: api.py:22 msgid "Permissions" msgstr "Permissões" @@ -74,97 +85,106 @@ msgstr "Permissões" msgid "Insufficient permissions." msgstr "Permissões insuficientes." -#: models.py:11 views.py:53 +#: models.py:11 views.py:58 msgid "namespace" msgstr "namespace" -#: models.py:12 views.py:54 +#: models.py:12 views.py:59 msgid "name" msgstr "nome" -#: models.py:13 models.py:70 +#: models.py:13 models.py:82 msgid "label" msgstr "rótulo" -#: models.py:20 models.py:53 +#: models.py:20 models.py:65 views.py:145 views.py:204 msgid "permission" msgstr "permissão" -#: models.py:21 views.py:50 +#: models.py:21 views.py:55 views.py:147 views.py:206 msgid "permissions" msgstr "permissões" -#: models.py:61 +#: models.py:73 msgid "permission holder" msgstr "titular de permissão" -#: models.py:62 +#: models.py:74 msgid "permission holders" msgstr "titulares de permissões" -#: models.py:74 models.py:92 views.py:69 views.py:79 views.py:103 views.py:203 +#: models.py:86 models.py:104 views.py:74 views.py:91 views.py:115 +#: views.py:282 msgid "role" msgstr "função" -#: models.py:103 +#: models.py:115 msgid "role member" msgstr "membro da função" -#: models.py:104 +#: models.py:116 msgid "role members" msgstr "membros da função" -#: views.py:56 -msgid "state" -msgstr "estado" +#: views.py:61 +#, fuzzy +msgid "has permission" +msgstr "permissão" -#: views.py:116 -#, python-format +#: views.py:142 views.py:201 +msgid " and " +msgstr "" + +#: views.py:142 views.py:201 +#, fuzzy, python-format +msgid "%(permissions)s to %(requester)s" +msgstr "" +"Permissão \"%(permission)s\" concedida para %(ct_name)s: %(requester)s." + +#: views.py:152 +#, fuzzy, python-format +msgid "Permission \"%(permission)s\" granted to: %(requester)s." +msgstr "" +"Permissão \"%(permission)s\" concedida para %(ct_name)s: %(requester)s." + +#: views.py:155 +#, fuzzy, python-format +msgid "%(requester)s, already had the permission \"%(permission)s\" granted." +msgstr "" +"%(ct_name)s: %(requester)s, já tem permissão \"%(permission)s\" concedida." + +#: views.py:167 +#, fuzzy, python-format msgid "" -"Are you sure you wish to grant the permission \"%(permission)s\" to " -"%(ct_name)s: %(requester)s" +"Are you sure you wish to grant the %(permissions_label)s %(title_suffix)s?" msgstr "" "Tem certeza que deseja conceder permissão \"%(permission)s\" para " "%(ct_name)s: %(requester)s" -#: views.py:121 -#, python-format +#: views.py:211 +#, fuzzy, python-format +msgid "Permission \"%(permission)s\" revoked from: %(requester)s." +msgstr "Permissão \"%(permission)s\" revogada de %(ct_name)s: %(requester)s." + +#: views.py:214 +#, fuzzy, python-format +msgid "%(requester)s, doesn't have the permission \"%(permission)s\" granted." +msgstr "%(ct_name)s: %(requester)s não tem a permissão \"%(permission)s\"." + +#: views.py:226 +#, fuzzy, python-format msgid "" -"Are you sure you wish to revoke the permission \"%(permission)s\" from " -"%(ct_name)s: %(requester)s" +"Are you sure you wish to revoke the %(permissions_label)s %(title_suffix)s?" msgstr "" "Tem certeza que deseja revogar a permissão \"%(permission)s\" de " "%(ct_name)s: %(requester)s" -#: views.py:134 -#, python-format -msgid "Permission \"%(permission)s\" granted to %(ct_name)s: %(requester)s." -msgstr "Permissão \"%(permission)s\" concedida para %(ct_name)s: %(requester)s." - -#: views.py:137 -#, python-format -msgid "" -"%(ct_name)s: %(requester)s, already had the permission \"%(permission)s\" " -"granted." -msgstr "" -"%(ct_name)s: %(requester)s, já tem permissão \"%(permission)s\" concedida." - -#: views.py:143 -#, python-format -msgid "Permission \"%(permission)s\" revoked from %(ct_name)s: %(requester)s." -msgstr "Permissão \"%(permission)s\" revogada de %(ct_name)s: %(requester)s." - -#: views.py:146 -#, python-format -msgid "%(ct_name)s: %(requester)s doesn't have the permission \"%(permission)s\"." -msgstr "%(ct_name)s: %(requester)s não tem a permissão \"%(permission)s\"." - -#: views.py:199 +#: views.py:278 #, python-format msgid "non members of role: %s" msgstr "não membros da função: %s" -#: views.py:200 +#: views.py:279 #, python-format msgid "members of role: %s" msgstr "membros da função: %s" @@ -185,4 +205,5 @@ msgstr "" "A lista de funções existentes que são automaticamente designados para " "usuários recém-criados" - +#~ msgid "state" +#~ msgstr "estado" diff --git a/apps/permissions/locale/ru/LC_MESSAGES/django.po b/apps/permissions/locale/ru/LC_MESSAGES/django.po index 0ea1353e7d..32334c0885 100644 --- a/apps/permissions/locale/ru/LC_MESSAGES/django.po +++ b/apps/permissions/locale/ru/LC_MESSAGES/django.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-19 21:05+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:12 msgid "View roles" @@ -41,30 +43,40 @@ msgstr "Предоставление разрешений" msgid "Revoke permissions" msgstr "Отмена разрешений" -#: __init__.py:20 models.py:75 views.py:33 +#: __init__.py:19 models.py:87 views.py:38 msgid "roles" msgstr "роли" -#: __init__.py:21 +#: __init__.py:20 msgid "create new role" msgstr "создать новую роль" -#: __init__.py:22 +#: __init__.py:21 msgid "edit" msgstr "редактировать" -#: __init__.py:23 +#: __init__.py:22 msgid "members" msgstr "участники" -#: __init__.py:24 +#: __init__.py:23 msgid "role permissions" msgstr "разрешения роли" -#: __init__.py:25 +#: __init__.py:24 msgid "delete" msgstr "удалить" +#: __init__.py:26 +#, fuzzy +msgid "grant" +msgstr "Предоставить" + +#: __init__.py:27 +#, fuzzy +msgid "revoke" +msgstr "Отозвать" + #: api.py:22 msgid "Permissions" msgstr "Разрешения" @@ -73,96 +85,105 @@ msgstr "Разрешения" msgid "Insufficient permissions." msgstr "Недостаточно разрешений." -#: models.py:11 views.py:53 +#: models.py:11 views.py:58 msgid "namespace" msgstr "пространство имен" -#: models.py:12 views.py:54 +#: models.py:12 views.py:59 msgid "name" msgstr "имя" -#: models.py:13 models.py:70 +#: models.py:13 models.py:82 msgid "label" msgstr "надпись" -#: models.py:20 models.py:53 +#: models.py:20 models.py:65 views.py:145 views.py:204 msgid "permission" msgstr "разрешение" -#: models.py:21 views.py:50 +#: models.py:21 views.py:55 views.py:147 views.py:206 msgid "permissions" msgstr "разрешения" -#: models.py:61 +#: models.py:73 msgid "permission holder" msgstr "владелец разрешения" -#: models.py:62 +#: models.py:74 msgid "permission holders" msgstr "владельцы разрешения " -#: models.py:74 models.py:92 views.py:69 views.py:79 views.py:103 views.py:203 +#: models.py:86 models.py:104 views.py:74 views.py:91 views.py:115 +#: views.py:282 msgid "role" msgstr "роль" -#: models.py:103 +#: models.py:115 msgid "role member" msgstr "участник" -#: models.py:104 +#: models.py:116 msgid "role members" msgstr "участники" -#: views.py:56 -msgid "state" -msgstr "состояние" +#: views.py:61 +#, fuzzy +msgid "has permission" +msgstr "разрешение" -#: views.py:116 -#, python-format +#: views.py:142 views.py:201 +msgid " and " +msgstr "" + +#: views.py:142 views.py:201 +#, fuzzy, python-format +msgid "%(permissions)s to %(requester)s" +msgstr "" +"Разрешение \"%(permission)s\" предоставлено %(ct_name)s: %(requester)s." + +#: views.py:152 +#, fuzzy, python-format +msgid "Permission \"%(permission)s\" granted to: %(requester)s." +msgstr "" +"Разрешение \"%(permission)s\" предоставлено %(ct_name)s: %(requester)s." + +#: views.py:155 +#, fuzzy, python-format +msgid "%(requester)s, already had the permission \"%(permission)s\" granted." +msgstr "%(ct_name)s: %(requester)s, уже имеет разрешение \"%(permission)s\"." + +#: views.py:167 +#, fuzzy, python-format msgid "" -"Are you sure you wish to grant the permission \"%(permission)s\" to " -"%(ct_name)s: %(requester)s" +"Are you sure you wish to grant the %(permissions_label)s %(title_suffix)s?" msgstr "" "Вы действительно хотите предоставить разрешение \"%(permission)s\" для " "%(ct_name)s: %(requester)s" -#: views.py:121 -#, python-format -msgid "" -"Are you sure you wish to revoke the permission \"%(permission)s\" from " -"%(ct_name)s: %(requester)s" -msgstr "" -"Вы уверены, что хотите отозвать разрешение \"%(permission)s\" у %(ct_name)s:" -" %(requester)s" - -#: views.py:134 -#, python-format -msgid "Permission \"%(permission)s\" granted to %(ct_name)s: %(requester)s." -msgstr "Разрешение \"%(permission)s\" предоставлено %(ct_name)s: %(requester)s." - -#: views.py:137 -#, python-format -msgid "" -"%(ct_name)s: %(requester)s, already had the permission \"%(permission)s\" " -"granted." -msgstr "%(ct_name)s: %(requester)s, уже имеет разрешение \"%(permission)s\"." - -#: views.py:143 -#, python-format -msgid "Permission \"%(permission)s\" revoked from %(ct_name)s: %(requester)s." +#: views.py:211 +#, fuzzy, python-format +msgid "Permission \"%(permission)s\" revoked from: %(requester)s." msgstr "Разрешение \"%(permission)s\" отозвано у %(ct_name)s: %(requester)s." -#: views.py:146 -#, python-format -msgid "%(ct_name)s: %(requester)s doesn't have the permission \"%(permission)s\"." +#: views.py:214 +#, fuzzy, python-format +msgid "%(requester)s, doesn't have the permission \"%(permission)s\" granted." msgstr "%(ct_name)s: %(requester)s не имеет разрешения \"%(permission)s\"." -#: views.py:199 +#: views.py:226 +#, fuzzy, python-format +msgid "" +"Are you sure you wish to revoke the %(permissions_label)s %(title_suffix)s?" +msgstr "" +"Вы уверены, что хотите отозвать разрешение \"%(permission)s\" у %(ct_name)s: " +"%(requester)s" + +#: views.py:278 #, python-format msgid "non members of role: %s" msgstr "не входит в %s" -#: views.py:200 +#: views.py:279 #, python-format msgid "members of role: %s" msgstr "входит в %s" @@ -183,4 +204,5 @@ msgstr "" "Список существующих ролей, которые автоматически назначаются вновь " "создаваемым пользователям" - +#~ msgid "state" +#~ msgstr "состояние" diff --git a/apps/project_setup/locale/en/LC_MESSAGES/django.po b/apps/project_setup/locale/en/LC_MESSAGES/django.po index 3029cad76b..2a81c4bb2a 100644 --- a/apps/project_setup/locale/en/LC_MESSAGES/django.po +++ b/apps/project_setup/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/project_setup/locale/es/LC_MESSAGES/django.po b/apps/project_setup/locale/es/LC_MESSAGES/django.po index 26860d2aa8..022627b88d 100644 --- a/apps/project_setup/locale/es/LC_MESSAGES/django.po +++ b/apps/project_setup/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 01:03+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:6 @@ -25,5 +26,3 @@ msgstr "configuración" #: views.py:13 msgid "setup items" msgstr "elementos de configuración" - - diff --git a/apps/project_setup/locale/pt/LC_MESSAGES/django.po b/apps/project_setup/locale/pt/LC_MESSAGES/django.po index 40f68014fb..7ffd621c32 100644 --- a/apps/project_setup/locale/pt/LC_MESSAGES/django.po +++ b/apps/project_setup/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 01:26+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:6 @@ -25,5 +26,3 @@ msgstr "instalação" #: views.py:13 msgid "setup items" msgstr "itens de configuração" - - diff --git a/apps/project_setup/locale/ru/LC_MESSAGES/django.po b/apps/project_setup/locale/ru/LC_MESSAGES/django.po index 4b254090e8..e6069f5616 100644 --- a/apps/project_setup/locale/ru/LC_MESSAGES/django.po +++ b/apps/project_setup/locale/ru/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:47-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-19 20:30+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:6 msgid "setup" @@ -25,5 +27,3 @@ msgstr "настройки" #: views.py:13 msgid "setup items" msgstr "настроек" - - diff --git a/apps/project_tools/locale/en/LC_MESSAGES/django.po b/apps/project_tools/locale/en/LC_MESSAGES/django.po index 507f6ee047..255cb9e18c 100644 --- a/apps/project_tools/locale/en/LC_MESSAGES/django.po +++ b/apps/project_tools/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:48-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/project_tools/locale/es/LC_MESSAGES/django.po b/apps/project_tools/locale/es/LC_MESSAGES/django.po index 64ab3db4cd..9db820eb03 100644 --- a/apps/project_tools/locale/es/LC_MESSAGES/django.po +++ b/apps/project_tools/locale/es/LC_MESSAGES/django.po @@ -1,25 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:48-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 05:22+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:7 views.py:13 msgid "tools" msgstr "herramientas" - - diff --git a/apps/project_tools/locale/pt/LC_MESSAGES/django.po b/apps/project_tools/locale/pt/LC_MESSAGES/django.po index 8cc4da4a38..da0f490f89 100644 --- a/apps/project_tools/locale/pt/LC_MESSAGES/django.po +++ b/apps/project_tools/locale/pt/LC_MESSAGES/django.po @@ -1,25 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:48-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 01:25+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:7 views.py:13 msgid "tools" msgstr "ferramentas" - - diff --git a/apps/project_tools/locale/ru/LC_MESSAGES/django.po b/apps/project_tools/locale/ru/LC_MESSAGES/django.po index 476a9f6ce9..b4158a9108 100644 --- a/apps/project_tools/locale/ru/LC_MESSAGES/django.po +++ b/apps/project_tools/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-03 16:38-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,8 +16,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" -"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:7 views.py:13 msgid "tools" diff --git a/apps/smart_settings/locale/en/LC_MESSAGES/django.po b/apps/smart_settings/locale/en/LC_MESSAGES/django.po index 10f224d23d..d0e511720a 100644 --- a/apps/smart_settings/locale/en/LC_MESSAGES/django.po +++ b/apps/smart_settings/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/smart_settings/locale/es/LC_MESSAGES/django.po b/apps/smart_settings/locale/es/LC_MESSAGES/django.po index 6808f0ad56..2188ccd324 100644 --- a/apps/smart_settings/locale/es/LC_MESSAGES/django.po +++ b/apps/smart_settings/locale/es/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 05:09+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:8 views.py:26 @@ -32,5 +33,3 @@ msgstr "por defecto" #: views.py:33 msgid "value" msgstr "valor" - - diff --git a/apps/smart_settings/locale/pt/LC_MESSAGES/django.po b/apps/smart_settings/locale/pt/LC_MESSAGES/django.po index 156cdd2e6b..9e0ed5e9ea 100644 --- a/apps/smart_settings/locale/pt/LC_MESSAGES/django.po +++ b/apps/smart_settings/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 01:22+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:8 views.py:26 @@ -33,5 +34,3 @@ msgstr "padrão" #: views.py:33 msgid "value" msgstr "valor" - - diff --git a/apps/smart_settings/locale/ru/LC_MESSAGES/django.po b/apps/smart_settings/locale/ru/LC_MESSAGES/django.po index 0b4138ae4b..be3705264a 100644 --- a/apps/smart_settings/locale/ru/LC_MESSAGES/django.po +++ b/apps/smart_settings/locale/ru/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 17:15+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:8 views.py:26 msgid "settings" @@ -33,5 +35,3 @@ msgstr "по умолчанию" #: views.py:33 msgid "value" msgstr "значение" - - diff --git a/apps/sources/locale/en/LC_MESSAGES/django.po b/apps/sources/locale/en/LC_MESSAGES/django.po index 86bb6480e9..609adf9151 100644 --- a/apps/sources/locale/en/LC_MESSAGES/django.po +++ b/apps/sources/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -81,7 +81,7 @@ msgstr "" msgid "Document sources" msgstr "" -#: __init__.py:69 widgets.py:33 +#: __init__.py:69 widgets.py:39 msgid "thumbnail" msgstr "" @@ -279,17 +279,17 @@ msgstr "" msgid "document source transformations" msgstr "" -#: staging.py:40 +#: staging.py:42 #, python-format msgid "Unable get list of staging files: %s" msgstr "" -#: staging.py:125 +#: staging.py:127 #, python-format msgid "Unable to upload staging file: %s" msgstr "" -#: staging.py:135 +#: staging.py:137 #, python-format msgid "Unable to delete staging file: %s" msgstr "" diff --git a/apps/sources/locale/es/LC_MESSAGES/django.po b/apps/sources/locale/es/LC_MESSAGES/django.po index 1f28401850..4f780eecc8 100644 --- a/apps/sources/locale/es/LC_MESSAGES/django.po +++ b/apps/sources/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-07 04:28+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:14 @@ -82,7 +83,7 @@ msgstr "añadir transformación" msgid "Document sources" msgstr "Fuentes de documentos" -#: __init__.py:69 widgets.py:33 +#: __init__.py:69 widgets.py:39 msgid "thumbnail" msgstr "muestra" @@ -245,8 +246,7 @@ msgstr "intervalo" #: models.py:169 msgid "" -"Inverval in seconds where the watch folder path is checked for new " -"documents." +"Inverval in seconds where the watch folder path is checked for new documents." msgstr "" #: models.py:193 @@ -282,17 +282,17 @@ msgstr "transformación de fuente de documentos" msgid "document source transformations" msgstr "transformaciones de fuentes de documentos" -#: staging.py:40 +#: staging.py:42 #, python-format msgid "Unable get list of staging files: %s" msgstr "No es posible obtener la lista de los archivos provisionales: %s" -#: staging.py:125 +#: staging.py:127 #, python-format msgid "Unable to upload staging file: %s" msgstr "No se puede cargar archivo provisional: %s" -#: staging.py:135 +#: staging.py:137 #, python-format msgid "Unable to delete staging file: %s" msgstr "No se puede eliminar archivo provisional: %s" @@ -466,5 +466,3 @@ msgstr "Error al crear la transformación de la fuente; %s" #, python-format msgid "Create new transformation for source: %s" msgstr "Crear una nueva transformación para la fuente: %s" - - diff --git a/apps/sources/locale/pt/LC_MESSAGES/django.po b/apps/sources/locale/pt/LC_MESSAGES/django.po index 95fd82b41c..0e71ddee4e 100644 --- a/apps/sources/locale/pt/LC_MESSAGES/django.po +++ b/apps/sources/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 01:21+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:14 @@ -82,7 +83,7 @@ msgstr "adicionar transformação" msgid "Document sources" msgstr "Fontes de documentos" -#: __init__.py:69 widgets.py:33 +#: __init__.py:69 widgets.py:39 msgid "thumbnail" msgstr "miniaturas" @@ -93,8 +94,7 @@ msgstr "Expandir arquivos compactados" #: forms.py:33 forms.py:56 msgid "Upload a compressed file's contained files as individual documents" msgstr "" -"Upload de um arquivo compactado contendo arquivos como documentos " -"individuais" +"Upload de um arquivo compactado contendo arquivos como documentos individuais" #: forms.py:41 msgid "Staging file" @@ -246,8 +246,7 @@ msgstr "intervalo" #: models.py:169 msgid "" -"Inverval in seconds where the watch folder path is checked for new " -"documents." +"Inverval in seconds where the watch folder path is checked for new documents." msgstr "" "Invervalo em segundos, onde o caminho da pasta assistida está marcada para " "novos documentos." @@ -285,17 +284,17 @@ msgstr "transformação do documento de origem" msgid "document source transformations" msgstr "fonte de transformações de documentos" -#: staging.py:40 +#: staging.py:42 #, python-format msgid "Unable get list of staging files: %s" msgstr "Unable get list of staging files: %s" -#: staging.py:125 +#: staging.py:127 #, python-format msgid "Unable to upload staging file: %s" msgstr "Unable to upload staging file: %s" -#: staging.py:135 +#: staging.py:137 #, python-format msgid "Unable to delete staging file: %s" msgstr "Unable to delete staging file: %s" @@ -469,5 +468,3 @@ msgstr "Erro ao criar a transformação de fonte; %s" #, python-format msgid "Create new transformation for source: %s" msgstr "Criar nova transformação de fonte: %s" - - diff --git a/apps/sources/locale/ru/LC_MESSAGES/django.po b/apps/sources/locale/ru/LC_MESSAGES/django.po index 26927ae79c..86c34d5294 100644 --- a/apps/sources/locale/ru/LC_MESSAGES/django.po +++ b/apps/sources/locale/ru/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 15:25+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:14 msgid "View existing document sources" @@ -82,7 +84,7 @@ msgstr "добавить преобразование" msgid "Document sources" msgstr "Источники документов" -#: __init__.py:69 widgets.py:33 +#: __init__.py:69 widgets.py:39 msgid "thumbnail" msgstr "миниатюра" @@ -92,8 +94,7 @@ msgstr "Извлекать из архивов?" #: forms.py:33 forms.py:56 msgid "Upload a compressed file's contained files as individual documents" -msgstr "" -"Загрузить файлы, содержащиеся в архиве в качестве отдельных документов" +msgstr "Загрузить файлы, содержащиеся в архиве в качестве отдельных документов" #: forms.py:41 msgid "Staging file" @@ -245,8 +246,7 @@ msgstr "интервал" #: models.py:169 msgid "" -"Inverval in seconds where the watch folder path is checked for new " -"documents." +"Inverval in seconds where the watch folder path is checked for new documents." msgstr "" "Интервал в секундах, между проверками папки на появление новых документов." @@ -283,17 +283,17 @@ msgstr "преобразования источника документов" msgid "document source transformations" msgstr "преобразования источника документов" -#: staging.py:40 +#: staging.py:42 #, python-format msgid "Unable get list of staging files: %s" msgstr "Не удалось получить список промежуточных файлов: %s" -#: staging.py:125 +#: staging.py:127 #, python-format msgid "Unable to upload staging file: %s" msgstr "Невозможно загрузить промежуточный файл: %s" -#: staging.py:135 +#: staging.py:137 #, python-format msgid "Unable to delete staging file: %s" msgstr "Не удается удалить промежуточный файл: %s" @@ -449,8 +449,7 @@ msgstr "Ошибка при удалении преобразования ист msgid "" "Are you sure you wish to delete source transformation \"%(transformation)s\"" msgstr "" -"Вы действительно хотите удалить источник трансформации " -"\"%(transformation)s\"" +"Вы действительно хотите удалить источник трансформации \"%(transformation)s\"" #: views.py:587 msgid "Source transformation created successfully" @@ -465,5 +464,3 @@ msgstr "Ошибка создания преобразования источн #, python-format msgid "Create new transformation for source: %s" msgstr "Создать новое преобразование для источника: %s" - - diff --git a/apps/tags/locale/en/LC_MESSAGES/django.po b/apps/tags/locale/en/LC_MESSAGES/django.po index 09e03dfcc8..3a71fb37af 100644 --- a/apps/tags/locale/en/LC_MESSAGES/django.po +++ b/apps/tags/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,7 +41,7 @@ msgstr "" msgid "View a document's tags" msgstr "" -#: __init__.py:20 widgets.py:15 +#: __init__.py:20 msgid "Tags" msgstr "" diff --git a/apps/tags/locale/es/LC_MESSAGES/django.po b/apps/tags/locale/es/LC_MESSAGES/django.po index fcac5d2358..1bd56cabd7 100644 --- a/apps/tags/locale/es/LC_MESSAGES/django.po +++ b/apps/tags/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 01:05+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:13 @@ -42,7 +43,7 @@ msgstr "Editar etiquetas globales" msgid "View a document's tags" msgstr "Ver etiquetas de un documento" -#: __init__.py:20 widgets.py:15 +#: __init__.py:20 msgid "Tags" msgstr "Etiquetas" @@ -264,5 +265,3 @@ msgstr "¿Está seguro que desea eliminar de las etiquetas: %s?" #: templatetags/tags_tags.py:17 msgid "Add tag to document" msgstr "Agregar etiqueta al documento" - - diff --git a/apps/tags/locale/pt/LC_MESSAGES/django.po b/apps/tags/locale/pt/LC_MESSAGES/django.po index 833d520d2c..bbc0936a4d 100644 --- a/apps/tags/locale/pt/LC_MESSAGES/django.po +++ b/apps/tags/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-02 01:45+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:13 @@ -42,7 +43,7 @@ msgstr "Editar etiquetas globais" msgid "View a document's tags" msgstr "Ver etiquetas de um documento" -#: __init__.py:20 widgets.py:15 +#: __init__.py:20 msgid "Tags" msgstr "Etiquetas" @@ -264,5 +265,3 @@ msgstr "Tem certeza de que deseja remover as etiquetas: %s?" #: templatetags/tags_tags.py:17 msgid "Add tag to document" msgstr "Adicionar etiquetas para o documento" - - diff --git a/apps/tags/locale/ru/LC_MESSAGES/django.po b/apps/tags/locale/ru/LC_MESSAGES/django.po index 81fcf82963..1e057efbd3 100644 --- a/apps/tags/locale/ru/LC_MESSAGES/django.po +++ b/apps/tags/locale/ru/LC_MESSAGES/django.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 15:20+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:13 msgid "Create new tags" @@ -41,7 +43,7 @@ msgstr "Изменить общие метки" msgid "View a document's tags" msgstr "Просмотр тегов документа" -#: __init__.py:20 widgets.py:15 +#: __init__.py:20 msgid "Tags" msgstr "Метки" @@ -263,5 +265,3 @@ msgstr "Вы действительно хотите снять метку: %s?" #: templatetags/tags_tags.py:17 msgid "Add tag to document" msgstr "Добавить тег к документу" - - diff --git a/apps/user_management/locale/en/LC_MESSAGES/django.po b/apps/user_management/locale/en/LC_MESSAGES/django.po index 62a2dc80f1..2c85ff5f68 100644 --- a/apps/user_management/locale/en/LC_MESSAGES/django.po +++ b/apps/user_management/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/apps/user_management/locale/es/LC_MESSAGES/django.po b/apps/user_management/locale/es/LC_MESSAGES/django.po index 10345979ce..11f2ee564d 100644 --- a/apps/user_management/locale/es/LC_MESSAGES/django.po +++ b/apps/user_management/locale/es/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-09-30 05:10+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:8 @@ -118,8 +119,8 @@ msgid "" "Super user and staff user editing is not allowed, use the admin interface " "for these cases." msgstr "" -"No se permite editar el super usuario y usuario de personal, use la interfaz" -" de administración para estos casos." +"No se permite editar el super usuario y usuario de personal, use la interfaz " +"de administración para estos casos." #: views.py:65 #, python-format @@ -257,5 +258,3 @@ msgstr "no miembros del grupo: %s" #, python-format msgid "members of group: %s" msgstr "miembros del grupo: %s" - - diff --git a/apps/user_management/locale/pt/LC_MESSAGES/django.po b/apps/user_management/locale/pt/LC_MESSAGES/django.po index c5701552fa..45dc3f91b4 100644 --- a/apps/user_management/locale/pt/LC_MESSAGES/django.po +++ b/apps/user_management/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Renata Oliveira , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 03:18+0000\n" "Last-Translator: renataoliveira \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:8 @@ -257,5 +258,3 @@ msgstr "não-membros do grupo: %s" #, python-format msgid "members of group: %s" msgstr "membros do grupo: %s" - - diff --git a/apps/user_management/locale/ru/LC_MESSAGES/django.po b/apps/user_management/locale/ru/LC_MESSAGES/django.po index ebb380fcf2..552793cf5e 100644 --- a/apps/user_management/locale/ru/LC_MESSAGES/django.po +++ b/apps/user_management/locale/ru/LC_MESSAGES/django.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-19 21:07+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:8 msgid "Create new users" @@ -118,8 +120,8 @@ msgid "" "Super user and staff user editing is not allowed, use the admin interface " "for these cases." msgstr "" -"Редактирование суперпользователя и персонала не допускается, используйте для" -" этого интерфейс администратора." +"Редактирование суперпользователя и персонала не допускается, используйте для " +"этого интерфейс администратора." #: views.py:65 #, python-format @@ -256,5 +258,3 @@ msgstr "не входят в группу: %s" #, python-format msgid "members of group: %s" msgstr "входят в группу: %s" - - diff --git a/apps/web_theme/locale/en/LC_MESSAGES/django.po b/apps/web_theme/locale/en/LC_MESSAGES/django.po index 73d09aa397..230b0e0867 100644 --- a/apps/web_theme/locale/en/LC_MESSAGES/django.po +++ b/apps/web_theme/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,19 +28,19 @@ msgstr "" msgid "Display extra information in the login screen." msgstr "" -#: templates/web_theme_base.html:94 +#: templates/web_theme_base.html:101 msgid "dismiss all notifications" msgstr "" -#: templates/web_theme_base.html:94 +#: templates/web_theme_base.html:101 msgid "close all" msgstr "" -#: templates/web_theme_base.html:95 +#: templates/web_theme_base.html:102 msgid "dismiss this notification" msgstr "" -#: templates/web_theme_base.html:95 +#: templates/web_theme_base.html:102 msgid "close" msgstr "" diff --git a/apps/web_theme/locale/es/LC_MESSAGES/django.po b/apps/web_theme/locale/es/LC_MESSAGES/django.po index 519141f557..6048de518a 100644 --- a/apps/web_theme/locale/es/LC_MESSAGES/django.po +++ b/apps/web_theme/locale/es/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-03 21:44+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" +"mayan-edms/team/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: conf/settings.py:10 @@ -31,19 +32,19 @@ msgstr "" msgid "Display extra information in the login screen." msgstr "Mostrar información adicional en la pantalla de inicio de sesión." -#: templates/web_theme_base.html:94 +#: templates/web_theme_base.html:101 msgid "dismiss all notifications" msgstr "cerrar todas las notificaciones" -#: templates/web_theme_base.html:94 +#: templates/web_theme_base.html:101 msgid "close all" msgstr "cerrar todos" -#: templates/web_theme_base.html:95 +#: templates/web_theme_base.html:102 msgid "dismiss this notification" msgstr "cerrar esta notificación" -#: templates/web_theme_base.html:95 +#: templates/web_theme_base.html:102 msgid "close" msgstr "cerrar" @@ -65,8 +66,8 @@ msgid "" "Or click here if redirection doesn't " "work." msgstr "" -"O haga clic aquí si la redirección no" -" funciona." +"O haga clic aquí si la redirección no " +"funciona." #: templates/pagination/pagination.html:6 #: templates/pagination/pagination.html:8 @@ -77,5 +78,3 @@ msgstr "Anterior" #: templates/pagination/pagination.html:28 msgid "Next" msgstr "Siguiente" - - diff --git a/apps/web_theme/locale/pt/LC_MESSAGES/django.po b/apps/web_theme/locale/pt/LC_MESSAGES/django.po index 006f4e97aa..44231ccd0b 100644 --- a/apps/web_theme/locale/pt/LC_MESSAGES/django.po +++ b/apps/web_theme/locale/pt/LC_MESSAGES/django.po @@ -1,21 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 00:46+0000\n" "Last-Translator: emersonsoares \n" -"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/" +"team/pt/)\n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: conf/settings.py:10 @@ -24,27 +25,27 @@ msgid "" "cerulean, drastic-dark, kathleene, olive, orange, red, reidb-greenish and " "warehouse." msgstr "" -"Tema CSS a ser aplicado, as opções são: amro, bec, bec-green, blue, default," -" djime-cerulean, drastic-dark, kathleene, olive, orange, red, reidb-greenish" -" and warehouse." +"Tema CSS a ser aplicado, as opções são: amro, bec, bec-green, blue, default, " +"djime-cerulean, drastic-dark, kathleene, olive, orange, red, reidb-greenish " +"and warehouse." #: conf/settings.py:12 msgid "Display extra information in the login screen." msgstr "Exibir informações extras na tela de login." -#: templates/web_theme_base.html:94 +#: templates/web_theme_base.html:101 msgid "dismiss all notifications" msgstr "rejeitar todas as notificações" -#: templates/web_theme_base.html:94 +#: templates/web_theme_base.html:101 msgid "close all" msgstr "fechar todos" -#: templates/web_theme_base.html:95 +#: templates/web_theme_base.html:102 msgid "dismiss this notification" msgstr "descartar essa notificação" -#: templates/web_theme_base.html:95 +#: templates/web_theme_base.html:102 msgid "close" msgstr "fechar" @@ -78,5 +79,3 @@ msgstr "Anterior" #: templates/pagination/pagination.html:28 msgid "Next" msgstr "Próximo" - - diff --git a/apps/web_theme/locale/ru/LC_MESSAGES/django.po b/apps/web_theme/locale/ru/LC_MESSAGES/django.po index 8fb93a847d..4f4ba45d35 100644 --- a/apps/web_theme/locale/ru/LC_MESSAGES/django.po +++ b/apps/web_theme/locale/ru/LC_MESSAGES/django.po @@ -1,21 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" -"POT-Creation-Date: 2011-09-29 18:49-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-22 11:26-0400\n" "PO-Revision-Date: 2011-11-04 15:22+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" +"ru/)\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: conf/settings.py:10 msgid "" @@ -31,19 +33,19 @@ msgstr "" msgid "Display extra information in the login screen." msgstr "Показать дополнительную информацию в при входе." -#: templates/web_theme_base.html:94 +#: templates/web_theme_base.html:101 msgid "dismiss all notifications" msgstr "убрать все уведомления" -#: templates/web_theme_base.html:94 +#: templates/web_theme_base.html:101 msgid "close all" msgstr "закрыть все" -#: templates/web_theme_base.html:95 +#: templates/web_theme_base.html:102 msgid "dismiss this notification" msgstr "убрать это уведомление" -#: templates/web_theme_base.html:95 +#: templates/web_theme_base.html:102 msgid "close" msgstr "закрыть" @@ -77,5 +79,3 @@ msgstr "Предыдущий" #: templates/pagination/pagination.html:28 msgid "Next" msgstr "Следующий" - - From a31c153dffa253b4fbd0a99b6f0c8a369a564ba2 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 11:29:36 -0400 Subject: [PATCH 116/220] Updated language script --- misc/makemessages_all.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/misc/makemessages_all.sh b/misc/makemessages_all.sh index ce3dc0e7a1..79a1354cee 100755 --- a/misc/makemessages_all.sh +++ b/misc/makemessages_all.sh @@ -4,106 +4,127 @@ PWD=`pwd` BASE=$PWD cd $BASE/apps/common +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/converter +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/documents +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/document_comments +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/document_indexing +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/dynamic_search +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/folders +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/history +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/linking +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/main +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/metadata +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/navigation +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/ocr +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/permissions +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/project_setup +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/project_tools +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/smart_settings +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/sources +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/tags +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/user_management +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es cd $BASE/apps/web_theme +$MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es From 33b2f69e7fc1b667c46199fee235b04ab5f561ef Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 11:45:52 -0400 Subject: [PATCH 117/220] Spanish translation updates --- .../documents/locale/es/LC_MESSAGES/django.mo | Bin 18481 -> 19503 bytes .../documents/locale/es/LC_MESSAGES/django.po | 63 ++++++----- apps/linking/locale/es/LC_MESSAGES/django.mo | Bin 3864 -> 5732 bytes apps/linking/locale/es/LC_MESSAGES/django.po | 102 ++++++++---------- .../locale/es/LC_MESSAGES/django.mo | Bin 3239 -> 3297 bytes .../locale/es/LC_MESSAGES/django.po | 57 +++++----- 6 files changed, 101 insertions(+), 121 deletions(-) diff --git a/apps/documents/locale/es/LC_MESSAGES/django.mo b/apps/documents/locale/es/LC_MESSAGES/django.mo index 9d81610efb5da657b9ee9b98155f320b9f37bf13..670f8b0ae86425b23b1a90c824aa2bbb5b366fc7 100644 GIT binary patch delta 5313 zcmaLa3z$sj9mnx^*~Kp6vhG{ied<9 z5z!)AiLjB25Q%MQgw`Wz64In?k|L?LdFVx>m41Kcob{|cd2$~A`MmGByzl?LoP+&q zllE;+ihtZVd86StO=J*{)H0@Nk};R->8vq>8W}Sl3$Os!;&42Rr?*>)xi~PhfP}= z(+&G#SM=j(T!TvN9NvX#t&Hh{LnKQ$A2lP1+l|S=U8r_{hpBiC<2-9>u<-O{GEgJv zje2mHcYZo5#do8HCVrm z+hGQ326~_x9)QYp5^8VUgG$Usk~jBZA#On3cOCD>6ng82GjS4bMD=qCr{cf8>*K9B z>&=NrEq9abMKyE`2jMBy)YfMm=HYPErrM8M^TS^KH0rqzFa@qUj z=AWp<(mS~`+!B>=ybA^0n2X9d4>eU2P_Nx=)KU~7f6V>-XwU4xT6h@sI#r_X|1D|{ zy^m`5B5Fy$^t^!@SiR29_a<&E3d(Q*s^gicwVj8&L1qQ2fo;f}X!fG^KqWF6<~`JN zUmIfhE~Pne1qP&4%F{T$zMt!0sF9A%bzj2(s=gHY7@Cc!J#YXulgCj5eFybj z`F)(iC<;w^Y4ydLjSu6KsQ0`z!y1Z{up@3lb#NHd@m*|$myk!yS2zf>c~}DqVF5me zdaJ%fCdJfanpBVXr=SL=A#acgdagxH?MtYJuHroG)yGX}8;+s=DY6Qt2lE+a>1Lr4 zJj?L%@C(!)=)~yKa1`>bGgHu_e^X9DQ?(hJ;6e9-If>eIe?cW!i`Fy~El~H*!oj!% z$;}+WS$GvS;)!J64HL+un4@^Ru47Yd@I7r}*1r=4ofwMxfXqN8@&Go*jo$TVP&4!z z7UG{#dt~eYV@hx;YNjeto3`da_xZWFfO-sd{ZrJ8bfD6L{>=yqx8WR|iDA^{cpKMa z@*p>%P1uV1Uet`7KqY<-wWa86unz694R*i+WE&V8mB<$4#V|X)`g^Du{R3(b`~#Kv*F%|q zZI-6P+}A1_mFYm#`H`qyJqNXR2~-FBP_NU=Uj0qfjQj@m{2wtLzd&_-1KVKwaQ7c5 zJ&{k0nK3->j(9mIT61CxX5b-IgYRP|evV3@@d)?dh&iYZVmJyPLyhbmRN^0d{tI>A zZ6n>p+oML_4b^@@oI))MlTjVdz=>FnO6V?^?R%sMoM7YNXRq zBQHmN;#XlE+~U=DVk-6cK?=(7C@PV6Pz|5Q6ugXT=n86Y)E@12*ar1nE~>*}sKf%; z5KB-UE=4WX3e=Z1flBx(q}{kVKtUaza8HzY z*3Bsy^8?Hz-Xb0$RuDQ45K3AzqT>+p8nILrj=uDN^UzM$lpZH4y|X0k97X&tBeuF# z=ih?MDR&{B^Ue+T{Jv){YU*{=AoNY?t_lYqRcCqQB@|{8Q;Bgz^`nf+45B|#>RtFT z`n_@m>aFPN)wf~5EAxsw|4E5?^*Q(^QJ2_H==;G}F>Y)MK|-6X>R?5jW3OivU-HVU zaSEZ=XqR_R=)=^5xR*#Kbm*h>m{W3p-hkd-{RBp|{yOrA&csH7&${^qahT9iizp;s zB(ezYUTrjO+I_?-;%;Is@k@fQt8@H}-$BI7M2OI_nfN);iI_+{rT%|HEGBg16L&f# z_opqaBkm{Oc2AiH@Ccz#_j=+aQFZLDDtHe3Mt!_jua6cHpXZ%;5PNxL5%$W*JX_%; zuly=DAf^#_5ZQ!|MJ~?o5Pmhd*NKCKj$aYKCgu|Dh{3uggMyA?;&I|>Vh!;O@l#?J zp<}X(c?H{eWif$hMkI(OgpQrWcH&7w@BSzvhuB1<688~L5YE zLPt$vCb5MWLA*fdc%GQ=l)V4IP);LG6F(%%iH;Q?HLO`PakX)aUa``EFKS!SV%sY9 z71@?Q91BIQ!f=^$DqL6?^xIY-?2j$5L(zzp*(s1!@lpDUdWm8y&vtM2n(&7gl$O|0 zJIAty-n_rGEbO-<5j&7)b;^u}qrQ@?K=*3xl?S86mcQ5+DzXFB642f5*{ndt7VA<{ z{9Dru7goY-rFFtV!&Pgf~qI|!ODt| z?h92OT42*U#nQ^Bi+Ci$4sh1d7YJ8dNt$(+lGBlIT}$rpheJxK`OORi;ae8+$bfK- zw3|sd>Bqk-efl33iH0pZVpSfB21_h|%ohrTH3Pv#wq=)CzS8hwC;O`Ty><9ZSZS8wkG5Y_t)%lnJ delta 4460 zcmYk;4^-CG9mnx6@?SATpHL(b@DGTB$UgxK5EK%IS%EtIgNn*j1pjWf%%?PMwzLeH z7TUtaW=?JHQNvBCW<`0L+d0{B$DPu)<^G&AUA5D3$Bnc1hu`%a?>Qe{_x_&ecklh( zdw-9#!Qnpgs>D zY?g``nHdex!85=kGD|Y59W`)ABO`l4b^WR<}tn%QBg-5F&EF`WB3(jVpFVH2_D2` z{0ucv&`_`AAs9`2H0tvl)RWI~K8sqBbI7yWO-#VxVYC_FlBo>DJX8nMFbNxRJnqCa zJcX5b4K=axac22AA5*YRvUTTBEAqu~vkbh2>Nh3cED|e`uUHNG>C2j_=n0-d-M9~R z{RnEt=kXrAjKz2zSzQ~;fzd>!peE3SItzPITlr@kiBTiW5^(}*<*HHr)sJBPHDEIr zv;t3|I({BC)7MaE;W+AhZz5yc1ze8TQQxa(J!^3e7T_^_1pkT}sE}FA#u=#3U&T>) zWu)IbB)wcvN4`XFuM;qYc0Fo|m!b~ULDXS7?Am8g_q~guco8`^b_uKSAE=4sv7hR1 zC(gp%s1>^Er=pofut6H29<}5vQ8#SC9NdO_k}lNN^dQ@6*DwojqgE<|$6`@zGHOD# zsFj_En&=AD_tv8(>fcO79lwZrEjmzJ@H&pcZq#A<3x;7Y>NN@-?R`H6b#~%V9gjl| znB^=%j)BcYO>7lvyq(Ba`fWcI-UvI1y743A4YMn#J^vCJ(?XbyZcIf@Y%+iJL<>;g zZ**=!O{fhup-$8T9Y-C$^B97kV65K%D^$w3@Fi-1+_Bz`(@-l?jk=-MU9Uq8+<+V# zTaDVXU8sROP+NHdb^lrHJ0qwGT|`afGKMg|{oQ@x28PnUh3cT!8Ogh)CHJ8^N<=+T z8ir#rYUL_W_t&DnHxJd%GStM@pbqbo?)o0|tK$Py^mBh0b*N6Ep6vI?8)W}Ntw40D z*Rc<^QVFQ7OUH1Wj+$6C>ibLF^+t@K-GYA%GTVf6XxF5%{tKxbO*31J1IBy*NUX-W zv_HTpm^8sG8y8?M?!mR#gSxLE-Fr>jaWd^osM8&l;r(DGqaJh#YGs<8n=)8`o$jq% z(9#@0y`RTWPu7ci-C`$t?TM({tl;M zh<_6Qa8Q|n8n7AF@eYi^mr?KcQ7pl$Sd58WoQjK3zlevBxmvet{}Xk8B+JGzvUq1H zYDHI|`tf&CSxMy!)Qn~^y((-&R?$Ak4eVJo>#hktoyX599zea8mr;l8Hu4)}VXS{5 zjzg_fCHk<@UEhp4V+WB5`mKwK2EKs0A)56o#R;grZoviEiF)E-){|pl(~&vbTGR@3 zqW1h9)S~O*E3x7vT`pgKWUX*p8a$|1cH@m3XgZ3ihoq`ZdEAD%!g(s3+(^w$t82 zo$CK02i8Jaf3@>aOIeKC`x?}Q>v1S<#6h?VHNjWh^~0D&`)!QJucxy9>M)w==rtOK zYL7v!LWQ0B18l`G+>08x9UsOn)P(v^_xeqBW~0tR zk)Mh>C`awpT-0l~3KQ@p)Dw4MH2xMfflpogI%!(0i?XIFR-z3_`sjHRKJVqV4P<&#B?c zvO5)LiQfMccU?S3eF1rZj3qktPmw!iHG_gYpoWPxPa8lDtj&ku0LuZaX@b-?pgMsHEb+>7+je1xiQ%At;bB_GWPF)U-nbG7HkP3KA#f7v^NQ z-bhP~$jnL1%q+~!3B-;+84^g&JQ5vtzN2wP^WxSE#f5==CC&W;AC*<~YppAf3KW&E K3vInwRq}txp2G+L diff --git a/apps/documents/locale/es/LC_MESSAGES/django.po b/apps/documents/locale/es/LC_MESSAGES/django.po index f7d5c70f5a..533bf311c8 100644 --- a/apps/documents/locale/es/LC_MESSAGES/django.po +++ b/apps/documents/locale/es/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-04 00:54+0000\n" +"PO-Revision-Date: 2011-11-22 15:33+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" -"mayan-edms/team/es/)\n" -"Language: es\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:49 __init__.py:159 @@ -85,7 +84,7 @@ msgstr "" #: __init__.py:83 msgid "update office documents' page count" -msgstr "" +msgstr "actualizar el número de páginas de los documentos de oficina" #: __init__.py:83 msgid "" @@ -93,6 +92,9 @@ msgid "" "enabling office document support after there were already office type " "documents in the database." msgstr "" +"Actualizar el número de páginas de los documentos de oficina. Esto es útil " +"cuando active el apoyo de documentos de oficina después de que ya existían " +"documentos de oficina en la base de datos." #: __init__.py:84 __init__.py:85 msgid "clear transformations" @@ -310,8 +312,7 @@ msgstr "Documento \"%(content_object)s\", creado por %(fullname)s." #: literals.py:25 #, python-format -msgid "" -"Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." +msgid "Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." msgstr "" "Documento \"%(content_object)s\", creado en %(datetime)s por %(fullname)s." @@ -327,8 +328,8 @@ msgstr "Documento \"%(content_object)s\", editado por %(fullname)s." #: literals.py:33 #, python-format msgid "" -"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s. " -"The following changes took place: %(changes)s." +"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s." +" The following changes took place: %(changes)s." msgstr "" "Documento \"%(content_object)s\" fue editado en \"%(datetime)s por " "%(fullname)s. Los siguientes cambios tuvieron lugar: %(changes)s." @@ -529,8 +530,8 @@ msgstr "Documentos en almacenamiento: %d" #: statistics.py:46 #, python-format msgid "" -"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d " -"bytes" +"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d" +" bytes" msgstr "" "Espacio utilizado en el almacenamiento: %(base_2)s (base 2), %(base_10)s " "(base 10), %(bytes)d bytes" @@ -691,8 +692,8 @@ msgstr "¿Está seguro que desea encontrar todos los duplicados?" #: views.py:447 views.py:506 views.py:571 msgid "On large databases this operation may take some time to execute." msgstr "" -"En bases de datos de gran tamaño esta operación puede tardar algún tiempo en " -"ejecutarse." +"En bases de datos de gran tamaño esta operación puede tardar algún tiempo en" +" ejecutarse." #: views.py:462 msgid "duplicated documents" @@ -704,12 +705,17 @@ msgid "" "Page count update complete. Documents processed: %(total)d, documents with " "changed page count: %(change)d" msgstr "" +"Actualización de número de páginas completado. Documentos procesados: " +"%(total)d, documentos con el número de páginas actualizado: %(change)d" #: views.py:505 -#, fuzzy, python-format +#, python-format msgid "" -"Are you sure you wish to update the page count for the office documents (%d)?" -msgstr "¿Está seguro que desea eliminar los documentos: %s?" +"Are you sure you wish to update the page count for the office documents " +"(%d)?" +msgstr "" +"¿Seguro que desea actualizar el número de páginas de los documentos de " +"oficina (%d)?" #: views.py:534 #, python-format @@ -736,7 +742,8 @@ msgstr "transformación de documento" #: views.py:551 #, python-format msgid "" -"Are you sure you wish to clear all the page transformations for document: %s?" +"Are you sure you wish to clear all the page transformations for document: " +"%s?" msgstr "" "¿Está seguro que desea eliminar todas las transformaciones de página del " "documento: %s?" @@ -868,8 +875,8 @@ msgstr "Nombre de archivo para tipo de documento: %s eliminado exitosamente." msgid "" "Document type filename: %(document_type_filename)s delete error: %(error)s" msgstr "" -"Error de eliminación: %(error)s para nombre de archivo de tipo de documento: " -"%(document_type_filename)s " +"Error de eliminación: %(error)s para nombre de archivo de tipo de documento:" +" %(document_type_filename)s " #: views.py:1086 #, python-format @@ -895,9 +902,8 @@ msgid "create filename for document type: %s" msgstr "crear nombre de archivo para tipo de documento: %s" #: widgets.py:26 -#, fuzzy msgid "document page image" -msgstr "página de documento" +msgstr "imagen de página de documento" #: wizards.py:34 msgid "step 1 of 3: Document type" @@ -917,8 +923,8 @@ msgstr "Siguiente paso" #: conf/settings.py:38 msgid "" -"Maximum number of recent (created, edited, viewed) documents to remember per " -"user." +"Maximum number of recent (created, edited, viewed) documents to remember per" +" user." msgstr "" "El número máximo de documentos recientes (creados, editados, vistos) a " "recordar por usuario." @@ -965,8 +971,8 @@ msgstr "" "Los tipos de documentos definene una clase que representa a un grupo amplio " "de documentos, tales como: facturas, reglamentos o manuales. La ventaja de " "utilizar los tipos de documentos son: la asignación de una lista de nombres " -"de archivos típicos para el cambio de nombre rápido durante la creación, así " -"como la asignación de tipos de metadatos y grupos por defecto." +"de archivos típicos para el cambio de nombre rápido durante la creación, así" +" como la asignación de tipos de metadatos y grupos por defecto." #: templates/recent_document_list_help.html:3 msgid "What are recent documents?" @@ -981,5 +987,4 @@ msgstr "" "Aquí encontrará los últimos %(recent_count)s documentos que haya creado o " "editado de alguna manera." -#~ msgid "Page" -#~ msgstr "Página" + diff --git a/apps/linking/locale/es/LC_MESSAGES/django.mo b/apps/linking/locale/es/LC_MESSAGES/django.mo index eb39e947d49ff2b7137fe1f6cb6eaa1b5d1c5af6..830a4f7e41aa660268caa53dfecfebd3b2201f13 100644 GIT binary patch literal 5732 zcmai%TZ~;*8ON83f&&OrZ{Tf#7H4eFnVGg!JZ(X3ixgXK9qR)obe(h7oY}B1hkcn# z35f|L`hX!mXo62xMWeQ@zV*$Yues!_hU+l*`?&w}24hZxFTRN%uK70`b2GRAz7y<%?*cc$YrrSKUEnvt ztHGavH-Nus-v1Ni&-|C4w}6-Ma~*g&_+juy@I&Bdz{|l5JcAAogL`@Y{iVhn1pfy< z10KB0n8(1E!E3>dx7K=n1(eF)1^F{S;Aal}DF~_g75HB8x1jX=D=2$j0TE@cfLMC( z0(p!B#Dp?|{9SAuu&{11%29z1|>;TiD#;AVqg17*ign(r?(?_UPx->Xqpa;^pU zfV&&K2UHv%0p9_BAN(S6p9S~x{OPwFb1V2T_yYJ0sDyl+mqOx^A^py((6!&qZ$eQ@+!sn95J;bGnwf6-U+F=#u|b z8_Ju7=B0ARYJD`0dJozxwdI<(QQ`*Pu4cJit>V}g(K&C|Bfnv@)$n~a%8SwtA!?hW zxp$?vDPN1k<)w|I^ugJ03v+?LzgS^QnJ=$I{sc(y_ z*YiaoA8fU!_6H)5-u|^|5IdGvSeJY2P^^^Ry)0!fnmSxt;=IJC!8TV0!m5C8nKfD} z9(`B3t}DE)iYOffFZ8NBXPfP3y-NGTOLpcqLR`>Wq^|av7}z4K@}A!tD05#_F+%Hr z!dWhf{7BO{BEEbZaTgb~%YCd^NBB5PyiHu1A`n%Bk|RyJUXuG!F^t_7rnrqc=@ZfWlWRWcNcY&Fl4kU(sk$R_qg%N3Eru%i4-doivc))*TN(kzEw=_)Q<${rB-XK zW&7}m_5J16(BGfB1e&%vqh{eZ$s(n~l+(@Ult(Iush77JVsFM}F&y?YA(o5`l^-~cA9e^-x1aL-&d0)}exQ0WX;zvnHxqYHEsN>3 zo!?z7?08Xk^_@iOPln#9Ga&?HYCX%AI*@ngnR2^zqTf10BcgwF>?yb9QhWT^snc`! z`eBxrty9Gy>bE{s4T{!E*0F14IqWPh4hVVGZTGTdG0zI>HOm(h?OlwDqVmPu-FL0D z!dVF0)-jCk*nLaO%Ps!)?X%0voqY#eO9z&gAZ*?1*CUCaL3dN+lE4Q_7p3q6&s?S@;(_Yr6OLXkb-KZR^ z-Ldj%T;(oq-InDE4JjRl$KuGoL$+QXnNRKYN9^*#oVlHjY$~aJ|u*PIeFmaT?47oGE(ox3WrZjiungd##86py!`W)gCkK}Xjd z)DLqIzN}KG86etzx|xQ0BpXK$6H#qsGZcl_xjC*uNPeS(YAg`T8OGPjy~-zH8d3}H zXKMK+)uDle(eU_eTJ_V{BEG=fn#0bQ%pR$tgR&1)X&uJU`ehC0Ba;l1maUZK=cw(F z0wc?EMLdjBn8;b2DSlzD(QXdMahnd~q#CsN;o+*NRQ04~xqUuNSpA5@AlqwWnAGzW zRu#c_v?IpI#+yZ>v178~g9t`v5af-z8m&S&I4GD2;t)dyEM?{nts44-oDblD}$j+V{!n5y~rN~^jPA^uNOHN;rPARd@M8#Pl_0ifU6-8@T*&J(o+nl7J z>X}O^g_Fb3MMl-$#XWTuak7`&KZI2l2J$t>+%}^C(1&p>lDH5Z_K%g(6p!1<9{H+1 zyP8DC+oU2eu1 z6iS)^*J@tSUdJ;Yd0LXExHH{8&#;$;IS)Q-_5UUmgDF*7^is5$USCxINyeJGzf70A z{^!^}pL&F;hSXl%)biqtNnp1{qoxCBPyLWhu~B34Dc|aaTEIjbGB1pSuk-nJRq*_` zHC7=!OjMX8fU>RjzoM?J2)%joR)ZlPPBViqUUg11uXZ;6nJ?>kQHR}50T*l?civgK Ui;4*edae%i^utBH(PWVMKjmPm^8f$< delta 1535 zcmaKqO>9h26vyw->DN?gRejXQD~48!@zJEF!KS{6O@$4~n0aB6c3#bUBWXfL!omiL z7t{`sSg~o?G*}>7i$)|wN}5O{A|b?1e8lfR^N1o&=Dy#(=iWK@od3D6Tl?qc$7)N? z8LX8tn{gy$Ob2{9fe$t`(U^8P4ClfLCC1E$jc_XLgkiV`mco5dv23^ko`r+(K0E=B zahOmh%;9ol@}`1G1CCl)4VS^ma4oEZJK!9+A5MbDU>Q6OE8uyk#4o{0cpFZGLr~|( zpyIv@_P@Xg>r#T0a=)o%BF9Xq3Zqa7bV4Q81yx}$oB;(dmTUrEwhcev;B~cfQLpL~h1M1u$RKO7^ zX`ez>`W!0YC~SgnAS#OnEI)}QyA)< z#n2mRW~efm9^IeTf*RW^LpeL!XW7}TlZ{(Z|3P@8|DTy-Gk)p*xwe|3Zu2jvYo#;A3;iXP4gS{3o$=!JiKLfyGOj7Ee#Q)z zY0vKYZ5o_%{r<|~>WqCL;n^vZaXjN>{TGpIk=UB0E7w>n+T*L+{8Lp{d2F>6i^bd8 z25wg6LoFLrqGe~SB=_aIy@ZvrNh#OsX!7%B$CU~r)w}&oH65tH_Q1KCQ=w3we|+ll z{NLxvk2CK082@yRSA@Tii``vJflHeT5;VJ(@$Oysa^0kr&fL4)lTJG3U}Ar|JMAU> xj=FtaiDVMV?823W%YUh?N`inUktIyB5az$WV)}l6-Lr@!O*trP96wsW{s#e@5g7mg diff --git a/apps/linking/locale/es/LC_MESSAGES/django.po b/apps/linking/locale/es/LC_MESSAGES/django.po index ee3230d5e2..9253cbfc36 100644 --- a/apps/linking/locale/es/LC_MESSAGES/django.po +++ b/apps/linking/locale/es/LC_MESSAGES/django.po @@ -1,75 +1,74 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-04 00:55+0000\n" +"PO-Revision-Date: 2011-11-22 15:44+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" -"mayan-edms/team/es/)\n" -"Language: es\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:11 msgid "View existing smart links" -msgstr "" +msgstr "Ver enlaces inteligentes existentes" #: __init__.py:12 msgid "Create new smart links" -msgstr "" +msgstr "Crear nuevos enlaces inteligentes" #: __init__.py:13 msgid "Delete smart links" -msgstr "" +msgstr "Eliminar enlaces inteligentes" #: __init__.py:14 msgid "Edit smart links" -msgstr "" +msgstr "Editar enlaces inteligentes" #: __init__.py:16 msgid "Smart links" -msgstr "" +msgstr "Enlaces inteligentes" #: __init__.py:22 msgid "smart links actions" -msgstr "" +msgstr "acciones de enlaces inteligentes" #: __init__.py:23 __init__.py:25 models.py:21 views.py:105 msgid "smart links" -msgstr "" +msgstr "enlaces inteligentes" #: __init__.py:26 msgid "smart links list" -msgstr "" +msgstr "lista de enlaces inteligentes" #: __init__.py:27 msgid "create new smart link" -msgstr "" +msgstr "crear un enlace inteligente nuevo" #: __init__.py:28 __init__.py:33 msgid "edit" -msgstr "" +msgstr "editar" #: __init__.py:29 __init__.py:34 msgid "delete" -msgstr "" +msgstr "borrar" #: __init__.py:31 msgid "conditions" -msgstr "" +msgstr "condiciones" #: __init__.py:32 msgid "create condition" -msgstr "" +msgstr "crear condicion" #: forms.py:48 msgid "Pages" @@ -166,9 +165,9 @@ msgid "" "The document metadata is available as variables `metadata` and document " "properties under the variable `document`." msgstr "" -"Esta expresión sera evaluada con respecto al documento seleccionado actual. " -"Los metadatos del documento están disponible como variables `metadata` y las " -"propiedades del documento en la variable `document`." +"Esta expresión sera evaluada con respecto al documento seleccionado actual." +" Los metadatos del documento están disponible como variables `metadata` y " +"las propiedades del documento en la variable `document`." #: models.py:12 models.py:31 views.py:109 views.py:196 msgid "enabled" @@ -176,7 +175,7 @@ msgstr "habilitado" #: models.py:20 models.py:25 views.py:256 views.py:287 msgid "smart link" -msgstr "" +msgstr "enlace inteligente" #: models.py:26 msgid "The inclusion is ignored for the first item." @@ -213,54 +212,53 @@ msgstr "no" #: models.py:37 msgid "link condition" -msgstr "" +msgstr "condición de enlace" #: models.py:38 msgid "link conditions" -msgstr "" +msgstr "condiciones de enlace" #: views.py:32 msgid "No action selected." msgstr "Ninguna acción seleccionada." #: views.py:47 -#, fuzzy, python-format +#, python-format msgid "documents in smart link: %(group)s" -msgstr "documentos en el grupo: %(group)s " +msgstr "documentos en el enlace inteligente: %(group)s" #: views.py:65 -#, fuzzy, python-format +#, python-format msgid "Smart link query error: %s" -msgstr "Error en consulta de grupo de documentos: %s" +msgstr "Error en consulta de enlace inteligente: %s" #: views.py:76 #, python-format msgid "smart links (%s)" -msgstr "" +msgstr "enlaces inteligentes (%s)" #: views.py:90 -#, fuzzy msgid "There no defined smart links for the current document." -msgstr "No hay grupos definidos para el documento actual." +msgstr "No hay enlaces inteligentes definidos para el documento actual." #: views.py:124 #, python-format msgid "Smart link: %s created successfully." -msgstr "" +msgstr "Enlace inteligente: %s creado exitosamente." #: views.py:131 msgid "Create new smart link" -msgstr "" +msgstr "Crear un enlace inteligente nuevo" #: views.py:144 #, python-format msgid "Smart link: %s edited successfully." -msgstr "" +msgstr "Enlace inteligente: %s editado exitosamente." #: views.py:153 #, python-format msgid "Edit smart link: %s" -msgstr "" +msgstr "Editar enlace inteligente: %s" #: views.py:168 #, python-format @@ -303,7 +301,7 @@ msgstr "" #: views.py:257 views.py:288 msgid "condition" -msgstr "" +msgstr "condición" #: views.py:274 #, python-format @@ -327,7 +325,7 @@ msgstr "" #: templates/smart_links_help.html:3 msgid "What are smart links?" -msgstr "" +msgstr "¿Qué son los enlaces inteligentes?" #: templates/smart_links_help.html:4 msgid "" @@ -337,27 +335,11 @@ msgid "" "some manner to the document being displayed and allow users the ability to " "jump to and from linked documents very easily." msgstr "" +"Enlaces inteligentes son un conjunto de condiciones que se utilizan para " +"consultar la base de datos en relacion al documento actual que el usuario " +"está accediendo, los resultados de estas consultas son una lista de " +"documentos que se relacionan de alguna manera al documento que se muestra y " +"permite a los usuarios la capacidad de navegar entre los documentos " +"vinculados con mucha facilidad." -#~ msgid "group actions" -#~ msgstr "acciones de grupo" -#~ msgid "groups" -#~ msgstr "grupos" - -#~ msgid "group document" -#~ msgstr "documento del grupo" - -#~ msgid "document group" -#~ msgstr "grupo de documento" - -#~ msgid "document groups" -#~ msgstr "grupos de documentos" - -#~ msgid "group item" -#~ msgstr "artículo del grupo" - -#~ msgid "group items" -#~ msgstr "artículo del grupo" - -#~ msgid "document groups (%s)" -#~ msgstr "grupos de documentos (%s)" diff --git a/apps/permissions/locale/es/LC_MESSAGES/django.mo b/apps/permissions/locale/es/LC_MESSAGES/django.mo index f6bd89e5c2aa57d46552ac51a4b1b10f72142c38..ddd24a555b92940b30097848d608f933d1b5a2bf 100644 GIT binary patch delta 1472 zcmb8uOKeP07{KwbX8N3ZwjOPj>rrOJ$aMNZtD0yevtSc;?~v5+(*L}FuC78d?r-Nq{sPI~U|p3`&g_noh&w<_LN42;eQ zUlv-7K9`=(6KTdflX%dshD7pl5G}lhZ8(hW7!HeU#f{j3gSZLbVJRlqthQhYcA$Q5 zCy(hO1G1Nw3MLL=Bc8=o_y{BT84EDPV+NL>eyAF!Vift2RXm6(t;iN>$0^tmjQ3z6 z<4!EYZVVG&j`LE?#3`JO=TQUPKr)oOsDX!26MBLC$S4mD_&%8bhaQEM%KiVPSo{1s0kj%0o{0-mvZz`7v4q=A@@-?JjBU39Q^)y;47?R{tfE-uc!%z zD8oFQg}T21bzKWq;vUpEUMcn01^vOq8JxxVLa^{=FdjyVA+JzNs6n(XrfVSXqAa9q z5Uq@^ooITGH90+~Ha+N^@i%=?f4(UT=o)yU=>^fIWuItEdC{`zrP8FM^cuRJMB5TN z6_-VH{kvOq3Nn7;YSg9|eWK}qTWmux(u<^*VrDQ_wB%x?vS~|dqKA!hDC4>rJL|?= z%d@STsAG=gjO!UE=8AtM)IQ~xspbCOP~0C0^)LNpb7yaAzv<-@HBm3)^_osMci=$g zXv}T(mxU{nj_I=x8q4c3EchwrU$%V+pY)I9uclY|Bl&IR-A*d&Nl(hPe(d+l3eM(_ zf7-uV(CEJ`$ko->#*;~_wzetR7*EtE5+&QV# z!uq_0$Ns2B>i1&g6*ok>>};1wXVUfx@gEh{6)58$3yE~ z@5y!7a!q&6u`Oy(<y8TC}eJ`I^6_AH?)wIe9{SDz delta 1322 zcmaLWPe_wt9Ki8M-Q4D;^Iz)J<(oNjM7B~ZXQaiXf-GwNx`fcBphKr1>QHp>QYWP#qUchW3OX3{{jGPPg+BPapZEE*=Xrj==k-HiE|7a) z?U+%N5Ve^aD^jW(&ldBb^p_}g0Qce$Ud1E0h{L$qq0}f|K_7mx{fT9?i=9gGr^}r*5!2T2Z3od&^&se57(cazM$N6xqB`WFz^& z))hK%BUJ*C>`0Lyq}0g$OT=VU8B{54f5|^3>Ozq_lOhqx{WnnMpM;?JoZA!G(NuiG z3|mnn)SfZVoj0wlnF(7)GHqI^O<7|sK4lu&G1HhdGZW*MHJ(lxtvcfH`#V4OeSw>g@F*)+?owzmH02+6FLGnw?nTJyF#FZz~`>%-o9{i&o*FF1Yw5BzrS*T+jQ z>(8ZKPAePFnmXW`@99An=J<&Bgr4_4)YHCU7k3y>rqv%nX3@+5 diff --git a/apps/permissions/locale/es/LC_MESSAGES/django.po b/apps/permissions/locale/es/LC_MESSAGES/django.po index 5a931bb0e9..2ae5d18ed6 100644 --- a/apps/permissions/locale/es/LC_MESSAGES/django.po +++ b/apps/permissions/locale/es/LC_MESSAGES/django.po @@ -1,21 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: +# Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-09-30 05:09+0000\n" +"PO-Revision-Date: 2011-11-22 15:37+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" -"mayan-edms/team/es/)\n" -"Language: es\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:12 @@ -67,14 +67,12 @@ msgid "delete" msgstr "eliminar" #: __init__.py:26 -#, fuzzy msgid "grant" -msgstr "Otorgar" +msgstr "otorgar" #: __init__.py:27 -#, fuzzy msgid "revoke" -msgstr "Revocar" +msgstr "revocar" #: api.py:22 msgid "Permissions" @@ -126,55 +124,51 @@ msgid "role members" msgstr "miembros de las functiones" #: views.py:61 -#, fuzzy msgid "has permission" -msgstr "permiso" +msgstr "tiene permiso" #: views.py:142 views.py:201 msgid " and " -msgstr "" +msgstr "y" #: views.py:142 views.py:201 -#, fuzzy, python-format +#, python-format msgid "%(permissions)s to %(requester)s" -msgstr "Permiso \"%(permission)s\" otorgado a %(ct_name)s: %(requester)s" +msgstr "%(permissions)s a %(requester)s" #: views.py:152 -#, fuzzy, python-format +#, python-format msgid "Permission \"%(permission)s\" granted to: %(requester)s." -msgstr "Permiso \"%(permission)s\" otorgado a %(ct_name)s: %(requester)s" +msgstr "Permiso \"%(permission)s\" otorgado a: %(requester)s." #: views.py:155 -#, fuzzy, python-format +#, python-format msgid "%(requester)s, already had the permission \"%(permission)s\" granted." -msgstr "" -" %(ct_name)s: %(requester)s, ya tenía el permiso \"%(permission)s\" otorgado." +msgstr "%(requester)s, ya tenía el permiso \"%(permission)s\" concedido." #: views.py:167 -#, fuzzy, python-format +#, python-format msgid "" "Are you sure you wish to grant the %(permissions_label)s %(title_suffix)s?" msgstr "" -"¿Está seguro que desea conceder el permiso \"%(permission)s\" a %(ct_name)s: " -"%(requester)s?" +"¿Está seguro que desea otorgar el %(permissions_label)s %(title_suffix)s?" #: views.py:211 -#, fuzzy, python-format +#, python-format msgid "Permission \"%(permission)s\" revoked from: %(requester)s." -msgstr "Permiso \"%(permission)s\" revocado de %(ct_name)s: %(requester)s" +msgstr "Permiso \"%(permission)s\" revocado de: %(requester)s." #: views.py:214 -#, fuzzy, python-format +#, python-format msgid "%(requester)s, doesn't have the permission \"%(permission)s\" granted." -msgstr " %(ct_name)s: %(requester)s, no tiene el permiso \"%(permission)s\"." +msgstr "%(requester)s, no tiene el permiso \"%(permission)s\" concedido." #: views.py:226 -#, fuzzy, python-format +#, python-format msgid "" "Are you sure you wish to revoke the %(permissions_label)s %(title_suffix)s?" msgstr "" -"¿Está seguro que desea revocar el permiso \"%(permission)s\" de %(ct_name)s: " -"%(requester)s?" +"¿Estás seguro que quiere revocar el %(permissions_label)s %(title_suffix)s?" #: views.py:278 #, python-format @@ -202,5 +196,4 @@ msgstr "" "Una lista de funciones existentes que se asignan automáticamente a los " "usuarios nuevos" -#~ msgid "state" -#~ msgstr "estado" + From 7e4110450bf73590927c21c5de3d49f950a7f6a3 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 12:00:30 -0400 Subject: [PATCH 118/220] Removed vestigial mentions of the word 'group' from the linking app --- apps/linking/__init__.py | 26 +++++++++++++------------- apps/linking/urls.py | 8 ++++---- apps/linking/views.py | 8 ++++---- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/apps/linking/__init__.py b/apps/linking/__init__.py index 02af2176c8..ab1bdc616a 100644 --- a/apps/linking/__init__.py +++ b/apps/linking/__init__.py @@ -8,10 +8,10 @@ from documents.models import Document from linking.models import SmartLink, SmartLinkCondition -PERMISSION_SMART_LINK_VIEW = {'namespace': 'linking', 'name': 'group_view', 'label': _(u'View existing smart links')} -PERMISSION_SMART_LINK_CREATE = {'namespace': 'linking', 'name': 'group_create', 'label': _(u'Create new smart links')} -PERMISSION_SMART_LINK_DELETE = {'namespace': 'linking', 'name': 'group_delete', 'label': _(u'Delete smart links')} -PERMISSION_SMART_LINK_EDIT = {'namespace': 'linking', 'name': 'group_edit', 'label': _(u'Edit smart links')} +PERMISSION_SMART_LINK_VIEW = {'namespace': 'linking', 'name': 'smart_link_view', 'label': _(u'View existing smart links')} +PERMISSION_SMART_LINK_CREATE = {'namespace': 'linking', 'name': 'smart_link_create', 'label': _(u'Create new smart links')} +PERMISSION_SMART_LINK_DELETE = {'namespace': 'linking', 'name': 'smart_link_delete', 'label': _(u'Delete smart links')} +PERMISSION_SMART_LINK_EDIT = {'namespace': 'linking', 'name': 'smart_link_edit', 'label': _(u'Edit smart links')} set_namespace_title('linking', _(u'Smart links')) register_permission(PERMISSION_SMART_LINK_VIEW) @@ -22,11 +22,11 @@ register_permission(PERMISSION_SMART_LINK_EDIT) smart_link_instance_view_link = {'text': _(u'smart links actions'), 'view': 'smart_link_instance_view', 'famfam': 'page_link', 'permissions': [PERMISSION_DOCUMENT_VIEW]} smart_link_instances_for_document = {'text': _(u'smart links'), 'view': 'smart_link_instances_for_document', 'args': 'object.pk', 'famfam': 'page_link', 'permissions': [PERMISSION_DOCUMENT_VIEW]} -document_groups_setup = {'text': _(u'smart links'), 'view': 'document_group_list', 'icon': 'link.png', 'permissions': [PERMISSION_SMART_LINK_CREATE]} -document_group_list = {'text': _(u'smart links list'), 'view': 'document_group_list', 'famfam': 'link', 'permissions': [PERMISSION_SMART_LINK_CREATE]} -document_group_create = {'text': _(u'create new smart link'), 'view': 'document_group_create', 'famfam': 'link_add', 'permissions': [PERMISSION_SMART_LINK_CREATE]} -document_group_edit = {'text': _(u'edit'), 'view': 'document_group_edit', 'args': 'smart_link.pk', 'famfam': 'link_edit', 'permissions': [PERMISSION_SMART_LINK_EDIT]} -document_group_delete = {'text': _(u'delete'), 'view': 'document_group_delete', 'args': 'smart_link.pk', 'famfam': 'link_delete', 'permissions': [PERMISSION_SMART_LINK_DELETE]} +smart_link_setup = {'text': _(u'smart links'), 'view': 'smart_link_list', 'icon': 'link.png', 'permissions': [PERMISSION_SMART_LINK_CREATE]} +smart_link_list = {'text': _(u'smart links list'), 'view': 'smart_link_list', 'famfam': 'link', 'permissions': [PERMISSION_SMART_LINK_CREATE]} +smart_link_create = {'text': _(u'create new smart link'), 'view': 'smart_link_create', 'famfam': 'link_add', 'permissions': [PERMISSION_SMART_LINK_CREATE]} +smart_link_edit = {'text': _(u'edit'), 'view': 'smart_link_edit', 'args': 'smart_link.pk', 'famfam': 'link_edit', 'permissions': [PERMISSION_SMART_LINK_EDIT]} +smart_link_delete = {'text': _(u'delete'), 'view': 'smart_link_delete', 'args': 'smart_link.pk', 'famfam': 'link_delete', 'permissions': [PERMISSION_SMART_LINK_DELETE]} smart_link_condition_list = {'text': _(u'conditions'), 'view': 'smart_link_condition_list', 'args': 'smart_link.pk', 'famfam': 'cog', 'permissions': [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_CREATE]} smart_link_condition_create = {'text': _(u'create condition'), 'view': 'smart_link_condition_create', 'args': 'smart_link.pk', 'famfam': 'cog_add', 'permissions': [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT]} @@ -35,10 +35,10 @@ smart_link_condition_delete = {'text': _(u'delete'), 'view': 'smart_link_conditi register_links(Document, [smart_link_instances_for_document], menu_name='form_header') -register_links(SmartLink, [document_group_edit, document_group_delete, smart_link_condition_list]) +register_links(SmartLink, [smart_link_edit, smart_link_delete, smart_link_condition_list]) register_links(SmartLinkCondition, [smart_link_condition_edit, smart_link_condition_delete]) -register_links(['document_group_list', 'document_group_create', 'document_group_edit', 'document_group_delete', 'smart_link_condition_list', 'smart_link_condition_create', 'smart_link_condition_edit', 'smart_link_condition_delete'], [document_group_list, document_group_create], menu_name='sidebar') +register_links(['smart_link_list', 'smart_link_create', 'smart_link_edit', 'smart_link_delete', 'smart_link_condition_list', 'smart_link_condition_create', 'smart_link_condition_edit', 'smart_link_condition_delete'], [smart_link_list, smart_link_create], menu_name='sidebar') register_links(['smart_link_condition_list', 'smart_link_condition_create', 'smart_link_condition_edit', 'smart_link_condition_delete'], [smart_link_condition_create], menu_name='sidebar') -register_setup(document_groups_setup) -register_sidebar_template(['document_group_list'], 'smart_links_help.html') +register_setup(smart_link_setup) +register_sidebar_template(['smart_link_list'], 'smart_links_help.html') diff --git a/apps/linking/urls.py b/apps/linking/urls.py index 0a00851384..080a180b2b 100644 --- a/apps/linking/urls.py +++ b/apps/linking/urls.py @@ -5,10 +5,10 @@ urlpatterns = patterns('linking.views', url(r'^document/(?P\d+)/smart_link/(?P\d+)/$', 'smart_link_instance_view', (), 'smart_link_instance_view'), url(r'^smart/for_document/(?P\d+)/$', 'smart_link_instances_for_document', (), 'smart_link_instances_for_document'), - url(r'^setup/list/$', 'document_group_list', (), 'document_group_list'), - url(r'^setup/create/$', 'document_group_create', (), 'document_group_create'), - url(r'^setup/(?P\d+)/delete/$', 'document_group_delete', (), 'document_group_delete'), - url(r'^setup/(?P\d+)/edit/$', 'document_group_edit', (), 'document_group_edit'), + url(r'^setup/list/$', 'smart_link_list', (), 'smart_link_list'), + url(r'^setup/create/$', 'smart_link_create', (), 'smart_link_create'), + url(r'^setup/(?P\d+)/delete/$', 'smart_link_delete', (), 'smart_link_delete'), + url(r'^setup/(?P\d+)/edit/$', 'smart_link_edit', (), 'smart_link_edit'), url(r'^setup/(?P\d+)/condition/list/$', 'smart_link_condition_list', (), 'smart_link_condition_list'), url(r'^setup/(?P\d+)/condition/create/$', 'smart_link_condition_create', (), 'smart_link_condition_create'), diff --git a/apps/linking/views.py b/apps/linking/views.py index 1e948ee9b0..2b1770cb12 100644 --- a/apps/linking/views.py +++ b/apps/linking/views.py @@ -98,7 +98,7 @@ def smart_link_instances_for_document(request, document_id): }, context_instance=RequestContext(request)) -def document_group_list(request): +def smart_link_list(request): check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE]) return render_to_response('generic_list.html', { @@ -114,7 +114,7 @@ def document_group_list(request): }, context_instance=RequestContext(request)) -def document_group_create(request): +def smart_link_create(request): check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE]) if request.method == 'POST': @@ -132,7 +132,7 @@ def document_group_create(request): }, context_instance=RequestContext(request)) -def document_group_edit(request, smart_link_pk): +def smart_link_edit(request, smart_link_pk): check_permissions(request.user, [PERMISSION_SMART_LINK_EDIT]) smart_link = get_object_or_404(SmartLink, pk=smart_link_pk) @@ -154,7 +154,7 @@ def document_group_edit(request, smart_link_pk): }, context_instance=RequestContext(request)) -def document_group_delete(request, smart_link_pk): +def smart_link_delete(request, smart_link_pk): check_permissions(request.user, [PERMISSION_SMART_LINK_DELETE]) smart_link = get_object_or_404(SmartLink, pk=smart_link_pk) From 8a70e325c185fd6136e801799fbb452821f8b91a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:03:06 -0400 Subject: [PATCH 119/220] Simplyfied and updated the lock manager app --- apps/lock_manager/admin.py | 10 +++++++ apps/lock_manager/conf/settings.py | 2 +- apps/lock_manager/managers.py | 46 +++++++++++------------------- apps/lock_manager/models.py | 21 ++++++++++---- apps/lock_manager/tests.py | 7 ----- 5 files changed, 44 insertions(+), 42 deletions(-) create mode 100644 apps/lock_manager/admin.py diff --git a/apps/lock_manager/admin.py b/apps/lock_manager/admin.py new file mode 100644 index 0000000000..12dbee8fe1 --- /dev/null +++ b/apps/lock_manager/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin + +from lock_manager.models import Lock + + +class LockAdmin(admin.ModelAdmin): + model = Lock + + +admin.site.register(Lock, LockAdmin) diff --git a/apps/lock_manager/conf/settings.py b/apps/lock_manager/conf/settings.py index 05f4ae374c..869e121f4d 100644 --- a/apps/lock_manager/conf/settings.py +++ b/apps/lock_manager/conf/settings.py @@ -1,5 +1,5 @@ from django.conf import settings -DEFAULT_LOCK_TIMEOUT_VALUE = 10 +DEFAULT_LOCK_TIMEOUT_VALUE = 30 DEFAULT_LOCK_TIMEOUT = getattr(settings, 'LOCK_MANAGER_DEFAULT_LOCK_TIMEOUT', DEFAULT_LOCK_TIMEOUT_VALUE) diff --git a/apps/lock_manager/managers.py b/apps/lock_manager/managers.py index 96c57ca02b..206df912b6 100644 --- a/apps/lock_manager/managers.py +++ b/apps/lock_manager/managers.py @@ -1,9 +1,4 @@ -try: - from psycopg2 import OperationalError -except ImportError: - class OperationalError(Exception): - pass - +import logging import datetime from django.db.utils import DatabaseError @@ -13,40 +8,33 @@ from django.db import models from lock_manager.exceptions import LockError +logger = logging.getLogger(__name__) + class LockManager(models.Manager): - @transaction.commit_manually + @transaction.commit_on_success def acquire_lock(self, name, timeout=None): + logger.debug('DEBUG: trying to acquire lock: %s' % name) lock = self.model(name=name, timeout=timeout) try: lock.save(force_insert=True) + logger.debug('DEBUG: acquired lock: %s' % name) + return lock except IntegrityError: - transaction.rollback() # There is already an existing lock - # Check it's expiration date and if expired, delete it and - # create it again - lock = self.model.objects.get(name=name) - transaction.rollback() + # Check it's expiration date and if expired, reset it + try: + lock = self.model.objects.get(name=name) + except self.model.DoesNotExist: + # Table based locking + logger.debug('DEBUG: lock: %s does not exist' % name) + raise LockError('Unable to acquire lock') if datetime.datetime.now() > lock.creation_datetime + datetime.timedelta(seconds=lock.timeout): - self.release_lock(name) + logger.debug('DEBUG: reseting deleting stale lock: %s' % name) lock.timeout=timeout + logger.debug('DEBUG: try to reacquire stale lock: %s' % name) lock.save() - transaction.commit() + return lock else: raise LockError('Unable to acquire lock') - except DatabaseError: - transaction.rollback() - # Special case for ./manage.py syncdb - except (OperationalError, ImproperlyConfigured): - transaction.rollback() - # Special for DjangoZoom, which executes collectstatic media - # doing syncdb and creating the database tables - else: - transaction.commit() - - @transaction.commit_manually - def release_lock(self, name): - lock = self.model.objects.get(name=name) - lock.delete() - transaction.commit() diff --git a/apps/lock_manager/models.py b/apps/lock_manager/models.py index 53c6b6e49d..535d3366a6 100644 --- a/apps/lock_manager/models.py +++ b/apps/lock_manager/models.py @@ -10,17 +10,28 @@ from lock_manager.conf.settings import DEFAULT_LOCK_TIMEOUT class Lock(models.Model): creation_datetime = models.DateTimeField(verbose_name=_(u'creation datetime')) timeout = models.IntegerField(default=DEFAULT_LOCK_TIMEOUT, verbose_name=_(u'timeout')) - name = models.CharField(max_length=32, verbose_name=_(u'name'), unique=True) - + name = models.CharField(max_length=48, verbose_name=_(u'name'), unique=True) + objects = LockManager() - + def __unicode__(self): return self.name - + def save(self, *args, **kwargs): self.creation_datetime = datetime.datetime.now() + if not self.timeout and not kwarget.get('timeout'): + self.timeout = DEFAULT_LOCK_TIMEOUT + super(Lock, self).save(*args, **kwargs) - + + def release(self): + try: + lock = Lock.objects.get(name=self.name, creation_datetime=self.creation_datetime) + lock.delete() + except Lock.DoesNotExist: + # Out lock expired and was reassigned + pass + class Meta: verbose_name = _(u'lock') verbose_name_plural = _(u'locks') diff --git a/apps/lock_manager/tests.py b/apps/lock_manager/tests.py index 501deb776c..140393d027 100644 --- a/apps/lock_manager/tests.py +++ b/apps/lock_manager/tests.py @@ -1,10 +1,3 @@ -""" -This file demonstrates writing tests using the unittest module. These will pass -when you run "manage.py test". - -Replace this with more appropriate tests for your application. -""" - from django.test import TestCase From c65b6a0309acbbd431a91ae5ff93de89f2934c62 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:06:21 -0400 Subject: [PATCH 120/220] Added aditional loggin to the locking app --- apps/lock_manager/managers.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/lock_manager/managers.py b/apps/lock_manager/managers.py index 206df912b6..6c69fada19 100644 --- a/apps/lock_manager/managers.py +++ b/apps/lock_manager/managers.py @@ -14,11 +14,11 @@ logger = logging.getLogger(__name__) class LockManager(models.Manager): @transaction.commit_on_success def acquire_lock(self, name, timeout=None): - logger.debug('DEBUG: trying to acquire lock: %s' % name) + logger.debug('trying to acquire lock: %s' % name) lock = self.model(name=name, timeout=timeout) try: lock.save(force_insert=True) - logger.debug('DEBUG: acquired lock: %s' % name) + logger.debug('acquired lock: %s' % name) return lock except IntegrityError: # There is already an existing lock @@ -27,14 +27,15 @@ class LockManager(models.Manager): lock = self.model.objects.get(name=name) except self.model.DoesNotExist: # Table based locking - logger.debug('DEBUG: lock: %s does not exist' % name) + logger.debug('lock: %s does not exist' % name) raise LockError('Unable to acquire lock') if datetime.datetime.now() > lock.creation_datetime + datetime.timedelta(seconds=lock.timeout): - logger.debug('DEBUG: reseting deleting stale lock: %s' % name) + logger.debug('reseting deleting stale lock: %s' % name) lock.timeout=timeout - logger.debug('DEBUG: try to reacquire stale lock: %s' % name) + logger.debug('try to reacquire stale lock: %s' % name) lock.save() return lock else: + logger.debug('unable to acquire lock: %s' % name) raise LockError('Unable to acquire lock') From 614ece827f15aae2de01dae12de3998f57a9a898 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:06:33 -0400 Subject: [PATCH 121/220] Updated FAQ with unoconv information --- docs/faq.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/faq.rst b/docs/faq.rst index e017c806b1..241e76b4a2 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -119,3 +119,13 @@ How to enable x-sendile support for ``Apache`` XSendFile on XSendFileAllowAbove on + + +The included version of ``unoconv`` in my distribution is too old +------------------------------------------------------------- + + * Only the file 'unoconv' file from https://github.com/dagwieers/unoconv is needed. + Put it in a user designated directory for binaries such as /usr/local/bin and + setup Mayan's configuration option in your settings_local.py file like this:: + + CONVERTER_UNOCONV_PATH = '/usr/local/bin/unoconv' From a6151fd9e5c5205b217f6cfae6dc661e936623ec Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:07:09 -0400 Subject: [PATCH 122/220] Added non working memcache backend to the lock manager app --- apps/lock_manager/backend_memcached.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/lock_manager/backend_memcached.py diff --git a/apps/lock_manager/backend_memcached.py b/apps/lock_manager/backend_memcached.py new file mode 100644 index 0000000000..8458fbb395 --- /dev/null +++ b/apps/lock_manager/backend_memcached.py @@ -0,0 +1,16 @@ +from django.core.cache import get_cache + +if CACHE_URI: + try: + cache_backend = get_cache(CACHE_URI) + except ImportError: + # TODO: display or log error + cache_backend = None +else: + cache_backend = None +if cache_backend: + acquire_lock = lambda lock_id: cache_backend.add(lock_id, u'true', LOCK_EXPIRE) + release_lock = lambda lock_id: cache_backend.delete(lock_id) +else: + acquire_lock = lambda lock_id: True + release_lock = lambda lock_id: True From c9e8f2fac0ec8d49ef06f4a007e3c38bbf937239 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:07:29 -0400 Subject: [PATCH 123/220] Updated the ocr app to use the lock manager --- apps/ocr/tasks.py | 44 +++++++++++--------------------------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/apps/ocr/tasks.py b/apps/ocr/tasks.py index dee3d64da9..125d8fa2d0 100644 --- a/apps/ocr/tasks.py +++ b/apps/ocr/tasks.py @@ -4,9 +4,10 @@ from time import sleep from random import random from django.db.models import Q -from django.core.cache import get_cache from job_processor.api import process_job +from lock_manager.models import Lock +from lock_manager.exceptions import LockError from ocr.api import do_document_ocr from ocr.literals import QUEUEDOCUMENT_STATE_PENDING, \ @@ -21,36 +22,13 @@ from ocr.conf.settings import QUEUE_PROCESSING_INTERVAL LOCK_EXPIRE = 60 * 10 # Lock expires in 10 minutes # TODO: Tie LOCK_EXPIRATION with hard task timeout -if CACHE_URI: - try: - cache_backend = get_cache(CACHE_URI) - except ImportError: - # TODO: display or log error - cache_backend = None -else: - cache_backend = None - - -def random_delay(): - sleep(random() * (QUEUE_PROCESSING_INTERVAL - 1)) - return True - - -if cache_backend: - acquire_lock = lambda lock_id: cache_backend.add(lock_id, u'true', LOCK_EXPIRE) - release_lock = lambda lock_id: cache_backend.delete(lock_id) -else: - acquire_lock = lambda lock_id: True - release_lock = lambda lock_id: True - - def task_process_queue_document(queue_document_id): lock_id = u'%s-lock-%d' % (u'task_process_queue_document', queue_document_id) - if acquire_lock(lock_id): + try: + lock = Lock.objects.acquire_lock(lock_id, LOCK_EXPIRE) queue_document = QueueDocument.objects.get(pk=queue_document_id) queue_document.state = QUEUEDOCUMENT_STATE_PROCESSING queue_document.node_name = platform.node() - #queue_document.result = task_process_queue_document.request.id queue_document.save() try: do_document_ocr(queue_document) @@ -59,7 +37,10 @@ def task_process_queue_document(queue_document_id): queue_document.state = QUEUEDOCUMENT_STATE_ERROR queue_document.result = e queue_document.save() - release_lock(lock_id) + + lock.release() + except LockError: + pass def reset_orphans(): @@ -86,11 +67,9 @@ def reset_orphans(): orphan.node_name = None orphan.save() ''' - + def task_process_document_queues(): - if not cache_backend: - random_delay() # reset_orphans() # Causes problems with big clusters increased latency # Disabled until better solution @@ -108,8 +87,7 @@ def task_process_document_queues(): if oldest_queued_document_qs: oldest_queued_document = oldest_queued_document_qs.order_by('datetime_submitted')[0] - #task_process_queue_document.delay(oldest_queued_document.pk) - #task_process_queue_document(oldest_queued_document.pk) process_job(task_process_queue_document, oldest_queued_document.pk) except Exception, e: - print 'DocumentQueueWatcher exception: %s' % e + pass + #print 'DocumentQueueWatcher exception: %s' % e From 78685b9fc57fb930bdecfce4927503e89a48603a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:22:20 -0400 Subject: [PATCH 124/220] Reduce the ocr lock name size --- apps/ocr/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ocr/tasks.py b/apps/ocr/tasks.py index 125d8fa2d0..74fb240867 100644 --- a/apps/ocr/tasks.py +++ b/apps/ocr/tasks.py @@ -23,7 +23,7 @@ LOCK_EXPIRE = 60 * 10 # Lock expires in 10 minutes # TODO: Tie LOCK_EXPIRATION with hard task timeout def task_process_queue_document(queue_document_id): - lock_id = u'%s-lock-%d' % (u'task_process_queue_document', queue_document_id) + lock_id = u'task_proc_queue_doc-%d' % queue_document_id try: lock = Lock.objects.acquire_lock(lock_id, LOCK_EXPIRE) queue_document = QueueDocument.objects.get(pk=queue_document_id) From 1367fb9c66458318fb33fcbda07c149e766f2ace Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:41:32 -0400 Subject: [PATCH 125/220] Added lock manager abstraction --- apps/lock_manager/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/lock_manager/__init__.py b/apps/lock_manager/__init__.py index e69de29bb2..34913f856f 100644 --- a/apps/lock_manager/__init__.py +++ b/apps/lock_manager/__init__.py @@ -0,0 +1,4 @@ +from lock_manager.exceptions import LockError +from lock_manager.models import Lock as LockModel + +Lock = LockModel.objects From dc63c3225e44379bf038bd317ac10c1288dbc7a4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:42:04 -0400 Subject: [PATCH 126/220] Updated ocr task to use the new lock manager abstracted class --- apps/ocr/tasks.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/ocr/tasks.py b/apps/ocr/tasks.py index 74fb240867..06f55bd69d 100644 --- a/apps/ocr/tasks.py +++ b/apps/ocr/tasks.py @@ -6,8 +6,7 @@ from random import random from django.db.models import Q from job_processor.api import process_job -from lock_manager.models import Lock -from lock_manager.exceptions import LockError +from lock_manager import Lock, LockError from ocr.api import do_document_ocr from ocr.literals import QUEUEDOCUMENT_STATE_PENDING, \ @@ -25,7 +24,7 @@ LOCK_EXPIRE = 60 * 10 # Lock expires in 10 minutes def task_process_queue_document(queue_document_id): lock_id = u'task_proc_queue_doc-%d' % queue_document_id try: - lock = Lock.objects.acquire_lock(lock_id, LOCK_EXPIRE) + lock = Lock.acquire_lock(lock_id, LOCK_EXPIRE) queue_document = QueueDocument.objects.get(pk=queue_document_id) queue_document.state = QUEUEDOCUMENT_STATE_PROCESSING queue_document.node_name = platform.node() From 290fcc925bedaccbd506ba536f3942015a3e92c7 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:42:41 -0400 Subject: [PATCH 127/220] Added signal processing to the ocr queue to speed up ocr queue processing --- apps/ocr/__init__.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index ccca4916ee..c6114148d3 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -4,12 +4,15 @@ except ImportError: class OperationalError(Exception): pass +import logging + from django.core.exceptions import ImproperlyConfigured from django.db import transaction from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext from django.db.utils import DatabaseError from django.db.models.signals import post_save +from django.dispatch import receiver from navigation.api import register_links, register_top_menu, register_multi_item_links from permissions.api import register_permission, set_namespace_title @@ -21,9 +24,11 @@ from scheduler.api import register_interval_job from ocr.conf.settings import AUTOMATIC_OCR from ocr.conf.settings import QUEUE_PROCESSING_INTERVAL -from ocr.models import DocumentQueue, QueueTransformation +from ocr.models import DocumentQueue, QueueTransformation, QueueDocument from ocr.tasks import task_process_document_queues +logger = logging.getLogger(__name__) + #Permissions PERMISSION_OCR_DOCUMENT = {'namespace': 'ocr', 'name': 'ocr_document', 'label': _(u'Submit document for OCR')} PERMISSION_OCR_DOCUMENT_DELETE = {'namespace': 'ocr', 'name': 'ocr_document_delete', 'label': _(u'Delete document for OCR queue')} @@ -99,6 +104,13 @@ def document_post_save(sender, instance, **kwargs): post_save.connect(document_post_save, sender=Document) + +@receiver(post_save, dispatch_uid='call_queue', sender=QueueDocument) +def call_queue(sender, **kwargs): + logger.debug('got call_queue signal') + task_process_document_queues() + + create_default_queue() register_interval_job('task_process_document_queues', _(u'Checks the OCR queue for pending documents.'), task_process_document_queues, seconds=QUEUE_PROCESSING_INTERVAL) From 95c300137ccc86a06bc67aabe314aa32d02cb0e0 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:48:12 -0400 Subject: [PATCH 128/220] Updated changelog --- docs/changelog.rst | 75 ++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index d51e6768eb..761c7ea160 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,12 +1,12 @@ Version 0.10 ------------ -* Added a proper setup views for the document grouping functionality +* Added a proper setup views for the document grouping functionality. * Document grouping is now called smart linking as it relates better to how it actually works. The data base schema was changed and users must do the required:: - - $ ./manager syncdb - + + $ ./manager syncdb + for the new tables to be created. * Grappelli is no longer required as can be uninstalled. * New smarter document preview widget that doesn't allow zooming or viewing @@ -15,32 +15,38 @@ Version 0.10 * LibreOffice (https://www.libreoffice.org/) * unoconv [version 0.5] (https://github.com/dagwieers/unoconv) - -* The new office documents converter won't convert files with the extension - .docx becasue these files are recognized as zip files instead. This + +* The new office documents converter won't convert files with the extension + .docx because these files are recognized as zip files instead. This is an issue of the libmagic library. -* New configuration option added CONVERTER_UNOCONV_USE_PIPE that controls - how unoconv handles the communication with LibreOffice. The default of - `True` causes unoconv to use pipes, this approach is slower than using - TCP/IP ports but it is more stable. +* New configuration option added ``CONVERTER_UNOCONV_USE_PIPE`` that controls + how unoconv handles the communication with LibreOffice. The default of + ``True`` causes unoconv to use **pipes**, this approach is slower than using + **TCP/IP** ports but it is more stable. -* Initial REST API that exposes documents properties and one method, this - new API is used by the new smart document widget and requires the - packaged `djangorestframework`, users must issue a:: +* Initial `REST` `API` that exposes documents properties and one method, this + new `API` is used by the new smart document widget and requires the + package ``djangorestframework``, users must issue a:: $ pip install -r requirements/production.txt - to install the new requirement. + to install this new requirement. * MIME type detection and caching performance updates. -* Updated the included version of jQuery to 1.7 -* Updated the included version of JqueryAsynchImageLoader to 0.9.7 -* Document image serving response now specifies a MIME type for increased +* Updated the included version of ``jQuery`` to 1.7 +* Updated the included version of ``JqueryAsynchImageLoader`` to 0.9.7 +* Document image serving response now specifies a MIME type for increased browser compatibility. * Small change in the scheduler that increases stability. * Russian translation updates (Сергей Глита [Sergey Glita]) - +* Improved and generalized the OCR queue locking mechanism, this should + eliminate any posibility of race conditions between Mayan EDMS OCR nodes. +* Added support for signals to the OCR queue, this results in instant OCR + processing upon submittal of a document to the OCR queue, this works in + addition to the current polling processing which eliminates the + posibility of stale documents in the OCR queue. + Version 0.9.1 ------------- * Added handling percent encoded unicode query strings in search URL, @@ -51,44 +57,44 @@ Version 0.9.1 Version 0.9.0 ------------- -* Simplified getting mimetypes from files by merging 2 implementations +* Simplified getting mimetypes from files by merging 2 implementations (document based and file based) -* Updated python converter backend, document model and staging module +* Updated python converter backend, document model and staging module to use the new get_mimetype API -* Only allow clickable thumbnails for document and staging files with a +* Only allow clickable thumbnails for document and staging files with a valid image -* Removed tag count from the group document list widget to conserve +* Removed tag count from the group document list widget to conserve vertical space * Updated required Django version to 1.3.1 -* Removed the included 3rd party module django-sendfile, now added to +* Removed the included 3rd party module django-sendfile, now added to the requirement files. - * User should do a pip install -r requirements/production.txt to update + * User should do a pip install -r requirements/production.txt to update -* Changed to Semantic Versioning (http://semver.org/), with +* Changed to Semantic Versioning (http://semver.org/), with recommendations 7, 8 and 9 causing the most effect in the versioning number. * Added Russian locale post OCR cleanup backend (Сергей Глита [Sergei Glita]) -* Reduced severity of the messages displayed when no OCR cleanup backend +* Reduced severity of the messages displayed when no OCR cleanup backend is found for a language * Complete Portuguese translation (Emerson Soares and Renata Oliveira) * Complete Russian translation (Сергей Глита [Sergei Glita]) -* Added animate.css to use CSS to animate flash messages with better +* Added animate.css to use CSS to animate flash messages with better fallback on non JS browsers * The admin and sentry links are no longer hard-coded (Meurig Freeman) -* Improved appearance of the document tag widget +* Improved appearance of the document tag widget (https://p.twimg.com/Ac0Q0b-CAAE1lfA.png:large) -* Added django_compress and cssmin to the requirements files and enabled +* Added django_compress and cssmin to the requirements files and enabled django_compress for CSS and JS files * Added granting and revoking permission methods to the permission model * Correctly calculate the mimetype icons paths when on development mode -* Added a new more comprehensive method of passing multiple variables +* Added a new more comprehensive method of passing multiple variables per item in multi item selection views -* Used new multi parameter passing method to improve the usability of +* Used new multi parameter passing method to improve the usability of the grant/revoke permission view, thanks to Cezar Jenkins (https://twitter.com/#!/emperorcezar) for the suggestion -* Added step to the documentation explaining how to install Mayan EDMS +* Added step to the documentation explaining how to install Mayan EDMS on Webfaction -* Added an entry in the documentation to the screencast explaining how +* Added an entry in the documentation to the screencast explaining how to install Mayan EDMS on DjangoZoom * Added required changes to add Mayan EDMS to Transifex.com * Fixed the apache contrib file static file directory name @@ -96,7 +102,6 @@ Version 0.9.0 Version 0.8.3 ------------- - * Added a Contributors file under the docs directory * Moved the document grouping subtemplate windows into a document information tab From 5a916eb4b3b50179cefd5de1c404119ecd2b65d8 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 15:51:01 -0400 Subject: [PATCH 129/220] =?UTF-8?q?Further=20Russian=20translation=20updat?= =?UTF-8?q?es=20(=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=93=D0=BB=D0=B8?= =?UTF-8?q?=D1=82=D0=B0=20[Sergey=20Glita])?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/locale/ru/LC_MESSAGES/django.mo | Bin 6422 -> 6328 bytes apps/common/locale/ru/LC_MESSAGES/django.po | 35 +++-- .../converter/locale/ru/LC_MESSAGES/django.mo | Bin 19188 -> 19659 bytes .../converter/locale/ru/LC_MESSAGES/django.po | 39 +++--- .../documents/locale/ru/LC_MESSAGES/django.mo | Bin 22276 -> 23407 bytes .../documents/locale/ru/LC_MESSAGES/django.po | 68 +++++----- apps/linking/locale/ru/LC_MESSAGES/django.mo | Bin 4496 -> 8255 bytes apps/linking/locale/ru/LC_MESSAGES/django.po | 122 ++++++++---------- .../locale/ru/LC_MESSAGES/django.mo | Bin 3777 -> 3721 bytes .../locale/ru/LC_MESSAGES/django.po | 63 ++++----- 10 files changed, 152 insertions(+), 175 deletions(-) diff --git a/apps/common/locale/ru/LC_MESSAGES/django.mo b/apps/common/locale/ru/LC_MESSAGES/django.mo index a1396fd34ee3aeacdf56befca5f45046d3fc4d8e..a8f3d3b9e8592f138c6a59e218a6810b03bf2d87 100644 GIT binary patch delta 1571 zcmYk+Sx8h-9LMo9=D06unOoXqnOT|LNzGkT$fcArXrVU?q@b4`su!6oGcu@X(iR`v zpd^$jP$3^Is3>yAA}lZpA*ct-^1Z&l@fscGKc92&oO_o4Id^*9Lzd@LVrY+{)Dp{y zf)Hc&-)6-M&2c|#?f zA0{ylKjTjPfqYCgKc-nwYbwgqgGIaYF~$Kco;QM0Li|Y!$$mr z>Zg%|p{?45B*}E)YP^ct(qRvk>r_6VR&PZgH18NKN zmoYhPz-By!I*jAkgzs=2X7S2sE1OUg@a&oY~&Lvn+VQraJ$R({%h3>MJv-mQ_(A>z1pk` ziqcmTtj+(?RM>T8VWDu0f<>wQzi3O@xnR+D{wrGTR)PZ^+&}%G^s6Y{Yl#9vd+Z{r z2_2*~-;^`U;R_4zbw*oOp4;uRtWtN8_g;)ELKh{aZp$|w^ESlii*IrGA``O1ytRoL v-sa>=Z(nkgW5oL{c{C%?893vA;vWfg`G*3RTvP}A!~RG9$EtasrL_D73g4R- delta 1643 zcmXxkOKeP09LMqhjLvwpTBWo~nPOT+nW=iTN{a^3gr*^tuuyLy4MHp=CdxvPSWMa! zA(2Qd1c}k4(yCZ=AwlLM-H@hOV1-2DmEik3y-w!b&zXDAJ@=gd|J>Uh@2E%&j?ZW} zN79mhgEiPP~Cmf{1<$G50C|HO&-2br_wjWQd9g;;=5 z)bmzgnCII%8tS;woiN*s+-uuV58Q=2Fo8w*4%J_yOoK3LWl@}fvr!YNK`mq@=3pak z#qG!t){9}DZ~ZiM!&BsE9)~!-My-4-)4zmysFmNr$@m;A@gpkqMVV%cuoxBkX4FK_ zpeAq*HU4G){|!v!apFD=4fq7J@I9*I7t{)Vp&~Mxi<)^Zs$U_8081~$wfrxm^BO#i zib%I_k8dB2o^|op>o)dr8tP+Fia<1|BXsX zcCJ|!mSY3%#Tl4FrE~!2;n!T^uMkb+Ze5s##aN44VGAk+t*Cy-{QoCV6Kg~DPvTze zLOrO6jX+kc4%cG?YMc&K%C6#Ae376ri^dQtw;}S;iBTj<*5~^S8Qb2V2L6oA_{%@v z#Fn2J;I%}h^28*w#n_G;@F{AKP2p8(#0V-viNiFM(_5$s+($j=73zEN0i&2f-0N@- z&cp-ACA)}vD{i79(vP}-02Sg-$h_P&aHW(Hl^E43cJd(VO%(8 z`)xM7E6TCbpt5=xmqs-!{Qsh!x{4Z2-44wNgj!m6?mn1$7VZpX#;VE}#v-v;^`gq; zp{&TLcvYk#ULC7Qb!NQ`=3MjI(!J@f^uu(w*XCVF?a$d12&V6)dd8K8M|f?K, 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-19 21:02+0000\n" +"PO-Revision-Date: 2011-11-22 19:21+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" -"ru/)\n" -"Language: ru\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:17 msgid "change password" @@ -106,16 +104,16 @@ msgstr "Пейзаж" #: utils.py:291 msgid "function found" -msgstr "Функция найдены" +msgstr "функция найдена" #: utils.py:293 utils.py:295 #, python-format msgid "class found: %s" -msgstr "Класс найден: %s." +msgstr "класс найден: %s." #: views.py:24 templates/password_change_done.html:5 msgid "Your password has been successfully changed." -msgstr "Ваш пароль был успешно изменен." +msgstr "Ваш пароль был изменен." #: views.py:41 msgid "No action selected." @@ -175,8 +173,8 @@ msgstr "Ни один" #: conf/settings.py:15 msgid "" "Temporary directory used site wide to store thumbnails, previews and " -"temporary files. If none is specified, one will be created using tempfile." -"mkdtemp()" +"temporary files. If none is specified, one will be created using " +"tempfile.mkdtemp()" msgstr "" "Временный каталог, используемый сайтом для хранения миниатюр, превью и " "временных файлов. Если он не указан, он будет создан с использованием " @@ -196,7 +194,7 @@ msgstr "Недостаточно прав" #: templates/403.html:9 msgid "You don't have enough permissions for this operation." -msgstr "У вас нет достаточно прав для этой операции." +msgstr "У вас недостаточно прав для этой операции." #: templates/404.html:3 templates/404.html.py:7 msgid "Page not found" @@ -232,7 +230,7 @@ msgstr "Создать %(object_name)s" #: templates/calculate_form_title.html:26 msgid "Create" -msgstr "Создавать" +msgstr "Создать" #: templates/generic_assign_remove.html:3 #, python-format @@ -304,8 +302,8 @@ msgid "" "List of %(title)s (%(start)s - %(end)s out of %(total)s) (Page " "%(page_number)s of %(total_pages)s)" msgstr "" -"Список %(title)s (%(start)s - %(end)s из %(total)s) (Page %(page_number)s из " -"%(total_pages)s)" +"Список %(title)s (%(start)s - %(end)s из %(total)s) (Page %(page_number)s из" +" %(total_pages)s)" #: templates/generic_list_horizontal_subtemplate.html:25 #: templates/generic_list_subtemplate.html:26 @@ -331,5 +329,4 @@ msgstr "Войти" msgid "Password change" msgstr "Изменение пароля" -#~ msgid "Cancel" -#~ msgstr "Отменить" + diff --git a/apps/converter/locale/ru/LC_MESSAGES/django.mo b/apps/converter/locale/ru/LC_MESSAGES/django.mo index d3837c802dcf2809a1aeaadac208df55e6b18f05..86540df866bc54e3259e71f37d445290ce4fd12e 100644 GIT binary patch delta 5106 zcmZYA3v^9a9>?(=?=&Qms8>V|iB|~X6(Q>pIbb=v3F3?qSAcM5@%7da=gDVK@%QHaHHw*cgxFB>WU3uxlf?JOks& zPr$A?7rWpVd>B7Q>h+tOB-&C?i_+fM5u4#mY=?_59k*k1`~ubRf3P9Okcq)Wbg&n4 z%RGTCF&8zk71mwYl>GbEdA~8&NF-5k58Gg?CdQ=VFpS3MQ8Q4C4(`C#cnVeVE$o5y zs8#mE1k6X>UxR&cA2PY-Tk8+lgZ9l`65-f|Vbcebjue@(s19YLM!E`B@n+PF9mkIN zHFm;SrbqV&pvs>{ZkZJrh1>BVd>1?53G}Zaaf^i3Y7xV%hZ|9A`4+aqQq)X*g6h}} zTYevFk#`uT%G;m@@Cf$AiKzFAQA@N5wXI5!CQVff)?aINi30WT4mLpbMjePm?SbZ~ z7YE@W9EUt=)>=!^A%7OxhvqhF32U+e`e08~gL5zui%~PXuO;)Z7cNjBzp?&|8c{U! zsSzZj?q?u_He*rub5MI{DQc>Bqh{bFYL8q-4e&my!;KtwAgQR14DgenEi)6_;}Yv0 z)YMrfp$g0x{iLUr&vTOLj?wCUnd9Z5t7(@`_*f0BfHmWAs1 z64VmBj@k=5Q6nowb@U9X=ieeH*F=(WFcCE)gK;QMK`rSv)W8m)I&cLwV?QGG`At)D z`Y@!SJ`}T1n`Hy4fwwUokE2e(U0WW(@RfH^GmwfJ`J*;J&EB7j4&{ZYQ?u3PKd8R% zXZMrP@wtaRu>()3;%TUg=b(dy)~%?$aMF4aHPXM^`}eHztdo}N5q@;svQPtCjdgG< z)}?*3+ZOCcjrcHX%Fm*9{Y^~8pKuU%U_RBs98`r1u{*9tHoiHD4qiuftR}5%AhD?W z+n|=X5BhaHhLcbOORyG}BeQHO(2Lhl9U7DD?t$4zky(z~Go`2*IfVuIIjSRL`3muI zG+xwm%TSwi6YBZOj;z0W7P2?KLT!?otcQBu4AoEv)Qb~P9Vo^J3PARIq5;a5T{UrEre&C09Od{)`h9;mY&PMi=S&F@J4{9lH zAlt$Gf;t`Ty18GtOjH9eVnYmI3~oaQ52EV7h&s;xe~{4mZ_wQ}8Fh|_+5FR}DPM>j z5VHjf@DxU4Mh~~6W6&Z03~K6&QT4uq{5NN;I$~PNp2&T_nMgvLFdwxhdoc#fF#}Iw zIM(jvjw}k*!M3Ol^+%1=gQ|EwYNpoXKs<*!HPLDA{l}4QW_;L;_RVGzQ500*L-+w| z(_O%$_zP;Sj#6tqyo6fIudo%~M$JSt>(CSvQRNw^JvG&qKZ|S^^D;6fvmc{r-`pgj z5#L3f_XbRd{#v!bhcOM+!N*W*KE=8eSp~Bf_1>4Lk={W~efPeuW6>d>i?O&8**0bi zR-ga#B$`tY#eDNwHp!@|9fNwoXDzaBM2)lrHS*K8{4&OozisbF^mF%45;miJ1UAMQ zs6FyRKjvQ}+(bbOEJKYXi0a5S)Gn?0i2FyRwRIF~ihVY}9!Ha}Ld{V9{_X&JpgQ;@ zCSVS#gDY(L&i;OP(^XKQj=YCW@FHrB@1QEYhw6FK0Qb|`7qu5gphh+xTVf8X_1&0j^$z-`pX!ya|>@u=thT}U`22B1DPnKoZ!AJ~O_MNI|v#IJ36{9w1D&gf7+ zz?zBLGlkamsFCir_baTIk(u?Idn9z+l7_gaU<|e*pNX1*C8#~I1+^5Vs44%f4$d5$5muFp!sxN@r+&i!}R-s=vu9MJI{Tp=*!#PWu z^0ug{?1|buL$N+i$2ypYdTu`U#-&&vk6{>cdaJM6)+N?TTu3kxjm^s>_7X1=53WOj z$&nqKz5XDJCyB?2Dk2ov6q!)_2&wCV6Opm;mq=;B{zmAKeMvmHJ`Q{znb=_~*$N_; zNG4bjQ%LAKPRt~(5@msYQBC5vk<#@$;#pz>kx%G48kidu>;E&U)5K*JacS_nmJ=5U zFR_v+ApZCIkb*Y0Z~^|+rVpd`Zx-VmF~Zx{g>zoFQH!v@Jd%0))2YR6^HhL=mx+I7no;VixreWN~6T0!MYmH4$!f>M4=CvIkTn9*WBYsP~U<+4U zwU1v7OpZ?QZz8qXmX=_tO@E3X*>o?QNO)|1AMPN=6G7rJq8SlEJh=X16K8P+G1lg1 zV_jkqF<5^;-zPDjSVib+PyCViQy@AfF04F|5)+rcg?wK^*K>rvBb|vq5WgpKi1kDq zF^5PaIOS$nU~x=r$~&ZV=_9a*c$c_Byh2PT-XNYL5{R0C(x}+*{-ib#r^>FxJQEd{ z>6`8N@*Ll6k2BAkHzUtG-;k7CCvSl# z-4dhX1Qp9)ym)E`b_dLJfz2AH9 z@3H%7&(-xF?}g~V^@h?zBq&0R$@gFc4N7mcG4c2X-i$#p##G`o9E4kOHok&k*nfcA zpMZ(9^Dzf2aTKn^fw&L3uh+ayna_I2ARqTI*vtnD%o&w7te0qLN0($2bfHe)bxNSDb$4QLW-rVCLweh8JZ zt(b*x;RyWNUUx{7`pb|mQ;U&UkNt21X5cpTK1HRQiq@)%Y4*kCsI`0)hhh^d6Modd zj@teU7)V>wRDTd^0!dhig{be{)E@W- z^~DrMIRSH#F0;higbwXCWFMOMP)qnJmf%1(f*v>>Q?Uk>*|kaJUticyhwQSRN6qL8 zY6kttyRIi7lQuc1>r+sB=WbN0A4g?iJ8F+~peA?$HQ=kLi9|W>KpZa>o?*&yIR47| z1S<9WZTk#Pp{-73WGZR~OHl*dgxuTgMGf#B+y4b>(|wB?NFPS!U>qvL-V!Pr@kCVW z=c4vN4QfV9Py<|pO5I-Mq?!}x;NMZ12;t&HbWlq_)D^9AT&1?sd^+xC<8dK-@5 z`Q{LnLOyWWUP$57x=}tlSYfS3?STgCCe%#Z?e#;}9@G+f_@iT%ftuJ%4902a8c_piL0*EU(_a4owJ9&7 zJ{QhgNdt0F{drmT{Li36BfbaqfMxart*8MVMt$*;^?#@vhVk0d1Cx<`Xo^t%cc3P; z0F|l57=rZ}hHEe!H;y3xT9ci0=nHMA5BgENwgZFk1bPCDIfL44A7#70hX2M&+T+;D z%E&sLjXO~f(#}?YI4VP_$UiflKYYY2@>0=*T2VLtGqQioDI9~}qL!e5bz=F=G}Nj1 zE$WT-BI*I%*dPCfn(^1@U~ry$|8&%`8;g1o-D&mKQPKI`U_07TDL;lB2y+D&V{E>= z1dXVHZbk=RMWy~M>c-cw0Eh5L-pU`X^&_b3+fkeE4J6ZE^Bt9FIs!R^H(@M>;%%sz zRiOsB6g8kVsF}Wmy75s|ras5uuBB^$L%XCN;rbH8;XD)mQf`*WN^J7S!hp*g4ttU?WN7i#T0Py;+? z`~QnN-l3)LK%z>?e=Hs8bZCuBQ6rv=dR5+q+5`8YW>kks=tE_09}d9N=-`*AOoW%Y zzlOt5OIeGW&~j7;cAzrV;iaM*_Mlz}-y=ufj2iE@=b;|34q0}y1GW1c+Wkv$sLuatD$2la)L!U9?fMT@oa|BLuM?3_F)6PVF zaVDnWV$@8Ut-Db-JcxSWaZJHp+aGp|o1tXXvCBhc`d0KRg;i9vX%?d1V2v1z&8QEy z;23PP*Ds-m_E+gihHf#PxFA7ZsVB(Mt1G;$9+?Afx7CLgf(gYvN;KpKoqt zY~r)jR8|u;#7trlq0-@Nii{a~nA%&!N9v*|3o7-*`@{m`Nn$Z!d>5l*yu(zZJU|@% zp~jCoP9Um@3&dPP>}8e)#eXW z9woX6?Jn(z6U0-*?};ix>x6TW+I)qolx0AoF{Zdwi7D5eO>*FLQhhw zBRYMdQSq~0r}pF0WE-bylwzKb1VEBJ+x9&eLaZRl-JeSS!$o5ap`t^% znb_*fjgI%cjfBcFLT`?2Vgs>`s3q1DI%oG0MFhvlJn!2U9W!Y!H5DEI z7l{4DIpQ(mE@C4whe#&+5I-(&(, 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-03 22:25+0000\n" +"PO-Revision-Date: 2011-11-22 19:01+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" -"ru/)\n" -"Language: ru\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:10 msgid "file formats" @@ -631,7 +630,8 @@ msgstr "Joint Photographic Experts Group JFIF format (62)" #: literals.py:226 msgid "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" -msgstr "Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" +msgstr "" +"Portable Network Graphics (libpng 1.2.42,1.2.44, zlib 1.2.3.3,1.2.3.4)" #: literals.py:227 msgid "" @@ -913,22 +913,25 @@ msgstr "Путь к файлу программs GraphicsMagick." #: conf/settings.py:15 msgid "" -"Graphics conversion backend to use. Options are: converter.backends." -"imagemagick, converter.backends.graphicsmagick and converter.backends.python." +"Graphics conversion backend to use. Options are: " +"converter.backends.imagemagick, converter.backends.graphicsmagick and " +"converter.backends.python." msgstr "" -"Конвертер графических файлов. Возможные варианты: converter.backends." -"imagemagick, converter.backends.graphicsmagick и converter.backends.python." +"Конвертер графических файлов. Возможные варианты: " +"converter.backends.imagemagick, converter.backends.graphicsmagick и " +"converter.backends.python." #: conf/settings.py:16 -#, fuzzy msgid "Path to the unoconv program." -msgstr "Путь к утилите convert из пакета ImageMagick." +msgstr "Путь к программе unoconv." #: conf/settings.py:17 msgid "" -"Use alternate method of connection to LibreOffice using a pipe, it is slower " -"but less prone to segmentation faults." +"Use alternate method of connection to LibreOffice using a pipe, it is slower" +" but less prone to segmentation faults." msgstr "" +"Использовать альтернативный способ подключения к LibreOffice использованием " +"конвейера pipe, это медленнее, но менее опасно ошибкой сегментации." #: templates/converter_file_formats_help.html:3 msgid "Help" @@ -941,3 +944,5 @@ msgid "" "backend. In this case: '%(backend)s'" msgstr "" "Эти форматы поддерживают выбранный конвертер. Сейчас это: '%(backend)s'" + + diff --git a/apps/documents/locale/ru/LC_MESSAGES/django.mo b/apps/documents/locale/ru/LC_MESSAGES/django.mo index de2d31def323718107d732a8623f419f666060a5..af8dc744537c35975c64e1a036120c6e16f2f5c1 100644 GIT binary patch delta 5282 zcmZ|R33L_J9mnw-NJ0ppKo$rf44X+H3ok%`s3aj8$|?k*C?E~V%Yq?!W)ZO9W4Dw= z5CybY3Ws?dt=3jssYN_uYn4`8t@ity87TF%7yj>aXWq=c|GCS& zEPF2EFNY$6?{$paXeeiiZp5-^V-g~ax!hJ~jmhg^%y`Vld|Zcxcpk@LQb+gua?IxV z5c=>F%)%aV#*|L7YO>B){Vvu`H3nrevOgGdM z3`X5}hj)G|D&za{23(H0xB;0R^9CxBk5CD8xyfA+W{g4K)IpsD^JtWm<$<8`DvV`H|$!JS@WvsO!GM$rwd%!*CiF;YL(Hmv9Px;e9{e z3NqiE_>tu($7fOZy^T?L0a;Gw5{|)dP>GCY z{3CHIPQaZ(DjK5CQJHlk8+A~J8uEuwH>}4!_!tht{66jzJ%F0J<;ZlKCov0OM2*;G zWVFrSP>IF$bw@Y}m2fbbiZ1k_GR{E_)dbYGn~9o=a^$~Rz=zh%PK?H*sO@wTb^STi z8hQ)W?uV!;{nYat)PuFX*?HdtjYUNn-iGRU8ftE5BRj~fKsE3rvJ=f-)EYR642JnN z>b`#>ZJXAtKs{L|>iS`x6HtkjqY|5o@!J23sAx5A#7KM^osO`8rhj>6m|bvY)$`W6O|a;j!I+?s^Ml-gRfu|o<=ob zd;S(R^cPXreTJHGIx^z@KLole!Mo`geF7m!8K{Z^B`Wbi-wYVNe zJ=soVrgOhO3o5|^)O}O?G5*SQ1}9?Bj}a~C7;8BW zq!}{@|A-|xF`cc72k}uHp5gwe*f^2n{+Y&1!i5;ZFs?v9ZzpZP%lJ6v`sfqi_A&l! zO_R-@nT1nPbKi{0^t|VX$i3!k)FMkC=>9fLLe`x*>v;vWn7a-#hMdhX)b(Yk5nhcN z(XBWFp9xZ_pz;Zh!zujotixTHgM+h;`5p#P4ZZ03dsIhJL)@R!-grC56LBVP!m;>w z9FGOO#ZquR=3_H5J0|!qD%#JX&bEsFWkH^y5Scp0w&G?SO3gj8h0c2U3kFf_PvbTF_|7TN4mISZgON2u-i z4C;oXNZaOjxDC5A-r6O{Z~>miavXUFI|27$Z`@SKUsZSn{g^w_ebqmOne=bIrV@*3 zO!NjEf_ZobU%+-eMl!yJ8lg{63B`?e*T6v3;+lwh(pk6$pFmArD#H_t58(s267x_C zB)ACksi?sd$j&eqFcRa(8S^S8VI97QN}z}pr8%63>TnNoi@AU|VCJ3t?SR8kbG{6d z@GYa>#I+cr@=#TNNxOmLN6r7CoX&yoryg7sFpe38VJ$A&l*c-dx0Pp-5 z)B{aNO~C@x2yVwbd>vT^rgahHuM5T&xr;D>nH+CJWqb|?;YXN;-6xR@jzMj|)3_8b zVMnZDy!Ac^qJ_Ir*PTKo{wGu-SFkg73$lll`C!ygPQcl?67|Gausimj;&w0^V>q6H z9k2{L;XKr?S%-b_9BPQKpb|)A&nkgIs0S{nyNp0ev3-1{oT%WL6b!#ffG|vnO39bZZ-D9y*L2h z!l4**kGq=lQA0i!`McB1L?yZaN8&E;`^%{Nzs1ftV48d1C`aahI+X~%c$mcg`MckGs!zI8J%lIXwj;Wo3mhliQ4Nc2$chbhFc?`a)dZWEYtyI2>o9xS=8c) zUl1p~vustTl=G>Dx79s#{uW$LJ(+mUJ6Gt*W^#&;PfdYJ3qqr(MXWN6h$4bje9ReSpHqtVnGyyG9>YeXBOk?2Ltp?~L< zSjmA_H{dmB)!)L|wzjHj^J8p*-5uELv zSd0U`x~TE$Cp^1gkymfV8wp+s&elrz&OhKO3J5*iE5t!Uo*-rrD!gHx@*c-1&Yi4R!L1mb-h(qQ|p|nDJ!ci@mr-eB@J`@)%A5&O5f7drg!63 zv<+2QIezzIuZfbHIe{vFy+6aUZohVYpth#OUsvZZ&9VBX)YsG(SEZJwUDw{+%K8ec zq@uXG++TWK0=n8gn_Akm#kv#`{GVyolwF@?{rtdnsglNB6_s@s{~PN3Weru<+zNlS z<*zQDRaIGCZhhy`th$Ckpr*FoDlV({I}cy$x90l!D6XpY7pIoazk0`icVksnJ2^0l z#j}d*{25J4dc70TqH<2t=sppVH(kBy+6X3J_mrXAQ}(p+`O>qpET1nYD?9XMiWQ@S zVL86+CM&gHbm*1-X^HmB_QCKXVsZFk`*3)Py+6DpygFo$xHP4%$ujF`BR&>0`g$$Yu0k zzr@LFGZs4TOK6v7*@x{HEWSBRC-mNvL;ENVaK>(SnqO^&mtHq@q2q(%nsyWxv`pCc ze;%Pvka@D7rAu-kMcO$?tLokM9`1mBgr{7~vpYTMd3E9Q{L`=;;_Jh7OXZ-&6D|#} zbcSk)eSrE}j!5@AL!`Ek*+;nPXy}YDHuTq#iA`UO+Sf9)qcAQMo|F(;(l4p$<#A_Y Vq8M&>s6)4Aw~yE#S~O+ZzX4;HQr7?g delta 4457 zcmYk;2~btn9mnxMfAL$4y z6V&b>04nW{=@SiB+C zkI!N!yow{S4H;eQ$AVEuhN3#K7_}A}P*eE@_QdEOW*$sOjhqj4y~-YpzizmM0~&#K zs0(jJ^>hzvEwrG{JBr-fF5?1hL!IYiJWH_*3-BYHhF_v?G=yHv#0jYH-^1Q`t*75v zBo8>C3&nbzxlY0`+Lfpwo{w5oJ5h^ipW8l;`rSEfkDnsT#(s~J@SmuT?26M3%^(4noQ*#lSR=bHg_$_LrGI=Zp#Rj1|REiqe z*{F^#LY=o9)lvUyD!TAnsBN(eH3c7HUp$3cEPumre1O_U?fW?AcSWt81k{C7Q8&zS zEku@qO+j_+In@2?kg4?Bb}H-$YeoI=x5y5&Yp6NDhuqV`=#74ug6h~HKJ-L$Q0G^> zu0eIE5!Io+s0V66ExxlDhJU~~?f+|3#&F;s>IQlJoF5jUM#P8uL8*JZ9ChP)$g;5- z)Rb*T-FO#jDi5N5e*%MR1l6HWQ60I8Vcg&T;ht~@+ta>}y1)b1$JkpM@>tY`Jg6t~ zVg!yvjodiY?@LkV%|>0P3e~aaQHyu2dwd)Eb>SUU^t#`NT2zNoPxd=x2id<-BhWd; zxo|9Mq>@lmmw^#jjOv&Vb^cuUcr`}SUWy^@%vRzu+An(<{~9V^d7VEJv(wDppnV#* z;rMjtkH$58l6GE(*>v21_4p@z9hYW0+w4C$hxUX4&KtA|=hD7}S|jPat<=FWu1{q# z{?x6852oMV!Buz;8GRd(?O26cy_=A}*nZUcSFsCzhZ@07?8VWThzs#)^x;K(6T1)O zWrQE#c)aDOq6>L*9ZOI*T7f*AHDD2*!AgwCGnH%-z2#gr+Tz4#Tp5N9{Dd&riQ9X^~tY@$gC*f|?nz-X0e`zH1 zOZ#)AkJh`;`RiDLJ!x-1b+ifN@G@%3ZeehWMmgIr5qoO?XHemv`S^Gjx1x5%048!Z z4#jFbhHdEKWuX^R1oN^U)36E;;7p7w=C@db+I~B+0r#QS%J8wy-IwdWJ@7l!4-&^YPnwRKX;-1Ph1<8dFd&qCEF_3F=9nK@I&nEX2LYtXP|SJe4h>Mdw3J!D>`T zn=uzJU^;$_YcORhu%#+Rt zX5h257hv#7F^P8MH0S#LF_QKWKb5Xj#$Y^_A`9JWun#t)hV}}o1K*%J&~>^q5+2kL z7hx*S!f>p0zu$;DzXjFdlc@he-FEedu#$A32WDacYUmcC*2Z?!l$^pY_=)SEQ62jV zbzWy)8r?Au)zL|)DO-eItivp9MXj;h7^VH6#GZ-aKq@|g!%#h)8;b%p)pV2YO?%R)S?J zpA|$ax|RHjv?Do0Yv+e#A9=LY)0jfEJwG5TiAn}3*Zt2>sV05NK%(tG@dG|mIt{^XwpOK@aH%TFD$iq_S zR@S@z9A6}QX>}oqL}ji+@N*ZRd&rN;Z-Pghk9ZB_Z0h+WoD3%Kl05P#b9 f6UK!GZuriG)<;cCs6Q~MUm$W?Q)K;r%UAv%nC05e diff --git a/apps/documents/locale/ru/LC_MESSAGES/django.po b/apps/documents/locale/ru/LC_MESSAGES/django.po index 035feb5633..b6a7aeb2e8 100644 --- a/apps/documents/locale/ru/LC_MESSAGES/django.po +++ b/apps/documents/locale/ru/LC_MESSAGES/django.po @@ -1,23 +1,23 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: +# Roberto Rosario , 2011. +# Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-03 16:20+0000\n" +"PO-Revision-Date: 2011-11-22 19:16+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" -"ru/)\n" -"Language: ru\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:49 __init__.py:159 msgid "Documents" @@ -84,7 +84,7 @@ msgstr "" #: __init__.py:83 msgid "update office documents' page count" -msgstr "" +msgstr "обновить количество страниц документа" #: __init__.py:83 msgid "" @@ -92,6 +92,8 @@ msgid "" "enabling office document support after there were already office type " "documents in the database." msgstr "" +"Пересчитать количество страниц. Это полезно для включения поддержки уже " +"существующих офисных документов." #: __init__.py:84 __init__.py:85 msgid "clear transformations" @@ -309,8 +311,7 @@ msgstr "Документ \"%(content_object)s\", создан %(fullname)s ." #: literals.py:25 #, python-format -msgid "" -"Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." +msgid "Document \"%(content_object)s\" created on %(datetime)s by %(fullname)s." msgstr "" "Документ \"%(content_object)s\" создан %(datetime)s пользователем " "%(fullname)s." @@ -327,11 +328,11 @@ msgstr "Документ \"%(content_object)s\" редактировал %(fulln #: literals.py:33 #, python-format msgid "" -"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s. " -"The following changes took place: %(changes)s." +"Document \"%(content_object)s\" was edited on %(datetime)s by %(fullname)s." +" The following changes took place: %(changes)s." msgstr "" -"Документ \"%(content_object)s\" был изменён %(datetime)s %(fullname)s. Были " -"внесены изменения: %(changes)s." +"Документ \"%(content_object)s\" был изменён %(datetime)s %(fullname)s. Были" +" внесены изменения: %(changes)s." #: literals.py:42 msgid "Document deleted" @@ -388,7 +389,8 @@ msgstr "документ" msgid "" "This document's file format is not known, the page count has therefore " "defaulted to 1." -msgstr "Этот формат файла документа не известен, количество страниц поэтому 1." +msgstr "" +"Этот формат файла документа не известен, количество страниц поэтому 1." #: models.py:316 msgid "filename" @@ -526,8 +528,8 @@ msgstr "Документы в хранилище: %d." #: statistics.py:46 #, python-format msgid "" -"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d " -"bytes" +"Space used in storage: %(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d" +" bytes" msgstr "" "Использовано:%(base_2)s (base 2), %(base_10)s (base 10), %(bytes)d bytes" @@ -699,12 +701,17 @@ msgid "" "Page count update complete. Documents processed: %(total)d, documents with " "changed page count: %(change)d" msgstr "" +"Страницы посчитаны. Всего обработано %(total)d документов, из них количество" +" страниц изменилось у %(change)d" #: views.py:505 -#, fuzzy, python-format +#, python-format msgid "" -"Are you sure you wish to update the page count for the office documents (%d)?" -msgstr "Вы действительно хотите удалить документы: %s?" +"Are you sure you wish to update the page count for the office documents " +"(%d)?" +msgstr "" +"Вы действительно хотите пересчитать количество страниц для офисных " +"документов (%d)?" #: views.py:534 #, python-format @@ -729,7 +736,8 @@ msgstr "преобразование документа" #: views.py:551 #, python-format msgid "" -"Are you sure you wish to clear all the page transformations for document: %s?" +"Are you sure you wish to clear all the page transformations for document: " +"%s?" msgstr "" "Вы действительно хотите удалить все преобразования странице документа: %s?" @@ -839,8 +847,7 @@ msgstr "Ошибка редактирования документа введи #: views.py:1041 #, python-format msgid "edit filename \"%(filename)s\" from document type \"%(document_type)s\"" -msgstr "" -"редактирование файла \"%(filename)s из типа документа \"%(document_type)s\"" +msgstr "редактирование файла \"%(filename)s из типа документа \"%(document_type)s\"" #: views.py:1050 views.py:1076 views.py:1084 msgid "document type filename" @@ -883,9 +890,8 @@ msgid "create filename for document type: %s" msgstr "создание имени файла для типа документа: %s" #: widgets.py:26 -#, fuzzy msgid "document page image" -msgstr "страница документа" +msgstr "изображение страницы" #: wizards.py:34 msgid "step 1 of 3: Document type" @@ -905,8 +911,8 @@ msgstr "Далее" #: conf/settings.py:38 msgid "" -"Maximum number of recent (created, edited, viewed) documents to remember per " -"user." +"Maximum number of recent (created, edited, viewed) documents to remember per" +" user." msgstr "" "Максимальное количество последних (созданных, измененных, просмотренных) " "документов, запоминаемых для каждого пользователя." @@ -925,7 +931,8 @@ msgstr "Максимальный процент увеличения стран msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." -msgstr "Процент уменьшения масштаба страницы документа в интерактивном режиме." +msgstr "" +"Процент уменьшения масштаба страницы документа в интерактивном режиме." #: conf/settings.py:42 msgid "Amount in degrees to rotate a document page per user interaction." @@ -961,5 +968,4 @@ msgstr "" "Здесь вы найдете последние %(recent_count)s документов созданные или " "отредактированные вами." -#~ msgid "Page" -#~ msgstr "Страница" + diff --git a/apps/linking/locale/ru/LC_MESSAGES/django.mo b/apps/linking/locale/ru/LC_MESSAGES/django.mo index 29c3bb2d206896b3ca130837d68cebcc5aef5791..982203f193776ad495b8bb62d85e9d34edc71955 100644 GIT binary patch literal 8255 zcmbuDZHygN8OINTq7^{_Q33U|P}r5;yDt=|x7`*f1sW+dZ3T=Z?d-j?+rhgt%go%C zHIUF25Cwz~O-w}4@WBs8ZI>?HwzNci`9?A~;fuzXU_$($Mh(QT`1_x^FLUqS(h?^- z_dj#yInQ}s{?Bt}_Rkld^L@i{JLlz`_kGA14}AU{emLw$jJXP24z2}n2S>n1!8PDv z@YCQw!Aroi&o$;k@KW$|U2IUjbKu{{SU-!AFhxFn9%sN;3?O zf}<_;TKF6&JAMsb3cdqg37-G49Ipkh;Qn6l$6Z!n*p!~Q2l%MNC z{*1?uLL7m(ZcK#mxI@U z6%domRBJo|`7=-PqxnAswf@gQ`S~&k1mLKP?r%Z))dZENzqaoG+j@R3%4F9? zpzIh2&qC1}@Mi8SpE9NjJ`8RH-vSSSt0BuOa1mS%zTLueS!A61VNm(M4=jOCgZF~R z!ENBh7ZY1>8e9#&2+GbkK}<7mgExZjf_H$|5lrQMKlo+vD7YGY2V4mbL1N*Z;MHIX zVv>0t+=)NG1h;d40VL7-Rqzsc^$Pep_isSPE5K(-iu4=?nP&a~O3$A_+4XNw`FRhN zz1NWR>%euOcol<+$Frd1=fQFCSD@y-3ySv^Vd-59ei6JAyafzf<1d4_W_|}MpML~L zz`udw#b-#G@^&RZlG_M=3H%y(7x*YBxi>-n%v=0mvRh1eIg4ujHK6$X6;OQN+8V#7 zh4+J>Vfl`~QH7N7=$3P-|bsNxIE?&i0`g=ui%|Zu?ll#jTvG zB~s;L2sjR|1!XhTbBArA>{ZQBLM~?-7UwIRXLDZ5**+9I9T()_IH~$k4;bTA4t3nf zNr+v{%i!&tiqn;xq|W7ZBdA0CR&I4nt5H}B(jW>Gn?^R7@#56h zgYX*_yJBUs!rT=5b}nkzq|v(A8zj3WS@Y|D>K7(-HRV$`e1N$XyE55eHr9jcH*6Hz zbhmGV8E@LRQ&DWE8uhwOf^YhEPk_PElzToE#7Syr5h|OFvF~Av-03l8y z9zRaWA7QIU(?PWzqiEKTy)=r;=FZ4^Rb|;GxL-~ETG?zRc8S^U?#=eyQ89Sv@={xi z!mCpo`)MN%tryNQP;JckVT!5SJ51?@D^I+wx^&dwOttDKiSjr1z7ujTeSir*3G?4a z{(*)c&si5%m$I(0x;?FdPUv(-Iib@SLU=o2N~}i-c_biJemWHJAa@FVU0n0HOR$mP zAa$0zqSV&B)SL7YJrd0{RBgmD>FDIe4Kg#f0n54QOVrD`Aq6&x8gbQMs4lJnLjVw=VYUsX%*+ZUHWf!Rt_Lx#yEYsrrCt(dsD}pX!3r#L{jN0EwA&^ zG!7;kslPrqt7Bz(U0e0ebZ*w)8G19wl+E30*ZzaBsJAU9<{otyvAmFp4TjvCPFZxX zlES4+S9g*tZlo_`Z4NhSwP}#neWN~L{7~tufwjc$4bt7+t3f7psbyfT4}&|&aJ6nkzXuxhhcqf) z57LF`v~x(D@Ir|f?=4kPR24W0DmeD18+DI|9hz(Ezz3&T7QTvJ`I?=Zo&~k#6(Zkz zo0!m_RyCP0N=+1-ZgvZoN%7hatxSe{2J*eFS4iE<&{?%Jx?~it2l4^bj6O3j*XT08y~l0W0mpiOQWktM-eP- z^Y;W=et_JX%IX`g8Rb}ZhnJ+K9kCZCwB#tR*y&`?4Wo9QgBxdPF6Fqf9ZOKZAvT5rmaOPj)KRHHvs z?3&3S?U-7zabwxmdL#DgrCXzThE^2Ly4z&p+O;;noEQpMj*U)CjM=NMvbr2yJ~1|C zH`q~&IQQ!(#@mn9O{~_Xn=!g>Y}7vVP(B5j(P8F{F=u>unaRGFoy-np2ebKXvAMtb zl+8{sFyDMKTd>Uo&3)N%-SX@io1JX#*VE<`*#f8`_tKm_*L>1uhZ#KD+=qzM#NF}c zQxdn$$J|WRJDo@#L~FiUaS5KDVu=mr|5>A7DeLI{JNprKypp{tOSJTf?4ZpSvm=T} z^AY#Vxv6J|afSfA#`sBM@~Tuy#xj;Ia5c}YqgL*_sfy0yipsnMPU5bj`l@vgk1$_z z7Ro033ByMekwWYlS{jLLVTo{GIwbK@PjLGkZ$4wPAFv$DyZkBLr%iy#evG(sc8oYJ zVz>CvvUiCI`eOJ16J*f~@M#eW9#i}k;YEyU`H?3;13gSUqpyoIQoJ-oJ)bUppB_Z- z1kRJZJQUcu(A;lbjl7H#$C?MAaElUz2_wK6(j%wHh8TN@+#S(^h+?hFyzI*6S>UB^PzxmQ%W131^Aw2ePl(G< z9VL#rx?QU5lv)azJ)>!^$K-{X^H!YD%pTqlgHClqBg(GN09YkzzJT*gZ?`bq<^ySo zFN39uq|6N%pv!fTenWfYa?bY*WeclXHpBi*OrjaVss-y_4@!E6KtjbqDY_=BhD}d$ z{B!mnA|H-P2T3}->#3RSDASL*nDEFocbK>@?@hGnBNW(oVbwlyrrqpNC>d9m0|=Cd zSk>??2>9LRw{vbU(&oz6^#HVL6CmWS7S#W^lpXkZGVhG}3Ti2>!QM>bVaHEroikdK zAoM_9<7hkec#~U|`*lpqFQ^U}UC3T-9zb?6H{*yifPi)#In;boktXKORM)Y!l@XuT zPRTkf#yyP6J(5Yp_kixS0D&kJ8NqF9WT95H@g>))(6jyIY-BfO;a3=7ugP`yr$D=v zbz6yoss?=`JAuuQQ5(+@){5;kG@lmzI{iXD z?0aqxY(7m8Pi;{<^xank7S(RnCND~*7(-F{bLn!8kEOL4cdR{xg^B?IrY+)!Qtl?Y z2`#ttxt*rjNyCy*k%#A{tr#eowM5Vjxg;H+IIvP>17*b$$ACN}dcyq9H{mYj0t?-1 zfTnXreg>#_F9bcBh|SUNhbJGB?XaAx+?VEDuFSLig4nPNNeUhszVS=~3cqCvcfxkb89mpX>Y7}0qTHvLp-y*u`KpiQjvNzRmfpU@ku3{|UM z)E=M~ss@z5x>v0Jr$@X(NT9VTo-|H@Xn#V5Cn_rp`2LK0OFrH6GYg=r>z=AV z#s3AIf%76yZmYXI!!@)iY6qen8EuR08?{3|L6lc*q|(jL!9sg?&d$?GB}4AXmv)Co zB+Ev&#QMb#AbN(z=Pzq5;|n(fjPIqNB~|-qP{&1x{^IC)CSu|fA1lf>L0M27_;KMe z19;m%q_>$qmO>NvFAG&!;gb;Z^a*B1RVc5y-tM;ZrO#bfL_)m~wMp3AmuG9~_!&l4 K%CzIRef}RS08jk@ delta 1639 zcmZ9~UrbY19Ki8Y)GAa2E8;qV9zYy_bi#xTyUG5DnTgrd%w$VUW*A&elhLx?vV>%@ zh$gy_jAdu@ZOh(#@uAW+q6|pf9`NnlH)D*>C*#z``MN#q`@1bo;iUI|?m0bwe!p|h z(!1ZaW*&ss|EMT?cp7-V4k+~&-mldk z1>BCyDE%Lx%=@hP|GyZb9%Par>#Hyy(hxz(uni@EL6pEwqGULRui#hMg)_Jr=Zo#j z$WJ}uB^f?J*~I54^S?lu|38%Zc9MP|Lyu-YF3`|Q`0wCVd=npIFGd+%iziVsaqweI z<5673dXBA*Xl_&QB5hgtZ{a6SjPABk_11%%x*qD;bSkJ!!EprVZ4h`e2Rk@ zVwAKWN7>?GY{dzri~6b9ehqg}zm2j(_fU@JG48{c#rBq3_FuMSA7RRbA7Lks;4z#* zncyKxzh@``gtjWheNs)xajI671v~L=d>`qmGRVgGMgEsDa%p$@E%M_0+n~PK(2VSs zf6mghM_v>;&vqV}RL)NGkc8^sk<6q>0&9!xrraU9$Pzg5s8@O9;z|igma@f?rEH;} z4a%{|t(UCjcE83WMRrHdRtncfMR>SRere%ta=}>BU~+hT)JdfE*;I0TOn*7vTN*g=5_66R|>cL&NEKGU2L1ZDpZiHJ)}x%RY;} zT=RSNoh=FH>`>YnQHf+)kwUQMYN-3b-Zu{Dp8i;GpP8%Co4R{-Pj{?uf9}tkQvuT# zzBurMU9`8n3-&jgw+r5swmEN->XKdZrnS9cvwTe2MejWQW;Gv|?VP=CZ`rKBb!X~k zOl{;;Xo}%X<9%cEW-JnkF4(-bv);75&giUNu-USiZ8n#W+z$liOlQN9u9XZ6J5<`V zLe*8}0h!Y~>f8OTwQJ&*UMkud4X@&XVz>DtzXiH*O1<{-`!DqxI%R^w|Go8HADm diff --git a/apps/linking/locale/ru/LC_MESSAGES/django.po b/apps/linking/locale/ru/LC_MESSAGES/django.po index acbfae0bc4..5a02a2120d 100644 --- a/apps/linking/locale/ru/LC_MESSAGES/django.po +++ b/apps/linking/locale/ru/LC_MESSAGES/django.po @@ -1,76 +1,74 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-04 10:53+0000\n" +"PO-Revision-Date: 2011-11-22 18:47+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" -"ru/)\n" -"Language: ru\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:11 msgid "View existing smart links" -msgstr "" +msgstr "Просмотр отношений" #: __init__.py:12 msgid "Create new smart links" -msgstr "" +msgstr "Создать отношение" #: __init__.py:13 msgid "Delete smart links" -msgstr "" +msgstr "Удалить отношения" #: __init__.py:14 msgid "Edit smart links" -msgstr "" +msgstr "Редактировать отношения" #: __init__.py:16 msgid "Smart links" -msgstr "" +msgstr "Отношения" #: __init__.py:22 msgid "smart links actions" -msgstr "" +msgstr "действия отношений" #: __init__.py:23 __init__.py:25 models.py:21 views.py:105 msgid "smart links" -msgstr "" +msgstr "отношения" #: __init__.py:26 msgid "smart links list" -msgstr "" +msgstr "список отношений" #: __init__.py:27 msgid "create new smart link" -msgstr "" +msgstr "создать отношение" #: __init__.py:28 __init__.py:33 msgid "edit" -msgstr "" +msgstr "редактировать" #: __init__.py:29 __init__.py:34 msgid "delete" -msgstr "" +msgstr "удалить" #: __init__.py:31 msgid "conditions" -msgstr "" +msgstr "условия" #: __init__.py:32 msgid "create condition" -msgstr "" +msgstr "создать условие" #: forms.py:48 msgid "Pages" @@ -177,7 +175,7 @@ msgstr "разрешено" #: models.py:20 models.py:25 views.py:256 views.py:287 msgid "smart link" -msgstr "" +msgstr "отношение" #: models.py:26 msgid "The inclusion is ignored for the first item." @@ -213,121 +211,120 @@ msgstr "не" #: models.py:37 msgid "link condition" -msgstr "" +msgstr "условие ссылки" #: models.py:38 msgid "link conditions" -msgstr "" +msgstr "условия ссылки" #: views.py:32 msgid "No action selected." msgstr "Никаких действий не выбрано." #: views.py:47 -#, fuzzy, python-format +#, python-format msgid "documents in smart link: %(group)s" -msgstr "Документы в группе: %(group)s" +msgstr "документы в отношении %(group)s" #: views.py:65 -#, fuzzy, python-format +#, python-format msgid "Smart link query error: %s" -msgstr "Документ группы запросов ошибка: %s" +msgstr "Ошибка запроса в отношении %s" #: views.py:76 #, python-format msgid "smart links (%s)" -msgstr "" +msgstr "отношения (%s)" #: views.py:90 -#, fuzzy msgid "There no defined smart links for the current document." -msgstr "Для текущего документа не выбрана группа" +msgstr "Для этого документа отношения не определены." #: views.py:124 #, python-format msgid "Smart link: %s created successfully." -msgstr "" +msgstr "Отношение %s создано." #: views.py:131 msgid "Create new smart link" -msgstr "" +msgstr "Создать новое отношение" #: views.py:144 #, python-format msgid "Smart link: %s edited successfully." -msgstr "" +msgstr "Отношение %s изменено." #: views.py:153 #, python-format msgid "Edit smart link: %s" -msgstr "" +msgstr "Редактировать отношение %s" #: views.py:168 #, python-format msgid "Smart link: %s deleted successfully." -msgstr "" +msgstr "Отношение %s удалено." #: views.py:170 #, python-format msgid "Error deleting smart link: %(smart_link)s; %(error)s." -msgstr "" +msgstr "Ошибка при удалении отношения %(smart_link)s; %(error)s." #: views.py:180 #, python-format msgid "Are you sure you wish to delete smart link: %s?" -msgstr "" +msgstr "Вы действительно хотите удалить отношение %s?" #: views.py:193 #, python-format msgid "conditions for smart link: %s" -msgstr "" +msgstr "условия для отношения %s" #: views.py:216 #, python-format msgid "Smart link condition: \"%s\" created successfully." -msgstr "" +msgstr "Условие для отношения \"%s\" успешно создано." #: views.py:223 #, python-format msgid "Add new conditions to smart link: \"%s\"" -msgstr "" +msgstr "Добавить новые условия отношения \"%s\"" #: views.py:243 #, python-format msgid "Smart link condition: \"%s\" edited successfully." -msgstr "" +msgstr "Условие отношения \"%s\" изменено." #: views.py:250 msgid "Edit smart link condition" -msgstr "" +msgstr "Изменить условие отношения" #: views.py:257 views.py:288 msgid "condition" -msgstr "" +msgstr "состояние" #: views.py:274 #, python-format msgid "Smart link condition: \"%s\" deleted successfully." -msgstr "" +msgstr "Условие отношения \"%s\" удалено." #: views.py:276 #, python-format msgid "" "Error deleting smart link condition: %(smart_link_condition)s; %(error)s." -msgstr "" +msgstr "Ошибка при удалении условия %(smart_link_condition)s; %(error)s." #: views.py:290 #, python-format msgid "Are you sure you wish to delete smart link condition: \"%s\"?" -msgstr "" +msgstr "Вы действительно хотите удалить условие отношения \"%s\"?" #: conf/settings.py:11 msgid "Show smart link that don't return any documents." -msgstr "" +msgstr "Показать отношения без документов." #: templates/smart_links_help.html:3 msgid "What are smart links?" -msgstr "" +msgstr "Что такое отношение?" #: templates/smart_links_help.html:4 msgid "" @@ -337,27 +334,10 @@ msgid "" "some manner to the document being displayed and allow users the ability to " "jump to and from linked documents very easily." msgstr "" +"Отношение, в оригинале smart-link, представляет собой набор условий, которые" +" используются для поиска документов отвечающих им . Результатом такого " +"поискового запроса является список документов, относящихся к текущему, и " +"позволяющих быстро переходить от одного к другому. Условия строятся исходя " +"из содержимого документа и метаданных." -#~ msgid "group actions" -#~ msgstr "групповые действия" -#~ msgid "groups" -#~ msgstr "группы" - -#~ msgid "group document" -#~ msgstr "group document" - -#~ msgid "document group" -#~ msgstr "document group" - -#~ msgid "document groups" -#~ msgstr "document groups" - -#~ msgid "group item" -#~ msgstr "член группы" - -#~ msgid "group items" -#~ msgstr "члены группы" - -#~ msgid "document groups (%s)" -#~ msgstr "группы документов (%s)" diff --git a/apps/permissions/locale/ru/LC_MESSAGES/django.mo b/apps/permissions/locale/ru/LC_MESSAGES/django.mo index 22f23c146cbcf41badd18722844b4914ab3d7eb5..8f8ad487ab18ee9ef8a5d9d5e3740bc3394583f4 100644 GIT binary patch delta 1549 zcma*mOKeP07{KvUGo9+gcvV}i>Q%~&P^L+%s#q8i)ubCGSTq$^pIV(e6^TcyBK1m| zI1wyF*diK?wn59zO3oDv3$gM@*jTak|E?Kr5pgo-{_dmqe2;tjy!c#k-@AGK%Zd?Z zE@B=?Q)&a=nZbc^)u&WCUPB9S;1+y_QS|$jYQXJShu3fizQ-I~%gf?M%)&a9^%^4q+7zVl|FqHh#wd`Z&zPER=p2B<9QN@DG}1dm~#EO?!hQXE5R*;_2cFDL;5vy@tZB`D7;Q92S$x*I84wWBQDgVITj z68JWj;WG^3$K?IlLHaKlEo0T0Sc!7I2_--S7UTZp^L}K1de6XX<6>kldId-^5|{@5 z8q#t}PClg!Nl1$NIp{w{dRgbC?xAcD8M47rV+ALY965L!Nh*=5BykzbnX+$|GUdBl zOum5ENhv~xe74k(|F-b9>i+Wf(knE!a~lmDddNng(_(r)^e+?H5#S6sC=JJ#g;dVXLq-CJ5; z4OHpZf!^#$WOYS_6^YbTROy`=)=asmuBlx2;CRN~v_3QXN6qG;dF&4TR`;}$E%&r} zWD=GcHBU^!B-{bZOt}4K*xWbcR_WA&!cJ*95vH`zGEXO84NiM^Sa)Q;sCUnpad*Is zG82}!>Ilb#dsc3_7yq|k%3N|U=r>s<|NUKRvR`K2NR^?Ba@OQeNxNK`$!AA%Li%pb gMB0QN$}Y(LTNiZutgmytI>yZiZ5fu-^`2nk58LELDF6Tf delta 1534 zcmaLVOKeP07{KwK(;>3D3g;ocAt5+M??VMi?ezuPN)C?_-bckj99e&0FYIY&z$mnJ`q4V+Q5 z82=LfjTuVK!)=*dXp6IyT80hSjK^>#zQ=VqGoaK4Jc0%I)%OSH@tm2h6h9T_G6o|! z31hfKsia!OO(PxqF(02|5MSX~e1{U~8y4a(|9uXF$e{|6E>(mfoQx5S`tRpsF3_bt;aFsS8d!#qTMJH=s^j5)_*>ava+i<8tUY@z>6j#8^IPSzW^ z7f)g(S@&Qc7Gpihipj55b0a0OaU%9$4PL@Ze2Y@*5VMfLo3IEUpiJl`PQi~TfiuIb z9?NhPHsEAz_Mf++w_r@lO%FFrUR^*5bQz^o&ruS6!WjOMzm6O)?;DB7n4~wuavuIP2}~YuBGM--k>H#+Z+qmB%J!7;mq|(+-;Z~d zg-A8W4eFc9y_^j>fYPKI(jv0|GGjRqn!mJZ{diX?=bt8rPnsMi*?-w8w%t1$Di+_E z*wE41ZdKTIIu`G;cI>q5gw<7H>rI`O-7zDf+gf*7I?-n7?N(R&7Tey^*`cGRI#5_x zIrMY$D67#d57=f}prka>Nw|N-HlG7A8CAZytF!%o%QfX5aZ*m7bI(bcE4j~-&K(}_yWQ@7 z=azGiYs%?$PcR^@-Gfe=4zE)?59MPN_d>B}o$I%1~bwIIM>Nd|J5to#>|3nP@`U4B*Gz(Fug p1<_0jqzmFhd!Ly3;qO5vl6HDcLpWkqjH-{g-F{Kh?y3IDs^7FKWSIZ} diff --git a/apps/permissions/locale/ru/LC_MESSAGES/django.po b/apps/permissions/locale/ru/LC_MESSAGES/django.po index 32334c0885..b30891a80f 100644 --- a/apps/permissions/locale/ru/LC_MESSAGES/django.po +++ b/apps/permissions/locale/ru/LC_MESSAGES/django.po @@ -1,23 +1,22 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: +# Sergey Glita , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-19 21:05+0000\n" +"PO-Revision-Date: 2011-11-22 18:57+0000\n" "Last-Translator: gsv70 \n" -"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/" -"ru/)\n" -"Language: ru\n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: __init__.py:12 msgid "View roles" @@ -68,14 +67,12 @@ msgid "delete" msgstr "удалить" #: __init__.py:26 -#, fuzzy msgid "grant" -msgstr "Предоставить" +msgstr "предоставить" #: __init__.py:27 -#, fuzzy msgid "revoke" -msgstr "Отозвать" +msgstr "отозвать" #: api.py:22 msgid "Permissions" @@ -127,56 +124,49 @@ msgid "role members" msgstr "участники" #: views.py:61 -#, fuzzy msgid "has permission" -msgstr "разрешение" +msgstr "имеет право" #: views.py:142 views.py:201 msgid " and " -msgstr "" +msgstr "и" #: views.py:142 views.py:201 -#, fuzzy, python-format +#, python-format msgid "%(permissions)s to %(requester)s" -msgstr "" -"Разрешение \"%(permission)s\" предоставлено %(ct_name)s: %(requester)s." +msgstr "%(permissions)s для %(requester)s" #: views.py:152 -#, fuzzy, python-format +#, python-format msgid "Permission \"%(permission)s\" granted to: %(requester)s." -msgstr "" -"Разрешение \"%(permission)s\" предоставлено %(ct_name)s: %(requester)s." +msgstr "Право \"%(permission)s\" предоставлено %(requester)s." #: views.py:155 -#, fuzzy, python-format +#, python-format msgid "%(requester)s, already had the permission \"%(permission)s\" granted." -msgstr "%(ct_name)s: %(requester)s, уже имеет разрешение \"%(permission)s\"." +msgstr "%(requester)s уже имеет право \"%(permission)s\"." #: views.py:167 -#, fuzzy, python-format +#, python-format msgid "" "Are you sure you wish to grant the %(permissions_label)s %(title_suffix)s?" -msgstr "" -"Вы действительно хотите предоставить разрешение \"%(permission)s\" для " -"%(ct_name)s: %(requester)s" +msgstr "Вы хотите разрешить %(permissions_label)s %(title_suffix)s?" #: views.py:211 -#, fuzzy, python-format +#, python-format msgid "Permission \"%(permission)s\" revoked from: %(requester)s." -msgstr "Разрешение \"%(permission)s\" отозвано у %(ct_name)s: %(requester)s." +msgstr "Право \"%(permission)s\" отозвано у %(requester)s." #: views.py:214 -#, fuzzy, python-format +#, python-format msgid "%(requester)s, doesn't have the permission \"%(permission)s\" granted." -msgstr "%(ct_name)s: %(requester)s не имеет разрешения \"%(permission)s\"." +msgstr "%(requester)s не имеет права \"%(permission)s\"." #: views.py:226 -#, fuzzy, python-format +#, python-format msgid "" "Are you sure you wish to revoke the %(permissions_label)s %(title_suffix)s?" -msgstr "" -"Вы уверены, что хотите отозвать разрешение \"%(permission)s\" у %(ct_name)s: " -"%(requester)s" +msgstr "Вы хотите отозвать %(permissions_label)s %(title_suffix)s?" #: views.py:278 #, python-format @@ -204,5 +194,4 @@ msgstr "" "Список существующих ролей, которые автоматически назначаются вновь " "создаваемым пользователям" -#~ msgid "state" -#~ msgstr "состояние" + From 4b03a1f28940de5724713507e02bed45b67f839f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 17:04:26 -0400 Subject: [PATCH 130/220] Spanish translation updates --- .../converter/locale/es/LC_MESSAGES/django.mo | Bin 4255 -> 5608 bytes .../converter/locale/es/LC_MESSAGES/django.po | 52 ++++++++++-------- apps/linking/locale/es/LC_MESSAGES/django.mo | Bin 5732 -> 7304 bytes apps/linking/locale/es/LC_MESSAGES/django.po | 24 +++++--- apps/sources/locale/es/LC_MESSAGES/django.mo | Bin 8120 -> 8603 bytes apps/sources/locale/es/LC_MESSAGES/django.po | 26 +++++---- 6 files changed, 58 insertions(+), 44 deletions(-) diff --git a/apps/converter/locale/es/LC_MESSAGES/django.mo b/apps/converter/locale/es/LC_MESSAGES/django.mo index a7df0888f2fff1d175b302d9b2f5815946fa8dcd..30ce640c0dfda51f7987439c045f019f464f7752 100644 GIT binary patch delta 2557 zcmb7^TWl0n7{^bgEVQ(8^M;jj5Un8F%5EtFVpLkhMjD$!y*9?v+1c%c*_m->7A$Di zdx9oJohU|BLV__wn;7eh4w?C&6?Qk{CPw2`N^ON_XYjz*&Qxj+TnDd%o8Yx@1l|Bcn1ipw`S1vA zgWtjR@DDf(c4TVof=#@yfgMU!)xAtsvQUCqn80TE6?_YR182i0*<~p#!A7_T&V_qn zEBp}N0zZW}!;??~{R_6kW;R(4SJXKK+c;nCW+IvIgNxu7P#jLcW$+xl2F@pJ$*==T zhHK$GxD9G(!w&dr{e7bT`w1wCoq|2Eh3po}ehhkwJ>a2b7*N<2E3`pbcP zS$G5PhvJx}t{V103GiVky&i!Qmqxg*WbGq)_xy>dDeHq4R8WVV825? zRT=uqR4sy%SZ9@qWY!I(M7^*AUHA$-4W*=G^g%WVp!D=5D3yB+%7**u>z~y5IYch% zODKUKgL2?$NT<^z#lI?>Uutsg`9|HrKn`jhLrQonLkuaT0cT;CEMRhwnA~@{dOh-j zNsFXPViKg7R6}l?7!?xz*GvSqiXp<19?I2|$X7FHXKL5;ls1WpPQ;`dq6sOxXhE!- z!T+(ewel|N7hB5^!P4#2mWXUMQz;GNOs|~?7+MU+8<=T2{ zB?$a5*4xGdTj$apl5ZP7XzCvrtZkQ!&HQ>puj>SQz(m_se|m&v0@+Lrn37{{*MoK# zIZb(zPKEv@a%dWU>Q2>Il})+HBTyOTFF?QJF=)3L8(yepn>`Q8p4 zgnlVB<*vzzOlN~@c4}+fcv&qGc(KXqaoctMo!K;{QP&ViWXgeSM{4NuAEzJIeEh&z zPCP!%tF~wI{j6iv;mFp;jqT7gv8~H?Jmwd)U)03r*;ZOi0^Z_`hW10nqGJ(we&iQp{fOfg{GCxvW^!2m zlB}=5ty^t2t{qNIq~|!2U-E2gTgOl(PFIX&*^!SlE(kPTt&6s6@}1U+hU!4Yj^fZn z+6pTLK%ka0O}wUTLI?foaqZcq&{zN8C0p~rGgYv3<6q7#a^Qs%l8tkJsSd}E>+CY2 zwq0GGIvo22$)F}~XGba_bZtMAcF9arHS1hS9al#EthOWE4@PL&L&Jd``rHi9Pjwxj Y4Q56c4T+^mUl4gFZGTtNKJSHp01!VKO#lD@ delta 1213 zcmX}rJxo(k7{>8aEp4S(%BPAV7Zng&v_Ofpk-?yohLOZXV-OpygxY{k3^1_aU^o(k z3@j$bgy>KiG%?ZW&_UF}#1IMSqPXZ{!Xkg6Vgl>&EY{&g+>2wVu`^hOFVT-5TtDM3?l-U%e_{l~WvpS$ zq&Y=nmX0(A@GmxFna>!WHEp;Xqj(6Ds101ggE)@+aTfRC6SqH)hq?cOwHRbq+Mt7a zz6-;wZw6>MbX>+(oO16U6&^4qkIZ3Kk)QeM-fyBN{*4ZL*?k6EP#eF8)i{qDw}gu1 zGpxW@=wp4eLPG;Sp&ndCo$wnH46}t_NXs^A;A(j>72i?MZKF?|F={YL)wou{6C1=*bU@ovRrhs zDZGu3Q4weg7ss`sQkg`~U`~gLza|=R|G46sMxtu6sEtja7Me#gQ7Ag8UZ@?#+rm|+ zRL&K>QqefA(Lz<4RWzp}8C3pDMLX43#~OuCQT zl>Zlf0g7m;oS>mpspx=xMAqz~#;D4vUL=)cMGBvsLfS@cryi#|ROPk7_LM!at-b~O z&X@NO4`pwqZ)WUA{{=e{Xv{4KA|5+f{=!ZN*MqS{M_0n>>`lhwcC^9?#7;V~c(OZ| zo2%IH*p1LryHNSM{!D6ocr2YAPQS@zoU17(JvwwPm9b0VAv;kO&AqQ$@>pN(n!R2( F^$#wVd{zJe diff --git a/apps/converter/locale/es/LC_MESSAGES/django.po b/apps/converter/locale/es/LC_MESSAGES/django.po index c6ce0d7469..68d184d9c0 100644 --- a/apps/converter/locale/es/LC_MESSAGES/django.po +++ b/apps/converter/locale/es/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-07 04:30+0000\n" +"PO-Revision-Date: 2011-11-22 21:01+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" -"mayan-edms/team/es/)\n" -"Language: es\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:10 @@ -137,11 +136,11 @@ msgstr "Microsoft Windows bitmap image" #: literals.py:70 msgid "Microsoft Windows bitmap image version 2" -msgstr "" +msgstr "Imagen de mapa de bits de Microsoft Windows versión 2" #: literals.py:71 msgid "Microsoft Windows bitmap image version 3" -msgstr "" +msgstr "Imagen de mapa de bits de Microsoft Windows versión 3" #: literals.py:72 msgid "BRF ASCII Braille format" @@ -157,11 +156,11 @@ msgstr "Muestras crudas de color cian" #: literals.py:76 literals.py:181 msgid "Magick Persistent Cache image format" -msgstr "" +msgstr "Formato de imagen Magick Persistent Cache" #: literals.py:77 literals.py:78 msgid "Continuous Acquisition and Life-cycle Support Type 1 image" -msgstr "" +msgstr "Imagen de Continuous Acquisition and Life-cycle Support tipo 1 " #: literals.py:79 msgid "Image caption" @@ -173,19 +172,19 @@ msgstr "Archivo de imagen Cineon" #: literals.py:81 msgid "Cisco IP phone image format" -msgstr "" +msgstr "Formato de imagen de Teléfono IP de Cisco" #: literals.py:82 msgid "Image Clip Mask" -msgstr "" +msgstr "Image Clip Mask" #: literals.py:83 msgid "Raw cyan, magenta, yellow, and black samples" -msgstr "" +msgstr "Muestras crudas de cian, magenta, amarillo y negro" #: literals.py:84 msgid "Raw cyan, magenta, yellow, black, and opacity samples" -msgstr "" +msgstr "Muestras crudas de cian, magenta, amarillo, negro y opacidad" #: literals.py:85 literals.py:86 msgid "Canon Digital Camera Raw Image Format" @@ -851,7 +850,7 @@ msgstr "" #: literals.py:295 msgid "GIMP image" -msgstr "" +msgstr "Imágen GIMP" #: literals.py:296 msgid "Adobe XML metadata" @@ -875,7 +874,7 @@ msgstr "" #: literals.py:303 msgid "Raw yellow samples" -msgstr "" +msgstr "Muestras crudas de amarillo" #: literals.py:304 msgid "CCIR 601 4:1:1 or 4:2:2 (8-bit only)" @@ -907,22 +906,25 @@ msgstr "Ruta de archivo al programa imagemagick." #: conf/settings.py:15 msgid "" -"Graphics conversion backend to use. Options are: converter.backends." -"imagemagick, converter.backends.graphicsmagick and converter.backends.python." +"Graphics conversion backend to use. Options are: " +"converter.backends.imagemagick, converter.backends.graphicsmagick and " +"converter.backends.python." msgstr "" -"Manejador de conversión a usarse. Opciones son: converter.backends." -"imagemagick, converter.backends.graphicsmagick y converter.backends.python." +"Manejador de conversión a usarse. Opciones son: " +"converter.backends.imagemagick, converter.backends.graphicsmagick y " +"converter.backends.python." #: conf/settings.py:16 -#, fuzzy msgid "Path to the unoconv program." -msgstr "Ruta de archivo al programa de imagemagick, convert." +msgstr "Ruta de acceso al programa de unoconv." #: conf/settings.py:17 msgid "" -"Use alternate method of connection to LibreOffice using a pipe, it is slower " -"but less prone to segmentation faults." +"Use alternate method of connection to LibreOffice using a pipe, it is slower" +" but less prone to segmentation faults." msgstr "" +"Utilizar el método alternativo de conexión a LibreOffice con un tubo, es más" +" lento pero menos propensos a fallos de segmentación." #: templates/converter_file_formats_help.html:3 msgid "Help" @@ -936,3 +938,5 @@ msgid "" msgstr "" "Estos son los formatos de archivo apoyados por el servidor del convertidor " "seleccionado. En este caso: '%(backend)s'" + + diff --git a/apps/linking/locale/es/LC_MESSAGES/django.mo b/apps/linking/locale/es/LC_MESSAGES/django.mo index 830a4f7e41aa660268caa53dfecfebd3b2201f13..17ed6df31e37e19ff86b27e6a6496a794702ad59 100644 GIT binary patch delta 2796 zcmb7^S!`5Q7{?EEVJWm_QzT`~ z2Ule;O)eiWv`t7I^3-T!9C)Oh56xB@(*)~bJKO{pz<#(Ao`BQfuka37HpZCAa3-7q z=fNp(Bdmo_!Utg*E;A-;PSI&#;uolmHDisbfU_ZYnijYaE==eoJOpLPAe;&RfOBB= zxFVOp*^D2DRd7GtHp-ZTu$A$*n@N!yK{EWk=9Q`JsgYzbaQm`K?6)!+3dIKuN z??8ES4&Dtfz#4c3O7S(Q$jz!YW;(2g_rW%ZO=f2@A3=WR6+T&A@ERQ%@HUjEc}N+U z(@+My52g5HD9^rxO4awt_|Ig04428UDNu$ihF=r%m2f%ZsgsP^0w03+!&fH}|IKtR zGEomLl_Rc&3T+C`g$I)HTTq^!hc3Jfb$&C}=-dF*xzkW7xd>(WCAby-1l!@tsm64| zcq;LKfX*o<6soHUE%BbucnfTW&q0>VG5F#rW6r=OjJxhMrUUMS7vOtv0KQE8ReY90 zQcf&dhBIhUbhoK^OG#Q_PO^mbW>8LoaK%!~>f-gz(OZNpL)6wFa!~0}>NX*Yh|*jq{k$Ht4pGxT-Qq&8SeQw-@LUuXvQr4- zdZ@qO7Gx>10_jAQbA`XOsX#X(D#%tuX&q_>|Mgat6Xo$Xzq_fwHdbBg;rrp>rIbhce zUsXKYaT|x*Y-7}sYp!@{{B?tJM=P4LU11o6MP;79t5jWyw#Mdy-8*FWj^X*1sNFU; zySktyns07;6S_;z|MOJtlZp)w_XK-O6~{eJY*T?hH@2Z0XF}gP{yrwUGrg`Kqv_G% zAYON-7!unZx=!xt%DQR)T2VZ;QhVb{?ukm9n^xIXKC~nMSfyV!V<>4m2~TO(8uK5H z`+ao9;)QL?mgi4SSUM`(Ie6Sjd7!+P=*Lr^JroCM_;3k^%Ww!-3Tb@fen30!wfhgLoZ_@IF@IbMO8)MJIYO!u2b^Ssef3B*t^i25=tB@LXQHW0z5VzKt9qqr8wFn~`{ zfnTFC@e5btBGwb%0{p4~TTu`8<8nNT`aln=1LsjA97G=uA>XiJlsxdR zr;x*DXwx#Kned)Zd-vy2DK4V73RH&m zSnb(~n#w*5;T^m{+(!ZOALYirVzb@Yi_ZRPyrLD z4h*2)yM)BByQqOYK~3>2ZoxSugq4TLzaB*BmOdCoeQ+0U#CGrgS=7k;yz5b{;rb?O z>ZVY;;Vr5obEs4=U<(FWAbPI@^rf6`%%dF^XCDQ<|Dh)M{$7nMSEiJSpP?haz z+&!$RA--FPaen)Ojb~vsQ(x3qFDNd*1y^2^o6^+H5wIVgLUN=rps1PHKJ`) z&7BsMil!~@o~5_1PPJ_{UD~EwsmiFbr=n?9ru2vB4!Z#~m)d$uMJd!4(c-D|ZffCF zQk_)JMW@SO>U{U_aTanrQpfX7WTt)={P1NrG_}NHsgHqJhV!O)!f7lHInPQeoRQ#R RXCc&+a>DbOsqwP+zJIhoep>(l diff --git a/apps/linking/locale/es/LC_MESSAGES/django.po b/apps/linking/locale/es/LC_MESSAGES/django.po index 9253cbfc36..653a34abd0 100644 --- a/apps/linking/locale/es/LC_MESSAGES/django.po +++ b/apps/linking/locale/es/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-22 15:44+0000\n" +"PO-Revision-Date: 2011-11-22 20:56+0000\n" "Last-Translator: rosarior \n" "Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" "MIME-Version: 1.0\n" @@ -263,41 +263,42 @@ msgstr "Editar enlace inteligente: %s" #: views.py:168 #, python-format msgid "Smart link: %s deleted successfully." -msgstr "" +msgstr "Enlace inteligente: %s eliminado exitosamente." #: views.py:170 #, python-format msgid "Error deleting smart link: %(smart_link)s; %(error)s." msgstr "" +"Error al tratar de eliminar enlace inteligente: %(smart_link)s; %(error)s." #: views.py:180 #, python-format msgid "Are you sure you wish to delete smart link: %s?" -msgstr "" +msgstr "¿Está seguro que desea eliminar el enlace inteligente: %s?" #: views.py:193 #, python-format msgid "conditions for smart link: %s" -msgstr "" +msgstr "condiciones de enlace inteligente: %s" #: views.py:216 #, python-format msgid "Smart link condition: \"%s\" created successfully." -msgstr "" +msgstr "Condición de enlace inteligente: \"%s\" creada exitosamente." #: views.py:223 #, python-format msgid "Add new conditions to smart link: \"%s\"" -msgstr "" +msgstr "Añadir nuevas condiciones de enlace inteligente: \"%s\"" #: views.py:243 #, python-format msgid "Smart link condition: \"%s\" edited successfully." -msgstr "" +msgstr "Condición de enlace inteligente: \"%s\", editada exitosamente." #: views.py:250 msgid "Edit smart link condition" -msgstr "" +msgstr "Editar condición de enlace inteligente" #: views.py:257 views.py:288 msgid "condition" @@ -306,22 +307,27 @@ msgstr "condición" #: views.py:274 #, python-format msgid "Smart link condition: \"%s\" deleted successfully." -msgstr "" +msgstr "Condición de enlace inteligente: \"%s\" ha eliminada exitosamente." #: views.py:276 #, python-format msgid "" "Error deleting smart link condition: %(smart_link_condition)s; %(error)s." msgstr "" +"Error al tratar de eliminar la condición de enlace inteligente: " +"%(smart_link_condition)s; %(error)s." #: views.py:290 #, python-format msgid "Are you sure you wish to delete smart link condition: \"%s\"?" msgstr "" +"¿Está seguro que desea eliminar la condición de enlace inteligente: \"%s\"?" #: conf/settings.py:11 msgid "Show smart link that don't return any documents." msgstr "" +"Mostrar enlace inteligente que no devuelven ningun documentos como " +"resultado." #: templates/smart_links_help.html:3 msgid "What are smart links?" diff --git a/apps/sources/locale/es/LC_MESSAGES/django.mo b/apps/sources/locale/es/LC_MESSAGES/django.mo index 541dd3a02033b0f5a152ecfe639a243fce554b67..4395893c480d68c6dedde616379048bbb3fa4719 100644 GIT binary patch delta 2668 zcmYk-YiyHM9LMo9*0BK&*iaZUwlf9{VUx8W!kAo!;D8O$alZ^6o<7iqtsQMwcwwv< zAVCZ|8eVvLgGM9q1qqEtgFyl@fy4w&R3aF7WemZHMnyD%`2DpHWGDRhInV7}|A&6I z@SP=@>y?4yh7uvFi7my(9Km;o@`rM<%otTKVIzKnEASr9#P(svP&NCo75C!=Jc|?Y zDo(?@I2!AQ7v2xyIAbzqK9#vV=)wTLj(TwbYw4Y*9#>)$dZ+mh&75$rARMcSLk-|)?aTeG0*oo^=9escrNDe#jb1cQ7Jk-jK z#5$aTT7gb{9HTfL58w?}Tww^1`}U|;lp z6S8Qg4V6oqP}%R{Q2IA}s4#f55A(@|O13k40e?mk*Zhh~viqnND6K8zLJO+HPTwxn zif;6;UDTFDQCqzSIiY4hX0#N?sAy@v(Q4_4HWBoO=Hd@sRtU)b#9M#avs1J`~5wa7;Bi0it+Ae*s zvblhH##c)`*RQWaZPDP;$i;Kof6as>&6nr-tBzXZoscQSJmLjnEAgPLP?y?ohnP&b{*!XlzAqz|`uC>!K0pb! zkeKS<(9u%iKRmM|*IRb1xMO)N?IqGqkB!D`(sSdnaMJFLcnQy@BA(srq}+(z8Se>u z3EStSA~u?|Zp3qUdtq)TY|Pth!*RF2*Ndf+xqBlH7S~6jDX%A*Oxd;`$K9Q;(S9`S zq@wYd^%9AAB9|GJE~=$pS{>YlNe;S~y*2um>{k^hMg)URp^yy*TS9ZPdn#=i7olKF zb13&#Wp7FM!wGmvCa|kN7LF$y8B;9mac$jrZ(pL{+u_(A$0qtyj^#d8*GcqwT=h8# z-AZ|G%3(VFUOJw9IHPzn7pU40XkMy8>%+oC+~|c|OqU%@)3K|(U9?fCGv}D=m7<_;dA|PqFMU(LX>I+7oK_e1_J^*bb1T{Qx2@pt10{`#K5sf>u=C{wxnX~s^ zd+oM+)`=O>fvn^&jJA@PK!ki|TXDfK-e_x6%+y_nMffpR;UO%>+sMoOBh1RN5Xa+c zoQR)b0e*=Ycn)>{C49~-YS-wL@xdS_V`yaJ#xTCXbrlZ9_i+@iMSf_XVLI-^96W}4 z@b{qMqB#TN>kAJDuloJ?cTbu?W9I&Gc{7iZY%tn~Y)9 zeNCPlaVFOXke6NOErj=w#arRCiRXvV;kp)sxCx_L*|&7`!(Pn7bI5Mk70*9WnYoSG z_y9HGR5nywGzGPFRmfLXjml6nYRle3l4u)H_igpuoP|qzweIN9`uS9M6l1%ci6t(h!_NEh+@_nd* z&!Q%H5%s`+&%f|;lGz>91b!whCHNcG;czN4fK904+`(Hdeua7X5S794QI@5>h@ev6 zjv9C)>W1xDiN{eZxrMy!K5vsSm2^;FR*Wjfa#Zovqqd^c`+PI%_xn-f_23wcUZSI- zxQk)TB`>AefI2=qQ0MqCYNdVnD*l3+=rEq52j}229EZwO2fm0KP{n!>HL)|OQ}PFr zp{PBgqZv7jrWCfIwqPfcP3uKf|9RALdVmqk<7uzpa?}F4umXEgr)Lm#e*vStiM6O2 z*o!(XM=?j||0W%!(ntP6n2*!25w)^i$adKtWYP9Ds%H97RsAcf7zdCs?K)}!N}Fn` z0QG$hQZ81Hs;M>%>il=o(cbr<2JH1bg-YdF@A?923w}rK?Eq5vb`zC>$Eb`r6pjXL zMBTp$$0MXhulDy3bh-*=<# zKZ+asyl67$_&VlrOW-73a&_f%PU z$@@Z?(01h$%e>FDdTpit*{O}v{wwur3yFC|6|t1i`Bmd!JZ)NCv3I4FmlI*4f}oDw z?OKA3gfcRn&?!(|si|(%C=sh6-eLTw?QO5O0v8b~7M%?J;g~^`5wnOU!bhm8BgDIe znu@rA(5cZj%^}q432moZC86WptP7eu{%dr!pNk0{wK`%l@!zI1&p~nPBUMHwAQu^XBFv5Q%|N&{gh81|Qx zMM7aG5DElFF0OWJR(;gk(fZ*B&g>PPt0Mkjprpj%6`1A^gd)MRcz1UD(D<6Mb;$>B QO&k(;{1cL54Y?Ih00(@}Gynhq diff --git a/apps/sources/locale/es/LC_MESSAGES/django.po b/apps/sources/locale/es/LC_MESSAGES/django.po index 4f780eecc8..b71b65dc33 100644 --- a/apps/sources/locale/es/LC_MESSAGES/django.po +++ b/apps/sources/locale/es/LC_MESSAGES/django.po @@ -1,22 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Roberto Rosario , 2011. msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" "POT-Creation-Date: 2011-11-22 11:26-0400\n" -"PO-Revision-Date: 2011-11-07 04:28+0000\n" +"PO-Revision-Date: 2011-11-22 21:02+0000\n" "Last-Translator: rosarior \n" -"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/" -"mayan-edms/team/es/)\n" -"Language: es\n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: __init__.py:14 @@ -162,7 +161,7 @@ msgstr "carpeta de archivos provisionales de servidor" #: literals.py:49 msgid "server watch folder" -msgstr "" +msgstr "carpeta observada de servidor" #: literals.py:54 msgid "server staging folders" @@ -170,7 +169,7 @@ msgstr "carpetas de archivos provisionales de servidor" #: literals.py:55 msgid "server watch folders" -msgstr "" +msgstr "carpetas observadas de servidor" #: models.py:29 msgid "title" @@ -246,12 +245,15 @@ msgstr "intervalo" #: models.py:169 msgid "" -"Inverval in seconds where the watch folder path is checked for new documents." +"Inverval in seconds where the watch folder path is checked for new " +"documents." msgstr "" +"Inverval es segundos, donde se comprueba la ruta de la carpeta para detectar" +" nuevos documentos." #: models.py:193 msgid "watch folder" -msgstr "" +msgstr "carpeta observada" #: models.py:198 msgid "Enter a valid value." @@ -299,7 +301,7 @@ msgstr "No se puede eliminar archivo provisional: %s" #: utils.py:40 msgid "Whitelist Blacklist validation error." -msgstr "" +msgstr "Error de validación de Lista Negra Lista Blanca" #: views.py:80 msgid "here" @@ -466,3 +468,5 @@ msgstr "Error al crear la transformación de la fuente; %s" #, python-format msgid "Create new transformation for source: %s" msgstr "Crear una nueva transformación para la fuente: %s" + + From c21cb65791e2c35c13d4477877fe223eb94c7191 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 17:45:08 -0400 Subject: [PATCH 131/220] Fixed posible error on multiple document metadata editing --- apps/metadata/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/metadata/views.py b/apps/metadata/views.py index f112cda428..9d34c0cd4f 100644 --- a/apps/metadata/views.py +++ b/apps/metadata/views.py @@ -117,7 +117,7 @@ def metadata_edit(request, document_id=None, document_id_list=None): def metadata_multiple_edit(request): - return metadata_edit(request, document_id_list=request.GET.get('id_list', [])) + return metadata_edit(request, document_id_list=request.GET.get('id_list', '')) def metadata_add(request, document_id=None, document_id_list=None): From 667af2a4420c7669d69da4c603463afd6e42408c Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 17:45:56 -0400 Subject: [PATCH 132/220] Added multiple document OCR submit link --- apps/ocr/__init__.py | 3 +++ apps/ocr/urls.py | 1 + apps/ocr/views.py | 9 ++++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index c6114148d3..cb60eadc57 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -47,6 +47,7 @@ register_permission(PERMISSION_OCR_QUEUE_EDIT) #Links submit_document = {'text': _('submit to OCR queue'), 'view': 'submit_document', 'args': 'object.id', 'famfam': 'hourglass_add', 'permissions': [PERMISSION_OCR_DOCUMENT]} +submit_document_multiple = {'text': _('submit to OCR queue'), 'view': 'submit_document_multiple', 'famfam': 'hourglass_add', 'permissions': [PERMISSION_OCR_DOCUMENT]} re_queue_document = {'text': _('re-queue'), 'view': 're_queue_document', 'args': 'object.id', 'famfam': 'hourglass_add', 'permissions': [PERMISSION_OCR_DOCUMENT]} re_queue_multiple_document = {'text': _('re-queue'), 'view': 're_queue_multiple_document', 'famfam': 'hourglass_add', 'permissions': [PERMISSION_OCR_DOCUMENT]} queue_document_delete = {'text': _(u'delete'), 'view': 'queue_document_delete', 'args': 'object.id', 'famfam': 'hourglass_delete', 'permissions': [PERMISSION_OCR_DOCUMENT_DELETE]} @@ -68,6 +69,8 @@ setup_queue_transformation_edit = {'text': _(u'edit'), 'view': 'setup_queue_tran setup_queue_transformation_delete = {'text': _(u'delete'), 'view': 'setup_queue_transformation_delete', 'args': 'transformation.pk', 'famfam': 'shape_square_delete'} register_links(Document, [submit_document]) +register_multi_item_links(['document_find_duplicates', 'folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [submit_document_multiple]) + register_links(DocumentQueue, [document_queue_disable, document_queue_enable, setup_queue_transformation_list]) register_links(QueueTransformation, [setup_queue_transformation_edit, setup_queue_transformation_delete]) diff --git a/apps/ocr/urls.py b/apps/ocr/urls.py index 2db0a0db0b..dd8529119b 100644 --- a/apps/ocr/urls.py +++ b/apps/ocr/urls.py @@ -2,6 +2,7 @@ from django.conf.urls.defaults import patterns, url urlpatterns = patterns('ocr.views', url(r'^document/(?P\d+)/submit/$', 'submit_document', (), 'submit_document'), + url(r'^document/multiple/submit/$', 'submit_document_multiple', (), 'submit_document_multiple'), url(r'^queue/document/list/$', 'queue_document_list', (), 'queue_document_list'), url(r'^queue/document/(?P\d+)/delete/$', 'queue_document_delete', (), 'queue_document_delete'), url(r'^queue/document/multiple/delete/$', 'queue_document_multiple_delete', (), 'queue_document_multiple_delete'), diff --git a/apps/ocr/views.py b/apps/ocr/views.py index 4c21381a9e..d6102f1200 100644 --- a/apps/ocr/views.py +++ b/apps/ocr/views.py @@ -115,9 +115,16 @@ def queue_document_delete(request, queue_document_id=None, queue_document_id_lis def queue_document_multiple_delete(request): - return queue_document_delete(request, queue_document_id_list=request.GET.get('id_list', [])) + return queue_document_delete(request, queue_document_id_list=request.GET.get('id_list', '')) +def submit_document_multiple(request): + for item_id in request.GET.get('id_list', '').split(','): + submit_document(request, item_id) + + return HttpResponseRedirect(request.META['HTTP_REFERER']) + + def submit_document(request, document_id): check_permissions(request.user, [PERMISSION_OCR_DOCUMENT]) From deb09d3d8394299ec68ca22d1e8552942ea7d69d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 17:46:18 -0400 Subject: [PATCH 133/220] Re enabled tesseract language specific OCR processing and added a 1 time language neutral retry for failed language specific OCR --- apps/ocr/api.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/ocr/api.py b/apps/ocr/api.py index d9d7782b1d..4d70443f92 100644 --- a/apps/ocr/api.py +++ b/apps/ocr/api.py @@ -57,9 +57,8 @@ def run_tesseract(input_filename, lang=None): ocr_output = os.extsep.join([filepath, u'txt']) command = [unicode(TESSERACT_PATH), unicode(input_filename), unicode(filepath)] - # TODO: Tesseract 3.0 segfaults - #if lang is not None: - # command.extend([u'-l', lang]) + if lang is not None: + command.extend([u'-l', lang]) proc = subprocess.Popen(command, close_fds=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE) return_code = proc.wait() @@ -67,7 +66,12 @@ def run_tesseract(input_filename, lang=None): error_text = proc.stderr.read() cleanup(filepath) cleanup(ocr_output) - raise TesseractError(error_text) + if lang: + # If tesseract gives an error with a language parameter + # re-run it with no parameter again + return run_tesseract(input_filename, lang=None) + else: + raise TesseractError(error_text) fd = codecs.open(ocr_output, 'r', 'utf-8') text = fd.read().strip() From ef0d29bf5a3a74e499e8f27b06b199e20df44c31 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 18:03:16 -0400 Subject: [PATCH 134/220] Updated changelog --- docs/changelog.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 761c7ea160..ca07319a67 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -46,6 +46,9 @@ Version 0.10 processing upon submittal of a document to the OCR queue, this works in addition to the current polling processing which eliminates the posibility of stale documents in the OCR queue. +* Added multiple document OCR submit link +* Re enabled tesseract language specific OCR processing and added a one + (1) time language neutral retry for failed language specific OCR Version 0.9.1 ------------- From 94490def2e312de2b8d7def83739c8ba4e0ce364 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 18:03:28 -0400 Subject: [PATCH 135/220] Updated sphinx documentation version number to 0.10 --- docs/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index e4e4c5067c..45126bf88f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -48,10 +48,10 @@ copyright = u'2011, Roberto Rosario' # built documents. # # The short X.Y version. -version = '0.9.0' +version = '0.10' # The full version, including alpha/beta/rc tags. -release = '0.9.0' +release = '0.10' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 5fe495e96750a27edc859a99cf90449fece625c2 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 22 Nov 2011 18:04:29 -0400 Subject: [PATCH 136/220] Bumped version to 0.10 --- apps/main/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/main/__init__.py b/apps/main/__init__.py index ac43d99f7b..0532245481 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -20,8 +20,8 @@ admin_site = {'text': _(u'admin site'), 'view': 'admin:index', 'famfam': 'keyboa __version_info__ = { 'major': 0, - 'minor': 9, - 'micro': 1, + 'minor': 10, + 'micro': 0, 'releaselevel': 'final', 'serial': 0 } From 6ef9b5840f09dc8816cf054fc498ef7fa84c5465 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 28 Nov 2011 11:57:18 -0400 Subject: [PATCH 137/220] Removed extra slash in ajax-loader.gif URL fixes #15, thanks to IHLeanne for finding this one --- apps/sources/widgets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/sources/widgets.py b/apps/sources/widgets.py index 665303e427..ae5bf8e1bc 100644 --- a/apps/sources/widgets.py +++ b/apps/sources/widgets.py @@ -28,9 +28,9 @@ class FamFamRadioSelect(forms.widgets.RadioSelect): def staging_file_thumbnail(staging_file): try: staging_file.get_valid_image() - template = u'%(string)s' + template = u'%(string)s' except: - template = u'%(string)s' + template = u'%(string)s' return mark_safe(template % { 'url': reverse('staging_file_preview', args=[staging_file.source.source_type, staging_file.source.pk, staging_file.id]), From 0fc285390375e6bdf6077e8a4e46fc0cfc576d5a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 28 Nov 2011 12:00:23 -0400 Subject: [PATCH 138/220] Updated contributors file --- docs/contributors.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/contributors.rst b/docs/contributors.rst index f6179efb07..cae85f3c13 100644 --- a/docs/contributors.rst +++ b/docs/contributors.rst @@ -12,6 +12,9 @@ You can help further the development of **Mayan EDMS** by reporting bugs, submit Bug fixes --------- * Aziz M. Bookwala (https://github.com/azizmb) +* IHLeanne (https://github.com/IHLeanne) +* Сергей Глита [Sergey Glita] (s.v.glita@gmail.com) +* Meurig Freeman (https://github.com/meurig) Bug reports ----------- @@ -21,6 +24,7 @@ Bug reports * Brian Huxley * dAnjou (https://github.com/dAnjou) * Сергей Глита [Sergey Glita] (s.v.glita@gmail.com) +* IHLeanne (https://github.com/IHLeanne) Patches ------- From 188c7f1efd8b0d768aa993df29a2c3c9d14b5dfa Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Nov 2011 08:52:00 -0400 Subject: [PATCH 139/220] Added South to the requirements --- requirements/development.txt | 1 + requirements/production.txt | 1 + settings.py | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/requirements/development.txt b/requirements/development.txt index d363fd07d9..7dc2ed08bc 100644 --- a/requirements/development.txt +++ b/requirements/development.txt @@ -19,3 +19,4 @@ cssmin==0.1.4 django-compressor==1.1 -e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile djangorestframework==0.2.3 +South==0.7.3 diff --git a/requirements/production.txt b/requirements/production.txt index e2654a82b1..d0438944d1 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -16,3 +16,4 @@ cssmin==0.1.4 django-compressor==1.1 -e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile djangorestframework==0.2.3 +South==0.7.3 diff --git a/settings.py b/settings.py index 27ef8c818f..c31e499fb0 100644 --- a/settings.py +++ b/settings.py @@ -133,7 +133,6 @@ INSTALLED_APPS = ( 'lock_manager', 'web_theme', 'common', - 'metadata', 'pagination', 'dynamic_search', 'filetransfers', @@ -151,6 +150,7 @@ INSTALLED_APPS = ( 'tags', 'document_comments', 'user_management', + 'metadata', 'documents', 'linking', 'mptt', @@ -165,6 +165,7 @@ INSTALLED_APPS = ( 'compressor', 'djangorestframework', 'rest_api', + 'south', ) TEMPLATE_CONTEXT_PROCESSORS = ( From c6f85342081280eb9fecbcddc50709165db140f7 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Nov 2011 08:52:18 -0400 Subject: [PATCH 140/220] Initial migrations for the documents app These migrations are to merge the filename and extension fields into a single filename field Mayan can't assume filesystem convetion of extension separator as the OS where the document was uploaded might be differente that the OS running Mayan --- apps/documents/migrations/0001_initial.py | 219 ++++++++++++++++++ .../0002_filename_extension_merge.py | 146 ++++++++++++ ...auto__del_field_document_file_extension.py | 144 ++++++++++++ apps/documents/migrations/__init__.py | 0 4 files changed, 509 insertions(+) create mode 100644 apps/documents/migrations/0001_initial.py create mode 100644 apps/documents/migrations/0002_filename_extension_merge.py create mode 100644 apps/documents/migrations/0003_auto__del_field_document_file_extension.py create mode 100644 apps/documents/migrations/__init__.py diff --git a/apps/documents/migrations/0001_initial.py b/apps/documents/migrations/0001_initial.py new file mode 100644 index 0000000000..25acbc89de --- /dev/null +++ b/apps/documents/migrations/0001_initial.py @@ -0,0 +1,219 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'DocumentType' + db.create_table('documents_documenttype', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=32)), + )) + db.send_create_signal('documents', ['DocumentType']) + + # Adding model 'Document' + db.create_table('documents_document', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('document_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.DocumentType'], null=True, blank=True)), + ('file', self.gf('django.db.models.fields.files.FileField')(max_length=100)), + ('uuid', self.gf('django.db.models.fields.CharField')(default=u'107e50a8-83b3-46da-bd14-460489527ab1', max_length=48, blank=True)), + ('file_mimetype', self.gf('django.db.models.fields.CharField')(default='', max_length=64)), + ('file_mime_encoding', self.gf('django.db.models.fields.CharField')(default='', max_length=64)), + ('file_filename', self.gf('django.db.models.fields.CharField')(default=u'', max_length=255, db_index=True)), + ('file_extension', self.gf('django.db.models.fields.CharField')(default=u'', max_length=16, db_index=True)), + ('date_added', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, db_index=True, blank=True)), + ('date_updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + ('checksum', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(db_index=True, null=True, blank=True)), + )) + db.send_create_signal('documents', ['Document']) + + # Adding model 'DocumentTypeFilename' + db.create_table('documents_documenttypefilename', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('document_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.DocumentType'])), + ('filename', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)), + ('enabled', self.gf('django.db.models.fields.BooleanField')(default=True)), + )) + db.send_create_signal('documents', ['DocumentTypeFilename']) + + # Adding model 'DocumentPage' + db.create_table('documents_documentpage', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('document', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.Document'])), + ('content', self.gf('django.db.models.fields.TextField')(db_index=True, null=True, blank=True)), + ('page_label', self.gf('django.db.models.fields.CharField')(max_length=32, null=True, blank=True)), + ('page_number', self.gf('django.db.models.fields.PositiveIntegerField')(default=1, db_index=True)), + )) + db.send_create_signal('documents', ['DocumentPage']) + + # Adding model 'DocumentPageTransformation' + db.create_table('documents_documentpagetransformation', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('document_page', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.DocumentPage'])), + ('order', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, null=True, db_index=True, blank=True)), + ('transformation', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('arguments', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + )) + db.send_create_signal('documents', ['DocumentPageTransformation']) + + # Adding model 'RecentDocument' + db.create_table('documents_recentdocument', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), + ('document', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.Document'])), + ('datetime_accessed', self.gf('django.db.models.fields.DateTimeField')(db_index=True)), + )) + db.send_create_signal('documents', ['RecentDocument']) + + + def backwards(self, orm): + + # Deleting model 'DocumentType' + db.delete_table('documents_documenttype') + + # Deleting model 'Document' + db.delete_table('documents_document') + + # Deleting model 'DocumentTypeFilename' + db.delete_table('documents_documenttypefilename') + + # Deleting model 'DocumentPage' + db.delete_table('documents_documentpage') + + # Deleting model 'DocumentPageTransformation' + db.delete_table('documents_documentpagetransformation') + + # Deleting model 'RecentDocument' + db.delete_table('documents_recentdocument') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'file_extension': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '16', 'db_index': 'True'}), + 'file_filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'file_mime_encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file_mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'107e50a8-83b3-46da-bd14-460489527ab1'", 'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] diff --git a/apps/documents/migrations/0002_filename_extension_merge.py b/apps/documents/migrations/0002_filename_extension_merge.py new file mode 100644 index 0000000000..6d7dc4182b --- /dev/null +++ b/apps/documents/migrations/0002_filename_extension_merge.py @@ -0,0 +1,146 @@ +# encoding: utf-8 +import os +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + "Write your forwards methods here." + for document in orm.Document.objects.all(): + document.file_filename = os.extsep.join([document.file_filename, document.file_extension]) + document.save() + + def backwards(self, orm): + "Write your backwards methods here." + for document in orm.Document.objects.all(): + document.file_filename, document.file_extension = document.file_filename.split(os.extsep) + document.save() + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'file_extension': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '16', 'db_index': 'True'}), + 'file_filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'file_mime_encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file_mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'28bd60c6-a5c2-4adb-8dab-1b6c0098cc9c'", 'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] diff --git a/apps/documents/migrations/0003_auto__del_field_document_file_extension.py b/apps/documents/migrations/0003_auto__del_field_document_file_extension.py new file mode 100644 index 0000000000..85f3a1821f --- /dev/null +++ b/apps/documents/migrations/0003_auto__del_field_document_file_extension.py @@ -0,0 +1,144 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Deleting field 'Document.file_extension' + db.delete_column('documents_document', 'file_extension') + + + def backwards(self, orm): + + # Adding field 'Document.file_extension' + db.add_column('documents_document', 'file_extension', self.gf('django.db.models.fields.CharField')(default=u'', max_length=16, db_index=True), keep_default=False) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'file_filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'file_mime_encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file_mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'06a88ff6-11b2-44b3-8409-21bd58577d4f'", 'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] diff --git a/apps/documents/migrations/__init__.py b/apps/documents/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 From f5546556885068a3d85c7bfd0d81b192d37d4b0d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Nov 2011 08:54:37 -0400 Subject: [PATCH 141/220] Updated documents app admin, model and view modules to use the merged filename and extension --- apps/documents/admin.py | 2 +- apps/documents/models.py | 11 +++-------- apps/documents/views.py | 5 ++--- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/apps/documents/admin.py b/apps/documents/admin.py index ff4aa33cb0..71d0fab939 100644 --- a/apps/documents/admin.py +++ b/apps/documents/admin.py @@ -35,7 +35,7 @@ class DocumentAdmin(admin.ModelAdmin): inlines = [ DocumentMetadataInline, DocumentPageInline ] - list_display = ('uuid', 'file_filename', 'file_extension') + list_display = ('uuid', 'file_filename',) class RecentDocumentAdmin(admin.ModelAdmin): diff --git a/apps/documents/models.py b/apps/documents/models.py index 914426a568..14117269a0 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -46,10 +46,7 @@ def get_filename_from_uuid(instance, filename): Store the orignal filename of the uploaded file and replace it with a UUID """ - filename, extension = os.path.splitext(filename) instance.file_filename = filename - #remove prefix '.' - instance.file_extension = extension[1:] uuid = UUID_FUNCTION() instance.uuid = uuid return uuid @@ -82,7 +79,6 @@ class Document(models.Model): file_mime_encoding = models.CharField(max_length=64, default='', editable=False) #FAT filename can be up to 255 using LFN file_filename = models.CharField(max_length=255, default=u'', editable=False, db_index=True) - file_extension = models.CharField(max_length=16, default=u'', editable=False, db_index=True) date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True, db_index=True) date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True) checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) @@ -102,7 +98,7 @@ class Document(models.Model): ordering = ['-date_added'] def __unicode__(self): - return os.extsep.join([self.file_filename, self.file_extension]) + return self.get_fullname() def save(self, *args, **kwargs): """ @@ -130,7 +126,7 @@ class Document(models.Model): """ Return the fullname of the document's file """ - return os.extsep.join([self.file_filename, self.file_extension]) + return self.file_filename def update_mimetype(self, save=True): """ @@ -420,7 +416,6 @@ register('document', Document, _(u'document'), [ {'name': u'document_type__name', 'title': _(u'Document type')}, {'name': u'file_mimetype', 'title': _(u'MIME type')}, {'name': u'file_filename', 'title': _(u'Filename')}, - {'name': u'file_extension', 'title': _(u'Filename extension')}, {'name': u'documentmetadata__value', 'title': _(u'Metadata value')}, {'name': u'documentpage__content', 'title': _(u'Content')}, {'name': u'description', 'title': _(u'Description')}, @@ -428,4 +423,4 @@ register('document', Document, _(u'document'), [ {'name': u'comments__comment', 'title': _(u'Comments')}, ] ) -#register(Document, _(u'document'), ['document_type__name', 'file_mimetype', 'file_extension', 'documentmetadata__value', 'documentpage__content', 'description', {'field_name':'file_filename', 'comparison':'iexact'}]) +#register(Document, _(u'document'), ['document_type__name', 'file_mimetype', 'documentmetadata__value', 'documentpage__content', 'description', {'field_name':'file_filename', 'comparison':'iexact'}]) diff --git a/apps/documents/views.py b/apps/documents/views.py index 60a03ee74c..68a70f2435 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -65,7 +65,7 @@ def document_list(request, object_list=None, title=None, extra_context=None): check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) context = { - 'object_list': object_list if not (object_list is None) else Document.objects.only('file_filename', 'file_extension').all(), + 'object_list': object_list if not (object_list is None) else Document.objects.only('file_filename',).all(), 'title': title if title else _(u'documents'), 'multi_select_as_buttons': True, 'hide_links': True, @@ -115,7 +115,6 @@ def document_view(request, document_id, advanced=False): if advanced: document_properties_form = DocumentPropertiesForm(instance=document, extra_fields=[ {'label': _(u'Filename'), 'field': 'file_filename'}, - {'label': _(u'File extension'), 'field': 'file_extension'}, {'label': _(u'File mimetype'), 'field': 'file_mimetype'}, {'label': _(u'File mime encoding'), 'field': 'file_mime_encoding'}, {'label': _(u'File size'), 'field':lambda x: pretty_size(x.size) if x.size else '-'}, @@ -482,7 +481,7 @@ def document_update_page_count(request): previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) office_converter = OfficeConverter() - qs = Document.objects.exclude(file_extension__iendswith='dxf').filter(file_mimetype__in=office_converter.mimetypes()) + qs = Document.objects.exclude(file_filename__iendswith='dxf').filter(file_mimetype__in=office_converter.mimetypes()) if request.method == 'POST': updated = 0 From d37b36bce3dd7f6892a80d5bee892d059f53a4ec Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Nov 2011 08:55:19 -0400 Subject: [PATCH 142/220] Updated document indexing app modules for the new filename and extension merged field --- apps/document_indexing/api.py | 3 ++- apps/document_indexing/filesystem.py | 9 ++------- apps/document_indexing/os_agnostic.py | 14 +++++++++++--- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/apps/document_indexing/api.py b/apps/document_indexing/api.py index b2e166f347..972b903210 100644 --- a/apps/document_indexing/api.py +++ b/apps/document_indexing/api.py @@ -127,7 +127,8 @@ def do_rebuild_all_indexes(): # Internal functions def find_lowest_available_suffix(index_instance, document): - index_instance_documents = DocumentRenameCount.objects.filter(index_instance=index_instance).filter(document__file_extension=document.file_extension) + # TODO: verify extension's role in query + index_instance_documents = DocumentRenameCount.objects.filter(index_instance=index_instance)#.filter(document__file_extension=document.file_extension) files_list = [] for index_instance_document in index_instance_documents: files_list.append(assemble_document_filename(index_instance_document.document, index_instance_document.suffix)) diff --git a/apps/document_indexing/filesystem.py b/apps/document_indexing/filesystem.py index 04744f4254..f8762060ce 100644 --- a/apps/document_indexing/filesystem.py +++ b/apps/document_indexing/filesystem.py @@ -36,8 +36,7 @@ def fs_create_index_directory(index_instance): def fs_create_document_link(index_instance, document, suffix=0): if FILESERVING_ENABLE: - name_part = assemble_document_filename(document, suffix) - filename = os.extsep.join([name_part, document.file_extension]) + filename = assemble_document_filename(document.file_filename, suffix) filepath = os.path.join(FILESERVING_PATH, get_instance_path(index_instance), filename) try: os.symlink(document.file.path, filepath) @@ -56,11 +55,7 @@ def fs_create_document_link(index_instance, document, suffix=0): def fs_delete_document_link(index_instance, document, suffix=0): if FILESERVING_ENABLE: - name_part = document.file_filename - if suffix: - name_part = u'_'.join([name_part, unicode(suffix)]) - - filename = os.extsep.join([name_part, document.file_extension]) + filename = assemble_document_filename(document.file_filename, suffix) filepath = os.path.join(FILESERVING_PATH, get_instance_path(index_instance), filename) try: diff --git a/apps/document_indexing/os_agnostic.py b/apps/document_indexing/os_agnostic.py index ac8ef648ec..f33550609a 100644 --- a/apps/document_indexing/os_agnostic.py +++ b/apps/document_indexing/os_agnostic.py @@ -1,8 +1,16 @@ +import os + from document_indexing.conf.settings import SUFFIX_SEPARATOR -def assemble_document_filename(document, suffix=0): +def assemble_document_filename(filename, suffix=0): + ''' + Split document filename, to attach suffix to the name part then + re attacht the extension + ''' + if suffix: - return SUFFIX_SEPARATOR.join([document.file_filename, unicode(suffix)]) + name, extension = filename.split(os.split(os.extsep)) + return SUFFIX_SEPARATOR.join([name, unicode(suffix), os.extsep, extension]) else: - return document.file_filename + return file_filename From a646997ab85405de19a1f75a2eff08626bbc05aa Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Nov 2011 09:31:32 -0400 Subject: [PATCH 143/220] Rename os_agnostic.py to the more appropiate os_specifics to encapsulate file system unique filename and path handling --- apps/document_indexing/{os_agnostic.py => os_specifics.py} | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) rename apps/document_indexing/{os_agnostic.py => os_specifics.py} (73%) diff --git a/apps/document_indexing/os_agnostic.py b/apps/document_indexing/os_specifics.py similarity index 73% rename from apps/document_indexing/os_agnostic.py rename to apps/document_indexing/os_specifics.py index f33550609a..90a9ba8a75 100644 --- a/apps/document_indexing/os_agnostic.py +++ b/apps/document_indexing/os_specifics.py @@ -3,7 +3,7 @@ import os from document_indexing.conf.settings import SUFFIX_SEPARATOR -def assemble_document_filename(filename, suffix=0): +def assemble_suffixed_filename(filename, suffix=0): ''' Split document filename, to attach suffix to the name part then re attacht the extension @@ -14,3 +14,7 @@ def assemble_document_filename(filename, suffix=0): return SUFFIX_SEPARATOR.join([name, unicode(suffix), os.extsep, extension]) else: return file_filename + + +def assemble_path_from_list(directory_list): + return os.sep.join(directory_list) From 1e22d1099e48f9318a7a337de168d52d1b5987e9 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Nov 2011 09:33:32 -0400 Subject: [PATCH 144/220] Update api and filesystem modules to new os_specifics renames --- apps/document_indexing/api.py | 6 +++--- apps/document_indexing/filesystem.py | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/apps/document_indexing/api.py b/apps/document_indexing/api.py index 972b903210..269d5ceddd 100644 --- a/apps/document_indexing/api.py +++ b/apps/document_indexing/api.py @@ -15,7 +15,7 @@ from document_indexing.filesystem import fs_create_index_directory, \ fs_create_document_link, fs_delete_document_link, \ fs_delete_index_directory, fs_delete_directory_recusive from document_indexing.conf.settings import SLUGIFY_PATHS -from document_indexing.os_agnostic import assemble_document_filename +from document_indexing.os_specifics import assemble_suffixed_filename if SLUGIFY_PATHS == False: # Do not slugify path or filenames and extensions @@ -131,10 +131,10 @@ def find_lowest_available_suffix(index_instance, document): index_instance_documents = DocumentRenameCount.objects.filter(index_instance=index_instance)#.filter(document__file_extension=document.file_extension) files_list = [] for index_instance_document in index_instance_documents: - files_list.append(assemble_document_filename(index_instance_document.document, index_instance_document.suffix)) + files_list.append(assemble_suffixed_filename(index_instance_document.document.file.name, index_instance_document.suffix)) for suffix in xrange(MAX_SUFFIX_COUNT): - if assemble_document_filename(document, suffix) not in files_list: + if assemble_suffixed_filename(document.file.name, suffix) not in files_list: return suffix raise MaxSuffixCountReached(ugettext(u'Maximum suffix (%s) count reached.') % MAX_SUFFIX_COUNT) diff --git a/apps/document_indexing/filesystem.py b/apps/document_indexing/filesystem.py index f8762060ce..c89dad4cf6 100644 --- a/apps/document_indexing/filesystem.py +++ b/apps/document_indexing/filesystem.py @@ -3,7 +3,8 @@ import os from django.utils.translation import ugettext_lazy as _ -from document_indexing.os_agnostic import assemble_document_filename +from document_indexing.os_specifics import (assemble_suffixed_filename, + assemble_path_from_list) from document_indexing.conf.settings import FILESERVING_ENABLE from document_indexing.conf.settings import FILESERVING_PATH @@ -19,12 +20,12 @@ def get_instance_path(index_instance): names.append(index_instance.value) - return os.sep.join(names) + return assemble_path_from_list(names) def fs_create_index_directory(index_instance): if FILESERVING_ENABLE: - target_directory = os.path.join(FILESERVING_PATH, get_instance_path(index_instance)) + target_directory = assemble_path_from_list([FILESERVING_PATH, get_instance_path(index_instance)]) try: os.mkdir(target_directory) except OSError, exc: @@ -36,8 +37,9 @@ def fs_create_index_directory(index_instance): def fs_create_document_link(index_instance, document, suffix=0): if FILESERVING_ENABLE: - filename = assemble_document_filename(document.file_filename, suffix) - filepath = os.path.join(FILESERVING_PATH, get_instance_path(index_instance), filename) + filename = assemble_suffixed_filename(document.file.name, suffix) + filepath = assemble_path_from_list([FILESERVING_PATH, get_instance_path(index_instance), filename]) + try: os.symlink(document.file.path, filepath) except OSError, exc: @@ -55,8 +57,8 @@ def fs_create_document_link(index_instance, document, suffix=0): def fs_delete_document_link(index_instance, document, suffix=0): if FILESERVING_ENABLE: - filename = assemble_document_filename(document.file_filename, suffix) - filepath = os.path.join(FILESERVING_PATH, get_instance_path(index_instance), filename) + filename = assemble_suffixed_filename(document.file.name, suffix) + filepath = assemble_path_from_list([FILESERVING_PATH, get_instance_path(index_instance), filename]) try: os.unlink(filepath) @@ -68,7 +70,7 @@ def fs_delete_document_link(index_instance, document, suffix=0): def fs_delete_index_directory(index_instance): if FILESERVING_ENABLE: - target_directory = os.path.join(FILESERVING_PATH, get_instance_path(index_instance)) + target_directory = assemble_path_from_list([FILESERVING_PATH, get_instance_path(index_instance)]) try: os.removedirs(target_directory) except OSError, exc: From 2b7c379822f12579016d2e577d3d14da2ef37d1d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Nov 2011 09:45:29 -0400 Subject: [PATCH 145/220] Add new office document mimetype * application/vnd.ms-office --- apps/converter/office_converter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index dac7ea3d69..814a69bb24 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -26,6 +26,7 @@ CONVERTER_OFFICE_FILE_MIMETYPES = [ 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.oasis.opendocument.graphics', + 'application/vnd.ms-office', ] logger = logging.getLogger(__name__) From f76baa4efc762b3737459114bafc6eee55ba4bfc Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Nov 2011 20:03:46 -0400 Subject: [PATCH 146/220] Changed office documents mimetypes strings to unicode --- apps/converter/office_converter.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index 814a69bb24..37a5d50ffc 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -13,20 +13,20 @@ from converter.exceptions import (OfficeConversionError, CACHED_FILE_SUFFIX = u'_office_converter' CONVERTER_OFFICE_FILE_MIMETYPES = [ - 'application/msword', - 'application/mswrite', - 'application/mspowerpoint', - 'application/msexcel', - 'application/vnd.ms-excel', - 'application/vnd.ms-powerpoint', - 'text/plain', - 'application/vnd.oasis.opendocument.presentation', - 'application/vnd.oasis.opendocument.text', - 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'application/vnd.oasis.opendocument.spreadsheet', - 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'application/vnd.oasis.opendocument.graphics', - 'application/vnd.ms-office', + u'application/msword', + u'application/mswrite', + u'application/mspowerpoint', + u'application/msexcel', + u'application/vnd.ms-excel', + u'application/vnd.ms-powerpoint', + u'text/plain', + u'application/vnd.oasis.opendocument.presentation', + u'application/vnd.oasis.opendocument.text', + u'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + u'application/vnd.oasis.opendocument.spreadsheet', + u'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + u'application/vnd.oasis.opendocument.graphics', + u'application/vnd.ms-office', ] logger = logging.getLogger(__name__) From 394762047a9fb2db8d174b1ed03d6d310c797bc4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 30 Nov 2011 20:04:29 -0400 Subject: [PATCH 147/220] Fix documents not saving the file encoding --- apps/documents/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index 14117269a0..2e5a627a73 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -135,7 +135,7 @@ class Document(models.Model): """ if self.exists(): try: - self.file_mimetype, self.mime_encoding = get_mimetype(self.open(), self.get_fullname()) + self.file_mimetype, self.file_mime_encoding = get_mimetype(self.open(), self.get_fullname()) except: self.file_mimetype = u'' self.file_mime_encoding = u'' From a4513951edd2fd5d1c2ef61e1136ba4a6ddefcd0 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 02:15:15 -0400 Subject: [PATCH 148/220] Add '=' to unoconv command line --- apps/converter/office_converter.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index 37a5d50ffc..575c364a14 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -29,6 +29,7 @@ CONVERTER_OFFICE_FILE_MIMETYPES = [ u'application/vnd.ms-office', ] + logger = logging.getLogger(__name__) @@ -92,7 +93,7 @@ class OfficeConverterBackendUnoconv(object): command.append(self.unoconv_path) if UNOCONV_USE_PIPE: - command.append(u'--pipe') + command.append(u'--pipe=') command.append(u'mayan-%s' % id_generator()) command.append(u'--format=pdf') From cf9b28ad309040ee73be23dd63f68996a29437f5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 04:30:38 -0400 Subject: [PATCH 149/220] Separate unoconv command line arguments and add further logging --- apps/converter/office_converter.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index 575c364a14..c7c8707c36 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -93,22 +93,24 @@ class OfficeConverterBackendUnoconv(object): command.append(self.unoconv_path) if UNOCONV_USE_PIPE: - command.append(u'--pipe=') + command.append(u'--pipe') command.append(u'mayan-%s' % id_generator()) - command.append(u'--format=pdf') - command.append(u'--output=%s' % self.output_filepath) + command.append(u'--format') + command.append(u'pdf') + command.append(u'--output') + command.append(self.output_filepath) command.append(self.input_filepath) try: - logger.debug('prev environment: %s' % os.environ) proc = subprocess.Popen(command, close_fds=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE) return_code = proc.wait() - logger.debug('post environment: %s' % os.environ) + logger.debug('return_code: %s' % return_code) readline = proc.stderr.readline() + logger.debug('stderr: %s' % readline) if return_code != 0: - raise OfficeBackendError(proc.stderr.readline()) + raise OfficeBackendError(readline) except OSError, msg: raise OfficeBackendError(msg) except Exception, msg: From 8a2d526e943a8b13ac15760d9a013eb14e2e5d51 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 04:31:52 -0400 Subject: [PATCH 150/220] Add RTF text file to the list of office document mimetypes --- apps/converter/office_converter.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index c7c8707c36..e98b8cfdd4 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -19,7 +19,6 @@ CONVERTER_OFFICE_FILE_MIMETYPES = [ u'application/msexcel', u'application/vnd.ms-excel', u'application/vnd.ms-powerpoint', - u'text/plain', u'application/vnd.oasis.opendocument.presentation', u'application/vnd.oasis.opendocument.text', u'application/vnd.openxmlformats-officedocument.wordprocessingml.document', @@ -27,6 +26,8 @@ CONVERTER_OFFICE_FILE_MIMETYPES = [ u'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', u'application/vnd.oasis.opendocument.graphics', u'application/vnd.ms-office', + u'text/plain', + u'text/rtf', ] From cb8b4a4def127fc8b293dee140117f5b633873db Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 04:43:59 -0400 Subject: [PATCH 151/220] Add more logging --- apps/lock_manager/managers.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/lock_manager/managers.py b/apps/lock_manager/managers.py index 6c69fada19..f356be42dd 100644 --- a/apps/lock_manager/managers.py +++ b/apps/lock_manager/managers.py @@ -20,7 +20,8 @@ class LockManager(models.Manager): lock.save(force_insert=True) logger.debug('acquired lock: %s' % name) return lock - except IntegrityError: + except IntegrityError, msg: + logger.debug('IntegrityError: %s', msg) # There is already an existing lock # Check it's expiration date and if expired, reset it try: @@ -32,9 +33,10 @@ class LockManager(models.Manager): if datetime.datetime.now() > lock.creation_datetime + datetime.timedelta(seconds=lock.timeout): logger.debug('reseting deleting stale lock: %s' % name) - lock.timeout=timeout - logger.debug('try to reacquire stale lock: %s' % name) + lock.timeout = timeout + logger.debug('trying to reacquire stale lock: %s' % name) lock.save() + logger.debug('reacquired stale lock: %s' % name) return lock else: logger.debug('unable to acquire lock: %s' % name) From 29f547ee48941f3ca558659b63a3035f04123ee7 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 04:44:38 -0400 Subject: [PATCH 152/220] Update the queue signal processor to only trigger ocr queue processing on newly submitted documents and not requeued documents --- apps/ocr/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index cb60eadc57..def0d7064b 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -110,8 +110,9 @@ post_save.connect(document_post_save, sender=Document) @receiver(post_save, dispatch_uid='call_queue', sender=QueueDocument) def call_queue(sender, **kwargs): - logger.debug('got call_queue signal') - task_process_document_queues() + if kwargs.get('created', False): + logger.debug('got call_queue signal: %s' % kwargs) + task_process_document_queues() create_default_queue() From 31ea558b6033cfcee71aaed3fb38d7952573d559 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 04:46:00 -0400 Subject: [PATCH 153/220] Update the REPLICATION_DELAY default to be 0 seconds --- apps/ocr/conf/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ocr/conf/settings.py b/apps/ocr/conf/settings.py index bfc285f9b2..ff2f7ca04d 100644 --- a/apps/ocr/conf/settings.py +++ b/apps/ocr/conf/settings.py @@ -10,7 +10,7 @@ register_settings( settings=[ {'name': u'TESSERACT_PATH', 'global_name': u'OCR_TESSERACT_PATH', 'default': u'/usr/bin/tesseract', 'exists': True}, {'name': u'TESSERACT_LANGUAGE', 'global_name': u'OCR_TESSERACT_LANGUAGE', 'default': u'eng'}, - {'name': u'REPLICATION_DELAY', 'global_name': u'OCR_REPLICATION_DELAY', 'default': 10, 'description': _(u'Amount of seconds to delay OCR of documents to allow for the node\'s storage replication overhead.')}, + {'name': u'REPLICATION_DELAY', 'global_name': u'OCR_REPLICATION_DELAY', 'default': 0, 'description': _(u'Amount of seconds to delay OCR of documents to allow for the node\'s storage replication overhead.')}, {'name': u'NODE_CONCURRENT_EXECUTION', 'global_name': u'OCR_NODE_CONCURRENT_EXECUTION', 'default': 1, 'description': _(u'Maximum amount of concurrent document OCRs a node can perform.')}, {'name': u'AUTOMATIC_OCR', 'global_name': u'OCR_AUTOMATIC_OCR', 'default': False, 'description': _(u'Automatically queue newly created documents for OCR.')}, {'name': u'QUEUE_PROCESSING_INTERVAL', 'global_name': u'OCR_QUEUE_PROCESSING_INTERVAL', 'default': 10}, From c63721cbf636437c331587f0ac975f5c6a98d9f9 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 04:47:27 -0400 Subject: [PATCH 154/220] Move OCR queue document requeueing from the view to the model and add proper exception --- apps/ocr/exceptions.py | 4 ++++ apps/ocr/models.py | 15 ++++++++++++++- apps/ocr/views.py | 34 ++++++++++++++++------------------ 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/apps/ocr/exceptions.py b/apps/ocr/exceptions.py index 41ebe0c8ca..704e0ae9c7 100644 --- a/apps/ocr/exceptions.py +++ b/apps/ocr/exceptions.py @@ -11,3 +11,7 @@ class UnpaperError(Exception): Raised by unpaper """ pass + + +class ReQueueError(Exception): + pass diff --git a/apps/ocr/models.py b/apps/ocr/models.py index 6e25ef334f..f33ee3fb35 100644 --- a/apps/ocr/models.py +++ b/apps/ocr/models.py @@ -1,4 +1,5 @@ from ast import literal_eval +from datetime import datetime from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -14,8 +15,9 @@ from sources.managers import SourceTransformationManager from ocr.literals import DOCUMENTQUEUE_STATE_STOPPED, \ DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING, \ - QUEUEDOCUMENT_STATE_CHOICES + QUEUEDOCUMENT_STATE_CHOICES, QUEUEDOCUMENT_STATE_PROCESSING from ocr.managers import DocumentQueueManager +from ocr.exceptions import ReQueueError class DocumentQueue(models.Model): @@ -56,6 +58,17 @@ class QueueDocument(models.Model): def get_transformation_list(self): return QueueTransformation.transformations.get_for_object_as_list(self) + def requeue(self): + if self.state == QUEUEDOCUMENT_STATE_PROCESSING: + raise ReQueueError + else: + self.datetime_submitted = datetime.now() + self.state = QUEUEDOCUMENT_STATE_PENDING + self.delay = False + self.result = None + self.node_name = None + self.save() + def __unicode__(self): try: return unicode(self.document) diff --git a/apps/ocr/views.py b/apps/ocr/views.py index d6102f1200..8fbc40d444 100644 --- a/apps/ocr/views.py +++ b/apps/ocr/views.py @@ -1,4 +1,3 @@ -import datetime import socket from django.http import HttpResponseRedirect @@ -23,7 +22,7 @@ from ocr.models import DocumentQueue, QueueDocument, QueueTransformation from ocr.literals import QUEUEDOCUMENT_STATE_PENDING, \ QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_STOPPED, \ DOCUMENTQUEUE_STATE_ACTIVE -from ocr.exceptions import AlreadyQueued +from ocr.exceptions import AlreadyQueued, ReQueueError from ocr.api import clean_pages from ocr.forms import QueueTransformationForm, QueueTransformationForm_create @@ -122,7 +121,7 @@ def submit_document_multiple(request): for item_id in request.GET.get('id_list', '').split(','): submit_document(request, item_id) - return HttpResponseRedirect(request.META['HTTP_REFERER']) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) def submit_document(request, document_id): @@ -130,7 +129,7 @@ def submit_document(request, document_id): document = get_object_or_404(Document, pk=document_id) return submit_document_to_queue(request, document=document, - post_submit_redirect=request.META['HTTP_REFERER']) + post_submit_redirect=request.META.get('HTTP_REFERER', '/')) def submit_document_to_queue(request, document, post_submit_redirect=None): @@ -167,22 +166,21 @@ def re_queue_document(request, queue_document_id=None, queue_document_id_list=No if request.method == 'POST': for queue_document in queue_documents: try: - queue_document.document - if queue_document.state == QUEUEDOCUMENT_STATE_PROCESSING: - messages.warning(request, _(u'Document: %s is already being processed and can\'t be re-queded.') % queue_document) - else: - queue_document.datetime_submitted = datetime.datetime.now() - queue_document.state = QUEUEDOCUMENT_STATE_PENDING - queue_document.delay = False - queue_document.result = None - queue_document.node_name = None - queue_document.save() - messages.success(request, _(u'Document: %(document)s was re-queued to the OCR queue: %(queue)s') % { - 'document': queue_document.document, 'queue': queue_document.document_queue.label}) + queue_document.requeue() + messages.success( + request, + _(u'Document: %(document)s was re-queued to the OCR queue: %(queue)s') % { + 'document': queue_document.document, + 'queue': queue_document.document_queue.label + } + ) except Document.DoesNotExist: messages.error(request, _(u'Document id#: %d, no longer exists.') % queue_document.document_id) - except Exception, e: - messages.error(request, e) + except ReQueueError: + messages.warning( + request, + _(u'Document: %s is already being processed and can\'t be re-queded.') % queue_document + ) return HttpResponseRedirect(next) context = { From 6d9b6f9ada7c3684f07d1694676786082f58b95f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 04:48:24 -0400 Subject: [PATCH 155/220] Add more debugging logging and update to only process 1 queue item per execution Previously the task_process_document_queues processed all the pending queue items it could find, this could lead to the of inexisting queue items from a stale queryset --- apps/ocr/tasks.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/apps/ocr/tasks.py b/apps/ocr/tasks.py index 06f55bd69d..7c01a36e4d 100644 --- a/apps/ocr/tasks.py +++ b/apps/ocr/tasks.py @@ -2,6 +2,7 @@ from datetime import timedelta, datetime import platform from time import sleep from random import random +import logging from django.db.models import Q @@ -21,10 +22,15 @@ from ocr.conf.settings import QUEUE_PROCESSING_INTERVAL LOCK_EXPIRE = 60 * 10 # Lock expires in 10 minutes # TODO: Tie LOCK_EXPIRATION with hard task timeout +logger = logging.getLogger(__name__) + + def task_process_queue_document(queue_document_id): lock_id = u'task_proc_queue_doc-%d' % queue_document_id try: + logger.debug('trying to acquire lock: %s' % lock_id) lock = Lock.acquire_lock(lock_id, LOCK_EXPIRE) + logger.debug('acquired lock: %s' % lock_id) queue_document = QueueDocument.objects.get(pk=queue_document_id) queue_document.state = QUEUEDOCUMENT_STATE_PROCESSING queue_document.node_name = platform.node() @@ -39,6 +45,7 @@ def task_process_queue_document(queue_document_id): lock.release() except LockError: + logger.debug('unable to obtain lock') pass @@ -69,6 +76,7 @@ def reset_orphans(): def task_process_document_queues(): + logger.debug('executed') # reset_orphans() # Causes problems with big clusters increased latency # Disabled until better solution @@ -90,3 +98,10 @@ def task_process_document_queues(): except Exception, e: pass #print 'DocumentQueueWatcher exception: %s' % e + finally: + # Don't process anymore from this queryset, might be stale + break; + else: + logger.debug('already processing maximun') + else: + logger.debug('nothing to process') From 922971274fc3c79aef400d8b9e4f0c333dc648f4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 04:54:14 -0400 Subject: [PATCH 156/220] Add office document text extractor --- apps/ocr/parsers/__init__.py | 55 +++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/apps/ocr/parsers/__init__.py b/apps/ocr/parsers/__init__.py index 8ed4be7cb7..8fac71c084 100644 --- a/apps/ocr/parsers/__init__.py +++ b/apps/ocr/parsers/__init__.py @@ -1,20 +1,35 @@ import slate +import logging from django.utils.translation import ugettext as _ +from converter import office_converter +from converter import office_converter +from converter.office_converter import OfficeConverter +from converter.exceptions import OfficeBackendError, OfficeConversionError +from documents.utils import document_save_to_temp_dir + from ocr.parsers.exceptions import ParserError, ParserUnknownFile + mimetype_registry = {} +logger = logging.getLogger(__name__) -def register_parser(mimetype, function): - mimetype_registry[mimetype] = {'function': function} +def register_parser(function, mimetype=None, mimetypes=None): + if mimetypes: + for mimetype in mimetypes: + mimetype_registry[mimetype] = {'function': function} + else: + mimetype_registry[mimetype] = {'function': function} -def pdf_parser(document_page): - fd = document_page.document.open() - pdf_pages = slate.PDF(fd) - fd.close() +def pdf_parser(document_page, descriptor=None): + if not descriptor: + descriptor = document_page.document.open() + + pdf_pages = slate.PDF(descriptor) + descriptor.close() if pdf_pages[document_page.page_number - 1] == '\x0c': raise ParserError @@ -24,11 +39,37 @@ def pdf_parser(document_page): document_page.save() +def office_parser(document_page): + logger.debug('executing') + try: + office_converter = OfficeConverter() + document_file = document_save_to_temp_dir(document_page.document, document_page.document.checksum) + logger.debug('document_file: %s', document_file) + + office_converter.convert(document_file, mimetype=document_page.document.file_mimetype) + if office_converter.exists: + input_filepath = office_converter.output_filepath + logger.debug('office_converter.output_filepath: %s', input_filepath) + + pdf_parser(document_page, descriptor=open(input_filepath)) + else: + raise ParserError + + except OfficeConversionError, msg: + print msg + raise ParserError + + def parse_document_page(document_page): + logger.debug('executing') + logger.debug('document_page: %s' % document_page) + logger.debug('mimetype: %s' % document_page.document.file_mimetype) + try: mimetype_registry[document_page.document.file_mimetype]['function'](document_page) except KeyError: raise ParserUnknownFile -register_parser('application/pdf', pdf_parser) +register_parser(mimetype=u'application/pdf', function=pdf_parser) +register_parser(mimetypes=office_converter.CONVERTER_OFFICE_FILE_MIMETYPES, function=office_parser) From 13826a0a4a360c0cc3dd19e76a54068a55496a8b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 04:54:33 -0400 Subject: [PATCH 157/220] Update changelog --- docs/changelog.rst | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index ca07319a67..3d1620a444 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,3 +1,33 @@ +2011-12-1 +--------- +* OCR queue processing improvements +* Office documents handling improvements +* Text extraction support for office documents +* RTF text documents are now handled as office documents + +2011-11-30 +---------- +* Added South to the requirements +* Merged documents' filename and extension database fiels into a single + filename field, filename are store as uploaded not manipulation is done + Users with existing data must install South and run the appropiate + migrate commands:: + $ pip install -r requirements/production.txt + $ ./manager syncdb + $ ./manage.py migrate documents 0001 --fake + $ ./manage.py migrate documents + +* Added new office document mimetype + * application/vnd.ms-office + +* Fixed documents not saving the file encoding + + +2011-11-28 +---------- +* Removed extra slash in ajax-loader.gif URL fixes #15, thanks to IHLeanne for finding this one + + Version 0.10 ------------ * Added a proper setup views for the document grouping functionality. From da1ab56202ae6712e0a78e6f79cec2fe35b4dffe Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 05:24:31 -0400 Subject: [PATCH 158/220] Add maintenace view to clear the document image cache --- apps/documents/__init__.py | 3 ++- apps/documents/models.py | 7 ++++++ .../static/images/icons/camera_delete.png | Bin 0 -> 2006 bytes apps/documents/urls.py | 1 + apps/documents/views.py | 21 ++++++++++++++++++ 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 apps/documents/static/images/icons/camera_delete.png diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 5ff5a84c9a..14ff0b07a3 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -85,6 +85,7 @@ document_clear_transformations = {'text': _(u'clear transformations'), 'view': ' document_multiple_clear_transformations = {'text': _(u'clear transformations'), 'view': 'document_multiple_clear_transformations', 'famfam': 'page_paintbrush', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} document_print = {'text': _(u'print'), 'view': 'document_print', 'args': 'object.id', 'famfam': 'printer', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_history_view = {'text': _(u'history'), 'view': 'history_for_object', 'args': ['"documents"', '"document"', 'object.id'], 'famfam': 'book_go', 'permissions': [PERMISSION_DOCUMENT_VIEW]} +document_clear_image_cache = {'text': _(u'Clear the document image cache'), 'view': 'document_clear_image_cache', 'famfam': 'camera_delete', 'permissions': [PERMISSION_DOCUMENT_TOOLS], 'description': _(u'Clear the graphics representations used to speed up the documents\' display and interactive transformations results.')} document_page_transformation_list = {'text': _(u'page transformations'), 'class': 'no-parent-history', 'view': 'document_page_transformation_list', 'args': 'page.pk', 'famfam': 'pencil_go', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} document_page_transformation_create = {'text': _(u'create new transformation'), 'class': 'no-parent-history', 'view': 'document_page_transformation_create', 'args': 'page.pk', 'famfam': 'pencil_add', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} @@ -158,7 +159,7 @@ register_links(['document_page_transformation_edit', 'document_page_transformati register_diagnostic('documents', _(u'Documents'), document_missing_list) -register_maintenance_links([document_find_all_duplicates, document_update_page_count], namespace='documents', title=_(u'documents')) +register_maintenance_links([document_find_all_duplicates, document_update_page_count, document_clear_image_cache], namespace='documents', title=_(u'documents')) #def document_exists(document): # try: diff --git a/apps/documents/models.py b/apps/documents/models.py index 2e5a627a73..ed578c36b9 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -92,6 +92,13 @@ class Document(models.Model): object_id_field='object_pk' ) + @staticmethod + def clear_image_cache(): + for the_file in os.listdir(CACHE_PATH): + file_path = os.path.join(CACHE_PATH, the_file) + if os.path.isfile(file_path): + os.unlink(file_path) + class Meta: verbose_name = _(u'document') verbose_name_plural = _(u'documents') diff --git a/apps/documents/static/images/icons/camera_delete.png b/apps/documents/static/images/icons/camera_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..05616882a73e1972924d02a55c5a900c9206d195 GIT binary patch literal 2006 zcmV;{2Pyc8P))fN6`cJ`HhdA$#B zyiN>p5`r72q-{`RJ3Itc5D}zmgG8%7gs3Q05mZ%6`l3Rps#2+HDQZ+`#28mq;d1$mfwvB#>Bh4@|hs0z%!u)W>M_`LOG2_rmY< zS25JUGeghqdwvI>Ns==F*koBjE?>a8u`x6@G$5DFBAH4fo=D=Z?RVn*_yn;cRfQJ# zd|tdU2?1a+PYmFufEPtgM>3toiJ_C2C#LwB&FR4{w`_x|3ai)_1CaXq{)6Mk2Vk+7 zLADpNapOiPiXs@$HEjU^4>xJ{i|`!eIuBy9GI=j9#o_{3pwWvS*RA5&-O2#UWev5c zTUf~eU^biSa0|BGx()q({o;OfbQBvlY#;y{iB9&D1pt}k^x1Q`5WRqSJboDiKEEHU zR<)qP(;(LQ0zv%9ofprNnII`rMt#^TRi~?JckF{>=;-J`G#V8L@f?K}N!1V7iH3%U zkxImcsjhEXNi4}?BURNgJ72=k;2?rcA+)uvMQkR4>FF8aORTiR>9{%oV{Gl*ioV`H zG>60F<+&<=vRc~!ICJI)N(rb*ih*0imG zUh_~sSR;^?y3oB0z=t1vxWIsg%)+Bg46qNRa#>7Ynu0fU9rpg$iBNM8cXS633cAI6 zmtt9rPR!7=7{0&ROz)nDmz>q*bO{qO09Cs(H_7!3u$JD&Mk5&r6R`dh<57fH2J!ls z6E|*bLr42{u&=Nqohu39d!D=Tb8Yxn)QRR$P^{5ea{|D^5m0Xext@Xb>(?WdOv3OD zRV@qJVly!WNF#Vx!Q*iwTbM_Fwun60KnUIQoTtH!qH7g`ey>==Ypaf|(OxQyWcTR| z)CPx+t}%rgtX3;5D_qFYVWpBPo~bqAd!Eb9mSCZnx7zK3IX+LXNa89O_#_itm4R|u z(8o??HY=D@EAY@W7wzPz6Q^W?Q?Vc?+abH$C|m3(TkTM-HfUxG%Iu7iyu>J=lq(ou z+O(SYk|sr}1Ad2tyjx$S4Q*_qq-C}vH1-j0IP?s1!-vo%DbV)PGV&vA>B8(c9)w0L zE-eZu8SyBUN>FtbW{VBe6xZENUX*8D@LNo%)B;qeRIbtcp?^GqmgD=;ynQD;-~J;^ zD;%PTX|n~S1_v;?=VxeLyJ_h@z$Pe>33Q6zK){E=lf&5AHizC+9OIcXJdznJiRK_B zfwujRq2=srXn*`EtZ>+o+rJO-J-d_z*dyD|6LizxN~n>`LP*Eif9fm#?Me{cwK=#Cm&D%WocV3xFPRP|-UlGC# zjEs!Hm@`bEQ36pE6T;0cn4@(2(!n>-<(j~o-!kK)A3Cuo|2Ks1xeulH-+~sq2-(I5 zn;}y%6T^@7a|5>R4~qFZnvAlsTm3C z2O`IM@%H;ip^|TGKk^>dZMhk^$n(bNoyiCQ@}j!yZSYdob0AMWLxHKKFoQxGMn_?y*E~J_pV)$B zc76%c#5n_=g#lF3>GaXVhYxodIeP(fEgc)z#q%r`D$yM4l1#3YPD3`^KD7xI@1#?r zJ2JXI7s+Z8e|=akahM}FuY2>0n>L7|rO(fyLMB9gyU(E6A8Z8JM80!s6t_nPoA|&v zt~DgFYi!d!iHg*ho-KXB=k-7*&lfCS=>pY;h7wjhok3RB`j~yC)}7{z9_<=N@lYc7 zbkH^PLLlHLuQ!vU>Q^Ixnw)Cd8K0WLp;-E94l>g+eB4w%PUTa#`P^&Dh5QZSP)LA~ z$>Z5K_-Z2RO*AJFfZmg*Fp|!{`tzal&(Ye{asc2KNB`%=L|>Q3xq3dEUT?Qq>HEM% ziO5P$XBN~asK5=L9>J+Zw&%OOXMV{&44YrV@(fmli)8patApM5u55hRrJ8| o)P1*k07*qoM6N<$f;KwSX8-^I literal 0 HcmV?d00001 diff --git a/apps/documents/urls.py b/apps/documents/urls.py index 0d16fb3880..e3cfbf598d 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -37,6 +37,7 @@ urlpatterns = patterns('documents.views', url(r'^multiple/clear_transformations/$', 'document_multiple_clear_transformations', (), 'document_multiple_clear_transformations'), url(r'^duplicates/list/$', 'document_find_all_duplicates', (), 'document_find_all_duplicates'), url(r'^maintenance/update_page_count/$', 'document_update_page_count', (), 'document_update_page_count'), + url(r'^maintenance/clear_image_cache/$', 'document_clear_image_cache', (), 'document_clear_image_cache'), url(r'^page/(?P\d+)/$', 'document_page_view', (), 'document_page_view'), url(r'^page/(?P\d+)/text/$', 'document_page_text', (), 'document_page_text'), diff --git a/apps/documents/views.py b/apps/documents/views.py index 68a70f2435..ba0e18e315 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -1121,3 +1121,24 @@ def document_type_filename_create(request, document_type_id): 'document_type': document_type, }, context_instance=RequestContext(request)) + + +def document_clear_image_cache(request): + check_permissions(request.user, [PERMISSION_DOCUMENT_TOOLS]) + + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + + if request.method == 'POST': + try: + Document.clear_image_cache() + messages.success(request, _(u'Document image cache cleared successfully')) + except Exception, msg: + messages.error(request, _(u'Error clearing document image cache; %s') % msg) + + return HttpResponseRedirect(previous) + + return render_to_response('generic_confirm.html', { + 'previous': previous, + 'title': _(u'Are you sure you wish to clear the document image cache?'), + 'form_icon': u'camera_delete.png', + }, context_instance=RequestContext(request)) From 93fdd0c5594d03233cc9d3c5e3ac360806f989d5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 05:24:53 -0400 Subject: [PATCH 159/220] Update changelog --- docs/changelog.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 3d1620a444..6f5cd78643 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -4,6 +4,8 @@ * Office documents handling improvements * Text extraction support for office documents * RTF text documents are now handled as office documents +* Added a view to delete the document image cache, useful when switching + converter backends or doing diagnostics 2011-11-30 ---------- From 60c05317b3e4fe676a5f1d9186f0282a22dd1a31 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 23:38:29 -0400 Subject: [PATCH 160/220] Fix indentation --- apps/converter/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/converter/api.py b/apps/converter/api.py index f48bf88986..993fb70f1d 100644 --- a/apps/converter/api.py +++ b/apps/converter/api.py @@ -63,7 +63,7 @@ def convert(input_filepath, output_filepath=None, cleanup_files=False, mimetype= mimetype = office_converter.mimetype except OfficeConversionError: - raise UnknownFileFormat('office converter exception') + raise UnknownFileFormat('office converter exception') if size: transformations.append( From 41de49916f950a4455f85c5b2ba2f9080123d12c Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 1 Dec 2011 23:38:50 -0400 Subject: [PATCH 161/220] Pass exc_info to logger for better debugging --- apps/converter/office_converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index e98b8cfdd4..a0c93aa6d9 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -115,4 +115,4 @@ class OfficeConverterBackendUnoconv(object): except OSError, msg: raise OfficeBackendError(msg) except Exception, msg: - logger.error('Unhandled exception: %s' % msg) + logger.error('Unhandled exception', exc_info=msg) From b38d84f663f628e7cd0ca6eb9f2dad8c3810bae7 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 2 Dec 2011 02:51:15 -0400 Subject: [PATCH 162/220] South schema and data migrations to support document versions --- ...unique_documentversion_document_mayor_m.py | 188 ++++++++++++++++ .../migrations/0005_document_versions.py | 181 ++++++++++++++++ .../migrations/0006_remove_old_file_fields.py | 202 ++++++++++++++++++ 3 files changed, 571 insertions(+) create mode 100644 apps/documents/migrations/0004_auto__add_documentversion__add_unique_documentversion_document_mayor_m.py create mode 100644 apps/documents/migrations/0005_document_versions.py create mode 100644 apps/documents/migrations/0006_remove_old_file_fields.py diff --git a/apps/documents/migrations/0004_auto__add_documentversion__add_unique_documentversion_document_mayor_m.py b/apps/documents/migrations/0004_auto__add_documentversion__add_unique_documentversion_document_mayor_m.py new file mode 100644 index 0000000000..e6b0c9bf10 --- /dev/null +++ b/apps/documents/migrations/0004_auto__add_documentversion__add_unique_documentversion_document_mayor_m.py @@ -0,0 +1,188 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'DocumentVersion' + db.create_table('documents_documentversion', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('document', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.Document'], null=True, blank=True)), + ('mayor', self.gf('django.db.models.fields.PositiveIntegerField')(default=1)), + ('minor', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('micro', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('release_level', self.gf('django.db.models.fields.PositiveIntegerField')(default=1)), + ('serial', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('timestamp', self.gf('django.db.models.fields.DateTimeField')()), + ('file', self.gf('django.db.models.fields.files.FileField')(max_length=100)), + ('mimetype', self.gf('django.db.models.fields.CharField')(default='', max_length=64)), + ('encoding', self.gf('django.db.models.fields.CharField')(default='', max_length=64)), + ('filename', self.gf('django.db.models.fields.CharField')(default=u'', max_length=255, db_index=True)), + ('checksum', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + )) + db.send_create_signal('documents', ['DocumentVersion']) + + # Adding unique constraint on 'DocumentVersion', fields ['document', 'mayor', 'minor', 'micro', 'release_level', 'serial'] + db.create_unique('documents_documentversion', ['document_id', 'mayor', 'minor', 'micro', 'release_level', 'serial']) + + # Adding field 'DocumentPage.document_version' + db.add_column('documents_documentpage', 'document_version', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.DocumentVersion'], null=True, blank=True), keep_default=False) + + + def backwards(self, orm): + + # Removing unique constraint on 'DocumentVersion', fields ['document', 'mayor', 'minor', 'micro', 'release_level', 'serial'] + db.delete_unique('documents_documentversion', ['document_id', 'mayor', 'minor', 'micro', 'release_level', 'serial']) + + # Deleting model 'DocumentVersion' + db.delete_table('documents_documentversion') + + # Deleting field 'DocumentPage.document_version' + db.delete_column('documents_documentpage', 'document_version_id') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'file_filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'file_mime_encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file_mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'a8389d7d-b9f4-4e51-ac24-dd9dd310fd8c'", 'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'document_version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentVersion']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.documentversion': { + 'Meta': {'unique_together': "(('document', 'mayor', 'minor', 'micro', 'release_level', 'serial'),)", 'object_name': 'DocumentVersion'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']", 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mayor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'release_level': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'serial': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] diff --git a/apps/documents/migrations/0005_document_versions.py b/apps/documents/migrations/0005_document_versions.py new file mode 100644 index 0000000000..738dfe9147 --- /dev/null +++ b/apps/documents/migrations/0005_document_versions.py @@ -0,0 +1,181 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + for document in orm.Document.objects.all(): + document_version = document.documentversion_set.create( + document = document, + #mayor = 1 + #minor = models.PositiveIntegerField(verbose_name=_(u'minor'), default=0) + #micro = models.PositiveIntegerField(verbose_name=_(u'micro'), default=0) + #release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'release level')) + #serial = models.PositiveIntegerField(verbose_name=_(u'serial'), default=0) + timestamp = document.date_added, + file = document.file, + mimetype = document.file_mimetype, + encoding = document.file_mime_encoding, + filename = document.file_filename, + checksum = document.checksum, + ) + document_version.save() + for document_page in document.documentpage_set.all(): + document_page.document_version = document_version + document_page.save() + + def backwards(self, orm): + for document in orm.Document.objects.all(): + document_version = document.documentversion_set.all()[0] + document.date_added = document_version.timestamp + document.file = document_version.file + document.file_mimetype = document_version.mimetype + document.file_mime_encoding = document_version.encoding + document.filename = document_version.filename + document.checksum = document_version.checksum + document.save() + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'file_filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'file_mime_encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file_mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'6c189f1f-1d85-48b5-9b7d-e8e319603e77'", 'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'document_version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentVersion']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.documentversion': { + 'Meta': {'unique_together': "(('document', 'mayor', 'minor', 'micro', 'release_level', 'serial'),)", 'object_name': 'DocumentVersion'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']", 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mayor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'release_level': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'serial': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] diff --git a/apps/documents/migrations/0006_remove_old_file_fields.py b/apps/documents/migrations/0006_remove_old_file_fields.py new file mode 100644 index 0000000000..203532d012 --- /dev/null +++ b/apps/documents/migrations/0006_remove_old_file_fields.py @@ -0,0 +1,202 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'DocumentVersion.document' + db.alter_column('documents_documentversion', 'document_id', self.gf('django.db.models.fields.related.ForeignKey')(default='', to=orm['documents.Document'])) + + # Deleting field 'Document.date_updated' + db.delete_column('documents_document', 'date_updated') + + # Deleting field 'Document.file' + db.delete_column('documents_document', 'file') + + # Deleting field 'Document.file_filename' + db.delete_column('documents_document', 'file_filename') + + # Deleting field 'Document.file_mimetype' + db.delete_column('documents_document', 'file_mimetype') + + # Deleting field 'Document.checksum' + db.delete_column('documents_document', 'checksum') + + # Deleting field 'Document.file_mime_encoding' + db.delete_column('documents_document', 'file_mime_encoding') + + # Deleting field 'DocumentPage.document' + db.delete_column('documents_documentpage', 'document_id') + + # Changing field 'DocumentPage.document_version' + db.alter_column('documents_documentpage', 'document_version_id', self.gf('django.db.models.fields.related.ForeignKey')(default='', to=orm['documents.DocumentVersion'])) + + + def backwards(self, orm): + + # Changing field 'DocumentVersion.document' + db.alter_column('documents_documentversion', 'document_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.Document'], null=True)) + + # Adding field 'Document.date_updated' + db.add_column('documents_document', 'date_updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, default=datetime.datetime(2011, 12, 2, 2, 17, 25, 53565), blank=True), keep_default=False) + + # Adding field 'Document.file' + db.add_column('documents_document', 'file', self.gf('django.db.models.fields.files.FileField')(default='', max_length=100), keep_default=False) + + # Adding field 'Document.file_filename' + db.add_column('documents_document', 'file_filename', self.gf('django.db.models.fields.CharField')(default=u'', max_length=255, db_index=True), keep_default=False) + + # Adding field 'Document.file_mimetype' + db.add_column('documents_document', 'file_mimetype', self.gf('django.db.models.fields.CharField')(default='', max_length=64), keep_default=False) + + # Adding field 'Document.checksum' + db.add_column('documents_document', 'checksum', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False) + + # Adding field 'Document.file_mime_encoding' + db.add_column('documents_document', 'file_mime_encoding', self.gf('django.db.models.fields.CharField')(default='', max_length=64), keep_default=False) + + # Adding field 'DocumentPage.document' + db.add_column('documents_documentpage', 'document', self.gf('django.db.models.fields.related.ForeignKey')(default='', to=orm['documents.Document']), keep_default=False) + + # Changing field 'DocumentPage.document_version' + db.alter_column('documents_documentpage', 'document_version_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.DocumentVersion'], null=True)) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'83100718-e901-4880-95f8-3618749c8a99'", 'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentVersion']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.documentversion': { + 'Meta': {'unique_together': "(('document', 'mayor', 'minor', 'micro', 'release_level', 'serial'),)", 'object_name': 'DocumentVersion'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mayor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'release_level': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'serial': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] From d83e8b5428e0e79e7b6ab7d0b1624343f21e699e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 2 Dec 2011 02:51:59 -0400 Subject: [PATCH 163/220] Initial set of model, form and API changes to support document versions --- apps/documents/__init__.py | 2 +- apps/documents/admin.py | 33 ++++--- apps/documents/forms.py | 6 +- apps/documents/models.py | 180 +++++++++++++++++++++++++++++++------ apps/ocr/api.py | 2 +- 5 files changed, 182 insertions(+), 41 deletions(-) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 14ff0b07a3..f47ab4bab9 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -35,7 +35,7 @@ def is_first_page(context): def is_last_page(context): - return context['page'].page_number >= context['page'].document.documentpage_set.count() + return context['page'].page_number >= context['page'].document_version.pages.count() def is_min_zoom(context): diff --git a/apps/documents/admin.py b/apps/documents/admin.py index 71d0fab939..8ef02b1cea 100644 --- a/apps/documents/admin.py +++ b/apps/documents/admin.py @@ -2,11 +2,29 @@ from django.contrib import admin from metadata.admin import DocumentMetadataInline -from documents.models import DocumentType, Document, \ - DocumentTypeFilename, DocumentPage, \ - DocumentPageTransformation, RecentDocument +from documents.models import (DocumentType, Document, + DocumentTypeFilename, DocumentPage, + DocumentPageTransformation, RecentDocument, + DocumentVersion) +class DocumentPageInline(admin.StackedInline): + model = DocumentPage + extra = 1 + classes = ('collapse-open',) + allow_add = True + + +class DocumentVersionInline(admin.StackedInline): + model = DocumentVersion + extra = 1 + classes = ('collapse-open',) + allow_add = True + inlines = [ + DocumentPageInline, + ] + + class DocumentTypeFilenameInline(admin.StackedInline): model = DocumentTypeFilename extra = 1 @@ -24,16 +42,9 @@ class DocumentPageTransformationAdmin(admin.ModelAdmin): model = DocumentPageTransformation -class DocumentPageInline(admin.StackedInline): - model = DocumentPage - extra = 1 - classes = ('collapse-open',) - allow_add = True - - class DocumentAdmin(admin.ModelAdmin): inlines = [ - DocumentMetadataInline, DocumentPageInline + DocumentMetadataInline, DocumentVersionInline ] list_display = ('uuid', 'file_filename',) diff --git a/apps/documents/forms.py b/apps/documents/forms.py index 320b60bc71..47ac8215da 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -100,7 +100,7 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget): output = [] output.append(u'
') - for page in value.documentpage_set.all(): + for page in value.pages.all(): output.append(u'
') output.append( document_html_widget( @@ -128,7 +128,7 @@ class DocumentPreviewForm(forms.Form): document = kwargs.pop('document', None) super(DocumentPreviewForm, self).__init__(*args, **kwargs) self.fields['preview'].initial = document - self.fields['preview'].label = _(u'Document pages (%s)') % document.documentpage_set.count() + self.fields['preview'].label = _(u'Document pages (%s)') % document.pages.count() preview = forms.CharField(widget=DocumentPagesCarouselWidget()) @@ -198,7 +198,7 @@ class DocumentContentForm(forms.Form): super(DocumentContentForm, self).__init__(*args, **kwargs) content = [] self.fields['contents'].initial = u'' - for page in self.document.documentpage_set.all(): + for page in self.document.pages.all(): if page.content: content.append(page.content) content.append(u'\n\n\n - Page %s - \n\n\n' % page.page_number) diff --git a/apps/documents/models.py b/apps/documents/models.py index ed578c36b9..6d68e03ae6 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -72,17 +72,20 @@ class Document(models.Model): """ Defines a single document with it's fields and properties """ + # Base fields document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'), null=True, blank=True) - file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'file')) uuid = models.CharField(max_length=48, default=UUID_FUNCTION(), blank=True, editable=False) - file_mimetype = models.CharField(max_length=64, default='', editable=False) - file_mime_encoding = models.CharField(max_length=64, default='', editable=False) - #FAT filename can be up to 255 using LFN - file_filename = models.CharField(max_length=255, default=u'', editable=False, db_index=True) - date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True, db_index=True) - date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True) - checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) description = models.TextField(blank=True, null=True, verbose_name=_(u'description'), db_index=True) + date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True, db_index=True) + + ## Fields to migrate + #file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'file')) + #file_mimetype = models.CharField(max_length=64, default='', editable=False) + #file_mime_encoding = models.CharField(max_length=64, default='', editable=False) + ##FAT filename can be up to 255 using LFN + #file_filename = models.CharField(max_length=255, default=u'', editable=False, db_index=True) + #date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True) + #checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) tags = TaggableManager() @@ -155,7 +158,8 @@ class Document(models.Model): Return a file descriptor to a document's file irrespective of the storage backend """ - return self.file.storage.open(self.file.path) + #return self.file.storage.open(self.file.path) + return self.get_latest_version().file.storage.open(self.get_latest_version().file.path) def update_checksum(self, save=True): """ @@ -163,11 +167,11 @@ class Document(models.Model): user provided checksum function """ if self.exists(): - source = self.open() - self.checksum = unicode(CHECKSUM_FUNCTION(source.read())) + source = self.get_latest_version().open() + self.get_latest_version().checksum = unicode(CHECKSUM_FUNCTION(source.read())) source.close() if save: - self.save() + self.get_latest_version().save() def update_page_count(self, save=True): handle, filepath = tempfile.mkstemp() @@ -204,7 +208,8 @@ class Document(models.Model): @property def page_count(self): - return self.documentpage_set.count() + #return self.documentpage_set.count() + return self.get_latest_version().documentpage_set.count() def save_to_file(self, filepath, buffer_size=1024 * 1024): """ @@ -229,13 +234,13 @@ class Document(models.Model): Returns a boolean value that indicates if the document's file exists in storage """ - return self.file.storage.exists(self.file.path) + return self.get_latest_version().file.storage.exists(self.get_latest_version().file.path) def apply_default_transformations(self, transformations): #Only apply default transformations on new documents - if reduce(lambda x, y: x + y, [page.documentpagetransformation_set.count() for page in self.documentpage_set.all()]) == 0: + if reduce(lambda x, y: x + y, [page.documentpagetransformation_set.count() for page in self.pages.all()]) == 0: for transformation in transformations: - for document_page in self.documentpage_set.all(): + for document_page in self.pages.all(): page_transformation = DocumentPageTransformation( document_page=document_page, order=0, @@ -246,7 +251,7 @@ class Document(models.Model): page_transformation.save() def get_cached_image_name(self, page): - document_page = self.documentpage_set.get(page_number=page) + document_page = self.pages.get(page_number=page) transformations, warnings = document_page.get_transformation_list() hash_value = HASH_FUNCTION(u''.join([self.checksum, unicode(page), unicode(transformations)])) return os.path.join(CACHE_PATH, hash_value), transformations @@ -300,15 +305,129 @@ class Document(models.Model): def delete(self, *args, **kwargs): super(Document, self).delete(*args, **kwargs) - return self.file.storage.delete(self.file.path) + for version in self.documentversion_set.all(): + version.file.storage.delete(version.file.path) + #return self.get_latest_version().file.storage.delete(self.get_latest_version().file.path) @property def size(self): if self.exists(): - return self.file.storage.size(self.file.path) + return self.get_latest_version().file.storage.size(self.get_latest_version().file.path) else: return None - + + # Compatibiliy methods + @property + def file(self): + return self.get_latest_version().file + + @property + def file_mimetype(self): + return self.get_latest_version().mimetype + + @property + def file_mime_encoding(self): + return self.get_latest_version().encoding + + @property + def file_filename(self): + return self.get_latest_version().filename + + @property + def date_updated(self): + return self.get_latest_version().timestamp + + #@property + #def date_added(self): + # return self.get_latest_version().timestamp + + @property + def checksum(self): + return self.get_latest_version().checksum + + @property + def pages(self): + return self.get_latest_version().pages + + + #file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'file')) + #file_mimetype = models.CharField(max_length=64, default='', editable=False) + #file_mime_encoding = models.CharField(max_length=64, default='', editable=False) + ##FAT filename can be up to 255 using LFN + #file_filename = models.CharField(max_length=255, default=u'', editable=False, db_index=True) + #date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True) + #checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) + + def get_latest_version(self): + return self.documentversion_set.order_by('-timestamp')[0] + + +RELEASE_LEVEL_FINAL = 1 +RELEASE_LEVEL_ALPHA = 2 +RELEASE_LEVEL_BETA = 3 +RELEASE_LEVEL_RC = 4 +RELEASE_LEVEL_HF = 5 + +RELEASE_LEVEL_CHOICES = ( + (RELEASE_LEVEL_FINAL, _(u'final')), + (RELEASE_LEVEL_ALPHA, _(u'alpha')), + (RELEASE_LEVEL_BETA, _(u'beta')), + (RELEASE_LEVEL_RC, _(u'release candidate')), + (RELEASE_LEVEL_HF, _(u'hotfix')), +) + +class DocumentVersion(models.Model): + ''' + Model that describes a document version and it properties + ''' + document = models.ForeignKey(Document, verbose_name=_(u'document')) + mayor = models.PositiveIntegerField(verbose_name=_(u'mayor'), default=1) + minor = models.PositiveIntegerField(verbose_name=_(u'minor'), default=0) + micro = models.PositiveIntegerField(verbose_name=_(u'micro'), default=0) + release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'release level')) + serial = models.PositiveIntegerField(verbose_name=_(u'serial'), default=0) + timestamp = models.DateTimeField(verbose_name=_(u'timestamp')) + + # File related fields + file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'file')) + mimetype = models.CharField(max_length=64, default='', editable=False) + encoding = models.CharField(max_length=64, default='', editable=False) + filename = models.CharField(max_length=255, default=u'', editable=False, db_index=True) + checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) + + class Meta: + unique_together = ('document', 'mayor', 'minor', 'micro', 'release_level', 'serial') + verbose_name = _(u'document version') + verbose_name_plural = _(u'document version') + + def __unicode__(self): + return self.get_version() + + # TODO: Update timestamp + + def get_version(): + ''' + Return the formatted version information + ''' + vers = [u'%(major)i.%(minor)i' % self, ] + + if self.micro: + vers.append(u'.%(micro)i' % self) + if self.releaselevel != RELEASE_LEVEL_FINAL: + vers.append(u'%(releaselevel)s%(serial)i' % self) + return u''.join(vers) + + @property + def pages(self): + return self.documentpage_set + + def open(self): + ''' + Return a file descriptor to a document version's file irrespective of + the storage backend + ''' + return self.file.storage.open(self.file.path) + class DocumentTypeFilename(models.Model): """ @@ -332,7 +451,13 @@ class DocumentPage(models.Model): """ Model that describes a document page including it's content """ - document = models.ForeignKey(Document, verbose_name=_(u'document')) + ## This field is to be removed + #document = models.ForeignKey(Document, verbose_name=_(u'document')) + + # New parent field + document_version = models.ForeignKey(DocumentVersion, verbose_name=_(u'document version'))#, null=True, blank=True) # TODO: Remove these after datamigration + + # Unchanged fields content = models.TextField(blank=True, null=True, verbose_name=_(u'content'), db_index=True) page_label = models.CharField(max_length=32, blank=True, null=True, verbose_name=_(u'page label')) page_number = models.PositiveIntegerField(default=1, editable=False, verbose_name=_(u'page number'), db_index=True) @@ -341,7 +466,7 @@ class DocumentPage(models.Model): return _(u'Page %(page_num)d out of %(total_pages)d of %(document)s') % { 'document': unicode(self.document), 'page_num': self.page_number, - 'total_pages': self.document.documentpage_set.count() + 'total_pages': self.document_version.documentpage_set.count() } class Meta: @@ -355,6 +480,11 @@ class DocumentPage(models.Model): @models.permalink def get_absolute_url(self): return ('document_page_view', [self.pk]) + + # Compatibility methods + @property + def document(self): + return self.document_version.document class ArgumentsValidator(object): @@ -421,10 +551,10 @@ class RecentDocument(models.Model): # Register the fields that will be searchable register('document', Document, _(u'document'), [ {'name': u'document_type__name', 'title': _(u'Document type')}, - {'name': u'file_mimetype', 'title': _(u'MIME type')}, - {'name': u'file_filename', 'title': _(u'Filename')}, + {'name': u'documentversion__mimetype', 'title': _(u'MIME type')}, + {'name': u'documentversion__filename', 'title': _(u'Filename')}, {'name': u'documentmetadata__value', 'title': _(u'Metadata value')}, - {'name': u'documentpage__content', 'title': _(u'Content')}, + {'name': u'documentversion__documentpage__content', 'title': _(u'Content')}, {'name': u'description', 'title': _(u'Description')}, {'name': u'tags__name', 'title': _(u'Tags')}, {'name': u'comments__comment', 'title': _(u'Comments')}, diff --git a/apps/ocr/api.py b/apps/ocr/api.py index 4d70443f92..e568ecf6c8 100644 --- a/apps/ocr/api.py +++ b/apps/ocr/api.py @@ -88,7 +88,7 @@ def do_document_ocr(queue_document): parser, if the parser fails or if there is no parser registered for the document mimetype do a visual OCR by calling tesseract """ - for document_page in queue_document.document.documentpage_set.all(): + for document_page in queue_document.document.pages.all(): try: # Try to extract text by means of a parser parse_document_page(document_page) From 640a1c2966f5f1f76c6374f0bb888825c1976f5d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 2 Dec 2011 05:53:12 -0400 Subject: [PATCH 164/220] Add two new migrations, one to fix a field name, the other to add a comment field to the document versions --- .../migrations/0007_fix_mayor_field_name.py | 172 ++++++++++++++++++ .../migrations/0008_add_comment_field.py | 155 ++++++++++++++++ 2 files changed, 327 insertions(+) create mode 100644 apps/documents/migrations/0007_fix_mayor_field_name.py create mode 100644 apps/documents/migrations/0008_add_comment_field.py diff --git a/apps/documents/migrations/0007_fix_mayor_field_name.py b/apps/documents/migrations/0007_fix_mayor_field_name.py new file mode 100644 index 0000000000..dc540dfbec --- /dev/null +++ b/apps/documents/migrations/0007_fix_mayor_field_name.py @@ -0,0 +1,172 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Removing unique constraint on 'DocumentVersion', fields ['release_level', 'micro', 'serial', 'document', 'mayor', 'minor'] + db.delete_unique('documents_documentversion', ['release_level', 'micro', 'serial', 'document_id', 'mayor', 'minor']) + + # Deleting field 'DocumentVersion.mayor' + db.delete_column('documents_documentversion', 'mayor') + + # Adding field 'DocumentVersion.major' + db.add_column('documents_documentversion', 'major', self.gf('django.db.models.fields.PositiveIntegerField')(default=1), keep_default=False) + + # Adding unique constraint on 'DocumentVersion', fields ['major', 'release_level', 'micro', 'serial', 'document', 'minor'] + db.create_unique('documents_documentversion', ['major', 'release_level', 'micro', 'serial', 'document_id', 'minor']) + + + def backwards(self, orm): + + # Removing unique constraint on 'DocumentVersion', fields ['major', 'release_level', 'micro', 'serial', 'document', 'minor'] + db.delete_unique('documents_documentversion', ['major', 'release_level', 'micro', 'serial', 'document_id', 'minor']) + + # Adding field 'DocumentVersion.mayor' + db.add_column('documents_documentversion', 'mayor', self.gf('django.db.models.fields.PositiveIntegerField')(default=1), keep_default=False) + + # Deleting field 'DocumentVersion.major' + db.delete_column('documents_documentversion', 'major') + + # Adding unique constraint on 'DocumentVersion', fields ['release_level', 'micro', 'serial', 'document', 'mayor', 'minor'] + db.create_unique('documents_documentversion', ['release_level', 'micro', 'serial', 'document_id', 'mayor', 'minor']) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'750a3848-39cf-45a5-9a96-e948d09833d7'", 'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentVersion']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.documentversion': { + 'Meta': {'unique_together': "(('document', 'major', 'minor', 'micro', 'release_level', 'serial'),)", 'object_name': 'DocumentVersion'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'major': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'release_level': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'serial': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] diff --git a/apps/documents/migrations/0008_add_comment_field.py b/apps/documents/migrations/0008_add_comment_field.py new file mode 100644 index 0000000000..2010270407 --- /dev/null +++ b/apps/documents/migrations/0008_add_comment_field.py @@ -0,0 +1,155 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'DocumentVersion.comment' + db.add_column('documents_documentversion', 'comment', self.gf('django.db.models.fields.TextField')(default='', blank=True), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'DocumentVersion.comment' + db.delete_column('documents_documentversion', 'comment') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'123068ef-26d2-45bb-8933-cb6818cd87e4'", 'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentVersion']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.documentversion': { + 'Meta': {'unique_together': "(('document', 'major', 'minor', 'micro', 'release_level', 'serial'),)", 'object_name': 'DocumentVersion'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'major': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'release_level': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'serial': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] From 3e471f702e4fbbfd703953313512f3f44196ae7c Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 2 Dec 2011 05:54:00 -0400 Subject: [PATCH 165/220] Add document version list view and document version download --- apps/documents/__init__.py | 17 ++++++++++--- apps/documents/admin.py | 6 ++--- apps/documents/models.py | 19 +++++++++------ apps/documents/urls.py | 3 +++ apps/documents/views.py | 50 ++++++++++++++++++++++++++++++++++++-- 5 files changed, 80 insertions(+), 15 deletions(-) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index f47ab4bab9..1a39e01ac8 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -13,8 +13,9 @@ from history.api import register_history_type from metadata.api import get_metadata_string from project_setup.api import register_setup -from documents.models import Document, DocumentPage, \ - DocumentPageTransformation, DocumentType, DocumentTypeFilename +from documents.models import (Document, DocumentPage, + DocumentPageTransformation, DocumentType, DocumentTypeFilename, + DocumentVersion) from documents.literals import PERMISSION_DOCUMENT_CREATE, \ PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW, \ PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \ @@ -78,6 +79,7 @@ document_multiple_delete = {'text': _(u'delete'), 'view': 'document_multiple_del document_edit = {'text': _(u'edit'), 'view': 'document_edit', 'args': 'object.id', 'famfam': 'page_edit', 'permissions': [PERMISSION_DOCUMENT_PROPERTIES_EDIT]} document_preview = {'text': _(u'preview'), 'class': 'fancybox', 'view': 'document_preview', 'args': 'object.id', 'famfam': 'magnifier', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_download = {'text': _(u'download'), 'view': 'document_download', 'args': 'object.id', 'famfam': 'page_save', 'permissions': [PERMISSION_DOCUMENT_DOWNLOAD]} +document_version_download = {'text': _(u'download'), 'view': 'document_version_download', 'args': 'object.pk', 'famfam': 'page_save', 'permissions': [PERMISSION_DOCUMENT_DOWNLOAD]} document_find_duplicates = {'text': _(u'find duplicates'), 'view': 'document_find_duplicates', 'args': 'object.id', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_find_all_duplicates = {'text': _(u'find all duplicates'), 'view': 'document_find_all_duplicates', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'description': _(u'Search all the documents\' checksums and return a list of the exact matches.')} document_update_page_count = {'text': _(u'update office documents\' page count'), 'view': 'document_update_page_count', 'famfam': 'page_white_csharp', 'permissions': [PERMISSION_DOCUMENT_TOOLS], 'description': _(u'Update the page count of the office type documents. This is useful when enabling office document support after there were already office type documents in the database.')} @@ -85,8 +87,12 @@ document_clear_transformations = {'text': _(u'clear transformations'), 'view': ' document_multiple_clear_transformations = {'text': _(u'clear transformations'), 'view': 'document_multiple_clear_transformations', 'famfam': 'page_paintbrush', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} document_print = {'text': _(u'print'), 'view': 'document_print', 'args': 'object.id', 'famfam': 'printer', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_history_view = {'text': _(u'history'), 'view': 'history_for_object', 'args': ['"documents"', '"document"', 'object.id'], 'famfam': 'book_go', 'permissions': [PERMISSION_DOCUMENT_VIEW]} +document_missing_list = {'text': _(u'Find missing document files'), 'view': 'document_missing_list', 'famfam': 'folder_page', 'permissions': [PERMISSION_DOCUMENT_VIEW]} + +# Tools document_clear_image_cache = {'text': _(u'Clear the document image cache'), 'view': 'document_clear_image_cache', 'famfam': 'camera_delete', 'permissions': [PERMISSION_DOCUMENT_TOOLS], 'description': _(u'Clear the graphics representations used to speed up the documents\' display and interactive transformations results.')} +# Document pages document_page_transformation_list = {'text': _(u'page transformations'), 'class': 'no-parent-history', 'view': 'document_page_transformation_list', 'args': 'page.pk', 'famfam': 'pencil_go', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} document_page_transformation_create = {'text': _(u'create new transformation'), 'class': 'no-parent-history', 'view': 'document_page_transformation_create', 'args': 'page.pk', 'famfam': 'pencil_add', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} document_page_transformation_edit = {'text': _(u'edit'), 'class': 'no-parent-history', 'view': 'document_page_transformation_edit', 'args': 'transformation.pk', 'famfam': 'pencil_go', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} @@ -105,7 +111,8 @@ document_page_rotate_right = {'text': _(u'rotate right'), 'class': 'no-parent-hi document_page_rotate_left = {'text': _(u'rotate left'), 'class': 'no-parent-history', 'view': 'document_page_rotate_left', 'args': 'page.pk', 'famfam': 'arrow_turn_left', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_page_view_reset = {'text': _(u'reset view'), 'class': 'no-parent-history', 'view': 'document_page_view_reset', 'args': 'page.pk', 'famfam': 'page_white', 'permissions': [PERMISSION_DOCUMENT_VIEW]} -document_missing_list = {'text': _(u'Find missing document files'), 'view': 'document_missing_list', 'famfam': 'folder_page', 'permissions': [PERMISSION_DOCUMENT_VIEW]} +# Document versions +document_version_list = {'text': _(u'versions'), 'view': 'document_version_list', 'args': 'object.pk', 'famfam': 'page_world', 'permissions': [PERMISSION_DOCUMENT_VIEW]} # Document type related links document_type_list = {'text': _(u'document type list'), 'view': 'document_type_list', 'famfam': 'layout', 'permissions': [PERMISSION_DOCUMENT_VIEW]} @@ -133,6 +140,9 @@ register_links(['document_type_filename_create', 'document_type_filename_list', register_links(Document, [document_edit, document_print, document_delete, document_download, document_find_duplicates, document_clear_transformations, document_create_siblings]) register_multi_item_links(['document_find_duplicates', 'folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete]) +# Document Version links +register_links(DocumentVersion, [document_version_download]) + secondary_menu_links = [document_list_recent, document_list, document_create_multiple] register_links(['document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_interactive', 'staging_file_delete'], secondary_menu_links, menu_name='secondary_menu') @@ -198,6 +208,7 @@ register_sidebar_template(['document_type_list'], 'document_types_help.html') register_links(Document, [document_view_simple], menu_name='form_header', position=0) register_links(Document, [document_view_advanced], menu_name='form_header', position=1) register_links(Document, [document_history_view], menu_name='form_header') +register_links(Document, [document_version_list], menu_name='form_header') if (validate_path(document_settings.CACHE_PATH) == False) or (not document_settings.CACHE_PATH): setattr(document_settings, 'CACHE_PATH', tempfile.mkdtemp()) diff --git a/apps/documents/admin.py b/apps/documents/admin.py index 8ef02b1cea..8fc0e838bb 100644 --- a/apps/documents/admin.py +++ b/apps/documents/admin.py @@ -20,9 +20,9 @@ class DocumentVersionInline(admin.StackedInline): extra = 1 classes = ('collapse-open',) allow_add = True - inlines = [ - DocumentPageInline, - ] + #inlines = [ + # DocumentPageInline, + #] class DocumentTypeFilenameInline(admin.StackedInline): diff --git a/apps/documents/models.py b/apps/documents/models.py index 6d68e03ae6..ab1165bf5f 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -361,6 +361,10 @@ class Document(models.Model): def get_latest_version(self): return self.documentversion_set.order_by('-timestamp')[0] + @property + def versions(self): + return self.documentversion_set + RELEASE_LEVEL_FINAL = 1 RELEASE_LEVEL_ALPHA = 2 @@ -381,12 +385,13 @@ class DocumentVersion(models.Model): Model that describes a document version and it properties ''' document = models.ForeignKey(Document, verbose_name=_(u'document')) - mayor = models.PositiveIntegerField(verbose_name=_(u'mayor'), default=1) + major = models.PositiveIntegerField(verbose_name=_(u'mayor'), default=1) minor = models.PositiveIntegerField(verbose_name=_(u'minor'), default=0) micro = models.PositiveIntegerField(verbose_name=_(u'micro'), default=0) release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'release level')) serial = models.PositiveIntegerField(verbose_name=_(u'serial'), default=0) timestamp = models.DateTimeField(verbose_name=_(u'timestamp')) + comment = models.TextField(blank=True, verbose_name=_(u'comment')) # File related fields file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'file')) @@ -396,7 +401,7 @@ class DocumentVersion(models.Model): checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) class Meta: - unique_together = ('document', 'mayor', 'minor', 'micro', 'release_level', 'serial') + unique_together = ('document', 'major', 'minor', 'micro', 'release_level', 'serial') verbose_name = _(u'document version') verbose_name_plural = _(u'document version') @@ -405,16 +410,16 @@ class DocumentVersion(models.Model): # TODO: Update timestamp - def get_version(): + def get_version(self): ''' Return the formatted version information ''' - vers = [u'%(major)i.%(minor)i' % self, ] + vers = [u'%i.%i' % (self.major, self.minor), ] if self.micro: - vers.append(u'.%(micro)i' % self) - if self.releaselevel != RELEASE_LEVEL_FINAL: - vers.append(u'%(releaselevel)s%(serial)i' % self) + vers.append(u'.%i' % self.micro) + if self.release_level != RELEASE_LEVEL_FINAL: + vers.append(u'%s%i' % (self.release_level, self.serial)) return u''.join(vers) @property diff --git a/apps/documents/urls.py b/apps/documents/urls.py index e3cfbf598d..88650155a7 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -33,6 +33,9 @@ urlpatterns = patterns('documents.views', url(r'^(?P\d+)/create/siblings/$', 'document_create_siblings', (), 'document_create_siblings'), url(r'^(?P\d+)/find_duplicates/$', 'document_find_duplicates', (), 'document_find_duplicates'), url(r'^(?P\d+)/clear_transformations/$', 'document_clear_transformations', (), 'document_clear_transformations'), + + url(r'^(?P\d+)/version/all/$', 'document_version_list', (), 'document_version_list'), + url(r'^document/version/(?P\d+)/download/$', 'document_version_download', (), 'document_version_download'), url(r'^multiple/clear_transformations/$', 'document_multiple_clear_transformations', (), 'document_multiple_clear_transformations'), url(r'^duplicates/list/$', 'document_find_all_duplicates', (), 'document_find_all_duplicates'), diff --git a/apps/documents/views.py b/apps/documents/views.py index ba0e18e315..efaaf3e2da 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -53,8 +53,9 @@ from documents.forms import DocumentTypeSelectForm, \ DocumentPageForm_text, PrintForm, DocumentTypeForm, \ DocumentTypeFilenameForm, DocumentTypeFilenameForm_create from documents.wizards import DocumentCreateWizard -from documents.models import Document, DocumentType, DocumentPage, \ - DocumentPageTransformation, RecentDocument, DocumentTypeFilename +from documents.models import (Document, DocumentType, DocumentPage, + DocumentPageTransformation, RecentDocument, DocumentTypeFilename, + DocumentVersion) # Document type permissions from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT, \ @@ -294,6 +295,10 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, base64_version=F return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation), mimetype=DEFAULT_FILE_FORMAT_MIMETYPE) +def document_version_download(request, document_version_pk): + document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) + return document_download(request, document_version.document.pk) + def document_download(request, document_id): check_permissions(request.user, [PERMISSION_DOCUMENT_DOWNLOAD]) @@ -1142,3 +1147,44 @@ def document_clear_image_cache(request): 'title': _(u'Are you sure you wish to clear the document image cache?'), 'form_icon': u'camera_delete.png', }, context_instance=RequestContext(request)) + + +def document_version_list(request, document_pk): + check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) + document = get_object_or_404(Document, pk=document_pk) + + context = { + 'object_list': document.versions.all(), + 'title': _(u'versions for document: %s') % document, + 'hide_object': True, + 'object': document, + 'extra_columns': [ + { + 'name': _(u'version'), + 'attribute': 'get_version', + }, + { + 'name': _(u'time and date'), + 'attribute': 'timestamp', + }, + { + 'name': _(u'mimetype'), + 'attribute': 'mimetype', + }, + { + 'name': _(u'encoding'), + 'attribute': 'encoding', + }, + { + 'name': _(u'filename'), + 'attribute': 'filename', + }, + { + 'name': _(u'comment'), + 'attribute': 'comment', + }, + ] + } + + return render_to_response('generic_list.html', context, + context_instance=RequestContext(request)) From 5905dbd3e0786ffca4df987c2d9ee491b5f05bad Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 2 Dec 2011 05:54:36 -0400 Subject: [PATCH 166/220] Updated changelog --- docs/changelog.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 6f5cd78643..17106351dd 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,3 +1,7 @@ +2011-12-2 +--------- +* Added migrations and model updated to support document versions + 2011-12-1 --------- * OCR queue processing improvements From e92a0f79964477dfb18a5dc1c3aa4ded9ad05778 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 2 Dec 2011 05:55:01 -0400 Subject: [PATCH 167/220] Updated version to 0.11beta2 and add python authoring structures --- apps/main/__init__.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 0532245481..582747e0d5 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -8,24 +8,33 @@ from project_tools.api import register_tool from main.conf.settings import SIDE_BAR_SEARCH from main.conf.settings import DISABLE_HOME_VIEW +__author__ = 'Roberto Rosario' +__copyright__ = 'Copyright 2011 Roberto Rosario' +__credits__ = ['Roberto Rosario',] +__license__ = 'GPL' +__maintainer__ = 'Roberto Rosario' +__email__ = 'roberto.rosario.gonzalez@gmail.com' +__status__ = 'Production' + +__version_info__ = { + 'major': 0, + 'minor': 11, + 'micro': 0, + 'releaselevel': 'beta', + 'serial': 2 +} + def is_superuser(context): return context['request'].user.is_staff or context['request'].user.is_superuser + maintenance_menu = {'text': _(u'maintenance'), 'view': 'maintenance_menu', 'famfam': 'wrench', 'icon': 'wrench.png'} statistics = {'text': _(u'statistics'), 'view': 'statistics', 'famfam': 'table', 'icon': 'blackboard_sum.png'} diagnostics = {'text': _(u'diagnostics'), 'view': 'diagnostics', 'famfam': 'pill', 'icon': 'pill.png'} sentry = {'text': _(u'sentry'), 'view': 'sentry', 'famfam': 'bug', 'icon': 'bug.png', 'condition': is_superuser} admin_site = {'text': _(u'admin site'), 'view': 'admin:index', 'famfam': 'keyboard', 'icon': 'keyboard.png', 'condition': is_superuser} -__version_info__ = { - 'major': 0, - 'minor': 10, - 'micro': 0, - 'releaselevel': 'final', - 'serial': 0 -} - if not DISABLE_HOME_VIEW: register_top_menu('home', link={'text': _(u'home'), 'view': 'home', 'famfam': 'house'}, position=0) if not SIDE_BAR_SEARCH: @@ -36,14 +45,15 @@ def get_version(): """ Return the formatted version information """ - vers = ["%(major)i.%(minor)i" % __version_info__, ] + vers = ['%(major)i.%(minor)i' % __version_info__, ] if __version_info__['micro']: - vers.append(".%(micro)i" % __version_info__) + vers.append('.%(micro)i' % __version_info__) if __version_info__['releaselevel'] != 'final': vers.append('%(releaselevel)s%(serial)i' % __version_info__) return ''.join(vers) + __version__ = get_version() register_setup(admin_site) From 8c02c4c426d436e635aea5fcd976583e66039dbf Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 2 Dec 2011 05:55:42 -0400 Subject: [PATCH 168/220] Disable ocr document queue signal It appears Django executes signals using the same process as the caller, effectively blocking the view until the OCR process completes which could take several minutes :/ --- apps/ocr/__init__.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index def0d7064b..b07fa07d72 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -108,11 +108,14 @@ def document_post_save(sender, instance, **kwargs): post_save.connect(document_post_save, sender=Document) -@receiver(post_save, dispatch_uid='call_queue', sender=QueueDocument) -def call_queue(sender, **kwargs): - if kwargs.get('created', False): - logger.debug('got call_queue signal: %s' % kwargs) - task_process_document_queues() +# Disabled because it appears Django execute signals using the same +# process effectively blocking the view until the OCR process completes +# which could take several minutes :/ +#@receiver(post_save, dispatch_uid='call_queue', sender=QueueDocument) +#def call_queue(sender, **kwargs): +# if kwargs.get('created', False): +# logger.debug('got call_queue signal: %s' % kwargs) +# task_process_document_queues() create_default_queue() From 1e38369919e71945aae04819b63a51f36a3f0531 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 2 Dec 2011 05:56:34 -0400 Subject: [PATCH 169/220] Update parser to use the latest version of a document when extracting text --- apps/ocr/parsers/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ocr/parsers/__init__.py b/apps/ocr/parsers/__init__.py index 8fac71c084..3d5a39635e 100644 --- a/apps/ocr/parsers/__init__.py +++ b/apps/ocr/parsers/__init__.py @@ -26,7 +26,7 @@ def register_parser(function, mimetype=None, mimetypes=None): def pdf_parser(document_page, descriptor=None): if not descriptor: - descriptor = document_page.document.open() + descriptor = document_page.document_version.open() pdf_pages = slate.PDF(descriptor) descriptor.close() From d4a70c0fc12c6434428f024a8506fbfcedf53af2 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 19:31:59 -0400 Subject: [PATCH 170/220] Cleanup remarks from migration --- apps/documents/migrations/0005_document_versions.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/apps/documents/migrations/0005_document_versions.py b/apps/documents/migrations/0005_document_versions.py index 738dfe9147..7244593da3 100644 --- a/apps/documents/migrations/0005_document_versions.py +++ b/apps/documents/migrations/0005_document_versions.py @@ -10,11 +10,6 @@ class Migration(DataMigration): for document in orm.Document.objects.all(): document_version = document.documentversion_set.create( document = document, - #mayor = 1 - #minor = models.PositiveIntegerField(verbose_name=_(u'minor'), default=0) - #micro = models.PositiveIntegerField(verbose_name=_(u'micro'), default=0) - #release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'release level')) - #serial = models.PositiveIntegerField(verbose_name=_(u'serial'), default=0) timestamp = document.date_added, file = document.file, mimetype = document.file_mimetype, From 9f7e5de5ac154e7838745aaafbd9082c789933f7 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 19:32:40 -0400 Subject: [PATCH 171/220] Add migration to remove old file fields --- apps/documents/migrations/0006_remove_old_file_fields.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/documents/migrations/0006_remove_old_file_fields.py b/apps/documents/migrations/0006_remove_old_file_fields.py index 203532d012..7abf68d028 100644 --- a/apps/documents/migrations/0006_remove_old_file_fields.py +++ b/apps/documents/migrations/0006_remove_old_file_fields.py @@ -9,7 +9,7 @@ class Migration(SchemaMigration): def forwards(self, orm): # Changing field 'DocumentVersion.document' - db.alter_column('documents_documentversion', 'document_id', self.gf('django.db.models.fields.related.ForeignKey')(default='', to=orm['documents.Document'])) + db.alter_column('documents_documentversion', 'document_id', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['documents.Document'])) # Deleting field 'Document.date_updated' db.delete_column('documents_document', 'date_updated') @@ -33,7 +33,8 @@ class Migration(SchemaMigration): db.delete_column('documents_documentpage', 'document_id') # Changing field 'DocumentPage.document_version' - db.alter_column('documents_documentpage', 'document_version_id', self.gf('django.db.models.fields.related.ForeignKey')(default='', to=orm['documents.DocumentVersion'])) + #db.alter_column('documents_documentpage', 'document_version_id', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['documents.DocumentVersion'])) + db.alter_column('documents_documentpage', 'document_version_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.DocumentVersion'])) def backwards(self, orm): @@ -60,7 +61,7 @@ class Migration(SchemaMigration): db.add_column('documents_document', 'file_mime_encoding', self.gf('django.db.models.fields.CharField')(default='', max_length=64), keep_default=False) # Adding field 'DocumentPage.document' - db.add_column('documents_documentpage', 'document', self.gf('django.db.models.fields.related.ForeignKey')(default='', to=orm['documents.Document']), keep_default=False) + db.add_column('documents_documentpage', 'document', self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['documents.Document']), keep_default=False) # Changing field 'DocumentPage.document_version' db.alter_column('documents_documentpage', 'document_version_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.DocumentVersion'], null=True)) From 11725c943b70938b016ad32e4a44d885a5450c98 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 19:35:03 -0400 Subject: [PATCH 172/220] Update documents app to support multiple versions --- apps/documents/forms.py | 55 ++++- apps/documents/literals.py | 18 ++ apps/documents/models.py | 490 +++++++++++++++++++++---------------- apps/documents/urls.py | 2 +- apps/documents/views.py | 48 ++-- 5 files changed, 373 insertions(+), 240 deletions(-) diff --git a/apps/documents/forms.py b/apps/documents/forms.py index 47ac8215da..1033692bfe 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -11,9 +11,11 @@ from common.conf.settings import DEFAULT_PAPER_SIZE from common.conf.settings import DEFAULT_PAGE_ORIENTATION from common.widgets import TextAreaDiv -from documents.models import Document, DocumentType, \ - DocumentPage, DocumentPageTransformation, DocumentTypeFilename +from documents.models import (Document, DocumentType, + DocumentPage, DocumentPageTransformation, DocumentTypeFilename, + DocumentVersion) from documents.widgets import document_html_widget +from documents.literals import (RELEASE_LEVEL_FINAL, RELEASE_LEVEL_CHOICES) # Document page forms class DocumentPageTransformationForm(forms.ModelForm): @@ -147,6 +149,8 @@ class DocumentForm(forms.ModelForm): instance = kwargs.pop('instance', None) super(DocumentForm, self).__init__(*args, **kwargs) + if instance: + self.version_fields(instance) if 'document_type' in self.fields: # To allow merging with DocumentForm_edit @@ -164,11 +168,51 @@ class DocumentForm(forms.ModelForm): queryset=filenames_qs, required=False, label=_(u'Quick document rename')) + + def version_fields(self, document): + self.fields['comment'] = forms.CharField( + label=_(u'Comment'), + required=False, + widget=forms.widgets.Textarea(attrs={'rows': 4}), + ) + + self.fields['version_update'] = forms.ChoiceField( + label=_(u'Version update'), + #widget=forms.widgets.RadioSelect(), + choices=DocumentVersion.get_version_update_choices(document.latest_version) + ) + + self.fields['release_level'] = forms.ChoiceField( + label=_(u'Release level'), + choices=RELEASE_LEVEL_CHOICES, + initial=RELEASE_LEVEL_FINAL, + #required=False, + ) + + self.fields['serial'] = forms.IntegerField( + label=_(u'Release level serial'), + initial=0, + widget=forms.widgets.TextInput( + attrs = {'style': 'width: auto;'} + ), + #required=False + ) new_filename = forms.CharField( label=_('New document filename'), required=False ) + + def clean(self): + cleaned_data = self.cleaned_data + cleaned_data['new_version_data'] = { + 'comment': self.cleaned_data.get('comment'), + 'version_update': self.cleaned_data.get('version_update'), + 'release_level': self.cleaned_data.get('release_level'), + 'serial': self.cleaned_data.get('serial'), + } + # Always return the full collection of cleaned data. + return cleaned_data class DocumentForm_edit(DocumentForm): """ @@ -177,6 +221,13 @@ class DocumentForm_edit(DocumentForm): class Meta: model = Document exclude = ('file', 'document_type', 'tags') + + def __init__(self, *args, **kwargs): + super(DocumentForm_edit, self).__init__(*args, **kwargs) + self.fields.pop('serial') + self.fields.pop('release_level') + self.fields.pop('version_update') + self.fields.pop('comment') class DocumentPropertiesForm(DetailForm): diff --git a/apps/documents/literals.py b/apps/documents/literals.py index cbb3b919d9..30b0284f5f 100644 --- a/apps/documents/literals.py +++ b/apps/documents/literals.py @@ -44,3 +44,21 @@ HISTORY_DOCUMENT_DELETED = { 'details': _(u'Document "%(document)s" deleted on %(datetime)s by %(fullname)s.'), 'expressions': {'fullname': 'user.get_full_name() if user.get_full_name() else user.username'} } + +RELEASE_LEVEL_FINAL = 1 +RELEASE_LEVEL_ALPHA = 2 +RELEASE_LEVEL_BETA = 3 +RELEASE_LEVEL_RC = 4 +RELEASE_LEVEL_HF = 5 + +RELEASE_LEVEL_CHOICES = ( + (RELEASE_LEVEL_FINAL, _(u'final')), + (RELEASE_LEVEL_ALPHA, _(u'alpha')), + (RELEASE_LEVEL_BETA, _(u'beta')), + (RELEASE_LEVEL_RC, _(u'release candidate')), + (RELEASE_LEVEL_HF, _(u'hotfix')), +) + +VERSION_UPDATE_MAJOR = u'major' +VERSION_UPDATE_MINOR = u'minor' +VERSION_UPDATE_MICRO = u'micro' diff --git a/apps/documents/models.py b/apps/documents/models.py index ab1165bf5f..04c633556f 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -4,6 +4,8 @@ import hashlib from ast import literal_eval import base64 from StringIO import StringIO +import datetime +import logging from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -21,6 +23,8 @@ from converter.api import convert from converter.exceptions import UnknownFileFormat, UnkownConvertError from mimetype.api import get_mimetype, get_icon_file_path, \ get_error_icon_file_path +from converter.literals import (DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, + DEFAULT_PAGE_NUMBER) from documents.conf.settings import CHECKSUM_FUNCTION from documents.conf.settings import UUID_FUNCTION @@ -30,26 +34,25 @@ from documents.conf.settings import DISPLAY_SIZE from documents.conf.settings import CACHE_PATH from documents.conf.settings import ZOOM_MAX_LEVEL from documents.conf.settings import ZOOM_MIN_LEVEL - from documents.managers import RecentDocumentManager, \ DocumentPageTransformationManager from documents.utils import document_save_to_temp_dir -from converter.literals import DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, \ - DEFAULT_PAGE_NUMBER +from documents.literals import (RELEASE_LEVEL_FINAL, RELEASE_LEVEL_CHOICES, + VERSION_UPDATE_MAJOR, VERSION_UPDATE_MINOR, VERSION_UPDATE_MICRO) # document image cache name hash function HASH_FUNCTION = lambda x: hashlib.sha256(x).hexdigest() +logger = logging.getLogger(__name__) + def get_filename_from_uuid(instance, filename): """ Store the orignal filename of the uploaded file and replace it with a UUID """ - instance.file_filename = filename - uuid = UUID_FUNCTION() - instance.uuid = uuid - return uuid + instance.filename = filename + return UUID_FUNCTION() class DocumentType(models.Model): @@ -69,24 +72,15 @@ class DocumentType(models.Model): class Document(models.Model): - """ + ''' Defines a single document with it's fields and properties - """ - # Base fields + ''' + uuid = models.CharField(max_length=48, blank=True, editable=False) document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'), null=True, blank=True) - uuid = models.CharField(max_length=48, default=UUID_FUNCTION(), blank=True, editable=False) description = models.TextField(blank=True, null=True, verbose_name=_(u'description'), db_index=True) + #TODO: remove date_added, it is the timestamp of the first version date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True, db_index=True) - ## Fields to migrate - #file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'file')) - #file_mimetype = models.CharField(max_length=64, default='', editable=False) - #file_mime_encoding = models.CharField(max_length=64, default='', editable=False) - ##FAT filename can be up to 255 using LFN - #file_filename = models.CharField(max_length=255, default=u'', editable=False, db_index=True) - #date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True) - #checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) - tags = TaggableManager() comments = generic.GenericRelation( @@ -108,147 +102,16 @@ class Document(models.Model): ordering = ['-date_added'] def __unicode__(self): - return self.get_fullname() - - def save(self, *args, **kwargs): - """ - Overloaded save method that updates the document's checksum, - mimetype, page count and transformation when originally created - """ - new_document = not self.pk - transformations = kwargs.pop('transformations', None) - super(Document, self).save(*args, **kwargs) - - if new_document: - #Only do this for new documents - self.update_checksum(save=False) - self.update_mimetype(save=False) - self.save() - self.update_page_count(save=False) - if transformations: - self.apply_default_transformations(transformations) + return self.latest_version.filename @models.permalink def get_absolute_url(self): return ('document_view_simple', [self.pk]) - def get_fullname(self): - """ - Return the fullname of the document's file - """ - return self.file_filename - - def update_mimetype(self, save=True): - """ - Read a document's file and determine the mimetype by calling the - get_mimetype wrapper - """ - if self.exists(): - try: - self.file_mimetype, self.file_mime_encoding = get_mimetype(self.open(), self.get_fullname()) - except: - self.file_mimetype = u'' - self.file_mime_encoding = u'' - finally: - if save: - self.save() - - def open(self): - """ - Return a file descriptor to a document's file irrespective of - the storage backend - """ - #return self.file.storage.open(self.file.path) - return self.get_latest_version().file.storage.open(self.get_latest_version().file.path) - - def update_checksum(self, save=True): - """ - Open a document's file and update the checksum field using the - user provided checksum function - """ - if self.exists(): - source = self.get_latest_version().open() - self.get_latest_version().checksum = unicode(CHECKSUM_FUNCTION(source.read())) - source.close() - if save: - self.get_latest_version().save() - - def update_page_count(self, save=True): - handle, filepath = tempfile.mkstemp() - # Just need the filepath, close the file description - os.close(handle) - - self.save_to_file(filepath) - try: - detected_pages = get_page_count(filepath) - except UnknownFileFormat: - # If converter backend doesn't understand the format, - # use 1 as the total page count - detected_pages = 1 - self.description = ugettext(u'This document\'s file format is not known, the page count has therefore defaulted to 1.') - self.save() - try: - os.remove(filepath) - except OSError: - pass - - current_pages = DocumentPage.objects.filter(document=self).order_by('page_number',) - if current_pages.count() > detected_pages: - for page in current_pages[detected_pages:]: - page.delete() - - for page_number in range(detected_pages): - DocumentPage.objects.get_or_create( - document=self, page_number=page_number + 1) - - if save: - self.save() - - return detected_pages - - @property - def page_count(self): - #return self.documentpage_set.count() - return self.get_latest_version().documentpage_set.count() - - def save_to_file(self, filepath, buffer_size=1024 * 1024): - """ - Save a copy of the document from the document storage backend - to the local filesystem - """ - input_descriptor = self.open() - output_descriptor = open(filepath, 'wb') - while True: - copy_buffer = input_descriptor.read(buffer_size) - if copy_buffer: - output_descriptor.write(copy_buffer) - else: - break - - output_descriptor.close() - input_descriptor.close() - return filepath - - def exists(self): - """ - Returns a boolean value that indicates if the document's file - exists in storage - """ - return self.get_latest_version().file.storage.exists(self.get_latest_version().file.path) - - def apply_default_transformations(self, transformations): - #Only apply default transformations on new documents - if reduce(lambda x, y: x + y, [page.documentpagetransformation_set.count() for page in self.pages.all()]) == 0: - for transformation in transformations: - for document_page in self.pages.all(): - page_transformation = DocumentPageTransformation( - document_page=document_page, - order=0, - transformation=transformation.get('transformation'), - arguments=transformation.get('arguments') - ) - - page_transformation.save() + def save(self, *args, **kwargs): + if not self.pk: + self.uuid = UUID_FUNCTION() + super(Document, self).save(*args, **kwargs) def get_cached_image_name(self, page): document_page = self.pages.get(page_number=page) @@ -302,95 +165,154 @@ class Document(models.Model): def add_as_recent_document_for_user(self, user): RecentDocument.objects.add_document_for_user(user, self) - - def delete(self, *args, **kwargs): - super(Document, self).delete(*args, **kwargs) - for version in self.documentversion_set.all(): - version.file.storage.delete(version.file.path) - #return self.get_latest_version().file.storage.delete(self.get_latest_version().file.path) + + # TODO: investigate if Document's save method calls all of it + # DocumentVersion's delete methods + #def delete(self, *args, **kwargs): + # super(Document, self).delete(*args, **kwargs) + # for version in self.documentversion_set.all(): + # version.file.storage.delete(version.file.path) @property def size(self): if self.exists(): - return self.get_latest_version().file.storage.size(self.get_latest_version().file.path) + return self.latest_version.exists() else: return None + + def new_version(self, file, comment=None, version_update=None, release_level=None, serial=None): + logger.debug('creating new document version') + if version_update: + new_version_dict = self.latest_version.get_new_version_dict(version_update) + new_version = DocumentVersion( + document=self, + file=file, + major = new_version_dict.get('major'), + minor = new_version_dict.get('minor'), + micro = new_version_dict.get('micro'), + release_level = release_level, + serial = serial, + comment = comment, + ) + new_version.save() + else: + new_version_dict = {} + new_version = DocumentVersion( + document=self, + file=file, + #major = new_version_dict.get('major'), + #minor = new_version_dict.get('minor'), + #micro = new_version_dict.get('micro'), + #release_level = release_level, + #serial = serial, + #comment = comment, + ) + new_version.save() - # Compatibiliy methods + + logger.debug('new_version_dict: %s' % new_version_dict) + + logger.debug('new_version saved') + return new_version + + # Proxy methods + def open(self): + ''' + Return a file descriptor to a document's file irrespective of + the storage backend + ''' + return self.latest_version.open() + + def save_to_file(self, *args, **kwargs): + return self.latest_version.save_to_file(*args, **kwargs) + + def exists(self): + ''' + Returns a boolean value that indicates if the document's + latest version file exists in storage + ''' + return self.latest_version.exists() + + # Compatibility methods @property def file(self): - return self.get_latest_version().file + return self.latest_version.file @property def file_mimetype(self): - return self.get_latest_version().mimetype + return self.latest_version.mimetype @property def file_mime_encoding(self): - return self.get_latest_version().encoding + return self.latest_version.encoding @property def file_filename(self): - return self.get_latest_version().filename + return self.latest_version.filename @property def date_updated(self): - return self.get_latest_version().timestamp + return self.latest_version.timestamp + # TODO: uncomment when date_added is removed #@property #def date_added(self): - # return self.get_latest_version().timestamp + # return self.first_version.timestamp @property def checksum(self): - return self.get_latest_version().checksum + return self.latest_version.checksum @property def pages(self): - return self.get_latest_version().pages + return self.latest_version.pages - - #file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'file')) - #file_mimetype = models.CharField(max_length=64, default='', editable=False) - #file_mime_encoding = models.CharField(max_length=64, default='', editable=False) - ##FAT filename can be up to 255 using LFN - #file_filename = models.CharField(max_length=255, default=u'', editable=False, db_index=True) - #date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True) - #checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) + @property + def page_count(self): + return self.pages.count() - def get_latest_version(self): + @property + def latest_version(self): return self.documentversion_set.order_by('-timestamp')[0] + @property + def first_version(self): + return self.documentversion_set.order_by('timestamp')[0] + @property def versions(self): return self.documentversion_set + def _get_filename(self): + return self.latest_version.filename -RELEASE_LEVEL_FINAL = 1 -RELEASE_LEVEL_ALPHA = 2 -RELEASE_LEVEL_BETA = 3 -RELEASE_LEVEL_RC = 4 -RELEASE_LEVEL_HF = 5 + def _set_filename(self, value): + version = self.latest_version + version.filename = value + return version.save() -RELEASE_LEVEL_CHOICES = ( - (RELEASE_LEVEL_FINAL, _(u'final')), - (RELEASE_LEVEL_ALPHA, _(u'alpha')), - (RELEASE_LEVEL_BETA, _(u'beta')), - (RELEASE_LEVEL_RC, _(u'release candidate')), - (RELEASE_LEVEL_HF, _(u'hotfix')), -) + filename = property(_get_filename, _set_filename) + class DocumentVersion(models.Model): ''' - Model that describes a document version and it properties + Model that describes a document version and its properties ''' - document = models.ForeignKey(Document, verbose_name=_(u'document')) - major = models.PositiveIntegerField(verbose_name=_(u'mayor'), default=1) - minor = models.PositiveIntegerField(verbose_name=_(u'minor'), default=0) - micro = models.PositiveIntegerField(verbose_name=_(u'micro'), default=0) - release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'release level')) - serial = models.PositiveIntegerField(verbose_name=_(u'serial'), default=0) - timestamp = models.DateTimeField(verbose_name=_(u'timestamp')) + @staticmethod + def get_version_update_choices(document_version): + return ( + (VERSION_UPDATE_MAJOR, _(u'Major %(major)i.%(minor)i, (new release)') % document_version.get_new_version_dict(VERSION_UPDATE_MAJOR)), + (VERSION_UPDATE_MINOR, _(u'Minor %(major)i.%(minor)i, (some updates)') % document_version.get_new_version_dict(VERSION_UPDATE_MINOR)), + (VERSION_UPDATE_MICRO, _(u'Micro %(major)i.%(minor)i.%(micro)i, (fixes)') % document_version.get_new_version_dict(VERSION_UPDATE_MICRO)) + ) + + document = models.ForeignKey(Document, verbose_name=_(u'document'), editable=False) + major = models.PositiveIntegerField(verbose_name=_(u'mayor'), default=1, editable=False) + minor = models.PositiveIntegerField(verbose_name=_(u'minor'), default=0, editable=False) + micro = models.PositiveIntegerField(verbose_name=_(u'micro'), default=0, editable=False) + release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'release level'), editable=False) + serial = models.PositiveIntegerField(verbose_name=_(u'serial'), default=0, editable=False) + timestamp = models.DateTimeField(verbose_name=_(u'timestamp'), editable=False) comment = models.TextField(blank=True, verbose_name=_(u'comment')) # File related fields @@ -406,11 +328,31 @@ class DocumentVersion(models.Model): verbose_name_plural = _(u'document version') def __unicode__(self): - return self.get_version() + return self.get_formated_version() - # TODO: Update timestamp + def get_new_version_dict(self, version_update_type): + logger.debug('version_update_type: %s' % version_update_type) - def get_version(self): + if version_update_type == VERSION_UPDATE_MAJOR: + return { + 'major': self.major + 1, + 'minor': 0, + 'micro': 0, + } + elif version_update_type == VERSION_UPDATE_MINOR: + return { + 'major': self.major, + 'minor': self.minor + 1, + 'micro': 0, + } + elif version_update_type == VERSION_UPDATE_MICRO: + return { + 'major': self.major, + 'minor': self.minor, + 'micro': self.micro + 1, + } + + def get_formated_version(self): ''' Return the formatted version information ''' @@ -419,26 +361,151 @@ class DocumentVersion(models.Model): if self.micro: vers.append(u'.%i' % self.micro) if self.release_level != RELEASE_LEVEL_FINAL: - vers.append(u'%s%i' % (self.release_level, self.serial)) + vers.append(u'%s%i' % (self.get_release_level_display(), self.serial)) return u''.join(vers) @property def pages(self): return self.documentpage_set + def save(self, *args, **kwargs): + ''' + Overloaded save method that updates the document version's checksum, + mimetype, page count and transformation when created + ''' + new_document = not self.pk + if not self.pk: + self.timestamp = datetime.datetime.now() + + #Only do this for new documents + transformations = kwargs.pop('transformations', None) + super(DocumentVersion, self).save(*args, **kwargs) + + if new_document: + #Only do this for new documents + self.update_checksum(save=False) + self.update_mimetype(save=False) + self.save() + self.update_page_count(save=False) + if transformations: + self.apply_default_transformations(transformations) + + def update_checksum(self, save=True): + ''' + Open a document version's file and update the checksum field using the + user provided checksum function + ''' + if self.exists(): + source = self.open() + self.checksum = unicode(CHECKSUM_FUNCTION(source.read())) + source.close() + if save: + self.save() + + def update_page_count(self, save=True): + handle, filepath = tempfile.mkstemp() + # Just need the filepath, close the file description + os.close(handle) + + self.save_to_file(filepath) + try: + detected_pages = get_page_count(filepath) + except UnknownFileFormat: + # If converter backend doesn't understand the format, + # use 1 as the total page count + detected_pages = 1 + self.description = ugettext(u'This document\'s file format is not known, the page count has therefore defaulted to 1.') + self.save() + try: + os.remove(filepath) + except OSError: + pass + + current_pages = self.documentpage_set.order_by('page_number',) + if current_pages.count() > detected_pages: + for page in current_pages[detected_pages:]: + page.delete() + + for page_number in range(detected_pages): + DocumentPage.objects.get_or_create( + document_version=self, page_number=page_number + 1) + + if save: + self.save() + + return detected_pages + + def apply_default_transformations(self, transformations): + #Only apply default transformations on new documents + if reduce(lambda x, y: x + y, [page.documentpagetransformation_set.count() for page in self.pages.all()]) == 0: + for transformation in transformations: + for document_page in self.pages.all(): + page_transformation = DocumentPageTransformation( + document_page=document_page, + order=0, + transformation=transformation.get('transformation'), + arguments=transformation.get('arguments') + ) + + page_transformation.save() + + def update_mimetype(self, save=True): + ''' + Read a document verions's file and determine the mimetype by calling the + get_mimetype wrapper + ''' + if self.exists(): + try: + self.mimetype, self.encoding = get_mimetype(self.open(), self.filename) + except: + self.mimetype = u'' + self.encoding = u'' + finally: + if save: + self.save() + + def delete(self, *args, **kwargs): + super(Document, self).delete(*args, **kwargs) + return self.file.storage.delete(self.file.path) + + def exists(self): + ''' + Returns a boolean value that indicates if the document's file + exists in storage + ''' + return self.file.storage.exists(self.file.path) + def open(self): ''' Return a file descriptor to a document version's file irrespective of the storage backend ''' return self.file.storage.open(self.file.path) + + def save_to_file(self, filepath, buffer_size=1024 * 1024): + ''' + Save a copy of the document from the document storage backend + to the local filesystem + ''' + input_descriptor = self.open() + output_descriptor = open(filepath, 'wb') + while True: + copy_buffer = input_descriptor.read(buffer_size) + if copy_buffer: + output_descriptor.write(copy_buffer) + else: + break + + output_descriptor.close() + input_descriptor.close() + return filepath class DocumentTypeFilename(models.Model): - """ + ''' List of filenames available to a specific document type for the quick rename functionality - """ + ''' document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type')) filename = models.CharField(max_length=128, verbose_name=_(u'filename'), db_index=True) enabled = models.BooleanField(default=True, verbose_name=_(u'enabled')) @@ -453,12 +520,9 @@ class DocumentTypeFilename(models.Model): class DocumentPage(models.Model): - """ - Model that describes a document page including it's content - """ - ## This field is to be removed - #document = models.ForeignKey(Document, verbose_name=_(u'document')) - + ''' + Model that describes a document version page including it's content + ''' # New parent field document_version = models.ForeignKey(DocumentVersion, verbose_name=_(u'document version'))#, null=True, blank=True) # TODO: Remove these after datamigration diff --git a/apps/documents/urls.py b/apps/documents/urls.py index 88650155a7..239ec62df4 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -35,7 +35,7 @@ urlpatterns = patterns('documents.views', url(r'^(?P\d+)/clear_transformations/$', 'document_clear_transformations', (), 'document_clear_transformations'), url(r'^(?P\d+)/version/all/$', 'document_version_list', (), 'document_version_list'), - url(r'^document/version/(?P\d+)/download/$', 'document_version_download', (), 'document_version_download'), + url(r'^document/version/(?P\d+)/download/$', 'document_download', (), 'document_version_download'), url(r'^multiple/clear_transformations/$', 'document_multiple_clear_transformations', (), 'document_multiple_clear_transformations'), url(r'^duplicates/list/$', 'document_find_all_duplicates', (), 'document_find_all_duplicates'), diff --git a/apps/documents/views.py b/apps/documents/views.py index efaaf3e2da..bb74f6c62a 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -45,13 +45,13 @@ from documents.literals import PERMISSION_DOCUMENT_CREATE, \ from documents.literals import HISTORY_DOCUMENT_CREATED, \ HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED -from documents.forms import DocumentTypeSelectForm, \ - DocumentForm_edit, DocumentPropertiesForm, \ - DocumentPreviewForm, \ - DocumentPageForm, DocumentPageTransformationForm, \ - DocumentContentForm, DocumentPageForm_edit, \ - DocumentPageForm_text, PrintForm, DocumentTypeForm, \ - DocumentTypeFilenameForm, DocumentTypeFilenameForm_create +from documents.forms import (DocumentTypeSelectForm, + DocumentForm_edit, DocumentPropertiesForm, + DocumentPreviewForm, DocumentPageForm, + DocumentPageTransformationForm, DocumentContentForm, + DocumentPageForm_edit, DocumentPageForm_text, PrintForm, + DocumentTypeForm, DocumentTypeFilenameForm, + DocumentTypeFilenameForm_create) from documents.wizards import DocumentCreateWizard from documents.models import (Document, DocumentType, DocumentPage, DocumentPageTransformation, RecentDocument, DocumentTypeFilename, @@ -242,12 +242,12 @@ def document_edit(request, document_id): for warning in warnings: messages.warning(request, warning) - document.file_filename = form.cleaned_data['new_filename'] + document.filename = form.cleaned_data['new_filename'] document.description = form.cleaned_data['description'] if 'document_type_available_filenames' in form.cleaned_data: if form.cleaned_data['document_type_available_filenames']: - document.file_filename = form.cleaned_data['document_type_available_filenames'].filename + document.filename = form.cleaned_data['document_type_available_filenames'].filename document.save() create_history(HISTORY_DOCUMENT_EDITED, document, {'user': request.user, 'diff': return_diff(old_document, document, ['file_filename', 'description'])}) @@ -291,27 +291,27 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, base64_version=F if base64_version: return HttpResponse(u'' % document.get_image(size=size, page=page, zoom=zoom, rotation=rotation, as_base64=True)) else: - # TODO: hardcoded MIMETYPE + # TODO: fix hardcoded MIMETYPE return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation), mimetype=DEFAULT_FILE_FORMAT_MIMETYPE) -def document_version_download(request, document_version_pk): - document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) - return document_download(request, document_version.document.pk) - - -def document_download(request, document_id): +def document_download(request, document_id=None, document_version_pk=None): check_permissions(request.user, [PERMISSION_DOCUMENT_DOWNLOAD]) - document = get_object_or_404(Document, pk=document_id) + if document_version_pk: + document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) + else: + document_version = get_object_or_404(Document, pk=document_id).latest_version + try: - #Test permissions and trigger exception - document.open() + # Test permissions and trigger exception + fd = document_version.open() + fd.close() return serve_file( request, - document.file, - save_as=u'"%s"' % document.get_fullname(), - content_type=document.file_mimetype if document.file_mimetype else 'application/octet-stream' + document_version.file, + save_as=u'"%s"' % document_version.filename, + content_type=document_version.mimetype if document_version.mimetype else 'application/octet-stream' ) except Exception, e: messages.error(request, e) @@ -1154,14 +1154,14 @@ def document_version_list(request, document_pk): document = get_object_or_404(Document, pk=document_pk) context = { - 'object_list': document.versions.all(), + 'object_list': document.versions.order_by('-timestamp'), 'title': _(u'versions for document: %s') % document, 'hide_object': True, 'object': document, 'extra_columns': [ { 'name': _(u'version'), - 'attribute': 'get_version', + 'attribute': 'get_formated_version', }, { 'name': _(u'time and date'), From 28208c4a2abc2dce72e95e1b1deb6b421522b003 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 19:35:36 -0400 Subject: [PATCH 173/220] Update sources app to support multiple versions --- apps/sources/__init__.py | 7 ++ apps/sources/forms.py | 8 +- apps/sources/models.py | 48 +++++---- apps/sources/urls.py | 7 +- apps/sources/views.py | 212 +++++++++++++++++++++++++-------------- 5 files changed, 183 insertions(+), 99 deletions(-) diff --git a/apps/sources/__init__.py b/apps/sources/__init__.py index ad34940468..3257c12c1e 100644 --- a/apps/sources/__init__.py +++ b/apps/sources/__init__.py @@ -5,6 +5,8 @@ from navigation.api import register_links, \ from permissions.api import register_permission, set_namespace_title from common.utils import encapsulate from project_setup.api import register_setup +from documents.models import Document +from documents import PERMISSION_DOCUMENT_CREATE from sources.staging import StagingFile from sources.models import WebForm, StagingFolder, SourceTransformation, \ @@ -41,6 +43,8 @@ setup_source_transformation_delete = {'text': _(u'delete'), 'view': 'setup_sourc source_list = {'text': _(u'Document sources'), 'view': 'setup_web_form_list', 'famfam': 'page_add', 'children_url_regex': [r'sources/setup']} +upload_interactive_version = {'text': _(u'upload new version'), 'view': 'upload_interactive_version', 'args': 'object.pk', 'famfam': 'page_add', 'permissions': [PERMISSION_DOCUMENT_CREATE]} + register_links(StagingFile, [staging_file_delete]) register_links(SourceTransformation, [setup_source_transformation_edit, setup_source_transformation_delete]) @@ -61,6 +65,9 @@ register_links(StagingFolder, [setup_source_transformation_list, setup_source_ed register_links(WatchFolder, [setup_web_form_list, setup_staging_folder_list, setup_watch_folder_list], menu_name='form_header') register_links(WatchFolder, [setup_source_transformation_list, setup_source_edit, setup_source_delete]) +# Document version +register_links(Document, [upload_interactive_version]) + register_links(['setup_source_transformation_create', 'setup_source_transformation_edit', 'setup_source_transformation_delete', 'setup_source_transformation_list'], [setup_source_transformation_create], menu_name='sidebar') source_views = ['setup_web_form_list', 'setup_staging_folder_list', 'setup_watch_folder_list', 'setup_source_edit', 'setup_source_delete', 'setup_source_create', 'setup_source_transformation_list', 'setup_source_transformation_edit', 'setup_source_transformation_delete', 'setup_source_transformation_create'] diff --git a/apps/sources/forms.py b/apps/sources/forms.py index de9b7ee1ce..4b046994cf 100644 --- a/apps/sources/forms.py +++ b/apps/sources/forms.py @@ -37,7 +37,7 @@ class StagingDocumentForm(DocumentForm): staging_list_index = self.fields.keyOrder.index('staging_file_id') staging_list = self.fields.keyOrder.pop(staging_list_index) self.fields.keyOrder.insert(0, staging_list) - + staging_file_id = forms.ChoiceField(label=_(u'Staging file')) class Meta(DocumentForm.Meta): @@ -45,6 +45,8 @@ class StagingDocumentForm(DocumentForm): class WebFormForm(DocumentForm): + file = forms.FileField(label=_(u'File')) + def __init__(self, *args, **kwargs): show_expand = kwargs.pop('show_expand', False) self.source = kwargs.pop('source') @@ -56,6 +58,10 @@ class WebFormForm(DocumentForm): help_text=ugettext(u'Upload a compressed file\'s contained files as individual documents') ) + # Move the file filed to the top + self.fields.keyOrder.remove('file') + self.fields.keyOrder.insert(0, 'file') + def clean_file(self): data = self.cleaned_data['file'] validate_whitelist_blacklist(data.name, self.source.whitelist.split(','), self.source.blacklist.split(',')) diff --git a/apps/sources/models.py b/apps/sources/models.py index c97f2f4ca4..44822ee0ba 100644 --- a/apps/sources/models.py +++ b/apps/sources/models.py @@ -52,7 +52,7 @@ class BaseModel(models.Model): def get_transformation_list(self): return SourceTransformation.transformations.get_for_object_as_list(self) - def upload_file(self, file_object, filename=None, document_type=None, expand=False, metadata_dict_list=None, user=None): + def upload_file(self, file_object, filename=None, document_type=None, expand=False, metadata_dict_list=None, user=None, document=None, new_version_data=None): if expand: try: cf = CompressedFile(file_object) @@ -63,31 +63,39 @@ class BaseModel(models.Model): except NotACompressedFile: self.upload_single_file(file_object, filename, document_type, metadata_dict_list, user) else: - self.upload_single_file(file_object, filename, document_type, metadata_dict_list, user) + self.upload_single_file(file_object, filename, document_type, metadata_dict_list, user, document, new_version_data) file_object.close() - def upload_single_file(self, file_object, filename=None, document_type=None, metadata_dict_list=None, user=None): - transformations, errors = self.get_transformation_list() - document = Document(file=file_object) - if document_type: - document.document_type = document_type - document.save() + def upload_single_file(self, file_object, filename=None, document_type=None, metadata_dict_list=None, user=None, document=None, new_version_data=None): + if not document: + document = Document() + if document_type: + document.document_type = document_type + document.save() + + if metadata_dict_list: + save_metadata_list(metadata_dict_list, document, create=True) + warnings = update_indexes(document) + + if user: + document.add_as_recent_document_for_user(user) + create_history(HISTORY_DOCUMENT_CREATED, document, {'user': user}) + else: + create_history(HISTORY_DOCUMENT_CREATED, document) + + if not new_version_data: + new_version_data = {} + + new_version = document.new_version(file=file_object, **new_version_data) if filename: - document.file_filename = filename - document.save() + new_version.filename = filename + new_version.save() - document.apply_default_transformations(transformations) + transformations, errors = self.get_transformation_list() - if metadata_dict_list: - save_metadata_list(metadata_dict_list, document, create=True) - warnings = update_indexes(document) - - if user: - document.add_as_recent_document_for_user(user) - create_history(HISTORY_DOCUMENT_CREATED, document, {'user': user}) - else: - create_history(HISTORY_DOCUMENT_CREATED, document) + new_version.apply_default_transformations(transformations) + #TODO: new HISTORY for version updates class Meta: ordering = ('title',) diff --git a/apps/sources/urls.py b/apps/sources/urls.py index b75573382d..cd42328138 100644 --- a/apps/sources/urls.py +++ b/apps/sources/urls.py @@ -8,8 +8,11 @@ urlpatterns = patterns('sources.views', url(r'^staging_file/type/(?P\w+)/(?P\d+)/(?P\w+)/delete/$', 'staging_file_delete', (), 'staging_file_delete'), url(r'^staging_file/type/staging_folder/(?P\d+)/(?P\w+)/thumbnail/$', 'staging_file_thumbnail', (), 'staging_file_thumbnail'), - url(r'^upload/interactive/(?P\w+)/(?P\d+)/$', 'upload_interactive', (), 'upload_interactive'), - url(r'^upload/interactive/$', 'upload_interactive', (), 'upload_interactive'), + url(r'^upload/document/new/interactive/(?P\w+)/(?P\d+)/$', 'upload_interactive', (), 'upload_interactive'), + url(r'^upload/document/new/interactive/$', 'upload_interactive', (), 'upload_interactive'), + + url(r'^upload/document/(?P\d+)/version/interactive/(?P\w+)/(?P\d+)/$', 'upload_interactive', (), 'upload_interactive_version'), + url(r'^upload/document/(?P\d+)/version/interactive/$', 'upload_interactive', (), 'upload_interactive_version'), #Setup views diff --git a/apps/sources/views.py b/apps/sources/views.py index c2cde5e7d8..c668b23909 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -8,7 +8,7 @@ from django.utils.translation import ugettext from django.utils.safestring import mark_safe from documents.literals import PERMISSION_DOCUMENT_CREATE -from documents.models import DocumentType +from documents.models import DocumentType, Document from documents.conf.settings import THUMBNAIL_SIZE from metadata.api import decode_metadata_from_url, metadata_repr_as_list from permissions.api import check_permissions @@ -35,30 +35,34 @@ def return_function(obj): return lambda context: context['source'].source_type == obj.source_type and context['source'].pk == obj.pk -def get_active_tab_links(): - tab_links = [] +def get_tab_link_for_source(source, document=None): + if document: + view = u'upload_interactive_version' + args = [document.pk, u'"%s"' % source.source_type, source.pk] + else: + view = u'upload_interactive' + args = [u'"%s"' % source.source_type, source.pk] + + return { + 'text': source.title, + 'view': view, + 'args': args, + 'famfam': source.icon, + 'keep_query': True, + 'conditional_highlight': return_function(source), + } + +def get_active_tab_links(document=None): + tab_links = [] + web_forms = WebForm.objects.filter(enabled=True) for web_form in web_forms: - tab_links.append({ - 'text': web_form.title, - 'view': 'upload_interactive', - 'args': [u'"%s"' % web_form.source_type, web_form.pk], - 'famfam': web_form.icon, - 'keep_query': True, - 'conditional_highlight': return_function(web_form), - }) + tab_links.append(get_tab_link_for_source(web_form, document)) staging_folders = StagingFolder.objects.filter(enabled=True) for staging_folder in staging_folders: - tab_links.append({ - 'text': staging_folder.title, - 'view': 'upload_interactive', - 'args': [u'"%s"' % staging_folder.source_type, staging_folder.pk], - 'famfam': staging_folder.icon, - 'keep_query': True, - 'conditional_highlight': return_function(staging_folder), - }) + tab_links.append(get_tab_link_for_source(staging_folder, document)) return { 'tab_links': tab_links, @@ -66,15 +70,19 @@ def get_active_tab_links(): SOURCE_CHOICE_STAGING: staging_folders } - -def upload_interactive(request, source_type=None, source_id=None): +def upload_interactive(request, source_type=None, source_id=None, document_pk=None): check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) subtemplates_list = [] - context = {} + if document_pk: + document = get_object_or_404(Document, pk=document_pk) + results = get_active_tab_links(document) + else: + document = None + results = get_active_tab_links() - results = get_active_tab_links() + context = {} if results[SOURCE_CHOICE_WEB_FORM].count() == 0 and results[SOURCE_CHOICE_STAGING].count() == 0: source_setup_link = mark_safe('%s' % (reverse('setup_web_form_list'), ugettext(u'here'))) @@ -113,43 +121,57 @@ def upload_interactive(request, source_type=None, source_id=None): if request.method == 'POST': form = WebFormForm(request.POST, request.FILES, document_type=document_type, - show_expand=(web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK), - source=web_form + show_expand=(web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document, + source=web_form, + instance=document ) if form.is_valid(): - try: + #try: + if document: + expand = False + else: if web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK: - expand = form.cleaned_data['expand'] + expand = form.cleaned_data.get('expand') else: if web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y: expand = True else: expand = False - - new_filename = get_form_filename(form) - web_form.upload_file(request.FILES['file'], - new_filename, document_type=document_type, - expand=expand, - metadata_dict_list=decode_metadata_from_url(request.GET), - user=request.user - ) + + new_filename = get_form_filename(form) + web_form.upload_file(request.FILES['file'], + new_filename, document_type=document_type, + expand=expand, + metadata_dict_list=decode_metadata_from_url(request.GET), + user=request.user, + document=document, + new_version_data=form.cleaned_data.get('new_version_data') + ) + #except Exception, e: + # messages.error(request, _(u'Unhandled exception: %s') % e) + if document: + messages.success(request, _(u'Document version uploaded successfully.')) + return HttpResponseRedirect(reverse('document_view_simple', args=[document.pk])) + else: messages.success(request, _(u'Document uploaded successfully.')) - except Exception, e: - messages.error(request, e) - - return HttpResponseRedirect(request.get_full_path()) + return HttpResponseRedirect(request.get_full_path()) else: form = WebFormForm( - show_expand=(web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK), + show_expand=(web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document, document_type=document_type, - source=web_form + source=web_form, + instance=document ) - + if document: + title = _(u'upload a new version from source: %s') % web_form.title + else: + title = _(u'upload a local document from source: %s') % web_form.title + subtemplates_list.append({ 'name': 'generic_form_subtemplate.html', 'context': { 'form': form, - 'title': _(u'upload a local document from source: %s') % web_form.title, + 'title': title, }, }) elif source_type == SOURCE_CHOICE_STAGING: @@ -159,41 +181,54 @@ def upload_interactive(request, source_type=None, source_id=None): if request.method == 'POST': form = StagingDocumentForm(request.POST, request.FILES, cls=StagingFile, document_type=document_type, - show_expand=(staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK), - source=staging_folder + show_expand=(staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document, + source=staging_folder, + instance=document ) if form.is_valid(): - try: - staging_file = StagingFile.get(form.cleaned_data['staging_file_id']) + #try: + staging_file = StagingFile.get(form.cleaned_data['staging_file_id']) + if document: + expand = False + else: if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK: - expand = form.cleaned_data['expand'] + expand = form.cleaned_dataget('expand') else: if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y: expand = True else: expand = False - new_filename = get_form_filename(form) - staging_folder.upload_file(staging_file.upload(), - new_filename, document_type=document_type, - expand=expand, - metadata_dict_list=decode_metadata_from_url(request.GET), - user=request.user - ) + + new_filename = get_form_filename(form) + staging_folder.upload_file(staging_file.upload(), + new_filename, document_type=document_type, + expand=expand, + metadata_dict_list=decode_metadata_from_url(request.GET), + user=request.user, + document=document, + new_version_data=form.cleaned_data.get('new_version_data') + ) + if document: + messages.success(request, _(u'Document version from staging file: %s, uploaded successfully.') % staging_file.filename) + else: messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename) - if staging_folder.delete_after_upload: - transformations, errors = staging_folder.get_transformation_list() - staging_file.delete(preview_size=staging_folder.get_preview_size(), transformations=transformations) - messages.success(request, _(u'Staging file: %s, deleted successfully.') % staging_file.filename) - except Exception, e: - messages.error(request, e) - - return HttpResponseRedirect(request.get_full_path()) + if staging_folder.delete_after_upload: + transformations, errors = staging_folder.get_transformation_list() + staging_file.delete(preview_size=staging_folder.get_preview_size(), transformations=transformations) + messages.success(request, _(u'Staging file: %s, deleted successfully.') % staging_file.filename) + #except Exception, e: + # messages.error(request, _(u'Unhandled exception: %s') % e) + if document: + return HttpResponseRedirect(reverse('document_view_simple', args=[document.pk])) + else: + return HttpResponseRedirect(request.get_full_path()) else: form = StagingDocumentForm(cls=StagingFile, document_type=document_type, - show_expand=(staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK), - source=staging_folder + show_expand=(staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document, + source=staging_folder, + instance=document ) try: staging_filelist = StagingFile.get_all() @@ -201,12 +236,17 @@ def upload_interactive(request, source_type=None, source_id=None): messages.error(request, e) staging_filelist = [] finally: + if document: + title = _(u'upload a new version from staging source: %s') % staging_folder.title + else: + title = _(u'upload a document from staging source: %s') % staging_folder.title + subtemplates_list = [ { 'name': 'generic_form_subtemplate.html', 'context': { 'form': form, - 'title': _(u'upload a document from staging source: %s') % staging_folder.title, + 'title': title, } }, { @@ -219,20 +259,40 @@ def upload_interactive(request, source_type=None, source_id=None): }, ] + if document: + context['object'] = document + context.update({ 'document_type_id': document_type_id, 'subtemplates_list': subtemplates_list, - 'sidebar_subtemplates_list': [ - { - 'name': 'generic_subtemplate.html', - 'context': { - 'title': _(u'Current metadata'), - 'paragraphs': metadata_repr_as_list(decode_metadata_from_url(request.GET)), - 'side_bar': True, - } - }], - 'temporary_navigation_links': {'form_header': {'upload_interactive': {'links': results['tab_links']}}}, + 'temporary_navigation_links': { + 'form_header': { + 'upload_interactive_version': { + 'links': results['tab_links'] + }, + 'upload_interactive': { + 'links': results['tab_links'] + } + } + }, }) + + if not document: + context.update( + { + 'sidebar_subtemplates_list': [ + { + 'name': 'generic_subtemplate.html', + 'context': { + 'title': _(u'Current metadata'), + 'paragraphs': metadata_repr_as_list(decode_metadata_from_url(request.GET)), + 'side_bar': True, + } + } + ], + } + ) + return render_to_response('generic_form.html', context, context_instance=RequestContext(request)) From a3befc6b7d7ce793e4d8ec75293e3c2cb8fed50a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 20:09:44 -0400 Subject: [PATCH 174/220] Remove remarked code --- apps/documents/models.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index 04c633556f..a9c0b8f917 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -200,12 +200,6 @@ class Document(models.Model): new_version = DocumentVersion( document=self, file=file, - #major = new_version_dict.get('major'), - #minor = new_version_dict.get('minor'), - #micro = new_version_dict.get('micro'), - #release_level = release_level, - #serial = serial, - #comment = comment, ) new_version.save() From d81e734f592afea647a1bf4ebdf6890599feb41e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 20:10:08 -0400 Subject: [PATCH 175/220] Update REST API to new document multi version methods and structures --- apps/rest_api/resources.py | 39 ++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/apps/rest_api/resources.py b/apps/rest_api/resources.py index 99a5c26613..869c78e407 100644 --- a/apps/rest_api/resources.py +++ b/apps/rest_api/resources.py @@ -8,15 +8,46 @@ from converter.exceptions import UnknownFileFormat, UnkownConvertError class DocumentResourceSimple(ModelResource): model = Document - fields = ('url', 'pk', 'document_type', 'uuid', 'date_added', 'description', 'tags', 'comments', 'expensive_methods', 'files') + fields = ('url', 'pk', 'document_type', 'uuid', 'date_added', 'description', 'tags', 'comments', 'expensive_methods', 'versions') - def files(self, instance): + def versions(self, instance): + return [ + { + 'version': version.get_formated_version(), + 'major': version.major, + 'minor': version.minor, + 'micro': version.micro, + 'release_level': version.release_level, + 'serial': version.serial, + 'timestamp': version.timestamp, + 'comment': version.comment, + 'mimetype': version.mimetype, + 'encoding': version.encoding, + 'filename': version.filename, + 'checksum': version.checksum, + 'download': reverse('document_version_download', args=[version.pk]), + 'stored_filename': version.file.name, + # TODO: Add transformations + 'pages': [ + { + 'content': page.content, + 'page_label': page.page_label, + 'page_number': page.page_number, + } + for page in version.pages.all() + ] + + } + for version in instance.versions.all() + ] + + ''' return [ { 'version': 1, 'mimetype': instance.file_mimetype, 'encoding': instance.file_mime_encoding, - 'filename': instance.get_fullname(), + 'filename': instance.filename, 'date_updated': instance.date_updated, 'checksum': instance.checksum, 'size': instance.size, @@ -33,6 +64,6 @@ class DocumentResourceSimple(ModelResource): ] } ] - + ''' def expensive_methods(self, instance): return [] From 0cf8d68db0f0e8c084f7852f8352e741a7326f14 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 20:30:44 -0400 Subject: [PATCH 176/220] Add the page number on top of the page widget in the multiple page carousel widget --- apps/documents/forms.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/documents/forms.py b/apps/documents/forms.py index 1033692bfe..e680121bb2 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -103,7 +103,9 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget): output.append(u'
') for page in value.pages.all(): + output.append(u'
') + output.append(u'
%(page_string)s %(page)s
' % {'page_string': ugettext(u'Page'), 'page': page.page_number}) output.append( document_html_widget( page.document, @@ -178,7 +180,6 @@ class DocumentForm(forms.ModelForm): self.fields['version_update'] = forms.ChoiceField( label=_(u'Version update'), - #widget=forms.widgets.RadioSelect(), choices=DocumentVersion.get_version_update_choices(document.latest_version) ) @@ -186,7 +187,6 @@ class DocumentForm(forms.ModelForm): label=_(u'Release level'), choices=RELEASE_LEVEL_CHOICES, initial=RELEASE_LEVEL_FINAL, - #required=False, ) self.fields['serial'] = forms.IntegerField( @@ -195,7 +195,6 @@ class DocumentForm(forms.ModelForm): widget=forms.widgets.TextInput( attrs = {'style': 'width: auto;'} ), - #required=False ) new_filename = forms.CharField( From 4bbf5d3514aa63287759d88d44766281b0c5e97b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 20:43:30 -0400 Subject: [PATCH 177/220] Add 'siblings' convenience method to the DocumentPage model --- apps/documents/models.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/documents/models.py b/apps/documents/models.py index a9c0b8f917..c5104dee7c 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -543,6 +543,10 @@ class DocumentPage(models.Model): @models.permalink def get_absolute_url(self): return ('document_page_view', [self.pk]) + + @property + def siblings(self): + return DocumentPage.objects.filter(document_version=self.document_version) # Compatibility methods @property From 699f7e7caa7515e8d505fc4a8199b66f3ab41faf Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 20:44:04 -0400 Subject: [PATCH 178/220] Update document page navigation views to use the new 'siblings' DocumentPage method --- apps/documents/views.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/documents/views.py b/apps/documents/views.py index bb74f6c62a..894818547c 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -531,7 +531,7 @@ def document_clear_transformations(request, document_id=None, document_id_list=N if request.method == 'POST': for document in documents: try: - for document_page in document.documentpage_set.all(): + for document_page in document.pages.all(): document_page.document.invalidate_cached_image(document_page.page_number) for transformation in document_page.documentpagetransformation_set.all(): transformation.delete() @@ -667,11 +667,11 @@ def document_page_navigation_next(request, document_page_id): view = resolve_to_name(urlparse.urlparse(request.META.get('HTTP_REFERER', u'/')).path) document_page = get_object_or_404(DocumentPage, pk=document_page_id) - if document_page.page_number >= document_page.document.documentpage_set.count(): + if document_page.page_number >= document_page.siblings.count(): messages.warning(request, _(u'There are no more pages in this document')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', u'/')) else: - document_page = get_object_or_404(DocumentPage, document=document_page.document, page_number=document_page.page_number + 1) + document_page = get_object_or_404(document_page.siblings, page_number=document_page.page_number + 1) return HttpResponseRedirect(reverse(view, args=[document_page.pk])) @@ -684,7 +684,7 @@ def document_page_navigation_previous(request, document_page_id): messages.warning(request, _(u'You are already at the first page of this document')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', u'/')) else: - document_page = get_object_or_404(DocumentPage, document=document_page.document, page_number=document_page.page_number - 1) + document_page = get_object_or_404(document_page.siblings, page_number=document_page.page_number - 1) return HttpResponseRedirect(reverse(view, args=[document_page.pk])) @@ -693,7 +693,7 @@ def document_page_navigation_first(request, document_page_id): view = resolve_to_name(urlparse.urlparse(request.META.get('HTTP_REFERER', u'/')).path) document_page = get_object_or_404(DocumentPage, pk=document_page_id) - document_page = get_object_or_404(DocumentPage, document=document_page.document, page_number=1) + document_page = get_object_or_404(document_page.siblings, page_number=1) return HttpResponseRedirect(reverse(view, args=[document_page.pk])) @@ -702,7 +702,7 @@ def document_page_navigation_last(request, document_page_id): view = resolve_to_name(urlparse.urlparse(request.META.get('HTTP_REFERER', u'/')).path) document_page = get_object_or_404(DocumentPage, pk=document_page_id) - document_page = get_object_or_404(DocumentPage, document=document_page.document, page_number=document_page.document.documentpage_set.count()) + document_page = get_object_or_404(document_page.siblings, page_number=document_page.siblings.count()) return HttpResponseRedirect(reverse(view, args=[document_page.pk])) @@ -856,9 +856,9 @@ def document_hard_copy(request, document_id): if page_range: page_range = parse_range(page_range) - pages = document.documentpage_set.filter(page_number__in=page_range) + pages = document.pages.filter(page_number__in=page_range) else: - pages = document.documentpage_set.all() + pages = document.pages.all() return render_to_response('document_print.html', { 'object': document, From 90863025d8b2e793ff418c8403ee8b2b0d677daa Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 20:54:35 -0400 Subject: [PATCH 179/220] Fix permission import --- apps/sources/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sources/__init__.py b/apps/sources/__init__.py index 3257c12c1e..94d2727c9c 100644 --- a/apps/sources/__init__.py +++ b/apps/sources/__init__.py @@ -6,7 +6,7 @@ from permissions.api import register_permission, set_namespace_title from common.utils import encapsulate from project_setup.api import register_setup from documents.models import Document -from documents import PERMISSION_DOCUMENT_CREATE +from documents.literals import PERMISSION_DOCUMENT_CREATE from sources.staging import StagingFile from sources.models import WebForm, StagingFolder, SourceTransformation, \ From e81a02b18d7896f04fc95adce8b5c55e58f38c30 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 23:29:52 -0400 Subject: [PATCH 180/220] Improve document multi version migrations --- ...06_fix_invalid_document_version_id_keys.py | 159 ++++++++++++++++++ ...elds.py => 0007_remove_old_file_fields.py} | 3 +- ...d_name.py => 0008_fix_mayor_field_name.py} | 0 ...ent_field.py => 0009_add_comment_field.py} | 0 4 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 apps/documents/migrations/0006_fix_invalid_document_version_id_keys.py rename apps/documents/migrations/{0006_remove_old_file_fields.py => 0007_remove_old_file_fields.py} (98%) rename apps/documents/migrations/{0007_fix_mayor_field_name.py => 0008_fix_mayor_field_name.py} (100%) rename apps/documents/migrations/{0008_add_comment_field.py => 0009_add_comment_field.py} (100%) diff --git a/apps/documents/migrations/0006_fix_invalid_document_version_id_keys.py b/apps/documents/migrations/0006_fix_invalid_document_version_id_keys.py new file mode 100644 index 0000000000..03f4ba4133 --- /dev/null +++ b/apps/documents/migrations/0006_fix_invalid_document_version_id_keys.py @@ -0,0 +1,159 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + qs = orm.DocumentPage.objects.filter(document_version=None) + #print 'Invalid document pages to delete: %s' % qs.count() + for document_page in qs: + document_page.delete() + + def backwards(self, orm): + def backwards(self, orm): + raise RuntimeError('Cannot reverse this migration.') + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'date_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'file_filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'file_mime_encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file_mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'default': "u'6c189f1f-1d85-48b5-9b7d-e8e319603e77'", 'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'document_version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentVersion']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.documentversion': { + 'Meta': {'unique_together': "(('document', 'mayor', 'minor', 'micro', 'release_level', 'serial'),)", 'object_name': 'DocumentVersion'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']", 'null': 'True', 'blank': 'True'}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mayor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'release_level': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'serial': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] diff --git a/apps/documents/migrations/0006_remove_old_file_fields.py b/apps/documents/migrations/0007_remove_old_file_fields.py similarity index 98% rename from apps/documents/migrations/0006_remove_old_file_fields.py rename to apps/documents/migrations/0007_remove_old_file_fields.py index 7abf68d028..02c074fcfd 100644 --- a/apps/documents/migrations/0006_remove_old_file_fields.py +++ b/apps/documents/migrations/0007_remove_old_file_fields.py @@ -9,7 +9,7 @@ class Migration(SchemaMigration): def forwards(self, orm): # Changing field 'DocumentVersion.document' - db.alter_column('documents_documentversion', 'document_id', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['documents.Document'])) + db.alter_column('documents_documentversion', 'document_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.Document'])) # Deleting field 'Document.date_updated' db.delete_column('documents_document', 'date_updated') @@ -33,7 +33,6 @@ class Migration(SchemaMigration): db.delete_column('documents_documentpage', 'document_id') # Changing field 'DocumentPage.document_version' - #db.alter_column('documents_documentpage', 'document_version_id', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['documents.DocumentVersion'])) db.alter_column('documents_documentpage', 'document_version_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['documents.DocumentVersion'])) diff --git a/apps/documents/migrations/0007_fix_mayor_field_name.py b/apps/documents/migrations/0008_fix_mayor_field_name.py similarity index 100% rename from apps/documents/migrations/0007_fix_mayor_field_name.py rename to apps/documents/migrations/0008_fix_mayor_field_name.py diff --git a/apps/documents/migrations/0008_add_comment_field.py b/apps/documents/migrations/0009_add_comment_field.py similarity index 100% rename from apps/documents/migrations/0008_add_comment_field.py rename to apps/documents/migrations/0009_add_comment_field.py From 986b7e39e4b523fc8d9a6fd2f99290e19d5153ac Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 23:37:00 -0400 Subject: [PATCH 181/220] Fix the new version fields in the upload form --- apps/documents/forms.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/apps/documents/forms.py b/apps/documents/forms.py index e680121bb2..60d69506ac 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -151,8 +151,6 @@ class DocumentForm(forms.ModelForm): instance = kwargs.pop('instance', None) super(DocumentForm, self).__init__(*args, **kwargs) - if instance: - self.version_fields(instance) if 'document_type' in self.fields: # To allow merging with DocumentForm_edit @@ -170,14 +168,11 @@ class DocumentForm(forms.ModelForm): queryset=filenames_qs, required=False, label=_(u'Quick document rename')) + + if instance: + self.version_fields(instance) def version_fields(self, document): - self.fields['comment'] = forms.CharField( - label=_(u'Comment'), - required=False, - widget=forms.widgets.Textarea(attrs={'rows': 4}), - ) - self.fields['version_update'] = forms.ChoiceField( label=_(u'Version update'), choices=DocumentVersion.get_version_update_choices(document.latest_version) @@ -197,6 +192,12 @@ class DocumentForm(forms.ModelForm): ), ) + self.fields['comment'] = forms.CharField( + label=_(u'Comment'), + required=False, + widget=forms.widgets.Textarea(attrs={'rows': 4}), + ) + new_filename = forms.CharField( label=_('New document filename'), required=False ) From 43b17456d1cb4fbe14fab226cddc542dd3e0ed50 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 3 Dec 2011 23:42:29 -0400 Subject: [PATCH 182/220] Remove the auto_add_now property from the date_added document field --- ...010_auto__chg_field_document_date_added.py | 155 ++++++++++++++++++ apps/documents/models.py | 9 +- 2 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 apps/documents/migrations/0010_auto__chg_field_document_date_added.py diff --git a/apps/documents/migrations/0010_auto__chg_field_document_date_added.py b/apps/documents/migrations/0010_auto__chg_field_document_date_added.py new file mode 100644 index 0000000000..6220ef13ad --- /dev/null +++ b/apps/documents/migrations/0010_auto__chg_field_document_date_added.py @@ -0,0 +1,155 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'Document.date_added' + db.alter_column('documents_document', 'date_added', self.gf('django.db.models.fields.DateTimeField')()) + + + def backwards(self, orm): + + # Changing field 'Document.date_added' + db.alter_column('documents_document', 'date_added', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentVersion']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.documentversion': { + 'Meta': {'unique_together': "(('document', 'major', 'minor', 'micro', 'release_level', 'serial'),)", 'object_name': 'DocumentVersion'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'major': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'release_level': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'serial': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] diff --git a/apps/documents/models.py b/apps/documents/models.py index c5104dee7c..581e1eea4f 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -78,8 +78,7 @@ class Document(models.Model): uuid = models.CharField(max_length=48, blank=True, editable=False) document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'), null=True, blank=True) description = models.TextField(blank=True, null=True, verbose_name=_(u'description'), db_index=True) - #TODO: remove date_added, it is the timestamp of the first version - date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True, db_index=True) + date_added = models.DateTimeField(verbose_name=_(u'added'), db_index=True) tags = TaggableManager() @@ -111,6 +110,7 @@ class Document(models.Model): def save(self, *args, **kwargs): if not self.pk: self.uuid = UUID_FUNCTION() + self.date_added = datetime.datetime.now() super(Document, self).save(*args, **kwargs) def get_cached_image_name(self, page): @@ -248,11 +248,6 @@ class Document(models.Model): def date_updated(self): return self.latest_version.timestamp - # TODO: uncomment when date_added is removed - #@property - #def date_added(self): - # return self.first_version.timestamp - @property def checksum(self): return self.latest_version.checksum From e6d3453800e8ff0e9ba6d3c1c98fe9d4f45f47e1 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 00:00:07 -0400 Subject: [PATCH 183/220] Update the linking app to be compatible with the new document versioning fields --- apps/linking/forms.py | 2 +- apps/linking/managers.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/linking/forms.py b/apps/linking/forms.py index 9568994b89..1e90e16c8a 100644 --- a/apps/linking/forms.py +++ b/apps/linking/forms.py @@ -45,7 +45,7 @@ class SmartLinkImageWidget(forms.widgets.Widget): for document in value['documents']: output.append(u'
' % (u'border: 5px solid black; padding: 3px;' if value['current_document'] == document else u'')) output.append(u'
%s
' % document) - output.append(u'
%s: %d
' % (ugettext(u'Pages'), document.documentpage_set.count())) + output.append(u'
%s: %d
' % (ugettext(u'Pages'), document.pages.count())) output.append(get_tags_inline_widget(document)) output.append(u'
' % document) output.append(document_html_widget(document, click_view='document_display', view='document_preview_multipage', fancybox_class='fancybox-noscaling', gallery_name=u'smart_link_%d_documents_gallery' % value['smart_link_instance'].pk)) diff --git a/apps/linking/managers.py b/apps/linking/managers.py index 03f9203b24..050ddffea2 100644 --- a/apps/linking/managers.py +++ b/apps/linking/managers.py @@ -59,7 +59,7 @@ class SmartLinkManager(models.Manager): if total_query: try: document_qs = Document.objects.filter(total_query) - result[smart_link] = {'documents': document_qs.order_by('file_filename') or []} + result[smart_link] = {'documents': document_qs.order_by('date_added') or []} except Exception, e: result[smart_link] = {'documents': []} errors.append(e) From aa660851651270c761db802028e7fb6691ac8e7b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 00:01:21 -0400 Subject: [PATCH 184/220] Update the document list view, the page update view and the remaining references of 'file_filename' to 'filename' --- apps/documents/views.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/documents/views.py b/apps/documents/views.py index 894818547c..4b08e9f5ee 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -66,7 +66,7 @@ def document_list(request, object_list=None, title=None, extra_context=None): check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) context = { - 'object_list': object_list if not (object_list is None) else Document.objects.only('file_filename',).all(), + 'object_list': object_list if not (object_list is None) else Document.objects.all(), 'title': title if title else _(u'documents'), 'multi_select_as_buttons': True, 'hide_links': True, @@ -115,7 +115,7 @@ def document_view(request, document_id, advanced=False): if advanced: document_properties_form = DocumentPropertiesForm(instance=document, extra_fields=[ - {'label': _(u'Filename'), 'field': 'file_filename'}, + {'label': _(u'Filename'), 'field': 'filename'}, {'label': _(u'File mimetype'), 'field': 'file_mimetype'}, {'label': _(u'File mime encoding'), 'field': 'file_mime_encoding'}, {'label': _(u'File size'), 'field':lambda x: pretty_size(x.size) if x.size else '-'}, @@ -250,7 +250,7 @@ def document_edit(request, document_id): document.filename = form.cleaned_data['document_type_available_filenames'].filename document.save() - create_history(HISTORY_DOCUMENT_EDITED, document, {'user': request.user, 'diff': return_diff(old_document, document, ['file_filename', 'description'])}) + create_history(HISTORY_DOCUMENT_EDITED, document, {'user': request.user, 'diff': return_diff(old_document, document, ['filename', 'description'])}) RecentDocument.objects.add_document_for_user(request.user, document) messages.success(request, _(u'Document "%s" edited successfully.') % document) @@ -263,7 +263,7 @@ def document_edit(request, document_id): return HttpResponseRedirect(document.get_absolute_url()) else: form = DocumentForm_edit(instance=document, initial={ - 'new_filename': document.file_filename}) + 'new_filename': document.filename}) return render_to_response('generic_form.html', { 'form': form, @@ -486,16 +486,16 @@ def document_update_page_count(request): previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) office_converter = OfficeConverter() - qs = Document.objects.exclude(file_filename__iendswith='dxf').filter(file_mimetype__in=office_converter.mimetypes()) + qs = DocumentVersion.objects.exclude(filename__iendswith='dxf').filter(mimetype__in=office_converter.mimetypes()) if request.method == 'POST': updated = 0 processed = 0 - for document in qs: - old_page_count = document.page_count - document.update_page_count() + for document_version in qs: + old_page_count = document_version.pages.count() + document_version.update_page_count() processed += 1 - if old_page_count != document.page_count: + if old_page_count != document_version.pages.count(): updated += 1 messages.success(request, _(u'Page count update complete. Documents processed: %(total)d, documents with changed page count: %(change)d') % { From c3eaacb6c6badfe77414dcf4d96f658aacbd4124 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 01:10:10 -0400 Subject: [PATCH 185/220] Make document date_added not editable, fix document version delete method, add revert method to document version --- apps/documents/models.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index 581e1eea4f..ef9220b277 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -78,7 +78,7 @@ class Document(models.Model): uuid = models.CharField(max_length=48, blank=True, editable=False) document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'), null=True, blank=True) description = models.TextField(blank=True, null=True, verbose_name=_(u'description'), db_index=True) - date_added = models.DateTimeField(verbose_name=_(u'added'), db_index=True) + date_added = models.DateTimeField(verbose_name=_(u'added'), db_index=True, editable=False) tags = TaggableManager() @@ -438,6 +438,13 @@ class DocumentVersion(models.Model): page_transformation.save() + def revert(self): + ''' + Delete the subsequent versions after this one + ''' + for version in self.document.versions.filter(timestamp__gt=self.timestamp): + version.delete() + def update_mimetype(self, save=True): ''' Read a document verions's file and determine the mimetype by calling the @@ -454,7 +461,7 @@ class DocumentVersion(models.Model): self.save() def delete(self, *args, **kwargs): - super(Document, self).delete(*args, **kwargs) + super(DocumentVesion, self).delete(*args, **kwargs) return self.file.storage.delete(self.file.path) def exists(self): From 2ec134e1728cfd12af0b1d94e4f4fb3298cf1928 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 01:11:12 -0400 Subject: [PATCH 186/220] Add document version revert support --- apps/documents/__init__.py | 26 ++++++------ apps/documents/literals.py | 1 + .../static/images/icons/page_white_copy.png | Bin 0 -> 862 bytes apps/documents/urls.py | 1 + apps/documents/views.py | 40 ++++++++++++++---- 5 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 apps/documents/static/images/icons/page_white_copy.png diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 1a39e01ac8..e6e67f90c8 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -16,15 +16,15 @@ from project_setup.api import register_setup from documents.models import (Document, DocumentPage, DocumentPageTransformation, DocumentType, DocumentTypeFilename, DocumentVersion) -from documents.literals import PERMISSION_DOCUMENT_CREATE, \ - PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW, \ - PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \ - PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, \ - PERMISSION_DOCUMENT_EDIT -from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT, \ - PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE -from documents.literals import HISTORY_DOCUMENT_CREATED, \ - HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED +from documents.literals import (PERMISSION_DOCUMENT_CREATE, + PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW, + PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, + PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, + PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT) +from documents.literals import (PERMISSION_DOCUMENT_TYPE_EDIT, + PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE) +from documents.literals import (HISTORY_DOCUMENT_CREATED, + HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) from documents.conf.settings import ZOOM_MAX_LEVEL from documents.conf.settings import ZOOM_MIN_LEVEL from documents.conf import settings as document_settings @@ -56,6 +56,7 @@ register_permission(PERMISSION_DOCUMENT_DELETE) register_permission(PERMISSION_DOCUMENT_DOWNLOAD) register_permission(PERMISSION_DOCUMENT_TRANSFORM) register_permission(PERMISSION_DOCUMENT_TOOLS) +register_permission(PERMISSION_DOCUMENT_VERSION_REVERT) # Document type permissions set_namespace_title('documents_setup', _(u'Documents setup')) @@ -80,8 +81,8 @@ document_edit = {'text': _(u'edit'), 'view': 'document_edit', 'args': 'object.id document_preview = {'text': _(u'preview'), 'class': 'fancybox', 'view': 'document_preview', 'args': 'object.id', 'famfam': 'magnifier', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_download = {'text': _(u'download'), 'view': 'document_download', 'args': 'object.id', 'famfam': 'page_save', 'permissions': [PERMISSION_DOCUMENT_DOWNLOAD]} document_version_download = {'text': _(u'download'), 'view': 'document_version_download', 'args': 'object.pk', 'famfam': 'page_save', 'permissions': [PERMISSION_DOCUMENT_DOWNLOAD]} -document_find_duplicates = {'text': _(u'find duplicates'), 'view': 'document_find_duplicates', 'args': 'object.id', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VIEW]} -document_find_all_duplicates = {'text': _(u'find all duplicates'), 'view': 'document_find_all_duplicates', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'description': _(u'Search all the documents\' checksums and return a list of the exact matches.')} +document_find_duplicates = {'text': _(u'find duplicates'), 'view': 'document_find_duplicates', 'args': 'object.id', 'famfam': 'page_white_copy', 'permissions': [PERMISSION_DOCUMENT_VIEW]} +document_find_all_duplicates = {'text': _(u'find all duplicates'), 'view': 'document_find_all_duplicates', 'famfam': 'page_white_copy', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'description': _(u'Search all the documents\' checksums and return a list of the exact matches.')} document_update_page_count = {'text': _(u'update office documents\' page count'), 'view': 'document_update_page_count', 'famfam': 'page_white_csharp', 'permissions': [PERMISSION_DOCUMENT_TOOLS], 'description': _(u'Update the page count of the office type documents. This is useful when enabling office document support after there were already office type documents in the database.')} document_clear_transformations = {'text': _(u'clear transformations'), 'view': 'document_clear_transformations', 'args': 'object.id', 'famfam': 'page_paintbrush', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} document_multiple_clear_transformations = {'text': _(u'clear transformations'), 'view': 'document_multiple_clear_transformations', 'famfam': 'page_paintbrush', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} @@ -113,6 +114,7 @@ document_page_view_reset = {'text': _(u'reset view'), 'class': 'no-parent-histor # Document versions document_version_list = {'text': _(u'versions'), 'view': 'document_version_list', 'args': 'object.pk', 'famfam': 'page_world', 'permissions': [PERMISSION_DOCUMENT_VIEW]} +document_version_revert = {'text': _(u'revert'), 'view': 'document_version_revert', 'args': 'object.pk', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VERSION_REVERT]} # Document type related links document_type_list = {'text': _(u'document type list'), 'view': 'document_type_list', 'famfam': 'layout', 'permissions': [PERMISSION_DOCUMENT_VIEW]} @@ -141,7 +143,7 @@ register_links(Document, [document_edit, document_print, document_delete, docume register_multi_item_links(['document_find_duplicates', 'folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete]) # Document Version links -register_links(DocumentVersion, [document_version_download]) +register_links(DocumentVersion, [document_version_revert, document_version_download]) secondary_menu_links = [document_list_recent, document_list, document_create_multiple] diff --git a/apps/documents/literals.py b/apps/documents/literals.py index 30b0284f5f..54df1d03d2 100644 --- a/apps/documents/literals.py +++ b/apps/documents/literals.py @@ -13,6 +13,7 @@ PERMISSION_DOCUMENT_DELETE = {'namespace': 'documents', 'name': 'document_delete PERMISSION_DOCUMENT_DOWNLOAD = {'namespace': 'documents', 'name': 'document_download', 'label': _(u'Download documents')} PERMISSION_DOCUMENT_TRANSFORM = {'namespace': 'documents', 'name': 'document_transform', 'label': _(u'Transform documents')} PERMISSION_DOCUMENT_TOOLS = {'namespace': 'documents', 'name': 'document_tools', 'label': _(u'Execute document modifying tools')} +PERMISSION_DOCUMENT_VERSION_REVERT = {'namespace': 'documents', 'name': 'document_version_revert', 'label': _(u'Revert documents to a previous version')} PERMISSION_DOCUMENT_TYPE_EDIT = {'namespace': 'documents_setup', 'name': 'document_type_edit', 'label': _(u'Edit document types')} PERMISSION_DOCUMENT_TYPE_DELETE = {'namespace': 'documents_setup', 'name': 'document_type_delete', 'label': _(u'Delete document types')} diff --git a/apps/documents/static/images/icons/page_white_copy.png b/apps/documents/static/images/icons/page_white_copy.png new file mode 100644 index 0000000000000000000000000000000000000000..4c21085e2bef9d3c05ad32fa6b21f575ad759894 GIT binary patch literal 862 zcmV-k1EKthP)~inKO?)P`bhjd*Nlm%HQcxWl_WhfEgs zZuh>K`R3aL0l;XTowWh6BF1A75N7fU0z(ATG(YauYBid;g9or>0wCg8uh$cYM@Of$ zmM492J7-L} z;d6UlEue8Q_zk&S4$7s{PNUiE()2p$>vb5ptBBoMNcUIy$EAPWT`L%#WYqukXR zDht`{Dvaqnm7yoBIk#?*^>?e)XEcuH0zk$g?D;kU{jF)wndTkr?d}Gy>-YQFlV-C+ z;0l;1CYK&Sf+I_F)bDbl2FWV2Z)6^jLG*_m$fwjpP#-C{Xs zE)LDtjndZE3E8*|6!=tjY<8_Z8a9S;m3qHg#|h=~psR9z$#A)@NWOdIN& z+?-R?LZH&Mdv#+XeyJHD5^xH@gOmlZQ3 ztd_N;7gG?fdo!5~)t3O!M_{}R+`g+;cW7J*;7yP%kcfPGTdCMbuw&-fRMLiku>f4l z_fhhTh-+44\d+)/version/all/$', 'document_version_list', (), 'document_version_list'), url(r'^document/version/(?P\d+)/download/$', 'document_download', (), 'document_version_download'), + url(r'^document/version/(?P\d+)/revert/$', 'document_version_revert', (), 'document_version_revert'), url(r'^multiple/clear_transformations/$', 'document_multiple_clear_transformations', (), 'document_multiple_clear_transformations'), url(r'^duplicates/list/$', 'document_find_all_duplicates', (), 'document_find_all_duplicates'), diff --git a/apps/documents/views.py b/apps/documents/views.py index 4b08e9f5ee..2bff281ef9 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -36,14 +36,15 @@ from documents.conf.settings import ROTATION_STEP from documents.conf.settings import PRINT_SIZE from documents.conf.settings import RECENT_COUNT -from documents.literals import PERMISSION_DOCUMENT_CREATE, \ - PERMISSION_DOCUMENT_PROPERTIES_EDIT, \ - PERMISSION_DOCUMENT_VIEW, \ - PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \ - PERMISSION_DOCUMENT_TRANSFORM, \ - PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_TOOLS -from documents.literals import HISTORY_DOCUMENT_CREATED, \ - HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED +from documents.literals import (PERMISSION_DOCUMENT_CREATE, + PERMISSION_DOCUMENT_PROPERTIES_EDIT, + PERMISSION_DOCUMENT_VIEW, + PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, + PERMISSION_DOCUMENT_TRANSFORM, + PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_TOOLS, + PERMISSION_DOCUMENT_VERSION_REVERT) +from documents.literals import (HISTORY_DOCUMENT_CREATED, + HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) from documents.forms import (DocumentTypeSelectForm, DocumentForm_edit, DocumentPropertiesForm, @@ -1188,3 +1189,26 @@ def document_version_list(request, document_pk): return render_to_response('generic_list.html', context, context_instance=RequestContext(request)) + + +def document_version_revert(request, document_version_pk): + check_permissions(request.user, [PERMISSION_DOCUMENT_VERSION_REVERT]) + + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + + if request.method == 'POST': + #try: + document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) + document_version.revert() + messages.success(request, _(u'Document version reverted successfully')) + #except Exception, msg: + # messages.error(request, _(u'Error reverting document version; %s') % msg) + + return HttpResponseRedirect(previous) + + return render_to_response('generic_confirm.html', { + 'previous': previous, + 'title': _(u'Are you sure you wish to revert to this version?'), + 'message': _(u'All later version after this one will be deleted too.'), + 'form_icon': u'page_refresh.png', + }, context_instance=RequestContext(request)) From 7de09aae0fb465e1338adfad30507baffe6a2f04 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:00:04 -0400 Subject: [PATCH 187/220] Add version support to the document image generation code --- apps/documents/models.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index ef9220b277..a658826191 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -113,35 +113,39 @@ class Document(models.Model): self.date_added = datetime.datetime.now() super(Document, self).save(*args, **kwargs) - def get_cached_image_name(self, page): - document_page = self.pages.get(page_number=page) + def get_cached_image_name(self, page, version): + document_version = DocumentVersion.objects.get(pk=version) + document_page = document_version.documentpage_set.get(page_number=page) transformations, warnings = document_page.get_transformation_list() - hash_value = HASH_FUNCTION(u''.join([self.checksum, unicode(page), unicode(transformations)])) + hash_value = HASH_FUNCTION(u''.join([document_version.checksum, unicode(page), unicode(transformations)])) return os.path.join(CACHE_PATH, hash_value), transformations - def get_image_cache_name(self, page): - cache_file_path, transformations = self.get_cached_image_name(page) + def get_image_cache_name(self, page, version): + cache_file_path, transformations = self.get_cached_image_name(page, version) if os.path.exists(cache_file_path): return cache_file_path else: - document_file = document_save_to_temp_dir(self, self.checksum) + document_version = DocumentVersion.objects.get(pk=version) + document_file = document_save_to_temp_dir(document_version, document_version.checksum) return convert(document_file, output_filepath=cache_file_path, page=page, transformations=transformations, mimetype=self.file_mimetype) - def get_valid_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION): - image_cache_name = self.get_image_cache_name(page=page) + def get_valid_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, version=None): + if not version: + version = self.latest_version.pk + image_cache_name = self.get_image_cache_name(page=page, version=version) return convert(image_cache_name, cleanup_files=False, size=size, zoom=zoom, rotation=rotation) - def get_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, as_base64=False): + def get_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, as_base64=False, version=None): if zoom < ZOOM_MIN_LEVEL: zoom = ZOOM_MIN_LEVEL if zoom > ZOOM_MAX_LEVEL: zoom = ZOOM_MAX_LEVEL - rotation = rotation % 360 + rotation = rotation % 360 try: - file_path = self.get_valid_image(size=size, page=page, zoom=zoom, rotation=rotation) + file_path = self.get_valid_image(size=size, page=page, zoom=zoom, rotation=rotation, version=version) except UnknownFileFormat: file_path = get_icon_file_path(self.file_mimetype) except UnkownConvertError: @@ -184,6 +188,7 @@ class Document(models.Model): logger.debug('creating new document version') if version_update: new_version_dict = self.latest_version.get_new_version_dict(version_update) + logger.debug('new_version_dict: %s' % new_version_dict) new_version = DocumentVersion( document=self, file=file, @@ -203,9 +208,6 @@ class Document(models.Model): ) new_version.save() - - logger.debug('new_version_dict: %s' % new_version_dict) - logger.debug('new_version saved') return new_version @@ -461,7 +463,7 @@ class DocumentVersion(models.Model): self.save() def delete(self, *args, **kwargs): - super(DocumentVesion, self).delete(*args, **kwargs) + super(DocumentVersion, self).delete(*args, **kwargs) return self.file.storage.delete(self.file.path) def exists(self): From 255cb8eaf21e9cec6f8c2de6cafe98211771adb4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:00:28 -0400 Subject: [PATCH 188/220] Updated the smart document widget to be version aware --- apps/documents/widgets.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/documents/widgets.py b/apps/documents/widgets.py index e449ffc335..031461047f 100644 --- a/apps/documents/widgets.py +++ b/apps/documents/widgets.py @@ -20,14 +20,19 @@ def document_link(document): return mark_safe(u'%s' % (reverse('document_view_simple', args=[document.pk]), document)) -def document_html_widget(document, view='document_thumbnail', click_view=None, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox'): +def document_html_widget(document, view='document_thumbnail', click_view=None, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', version=None): result = [] alt_text = _(u'document page image') + + if not version: + version = document.latest_version.pk + query_dict = { 'page': page, 'zoom': zoom, 'rotation': rotation, + 'version': version, } if gallery_name: @@ -67,7 +72,7 @@ def document_html_widget(document, view='document_thumbnail', click_view=None, p }); ''' % { - 'url': reverse('documents-expensive-is_zoomable', args=[document.pk, page]), + 'url': reverse('documents-expensive-is_zoomable', args=[document.pk, version, page]), 'pk': document.pk, 'page': page if page else 1, 'plain_template': mark_safe(u''.join(plain_template)), From 2d119b853f0bc98f1677447a231d7b99c0466773 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:01:24 -0400 Subject: [PATCH 189/220] Update the 'get_document_image' view to be version aware --- apps/documents/views.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/documents/views.py b/apps/documents/views.py index 2bff281ef9..cbf3853565 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -280,6 +280,8 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, base64_version=F page = int(request.GET.get('page', DEFAULT_PAGE_NUMBER)) zoom = int(request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) + + version = int(request.GET.get('version', document.latest_version.pk)) if zoom < ZOOM_MIN_LEVEL: zoom = ZOOM_MIN_LEVEL @@ -290,10 +292,10 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, base64_version=F rotation = int(request.GET.get('rotation', DEFAULT_ROTATION)) % 360 if base64_version: - return HttpResponse(u'' % document.get_image(size=size, page=page, zoom=zoom, rotation=rotation, as_base64=True)) + return HttpResponse(u'' % document.get_image(size=size, page=page, zoom=zoom, rotation=rotation, as_base64=True, version=version)) else: # TODO: fix hardcoded MIMETYPE - return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation), mimetype=DEFAULT_FILE_FORMAT_MIMETYPE) + return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation, version=version), mimetype=DEFAULT_FILE_FORMAT_MIMETYPE) def document_download(request, document_id=None, document_version_pk=None): @@ -1197,12 +1199,12 @@ def document_version_revert(request, document_version_pk): previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) if request.method == 'POST': - #try: - document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) - document_version.revert() - messages.success(request, _(u'Document version reverted successfully')) - #except Exception, msg: - # messages.error(request, _(u'Error reverting document version; %s') % msg) + try: + document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) + document_version.revert() + messages.success(request, _(u'Document version reverted successfully')) + except Exception, msg: + messages.error(request, _(u'Error reverting document version; %s') % msg) return HttpResponseRedirect(previous) From 73950ef750755b68b1f59abe90d8c24f3ab7f7c4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:01:48 -0400 Subject: [PATCH 190/220] Disable the revert link for the current version of a document --- apps/documents/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index e6e67f90c8..750b2953a8 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -46,6 +46,10 @@ def is_min_zoom(context): def is_max_zoom(context): return context['zoom'] >= ZOOM_MAX_LEVEL + +def is_current_version(context): + return context['object'].document.latest_version.timestamp == context['object'].timestamp + # Permission setup set_namespace_title('documents', _(u'Documents')) register_permission(PERMISSION_DOCUMENT_CREATE) @@ -114,7 +118,7 @@ document_page_view_reset = {'text': _(u'reset view'), 'class': 'no-parent-histor # Document versions document_version_list = {'text': _(u'versions'), 'view': 'document_version_list', 'args': 'object.pk', 'famfam': 'page_world', 'permissions': [PERMISSION_DOCUMENT_VIEW]} -document_version_revert = {'text': _(u'revert'), 'view': 'document_version_revert', 'args': 'object.pk', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VERSION_REVERT]} +document_version_revert = {'text': _(u'revert'), 'view': 'document_version_revert', 'args': 'object.pk', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VERSION_REVERT], 'conditional_disable': is_current_version} # Document type related links document_type_list = {'text': _(u'document type list'), 'view': 'document_type_list', 'famfam': 'layout', 'permissions': [PERMISSION_DOCUMENT_VIEW]} From f0b1f9e6b3bc570e5371379d4b06d237cc33c3a5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:02:16 -0400 Subject: [PATCH 191/220] Remove removed code --- apps/rest_api/resources.py | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/apps/rest_api/resources.py b/apps/rest_api/resources.py index 869c78e407..d127096f3a 100644 --- a/apps/rest_api/resources.py +++ b/apps/rest_api/resources.py @@ -40,30 +40,6 @@ class DocumentResourceSimple(ModelResource): } for version in instance.versions.all() ] - - ''' - return [ - { - 'version': 1, - 'mimetype': instance.file_mimetype, - 'encoding': instance.file_mime_encoding, - 'filename': instance.filename, - 'date_updated': instance.date_updated, - 'checksum': instance.checksum, - 'size': instance.size, - 'exists': instance.exists(), - 'pages': [ - { - 'page_numer': page.page_number, - 'page_label': page.page_label, - 'is_zoomable': reverse('documents-expensive-is_zoomable', args=[instance.pk, page.page_number]), - - #'content': - } - for page in instance.documentpage_set.all() - ] - } - ] - ''' + def expensive_methods(self, instance): return [] From ae0ecb20a60be402ae5acda14fa08607b2f060bd Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:02:34 -0400 Subject: [PATCH 192/220] Update the 'is_zoomable' api call to be version aware --- apps/rest_api/urls.py | 2 +- apps/rest_api/views.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/rest_api/urls.py b/apps/rest_api/urls.py index 3265dd7574..34553951a6 100644 --- a/apps/rest_api/urls.py +++ b/apps/rest_api/urls.py @@ -12,5 +12,5 @@ urlpatterns = patterns('', # Version 0 alpha API calls url(r'^v0/document/(?P[0-9]+)/$', ReadOnlyInstanceModelView.as_view(resource=DocumentResourceSimple), name='documents-simple'), - url(r'^v0/document/(?P[0-9]+)/page/(?P[0-9]+)/expensive/is_zoomable/$', IsZoomable.as_view(), name='documents-expensive-is_zoomable'), + url(r'^v0/document/(?P[0-9]+)/version/(?P[0-9]+)/page/(?P[0-9]+)/expensive/is_zoomable/$', IsZoomable.as_view(), name='documents-expensive-is_zoomable'), ) diff --git a/apps/rest_api/views.py b/apps/rest_api/views.py index 6a1b5dfc14..d7623e4ffe 100644 --- a/apps/rest_api/views.py +++ b/apps/rest_api/views.py @@ -6,7 +6,7 @@ from django.utils.translation import ugettext_lazy as _ from django.shortcuts import get_object_or_404 from django.core.urlresolvers import reverse -from documents.models import Document +from documents.models import Document, DocumentVersion from converter.exceptions import UnknownFileFormat, UnkownConvertError from djangorestframework.views import View, ModelView, ListModelView, InstanceModelView @@ -45,11 +45,11 @@ class Version_0(View): class IsZoomable(View): - def get(self, request, pk, page_number): + def get(self, request, pk, page_number, version_pk): logger.info('received is_zoomable call from: %s' % (request.META['REMOTE_ADDR'])) - document = get_object_or_404(Document, pk=pk) + document_version = get_object_or_404(DocumentVersion, pk=version_pk) try: - document.get_image_cache_name(int(page_number)) + document_version.document.get_image_cache_name(int(page_number), version_pk) return {'result': True} except (UnknownFileFormat, UnkownConvertError): return {'result': False} From 479e3d5cec54b9fb936484f34b9532ed6d491f5e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:15:33 -0400 Subject: [PATCH 193/220] Update the REST API call 'is_zoomable' to catch more errors --- apps/rest_api/views.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/rest_api/views.py b/apps/rest_api/views.py index d7623e4ffe..6624e41510 100644 --- a/apps/rest_api/views.py +++ b/apps/rest_api/views.py @@ -6,7 +6,7 @@ from django.utils.translation import ugettext_lazy as _ from django.shortcuts import get_object_or_404 from django.core.urlresolvers import reverse -from documents.models import Document, DocumentVersion +from documents.models import Document, DocumentVersion, DocumentPage from converter.exceptions import UnknownFileFormat, UnkownConvertError from djangorestframework.views import View, ModelView, ListModelView, InstanceModelView @@ -51,5 +51,7 @@ class IsZoomable(View): try: document_version.document.get_image_cache_name(int(page_number), version_pk) return {'result': True} - except (UnknownFileFormat, UnkownConvertError): + except (UnknownFileFormat, UnkownConvertError, + DocumentPage.DoesNotExist, Document.DoesNotExist, + DocumentVersion.DoesNotExist): return {'result': False} From 03620f533155b2d2d34a7baa6f16f077eb772ad0 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:15:57 -0400 Subject: [PATCH 194/220] Update the 'find duplicates' view to work with document versions --- apps/documents/views.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/documents/views.py b/apps/documents/views.py index cbf3853565..7e5f563390 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -458,12 +458,11 @@ def _find_duplicate_list(request, source_document_list=Document.objects.all(), i duplicated = [] for document in source_document_list: if document.pk not in duplicated: - results = Document.objects.filter(checksum=document.checksum).exclude(id__in=duplicated).exclude(pk=document.pk).values_list('pk', flat=True) + results = DocumentVersion.objects.filter(checksum=document.latest_version.checksum).exclude(id__in=duplicated).exclude(pk=document.pk).values_list('document__pk', flat=True) duplicated.extend(results) if include_source and results: duplicated.append(document.pk) - context = { 'object_list': Document.objects.filter(pk__in=duplicated), 'title': _(u'duplicated documents'), From 64e73a9c9d58162657f1a961626ca00ec9ef24ff Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:20:44 -0400 Subject: [PATCH 195/220] Update the 'invalidate_cached_image' to supply a version pk as now required by the version aware 'get_cached_image_name' method --- apps/documents/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index a658826191..b4e1aa2a33 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -163,7 +163,7 @@ class Document(models.Model): def invalidate_cached_image(self, page): try: - os.unlink(self.get_cached_image_name(page)[0]) + os.unlink(self.get_cached_image_name(page, self.latest_version.pk)[0]) except OSError: pass From fafadfaca2c62b015560a6a377a47ff013dd18b8 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:37:11 -0400 Subject: [PATCH 196/220] Fix document print view --- apps/converter/api.py | 4 ++-- apps/documents/forms.py | 8 ++++---- apps/documents/templates/document_print.html | 7 ++++--- apps/documents/templatetags/printing_tags.py | 4 ++-- apps/documents/views.py | 18 +++++++++--------- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/apps/converter/api.py b/apps/converter/api.py index 993fb70f1d..ff4e9d645b 100644 --- a/apps/converter/api.py +++ b/apps/converter/api.py @@ -110,7 +110,7 @@ def get_page_count(input_filepath): return backend.get_page_count(input_filepath) - +''' def get_document_dimensions(document, *args, **kwargs): document_filepath = create_image_cache_filename(document.checksum, *args, **kwargs) if os.path.exists(document_filepath): @@ -118,7 +118,7 @@ def get_document_dimensions(document, *args, **kwargs): return [int(dimension) for dimension in backend.identify_file(unicode(document_filepath), options).split()] else: return [0, 0] - +''' def get_available_transformations_choices(): result = [] diff --git a/apps/documents/forms.py b/apps/documents/forms.py index 60d69506ac..a829516327 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -271,10 +271,10 @@ class DocumentTypeSelectForm(forms.Form): class PrintForm(forms.Form): - page_size = forms.ChoiceField(choices=PAGE_SIZE_CHOICES, initial=DEFAULT_PAPER_SIZE, label=_(u'Page size'), required=False) - custom_page_width = forms.CharField(label=_(u'Custom page width'), required=False) - custom_page_height = forms.CharField(label=_(u'Custom page height'), required=False) - page_orientation = forms.ChoiceField(choices=PAGE_ORIENTATION_CHOICES, initial=DEFAULT_PAGE_ORIENTATION, label=_(u'Page orientation'), required=True) + #page_size = forms.ChoiceField(choices=PAGE_SIZE_CHOICES, initial=DEFAULT_PAPER_SIZE, label=_(u'Page size'), required=False) + #custom_page_width = forms.CharField(label=_(u'Custom page width'), required=False) + #custom_page_height = forms.CharField(label=_(u'Custom page height'), required=False) + #page_orientation = forms.ChoiceField(choices=PAGE_ORIENTATION_CHOICES, initial=DEFAULT_PAGE_ORIENTATION, label=_(u'Page orientation'), required=True) page_range = forms.CharField(label=_(u'Page range'), required=False) diff --git a/apps/documents/templates/document_print.html b/apps/documents/templates/document_print.html index 06068fc31b..35f08abaf8 100644 --- a/apps/documents/templates/document_print.html +++ b/apps/documents/templates/document_print.html @@ -1,5 +1,5 @@ {% load project_tags %} -{% load printing_tags %} +{#{% load printing_tags %}#} @@ -48,9 +48,10 @@ {% for page in pages %} - {% get_document_size object %} + {#{% get_document_size object %}#}
- page_aspect %}width="97%"{% else %}height="97%"{% endif %} /> + {# page_aspect %}width="97%"{% else %}height="97%"{% endif %} />#} +
{% endfor %} diff --git a/apps/documents/templatetags/printing_tags.py b/apps/documents/templatetags/printing_tags.py index c2fc6b4e29..7dccae8085 100644 --- a/apps/documents/templatetags/printing_tags.py +++ b/apps/documents/templatetags/printing_tags.py @@ -1,6 +1,6 @@ from django.template import Library, Node, Variable -from converter.api import get_document_dimensions +from converter.api import get_dimensions from documents.conf.settings import PRINT_SIZE @@ -13,7 +13,7 @@ class GetImageSizeNode(Node): def render(self, context): document = Variable(self.document).resolve(context) - width, height = get_document_dimensions(document) + width, height = get_dimensions(document) context[u'document_width'], context['document_height'] = width, height context[u'document_aspect'] = float(width) / float(height) return u'' diff --git a/apps/documents/views.py b/apps/documents/views.py index 7e5f563390..fdd98922c6 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -799,18 +799,18 @@ def document_print(request, document_id): hard_copy_arguments['page_range'] = form.cleaned_data['page_range'] # Compute page width and height - if form.cleaned_data['custom_page_width'] and form.cleaned_data['custom_page_height']: - page_width = form.cleaned_data['custom_page_width'] - page_height = form.cleaned_data['custom_page_height'] - elif form.cleaned_data['page_size']: - page_width, page_height = dict(PAGE_SIZE_DIMENSIONS)[form.cleaned_data['page_size']] + #if form.cleaned_data['custom_page_width'] and form.cleaned_data['custom_page_height']: + # page_width = form.cleaned_data['custom_page_width'] + # page_height = form.cleaned_data['custom_page_height'] + #elif form.cleaned_data['page_size']: + # page_width, page_height = dict(PAGE_SIZE_DIMENSIONS)[form.cleaned_data['page_size']] # Page orientation - if form.cleaned_data['page_orientation'] == PAGE_ORIENTATION_LANDSCAPE: - page_width, page_height = page_height, page_width + #if form.cleaned_data['page_orientation'] == PAGE_ORIENTATION_LANDSCAPE: + # page_width, page_height = page_height, page_width - hard_copy_arguments['page_width'] = page_width - hard_copy_arguments['page_height'] = page_height + #hard_copy_arguments['page_width'] = page_width + #hard_copy_arguments['page_height'] = page_height new_url = [reverse('document_hard_copy', args=[document_id])] if hard_copy_arguments: From f5c3fa21d726fad48b8c27821ff7bfef4207ef09 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:44:08 -0400 Subject: [PATCH 197/220] Add a size property to the DocumentVersion model --- apps/documents/models.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index b4e1aa2a33..bc08a1945a 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -179,10 +179,7 @@ class Document(models.Model): @property def size(self): - if self.exists(): - return self.latest_version.exists() - else: - return None + return self.latest_version.size def new_version(self, file, comment=None, version_update=None, release_level=None, serial=None): logger.debug('creating new document version') @@ -498,6 +495,13 @@ class DocumentVersion(models.Model): input_descriptor.close() return filepath + @property + def size(self): + if self.exists(): + return self.file.storage.size(self.file.path) + else: + return None + class DocumentTypeFilename(models.Model): ''' From 071fed89963c784a2edcd3472217fb53fdf95493 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 03:21:34 -0400 Subject: [PATCH 198/220] Add new version upload option to use new file filename as the document filename --- apps/documents/forms.py | 7 +++ apps/sources/models.py | 11 +++- apps/sources/views.py | 124 +++++++++++++++++++++------------------- 3 files changed, 79 insertions(+), 63 deletions(-) diff --git a/apps/documents/forms.py b/apps/documents/forms.py index a829516327..991b6488e8 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -156,6 +156,13 @@ class DocumentForm(forms.ModelForm): # To allow merging with DocumentForm_edit self.fields['document_type'].widget = forms.HiddenInput() + if instance: + self.fields['use_file_name'] = forms.BooleanField( + label=_(u'Use the new version filename as the document filename'), + initial=False, + required=False, + ) + # Instance's document_type overrides the passed document_type if instance: if hasattr(instance, 'document_type'): diff --git a/apps/sources/models.py b/apps/sources/models.py index 44822ee0ba..3d09915617 100644 --- a/apps/sources/models.py +++ b/apps/sources/models.py @@ -52,7 +52,7 @@ class BaseModel(models.Model): def get_transformation_list(self): return SourceTransformation.transformations.get_for_object_as_list(self) - def upload_file(self, file_object, filename=None, document_type=None, expand=False, metadata_dict_list=None, user=None, document=None, new_version_data=None): + def upload_file(self, file_object, filename=None, use_file_name=False, document_type=None, expand=False, metadata_dict_list=None, user=None, document=None, new_version_data=None): if expand: try: cf = CompressedFile(file_object) @@ -63,11 +63,11 @@ class BaseModel(models.Model): except NotACompressedFile: self.upload_single_file(file_object, filename, document_type, metadata_dict_list, user) else: - self.upload_single_file(file_object, filename, document_type, metadata_dict_list, user, document, new_version_data) + self.upload_single_file(file_object, filename, use_file_name, document_type, metadata_dict_list, user, document, new_version_data) file_object.close() - def upload_single_file(self, file_object, filename=None, document_type=None, metadata_dict_list=None, user=None, document=None, new_version_data=None): + def upload_single_file(self, file_object, filename=None, use_file_name=False, document_type=None, metadata_dict_list=None, user=None, document=None, new_version_data=None): if not document: document = Document() if document_type: @@ -83,6 +83,11 @@ class BaseModel(models.Model): create_history(HISTORY_DOCUMENT_CREATED, document, {'user': user}) else: create_history(HISTORY_DOCUMENT_CREATED, document) + else: + if use_file_name: + filename = None + else: + filename = filename if filename else document.latest_version.filename if not new_version_data: new_version_data = {} diff --git a/apps/sources/views.py b/apps/sources/views.py index c668b23909..88e1d08b72 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -126,35 +126,37 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No instance=document ) if form.is_valid(): - #try: - if document: - expand = False - else: - if web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK: - expand = form.cleaned_data.get('expand') + try: + if document: + expand = False else: - if web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y: - expand = True + if web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK: + expand = form.cleaned_data.get('expand') else: - expand = False - - new_filename = get_form_filename(form) - web_form.upload_file(request.FILES['file'], - new_filename, document_type=document_type, - expand=expand, - metadata_dict_list=decode_metadata_from_url(request.GET), - user=request.user, - document=document, - new_version_data=form.cleaned_data.get('new_version_data') - ) - #except Exception, e: - # messages.error(request, _(u'Unhandled exception: %s') % e) - if document: - messages.success(request, _(u'Document version uploaded successfully.')) - return HttpResponseRedirect(reverse('document_view_simple', args=[document.pk])) - else: - messages.success(request, _(u'Document uploaded successfully.')) - return HttpResponseRedirect(request.get_full_path()) + if web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y: + expand = True + else: + expand = False + + new_filename = get_form_filename(form) + + web_form.upload_file(request.FILES['file'], + new_filename, use_file_name=form.cleaned_data.get('use_file_name', False), + document_type=document_type, + expand=expand, + metadata_dict_list=decode_metadata_from_url(request.GET), + user=request.user, + document=document, + new_version_data=form.cleaned_data.get('new_version_data') + ) + if document: + messages.success(request, _(u'Document version uploaded successfully.')) + return HttpResponseRedirect(reverse('document_view_simple', args=[document.pk])) + else: + messages.success(request, _(u'Document uploaded successfully.')) + return HttpResponseRedirect(request.get_full_path()) + except Exception, e: + messages.error(request, _(u'Unhandled exception: %s') % e) else: form = WebFormForm( show_expand=(web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document, @@ -186,43 +188,45 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No instance=document ) if form.is_valid(): - #try: - staging_file = StagingFile.get(form.cleaned_data['staging_file_id']) - if document: - expand = False - else: - if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK: - expand = form.cleaned_dataget('expand') + try: + staging_file = StagingFile.get(form.cleaned_data['staging_file_id']) + if document: + expand = False else: - if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y: - expand = True + if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK: + expand = form.cleaned_dataget('expand') else: - expand = False + if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y: + expand = True + else: + expand = False - new_filename = get_form_filename(form) - staging_folder.upload_file(staging_file.upload(), - new_filename, document_type=document_type, - expand=expand, - metadata_dict_list=decode_metadata_from_url(request.GET), - user=request.user, - document=document, - new_version_data=form.cleaned_data.get('new_version_data') - ) - if document: - messages.success(request, _(u'Document version from staging file: %s, uploaded successfully.') % staging_file.filename) - else: - messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename) + new_filename = get_form_filename(form) + + staging_folder.upload_file(staging_file.upload(), + new_filename, use_file_name=form.cleaned_data.get('use_file_name', False), + document_type=document_type, + expand=expand, + metadata_dict_list=decode_metadata_from_url(request.GET), + user=request.user, + document=document, + new_version_data=form.cleaned_data.get('new_version_data') + ) + if document: + messages.success(request, _(u'Document version from staging file: %s, uploaded successfully.') % staging_file.filename) + else: + messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename) - if staging_folder.delete_after_upload: - transformations, errors = staging_folder.get_transformation_list() - staging_file.delete(preview_size=staging_folder.get_preview_size(), transformations=transformations) - messages.success(request, _(u'Staging file: %s, deleted successfully.') % staging_file.filename) - #except Exception, e: - # messages.error(request, _(u'Unhandled exception: %s') % e) - if document: - return HttpResponseRedirect(reverse('document_view_simple', args=[document.pk])) - else: - return HttpResponseRedirect(request.get_full_path()) + if staging_folder.delete_after_upload: + transformations, errors = staging_folder.get_transformation_list() + staging_file.delete(preview_size=staging_folder.get_preview_size(), transformations=transformations) + messages.success(request, _(u'Staging file: %s, deleted successfully.') % staging_file.filename) + if document: + return HttpResponseRedirect(reverse('document_view_simple', args=[document.pk])) + else: + return HttpResponseRedirect(request.get_full_path()) + except Exception, e: + messages.error(request, _(u'Unhandled exception: %s') % e) else: form = StagingDocumentForm(cls=StagingFile, document_type=document_type, From 071139c5bf9733c2611f1b0e78a25960d4223dcf Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 05:52:09 -0400 Subject: [PATCH 199/220] Add document signature verification app --- apps/django_gpg/__init__.py | 19 ++ apps/django_gpg/api.py | 267 ++++++++++++++++++ apps/django_gpg/conf/__init__.py | 0 apps/django_gpg/conf/settings.py | 15 + apps/django_gpg/exceptions.py | 31 ++ .../locale/en/LC_MESSAGES/django.po | 203 +++++++++++++ .../locale/es/LC_MESSAGES/django.mo | Bin 0 -> 4289 bytes .../locale/es/LC_MESSAGES/django.po | 217 ++++++++++++++ apps/django_gpg/models.py | 1 + apps/django_gpg/runtime.py | 4 + apps/django_gpg/static/images/icons/cross.png | Bin 0 -> 1049 bytes .../images/icons/document_signature.png | Bin 0 -> 1598 bytes .../static/images/icons/user_silhouette.png | Bin 0 -> 1087 bytes apps/django_gpg/urls.py | 8 + apps/django_gpg/views.py | 113 ++++++++ apps/documents/views.py | 2 + requirements/development.txt | 1 + requirements/production.txt | 1 + settings.py | 1 + urls.py | 1 + 20 files changed, 884 insertions(+) create mode 100644 apps/django_gpg/__init__.py create mode 100644 apps/django_gpg/api.py create mode 100644 apps/django_gpg/conf/__init__.py create mode 100644 apps/django_gpg/conf/settings.py create mode 100644 apps/django_gpg/exceptions.py create mode 100644 apps/django_gpg/locale/en/LC_MESSAGES/django.po create mode 100644 apps/django_gpg/locale/es/LC_MESSAGES/django.mo create mode 100644 apps/django_gpg/locale/es/LC_MESSAGES/django.po create mode 100644 apps/django_gpg/models.py create mode 100644 apps/django_gpg/runtime.py create mode 100644 apps/django_gpg/static/images/icons/cross.png create mode 100644 apps/django_gpg/static/images/icons/document_signature.png create mode 100644 apps/django_gpg/static/images/icons/user_silhouette.png create mode 100644 apps/django_gpg/urls.py create mode 100644 apps/django_gpg/views.py diff --git a/apps/django_gpg/__init__.py b/apps/django_gpg/__init__.py new file mode 100644 index 0000000000..de9aeeba41 --- /dev/null +++ b/apps/django_gpg/__init__.py @@ -0,0 +1,19 @@ +from django.utils.translation import ugettext_lazy as _ + +from documents.models import Document +from navigation.api import register_links, register_top_menu, \ + register_model_list_columns, register_multi_item_links, \ + register_sidebar_template +from main.api import register_diagnostic, register_maintenance_links +from permissions.api import register_permission, set_namespace_title +from project_setup.api import register_setup + +PERMISSION_DOCUMENT_VERIFY = {'namespace': 'django_gpg', 'name': 'document_verify', 'label': _(u'Verify document signatures')} + +# Permission setup +set_namespace_title('django_gpg', _(u'Signatures')) +register_permission(PERMISSION_DOCUMENT_VERIFY) + +document_verify = {'text': _(u'Signatures'), 'view': 'document_verify', 'args': 'object.pk', 'famfam': 'text_signature', 'permissions': [PERMISSION_DOCUMENT_VERIFY]} + +register_links(Document, [document_verify], menu_name='form_header') diff --git a/apps/django_gpg/api.py b/apps/django_gpg/api.py new file mode 100644 index 0000000000..504d9ba664 --- /dev/null +++ b/apps/django_gpg/api.py @@ -0,0 +1,267 @@ +import types +from StringIO import StringIO +from pickle import dumps + +import gnupg + +from django.core.files.base import File +from django.utils.translation import ugettext_lazy as _ + +from django_gpg.exceptions import GPGVerificationError, GPGSigningError, \ + GPGDecryptionError, KeyDeleteError, KeyGenerationError, \ + KeyFetchingError, KeyDoesNotExist + + +KEY_TYPES = { + 'pub': _(u'Public'), + 'sec': _(u'Secret'), +} + +KEY_CLASS_RSA = 'RSA' +KEY_CLASS_DSA = 'DSA' +KEY_CLASS_ELG = 'ELG-E' + +KEY_PRIMARY_CLASSES = ( + ((KEY_CLASS_RSA), _(u'RSA')), + ((KEY_CLASS_DSA), _(u'DSA')), +) + +KEY_SECONDARY_CLASSES = ( + ((KEY_CLASS_RSA), _(u'RSA')), + ((KEY_CLASS_ELG), _(u'Elgamal')), +) + +class Key(object): + @staticmethod + def get_key_id(fingerprint): + return fingerprint[-16:] + + @classmethod + def get_all(cls, gpg, secret=False, exclude=None): + result = [] + keys = gpg.gpg.list_keys(secret=secret) + if exclude: + excluded_id = exclude.key_id + else: + excluded_id = u'' + for key in keys: + if not key['keyid'] in excluded_id: + key_instance = Key( + fingerprint=key['fingerprint'], + uids=key['uids'], + type=key['type'], + data=gpg.gpg.export_keys([key['keyid']], secret=secret) + ) + result.append(key_instance) + + return result + + @classmethod + def get(cls, gpg, key_id, secret=False, search_keyservers=False): + if len(key_id) > 16: + # key_id is a fingerprint + key_id = Key.get_key_id(key_id) + + keys = gpg.gpg.list_keys(secret=secret) + key = next((key for key in keys if key['keyid'] == key_id), None) + if not key: + if search_keyservers and secret==False: + try: + gpg.receive_key(key_id) + return Key(gpg, key_id) + except KeyFetchingError: + raise KeyDoesNotExist + else: + raise KeyDoesNotExist + + key_instance = Key( + fingerprint=key['fingerprint'], + uids=key['uids'], + type=key['type'], + data=gpg.gpg.export_keys([key['keyid']], secret=secret) + ) + + return key_instance + + def __init__(self, fingerprint, uids, type, data): + self.fingerprint = fingerprint + self.uids = uids + self.type = type + self.data = data + + @property + def key_id(self): + return Key.get_key_id(self.fingerprint) + + @property + def user_ids(self): + return u', '.join(self.uids) + + def __str__(self): + return '%s "%s" (%s)' % (self.key_id, self.user_ids, KEY_TYPES.get(self.type, _(u'unknown'))) + + def __unicode__(self): + return unicode(self.__str__()) + + def __repr__(self): + return self.__unicode__() + + +class GPG(object): + def __init__(self, binary_path=None, home=None, keyring=None, keyservers=None): + kwargs = {} + if binary_path: + kwargs['gpgbinary'] = binary_path + + if home: + kwargs['gnupghome'] = home + + if keyring: + kwargs['keyring'] = keyring + + self.keyservers = keyservers + + self.gpg = gnupg.GPG(**kwargs) + + def verify_w_retry(self, file_input): + if isinstance(file_input, types.StringTypes): + input_descriptor = open(file_input, 'rb') + elif isinstance(file_input, types.FileType) or isinstance(file_input, File): + input_descriptor = file_input + elif issubclass(file_input.__class__, StringIO): + input_descriptor = file_input + else: + raise ValueError('Invalid file_input argument type') + + try: + verify = self.verify_file(input_descriptor) + if verify.status == 'no public key': + # Try to fetch the public key from the keyservers + try: + self.receive_key(verify.key_id) + return self.verify_w_retry(file_input) + except KeyFetchingError: + return verify + else: + return verify + except IOError: + return False + + def verify_file(self, file_input): + """ + Verify the signature of a file. + """ + if isinstance(file_input, types.StringTypes): + descriptor = open(file_input, 'rb') + elif isinstance(file_input, types.FileType) or isinstance(file_input, File) or isinstance(file_input, StringIO): + descriptor = file_input + else: + raise ValueError('Invalid file_input argument type') + + verify = self.gpg.verify_file(descriptor) + descriptor.close() + + if verify: + return verify + elif getattr(verify, 'status', None) == 'no public key': + # Exception to the rule, to be able to query the keyservers + return verify + else: + raise GPGVerificationError() + + def verify(self, data): + # TODO: try to merge with verify_file + verify = self.gpg.verify(data) + + if verify: + return verify + else: + raise GPGVerificationError(verify.status) + + def sign_file(self, file_input, key=None, destination=None, key_id=None, passphrase=None, clearsign=False): + """ + Signs a filename, storing the signature and the original file + in the destination filename provided (the destination file is + overrided if it already exists), if no destination file name is + provided the signature is returned. + """ + kwargs = {} + kwargs['clearsign'] = clearsign + + if key_id: + kwargs['keyid'] = key_id + + if key: + kwargs['keyid'] = key.key_id + + if passphrase: + kwargs['passphrase'] = passphrase + + if isinstance(file_input, types.StringTypes): + input_descriptor = open(file_input, 'rb') + elif isinstance(file_input, types.FileType) or isinstance(file_input, File): + input_descriptor = file_input + elif issubclass(file_input.__class__, StringIO): + input_descriptor = file_input + else: + raise ValueError('Invalid file_input argument type') + + if destination: + output_descriptor = open(destination, 'wb') + + signed_data = self.gpg.sign_file(input_descriptor, **kwargs) + if not signed_data.fingerprint: + raise GPGSigningError('Unable to sign file') + + if destination: + output_descriptor.write(signed_data.data) + + input_descriptor.close() + + if destination: + output_descriptor.close() + + if not destination: + return signed_data + + def decrypt_file(self, file_input): + if isinstance(file_input, types.StringTypes): + input_descriptor = open(file_input, 'rb') + elif isinstance(file_input, types.FileType) or isinstance(file_input, File) or isinstance(file_input, StringIO): + input_descriptor = file_input + else: + raise ValueError('Invalid file_input argument type') + + result = self.gpg.decrypt_file(input_descriptor) + input_descriptor.close() + if not result.status: + raise GPGDecryptionError('Unable to decrypt file') + + return result + + def create_key(self, *args, **kwargs): + if kwargs.get('passphrase') == u'': + kwargs.pop('passphrase') + + input_data = self.gpg.gen_key_input(**kwargs) + key = self.gpg.gen_key(input_data) + if not key: + raise KeyGenerationError('Unable to generate key') + + return Key.get(self, key.fingerprint) + + def delete_key(self, key): + status = self.gpg.delete_keys(key.fingerprint, key.type == 'sec').status + if status == 'Must delete secret key first': + self.delete_key(Key.get(self, key.fingerprint, secret=True)) + self.delete_key(key) + elif status != 'ok': + raise KeyDeleteError('Unable to delete key') + + def receive_key(self, key_id): + for keyserver in self.keyservers: + import_result = self.gpg.recv_keys(keyserver, key_id) + if import_result: + return Key.get(self, import_result.fingerprints[0], secret=False) + + raise KeyFetchingError diff --git a/apps/django_gpg/conf/__init__.py b/apps/django_gpg/conf/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/django_gpg/conf/settings.py b/apps/django_gpg/conf/settings.py new file mode 100644 index 0000000000..ac9256396a --- /dev/null +++ b/apps/django_gpg/conf/settings.py @@ -0,0 +1,15 @@ +''' +Configuration options for the django_gpg app +''' + +from django.utils.translation import ugettext_lazy as _ + +from smart_settings.api import register_settings + +register_settings( + namespace=u'django_gpg', + module=u'django_gpg.conf.settings', + settings=[ + {'name': u'KEYSERVERS', 'global_name': u'SIGNATURES_KEYSERVERS', 'default': ['keyserver.ubuntu.com'], 'description': _(u'List of keyservers to be queried for unknown keys.')}, + ] +) diff --git a/apps/django_gpg/exceptions.py b/apps/django_gpg/exceptions.py new file mode 100644 index 0000000000..682ad8f795 --- /dev/null +++ b/apps/django_gpg/exceptions.py @@ -0,0 +1,31 @@ +class GPGException(Exception): + pass + + +class GPGVerificationError(GPGException): + pass + + +class GPGSigningError(GPGException): + pass + + +class GPGDecryptionError(GPGException): + pass + + +class KeyDeleteError(GPGException): + pass + + +class KeyGenerationError(GPGException): + pass + + +class KeyFetchingError(GPGException): + pass + + +class KeyDoesNotExist(GPGException): + pass + diff --git a/apps/django_gpg/locale/en/LC_MESSAGES/django.po b/apps/django_gpg/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000000..1192c23608 --- /dev/null +++ b/apps/django_gpg/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,203 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-28 05:18-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api.py:18 +msgid "Public" +msgstr "" + +#: api.py:19 +msgid "Secret" +msgstr "" + +#: api.py:27 api.py:32 +msgid "RSA" +msgstr "" + +#: api.py:28 +msgid "DSA" +msgstr "" + +#: api.py:33 +msgid "Elgamal" +msgstr "" + +#: api.py:89 +msgid "unknown" +msgstr "" + +#: forms.py:12 +msgid "Real name" +msgstr "" + +#: forms.py:13 +msgid "Your real name." +msgstr "" + +#: forms.py:17 +msgid "Comment" +msgstr "" + +#: forms.py:19 +msgid "A comment or a note to help identify this key." +msgstr "" + +#: forms.py:23 +msgid "Email" +msgstr "" + +#: forms.py:28 +msgid "Primary key class" +msgstr "" + +#: forms.py:29 +msgid "The key that will be used to sign uploaded content." +msgstr "" + +#: forms.py:33 +msgid "Primary key size (in bytes)" +msgstr "" + +#: forms.py:41 +msgid "Secondary key class" +msgstr "" + +#: forms.py:42 +msgid "The key that will be used to encrypt uploaded content." +msgstr "" + +#: forms.py:46 +msgid "Secondary key size (in bytes)" +msgstr "" + +#: forms.py:53 +msgid "Expiration" +msgstr "" + +#: forms.py:54 +msgid "" +"You can use 0 for a non expiring key, an ISO date in the form: -" +"- or a date difference from the current date in the forms: " +"d, m, w or y." +msgstr "" + +#: forms.py:59 +msgid "Passphrase" +msgstr "" + +#: forms.py:65 +msgid "Passphrase (verification)" +msgstr "" + +#: forms.py:72 +msgid "Both passphrase fields entries must match." +msgstr "" + +#: forms.py:80 +msgid "Key" +msgstr "" + +#: forms.py:81 +msgid "Key to be published, only the public part of the key will be sent." +msgstr "" + +#: tasks.py:27 +#, python-format +msgid "Key pair: %s, created successfully." +msgstr "" + +#: tasks.py:34 +#, python-format +msgid "Key creation error; %s" +msgstr "" + +#: views.py:27 +msgid "Private key list" +msgstr "" + +#: views.py:30 +msgid "Public key list" +msgstr "" + +#: views.py:54 +msgid "Key pair queued for creation, refresh this page to check results." +msgstr "" + +#: views.py:64 +msgid "Create a new key" +msgstr "" + +#: views.py:65 +msgid "" +"The key creation process can take quite some time to complete, please be " +"patient." +msgstr "" + +#: views.py:75 +#, python-format +msgid "Key: %s, deleted successfully." +msgstr "" + +#: views.py:82 +msgid "Delete key" +msgstr "" + +#: views.py:83 +#, python-format +msgid "" +"Are you sure you wish to delete key:%s? If you try to delete a public key " +"that is part of a public/private pair the private key will be deleted as " +"well." +msgstr "" + +#: views.py:95 +#, python-format +msgid "Key publish request for key: %s, has been sent" +msgstr "" + +#: views.py:98 +msgid "Unable to send key publish call" +msgstr "" + +#: views.py:105 +msgid "Publish a key to the OpenRelay network" +msgstr "" + +#: templates/key_list.html:10 +msgid "ID" +msgstr "" + +#: templates/key_list.html:11 +msgid "User IDs" +msgstr "" + +#: templates/key_list.html:12 +msgid "Fingerprint" +msgstr "" + +#: templates/key_list.html:13 +msgid "Links" +msgstr "" + +#: templates/key_list.html:22 +msgid "Delete" +msgstr "" + +#: templates/key_list.html:26 +msgid "There are no keys available." +msgstr "" diff --git a/apps/django_gpg/locale/es/LC_MESSAGES/django.mo b/apps/django_gpg/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..502545e74a86acadccce3447f66799e3239dca5a GIT binary patch literal 4289 zcmai$O^h5z6~_y32rT5oAp!GU0qoex%y?}QFyna1+FpkhYkTcogE(-g>8_crY)^N) zs(aUCA#vn}P^1WP0O3dogV5p*d;Q0U_PwAO9j=dYed8TUodn-_Cx49JzDubd_!{^<@L%BL;Pd;Gx)=Nf z_#pTjkXPyt;Jd-s!8!0vP}cnwya)VeJO6L+eLUa8q#U&$l>HBb9|RA8i{Mf4)8JK5 z^mqY04gMPZ1b8opajOo2a$X1gF!*_JKX?iJD42kv=Qlxq>O1^B0Dc!d1pXM5^M41v z7rX_20DJ@dIQS2cpSmAoE`g7Lp94qWXTcwU;=fzqC&9mi?*Sj+@2B7aP|o{3$Sd_H z@H)Q!Gq}L>0Oel+Z-9O9t2jsOc^-TO{5~l9-2~a9eg=wtzXCS<8X})e%O!G1XsY1fZqZ& z_#(&>wFBM)Z-M;Oj|j5Je+9(7Q76$`VkmJHE=gP^Mlw2FvR-r+e+s8Q!zJTT0}86D z$G9Hl(p)mcH^Qgsc!(Q`zYK|k_~dbUV2Iykh#w@TGQ?Kl`E-b{BoCh8!iCXSgdh&F zTWpgdToAvD&%}O-MI4JdDaK=)SGw@p=)9<`t_rr9oqXcQ)v89V$IG zRkG1jXBvyu8E@qrthU>tk~+J#sLn=1T8Oht*~pAdrk2LW@qev!-c+v0)j5}stVg@N zQp;!6myy7w6A{aMZM`r2NqsQH>1fW?+SWGJL!3Qb*3sS$y%jf#n@cl_5lA*{vdODZ zXI1FUB=iy2Y4#!~)JbAP7}i-vaOCjlLu7f&QJ5?zVOq0o18)ti&2_*naXGQUne8T< zc65WEtPZfqcn zoRMVgxNRo5>sB9jxgJa^8{+Cn5m}wNP^s0(s}`b=-D$jG;uOY;85c{NU$&W<5cg`k z@SEx~aldR$rgJm4YRx7^p5Cs^?Q?gk!&`4Fwch$@8d->2NO*K&a$T8CtFP7$!i8c? zh@Jcul76M6PDcYmT!{xxiT<5RjJYzUejSKBJ8ho$Nm=Q-%nFk-huYQu-xk~`zxy6i z+HmECcq?eL1>emevpsbs7nDPZdm5cNC0b&#OkD}q>*cdSeT~{6)}o`HkK~h@LMlks zkS?;dqgk-Lc2TF2eFRm40#C<%{q)2dztDYpj3pajY9P;)Q3gEIzxWpI%vcCUd>Qj~3?6FP~r9 zHSt()e(p>|rtbQr#DL0PtB#hLarsG|Y#1MGb?VCcx$cSGb)p~9=`Q6-krL{@J~43B z?DW32VQw|6y~(=g2sZJ_%lH^h9X|>A<;|(XxqkGNK6Ydd%1LSvS+P_Xy3S*FqDvTW zw3*aoD0$uXDC&skfXe7BGg~nB)n6`!YUc)g9o4=d@uX!0YqZVW*yXIw+O<-^Xjp3w zDoXn7St4gfdAi*Bxil^l1qoN99?&1-cv+6b}W-}BRdNz9^(?=N%C8I+s?}(c0e6Z3YRA?bv`z=)>*Ny`KVT-d|ulv z6Pw#oYrLA?%yeU>?Q-2cZ7y*;H*@u+nhwj6ZsaQZ;Bxa>fH%^@s}=FLT9Q^5b%gkF zS5#l##Rj;F!^Iw%5EEn7j?R%{88>wF7UygcTTJ$&X*|oF8zbVSOWFmz!W)<=B@z}$ z?IZ&vn0Tn^l_*8KyzRW*o|#I$rCubsT*UO$T0vM{Rj2LO#~sQ~`=$<#y*A%+goZFp zX(3uj?TghAhnS8IJ2$gJ{ECXA=#&zBiNF@P*@`3V;+E#9mKPAmUULhCC7EIy^SKAhCJUtqg56xD= ztrU|Ix->kRQ9>#W4zDYhx$8oYhN*7o5pFYtNtF>cg?a!;(zk57`_`eO+Puxy3w){b z9n+>&>OxuMj!sPm@Cr2=%OcT85((gxs(i7E6Y5Y)fep0qil8*>r^?g9qxP+Q(T|UV z*vn1ci9sD&+Cl8*lGG;laYO4BZb>7zLE5-8wDGu}79Kmeidt7@Q#1gMDkzwR`X9jL+hza& literal 0 HcmV?d00001 diff --git a/apps/django_gpg/locale/es/LC_MESSAGES/django.po b/apps/django_gpg/locale/es/LC_MESSAGES/django.po new file mode 100644 index 0000000000..dcc0e1eeab --- /dev/null +++ b/apps/django_gpg/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,217 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Roberto Rosario , 2011. +msgid "" +msgstr "" +"Project-Id-Version: OpenRelay\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-28 05:18-0400\n" +"PO-Revision-Date: 2011-11-28 09:25+0000\n" +"Last-Translator: rosarior \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: api.py:18 +msgid "Public" +msgstr "Pública" + +#: api.py:19 +msgid "Secret" +msgstr "Secreta" + +#: api.py:27 api.py:32 +msgid "RSA" +msgstr "RSA" + +#: api.py:28 +msgid "DSA" +msgstr "DSA" + +#: api.py:33 +msgid "Elgamal" +msgstr "Elgamal" + +#: api.py:89 +msgid "unknown" +msgstr "desconocido" + +#: forms.py:12 +msgid "Real name" +msgstr "Nombre real" + +#: forms.py:13 +msgid "Your real name." +msgstr "Su nombre real." + +#: forms.py:17 +msgid "Comment" +msgstr "Comentario" + +#: forms.py:19 +msgid "A comment or a note to help identify this key." +msgstr "Un comentario o una nota para ayudar a identificar esta llave." + +#: forms.py:23 +msgid "Email" +msgstr "E-mail" + +#: forms.py:28 +msgid "Primary key class" +msgstr "Clase de llave primaria" + +#: forms.py:29 +msgid "The key that will be used to sign uploaded content." +msgstr "La llave que se utilizara para firmar el contenido subido." + +#: forms.py:33 +msgid "Primary key size (in bytes)" +msgstr "Tamaño de la llave principal (en bytes)" + +#: forms.py:41 +msgid "Secondary key class" +msgstr "Clase de llave secundaria" + +#: forms.py:42 +msgid "The key that will be used to encrypt uploaded content." +msgstr "La llave que se utilizara para cifrar el contenido subido." + +#: forms.py:46 +msgid "Secondary key size (in bytes)" +msgstr "Tamaño de la llave secundaria (en bytes)" + +#: forms.py:53 +msgid "Expiration" +msgstr "Expiración" + +#: forms.py:54 +msgid "" +"You can use 0 for a non expiring key, an ISO date in the form: " +"-- or a date difference from the current date in the " +"forms: d, m, w or y." +msgstr "" +"Usted puede utilizar 0 para llaves que no expiran, una fecha ISO en la " +"forma: -- o una diferencia de fecha con respecto a la fecha " +"actual en las formas: d, m, w o y." + +#: forms.py:59 +msgid "Passphrase" +msgstr "Frase de contraseña" + +#: forms.py:65 +msgid "Passphrase (verification)" +msgstr "Contraseña (verificación)" + +#: forms.py:72 +msgid "Both passphrase fields entries must match." +msgstr "Las entradas de los campos de contraseña deben coincidir." + +#: forms.py:80 +msgid "Key" +msgstr "Llave" + +#: forms.py:81 +msgid "Key to be published, only the public part of the key will be sent." +msgstr "" +"La llave para ser publicada, sólo la parte pública de la llave será enviada." + +#: tasks.py:27 +#, python-format +msgid "Key pair: %s, created successfully." +msgstr "Par de llaves: %s, creado correctamente." + +#: tasks.py:34 +#, python-format +msgid "Key creation error; %s" +msgstr "Error de creación de llave; %s" + +#: views.py:27 +msgid "Private key list" +msgstr "Lista de llaves privadas" + +#: views.py:30 +msgid "Public key list" +msgstr "Lista de llaves públicas" + +#: views.py:54 +msgid "Key pair queued for creation, refresh this page to check results." +msgstr "" +"Par de llaves en lista de creación, vuelva a cargar esta página " +"periodicamente para comprobar los resultados." + +#: views.py:64 +msgid "Create a new key" +msgstr "Crear una llave nueva" + +#: views.py:65 +msgid "" +"The key creation process can take quite some time to complete, please be " +"patient." +msgstr "" +"El proceso de creación de la llaves puede tomar bastante tiempo en " +"completar, por favor, sea paciente." + +#: views.py:75 +#, python-format +msgid "Key: %s, deleted successfully." +msgstr "Llave: %s, eliminada exitosamente." + +#: views.py:82 +msgid "Delete key" +msgstr "Eliminar la llave" + +#: views.py:83 +#, python-format +msgid "" +"Are you sure you wish to delete key:%s? If you try to delete a public key " +"that is part of a public/private pair the private key will be deleted as " +"well." +msgstr "" +"¿Está seguro que desea eliminar la llave: %s? Si intenta eliminar una llave" +" pública que forma parte de una pareja pública / privada de la llave privada" +" se eliminarán también." + +#: views.py:95 +#, python-format +msgid "Key publish request for key: %s, has been sent" +msgstr "Solicitud publicación de llave: %s, ha sido enviada" + +#: views.py:98 +msgid "Unable to send key publish call" +msgstr "No se puede enviar llave publica" + +#: views.py:105 +msgid "Publish a key to the OpenRelay network" +msgstr "Publicar una llave a la red OpenRelay" + +#: templates/key_list.html:10 +msgid "ID" +msgstr "Identificador" + +#: templates/key_list.html:11 +msgid "User IDs" +msgstr "ID de usuarios" + +#: templates/key_list.html:12 +msgid "Fingerprint" +msgstr "Huella digital" + +#: templates/key_list.html:13 +msgid "Links" +msgstr "Enlaces" + +#: templates/key_list.html:22 +msgid "Delete" +msgstr "Eliminar" + +#: templates/key_list.html:26 +msgid "There are no keys available." +msgstr "No hay llaves disponibles." + + diff --git a/apps/django_gpg/models.py b/apps/django_gpg/models.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/apps/django_gpg/models.py @@ -0,0 +1 @@ + diff --git a/apps/django_gpg/runtime.py b/apps/django_gpg/runtime.py new file mode 100644 index 0000000000..b3303059ff --- /dev/null +++ b/apps/django_gpg/runtime.py @@ -0,0 +1,4 @@ +from django_gpg.api import GPG +from django_gpg.conf.settings import KEYSERVERS + +gpg = GPG(keyservers=KEYSERVERS) diff --git a/apps/django_gpg/static/images/icons/cross.png b/apps/django_gpg/static/images/icons/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee1253736b73693b282fff8b698b445756c0548 GIT binary patch literal 1049 zcmV+!1m^pRP)>Iyb|4W2iTaM&PCXA5iV z5aAKdYEbL@m7lo@tl?`9L_eEVJf!rVjN5lmsUAYdr+MC3oNy~4*P))Tf5gy?%sPBhw zu9!?9V!Vj9^xzgGR$K*4^xrz=EkQ~K#kGD{`>ndR9~-xb1?d(&W@bhgupAJxCAWk8ek(DlV1d*^^cv%*Iq+c zB6gf9255e@KK9&`F!rpTmz+<4vxveXU_Li_#BDj42V*Z9T#~yI;3Ojc#3>MWeG){z zoN)vcuU`_$NdlZj94`Rx-gdXhO?$IJ@wSmlj+>Z(W3&dYCLFVwO(JeJY!WD1nu#Jr#F6J50_hLs zy52%vbQ~z#T3w0|@zn+C!LpgStSs=Gn%s~?v>34slpP(sBJ2ckb%8u%Kgj+~QGwMO zE&CtrFQfWuw?u%d>x+{J#)&*V9sK8J(2i$_rVR{*$>~|v@HNdJV`6N_qg-r9o|XoI zi}UE@Air+&5*es^df-CuSfOHJX|WTaiH+53iE$Vk`yqdWQ$-|CO@$z{o;sCtj4!AL z2B54@kw2`_jp14bStL$Y@{|+^vKZ(XUJ_9C_p{3(<|-mEFH;kZ+9I+gA4IoitOATU z>!Fdg%XcM1Ftb8QRLg4>5xWO)b)xz@2x^nrP)nD^WAxa4;>JU-sH@?bI*6qJ@?#m&b?Q&Z5wQwrkO3Rtr6*bYiBaZ zj=oQ$qy}BnU|H5LJGO7%E(7VjNY2e4$B05P!2Xb}udmNOcmDik(QQm+fa&`0&v~P# z_aA!X{njr!D$1AQY;!Yy*tH8Ao0`6FzId^1*Up_^=ktW_>T5Z->$Zyp|yhNT%IEkFebDraGAQ-^Fz#zimFurPN z2>;yD()*?nQyMVUq`GOs@cUsF7EU6LX~NTu*W2y$dQnhVFyV>y>((ujID6_g!pv`g zJ~;+x0G0cE&_t;<7Q=N>TzTr0Vs{@nfYpP8FpEo&Nsg&TD%y4%fxJpr2la1Rv1M^NcQ%k z_})FNs;^h{X3Jy)-J9P7P81rB+b32Y2*L>XnAa$M^a$~>F|0X!Sn-|E$Db!oz%ND) zcsxkRP;4xYjNt6FCG3oXg~K6*bvJXm7yvUt_O@&7YFMIZ_`w5gI&uWocoO~X9q8-4 zrSJ>uzrd;;J7M^|xP1ILI+xYJFm=?mU(Xt0y*2O53{a6R`|gvx_IKUIhC_#-7Z%}< z<3}g54>iUF~qF~nmrSi>Xe z`0*$LB36H95gH#)J2^$H^8;}-zCL-H*es}ZQBrk_FSUJK+TyD z0=2Tbp^PH-IYu5a#8QT`Dsyyw%F6oAI#7N3G@gx&!X6*TumqqfDePZO*NRJ14oRP5 z`HRBl2bteN{LJTHDR^p|I+E06O`q)rBVu*b^o@V6%!zo5OqI>sZp%fp8 z(t@&i@JL#wZpoSA)3Wu9Bz=yNM+~u)p=?eMb~bU(k7L2gIt<;5qW?fj zij0F7Egp}CQsIqDnP!=@MaCmVDLs}@vUo28WMjG02`R63O%1NzzKu=Q)hPNT3@epJ zCKk_nY)$}%$3$Xq0BzAIN>;3ZMj1!Pba#t)7{Fzx(a_l`pEQ1z6-7mHQu-?^Dxd{@ zj-46Yl<4!a(#l;ws2|r)HToL;m zBaawjDMMN6n63`wHGrofqt-M{m1TeJ-;c_Y64=ATNDd4rS8v*|0i*r>irD8EdBhM) z8Ol-zbs4j>^;~eEVAeV_9u2Vm&=DB@VoS08HU`KYgl*eKjULVu+;-W%bqPlvBC5IVr@I`pe1?m5lgw-#&$pwzi^b$r2=9yilhfv6P|gcTx+) z4U)3y*?EABCuh$hCWWM0BHrSaOIE_%Hl!5yin}Wh9#q6W$H*gwSjteAI&??p%qt_LyDryG}WbhvfCRTEsdl?5%4i2bn}=iprV zo@TW2)#XT}Ad`Er(rx+DC;O;`>tX9uto&F$c5{cEU|&s|)1`!GTZK@m+hZTNak3#k wKlv`;+-?Ir&V#{=kK2;GweytW-2V$O06QNZBly7cQ~&?~07*qoM6N<$f+&d(b^rhX literal 0 HcmV?d00001 diff --git a/apps/django_gpg/static/images/icons/user_silhouette.png b/apps/django_gpg/static/images/icons/user_silhouette.png new file mode 100644 index 0000000000000000000000000000000000000000..109d113eecfb20351acaf6ba3305b070cb592a74 GIT binary patch literal 1087 zcmV-F1i<@=P)Lblp1$)~lH{|@ui^~OGg+SJKD#nCd7gQ^ zG=kcCQvwhsr>-2?J36|Q%jJjxFu%w`{PvdtkmESCzP5Js&h+i~(2)j!OzDO)QZBz! z6qQ6#B-eG?0%Gv8oD0E#kCz6StTckfG-khg{l+c6xhhE#S(d@K^~m@AHerr+?1K;d zIF}UwO;K`ZG%e3cO!A?;2Voz4;K#W%0Ma~xDv+>GmSr+cGkk(x&+G7hu{c2B$2q1} z764>H{OxEk_f7-*@a4!qo1~wKt~GqC&AiE_=I&(A!2>*YX;*nhgR!&SeF_ zdi3zY#h*VnXkcKF0x0BX=nOy1v5tLKPTH_$q zbD02uM{O=IFFpPCSw|}_`siO6d=hl)mBzMJx9fpa&p%bV2*X{gD>LG6aX@dedy5PQ@XBG zZKE10M(pE@Io5gqB=~kK#eV}JOj@d{9!E*uWM_+&oC9a9wL zGCSJoVyVc*rbyqvev69IpG39qz<$mFEow9xn7^=X`|kYQ?Au<}*sUWH&y7!9lojPB z*LMx(1wm20RwK){yZ9kPRTLT=8VZ3S8v=~yd#39+*Jfv*+~1y~d_=qQ+J;OgiA}RSQ5OHzlP)krWka+ar^~7+j_~TBhcn&fJTEBmt1v+%x=+ zl~Sn`#<#I$giS`QFiqnc%L}cdYNY4&&??PllVw@+{45iwS4lmgE{Q@#Q+2AcnLWp8 zEA158&oE7cEwDv7wnn~?C)c(synKPFnN*H7ys>Rr-xNY#|! z#N7a*W+V6y0B|`;6nD2kub%Ip0YEPQ*6maaf>yJ+h?tF&O_l_?kiR`OcP63|e-1L0 z`z.+)/(?P\w+)/$', 'key_delete', (), 'key_delete'), + url(r'^list/private/$', 'key_list', {'secret': True}, 'key_private_list'), + url(r'^list/public/$', 'key_list', {'secret': False}, 'key_public_list'), + url(r'^verify/(?P\d+)/$', 'document_verify', (), 'document_verify'), +) diff --git a/apps/django_gpg/views.py b/apps/django_gpg/views.py new file mode 100644 index 0000000000..9f23d45004 --- /dev/null +++ b/apps/django_gpg/views.py @@ -0,0 +1,113 @@ +from datetime import datetime + +from django.utils.translation import ugettext_lazy as _ +from django.http import HttpResponseRedirect +from django.shortcuts import render_to_response, get_object_or_404 +from django.template import RequestContext +from django.contrib import messages +from django.core.urlresolvers import reverse +from django.utils.safestring import mark_safe +from django.conf import settings +from django.template.defaultfilters import force_escape + +from documents.models import Document, RecentDocument +from permissions.api import check_permissions + +from django_gpg.api import Key +from django_gpg.runtime import gpg +from django_gpg.exceptions import GPGVerificationError +from django_gpg import PERMISSION_DOCUMENT_VERIFY + + +def key_list(request, secret=True): + if secret: + object_list = Key.get_all(gpg, secret=True) + title = _(u'Private key list') + else: + object_list = Key.get_all(gpg) + title = _(u'Public key list') + + return render_to_response('key_list.html', { + 'object_list': object_list, + 'title': title, + }, context_instance=RequestContext(request)) + + +def key_delete(request, fingerprint, key_type): + if request.method == 'POST': + try: + secret = key_type == 'sec' + key = Key.get(gpg, fingerprint, secret=secret) + gpg.delete_key(key) + messages.success(request, _(u'Key: %s, deleted successfully.') % fingerprint) + return HttpResponseRedirect(reverse('home_view')) + except Exception, msg: + messages.error(request, msg) + return HttpResponseRedirect(reverse('home_view')) + + return render_to_response('generic_confirm.html', { + 'title': _(u'Delete key'), + 'message': _(u'Are you sure you wish to delete key:%s? If you try to delete a public key that is part of a public/private pair the private key will be deleted as well.') % Key.get(gpg, fingerprint) + }, context_instance=RequestContext(request)) + + +def document_verify(request, document_pk): + check_permissions(request.user, [PERMISSION_DOCUMENT_VERIFY]) + document = get_object_or_404(Document, pk=document_pk) + + RecentDocument.objects.add_document_for_user(request.user, document) + try: + signature = gpg.verify_w_retry(document.open()) + except GPGVerificationError: + signature = None + + signature_states = { + 'signature bad': { + 'text': _(u'Bad signature.'), + 'icon': 'cross.png' + }, + None: { + 'text': _(u'Document not signed or invalid signature.'), + 'icon': 'cross.png' + }, + 'signature error': { + 'text': _(u'Signature error.'), + 'icon': 'cross.png' + }, + 'no public key': { + 'text': _(u'Document is signed but no public key is available for verification.'), + 'icon': 'user_silhouette.png' + }, + 'signature good': { + 'text': _(u'Document is signed, and signature is good.'), + 'icon': 'document_signature.png' + }, + 'signature valid': { + 'text': _(u'Document is signed with a valid signature.'), + 'icon': 'document_signature.png' + }, + } + + signature_state = signature_states.get(getattr(signature, 'status', None)) + + widget = (u'' % (settings.STATIC_URL, signature_state['icon'])) + paragraphs = [ + _(u'Signature status: %s %s') % (mark_safe(widget), signature_state['text']), + ] + + if signature: + paragraphs.extend( + [ + _(u'Signature ID: %s') % signature.signature_id, + _(u'Key ID: %s') % signature.key_id, + _(u'Timestamp: %s') % datetime.fromtimestamp(int(signature.sig_timestamp)), + _(u'Signee: %s') % force_escape(getattr(signature, 'username', u'')), + ] + ) + + return render_to_response('generic_template.html', { + 'title': _(u'signature properties for: %s') % document, + 'object': document, + 'document': document, + 'paragraphs': paragraphs, + }, context_instance=RequestContext(request)) diff --git a/apps/documents/views.py b/apps/documents/views.py index fdd98922c6..2f44085934 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -1155,6 +1155,8 @@ def document_version_list(request, document_pk): check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) document = get_object_or_404(Document, pk=document_pk) + RecentDocument.objects.add_document_for_user(request.user, document) + context = { 'object_list': document.versions.order_by('-timestamp'), 'title': _(u'versions for document: %s') % document, diff --git a/requirements/development.txt b/requirements/development.txt index 7dc2ed08bc..ad042365ab 100644 --- a/requirements/development.txt +++ b/requirements/development.txt @@ -20,3 +20,4 @@ django-compressor==1.1 -e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile djangorestframework==0.2.3 South==0.7.3 +python-gnupg==0.2.8 diff --git a/requirements/production.txt b/requirements/production.txt index d0438944d1..9c1b2eae70 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -17,3 +17,4 @@ django-compressor==1.1 -e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile djangorestframework==0.2.3 South==0.7.3 +python-gnupg==0.2.8 diff --git a/settings.py b/settings.py index c31e499fb0..25f316a74c 100644 --- a/settings.py +++ b/settings.py @@ -133,6 +133,7 @@ INSTALLED_APPS = ( 'lock_manager', 'web_theme', 'common', + 'django_gpg', 'pagination', 'dynamic_search', 'filetransfers', diff --git a/urls.py b/urls.py index 38ab8788b2..a4ccd38cef 100644 --- a/urls.py +++ b/urls.py @@ -28,6 +28,7 @@ urlpatterns = patterns('', (r'^project_setup/', include('project_setup.urls')), (r'^project_tools/', include('project_tools.urls')), (r'^api/', include('rest_api.urls')), + (r'^signatures/', include('django_gpg.urls')), ) From 24f443fe1a2fae35fd824206c586dd7d93e5daba Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 06:16:37 -0400 Subject: [PATCH 200/220] Improve document version views navigation and active menu feedback --- apps/documents/__init__.py | 3 ++- apps/documents/views.py | 3 ++- apps/main/__init__.py | 2 +- apps/sources/__init__.py | 4 ++-- apps/sources/urls.py | 4 ++-- apps/sources/views.py | 4 ++-- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 750b2953a8..d69858529f 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -75,7 +75,7 @@ register_history_type(HISTORY_DOCUMENT_DELETED) document_list = {'text': _(u'all documents'), 'view': 'document_list', 'famfam': 'page', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_list_recent = {'text': _(u'recent documents'), 'view': 'document_list_recent', 'famfam': 'page', 'permissions': [PERMISSION_DOCUMENT_VIEW]} -document_create_multiple = {'text': _(u'upload new documents'), 'view': 'document_create_multiple', 'famfam': 'page_add', 'permissions': [PERMISSION_DOCUMENT_CREATE], 'children_view_regex': ['upload']} +document_create_multiple = {'text': _(u'upload new documents'), 'view': 'document_create_multiple', 'famfam': 'page_add', 'permissions': [PERMISSION_DOCUMENT_CREATE], 'children_view_regex': [r'upload_interactive']} document_create_siblings = {'text': _(u'clone metadata'), 'view': 'document_create_siblings', 'args': 'object.id', 'famfam': 'page_copy', 'permissions': [PERMISSION_DOCUMENT_CREATE]} document_view_simple = {'text': _(u'details'), 'view': 'document_view_simple', 'args': 'object.id', 'famfam': 'page', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_view_advanced = {'text': _(u'properties'), 'view': 'document_view_advanced', 'args': 'object.id', 'famfam': 'page_gear', 'permissions': [PERMISSION_DOCUMENT_VIEW]} @@ -204,6 +204,7 @@ register_top_menu( children_path_regex=[ r'^documents/[^t]', r'^metadata/[^s]', r'comments', r'tags/document', r'grouping/[^s]', r'history/list/for_object/documents' ], + children_view_regex=[r'upload'], children_views=['document_folder_list', 'folder_add_document', 'document_index_list'], position=1 ) diff --git a/apps/documents/views.py b/apps/documents/views.py index 2f44085934..3234a2014e 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -1198,10 +1198,10 @@ def document_version_revert(request, document_version_pk): check_permissions(request.user, [PERMISSION_DOCUMENT_VERSION_REVERT]) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) if request.method == 'POST': try: - document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) document_version.revert() messages.success(request, _(u'Document version reverted successfully')) except Exception, msg: @@ -1211,6 +1211,7 @@ def document_version_revert(request, document_version_pk): return render_to_response('generic_confirm.html', { 'previous': previous, + 'object': document_version.document, 'title': _(u'Are you sure you wish to revert to this version?'), 'message': _(u'All later version after this one will be deleted too.'), 'form_icon': u'page_refresh.png', diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 582747e0d5..ce22428900 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -21,7 +21,7 @@ __version_info__ = { 'minor': 11, 'micro': 0, 'releaselevel': 'beta', - 'serial': 2 + 'serial': 3 } diff --git a/apps/sources/__init__.py b/apps/sources/__init__.py index 94d2727c9c..faca4f075c 100644 --- a/apps/sources/__init__.py +++ b/apps/sources/__init__.py @@ -43,7 +43,7 @@ setup_source_transformation_delete = {'text': _(u'delete'), 'view': 'setup_sourc source_list = {'text': _(u'Document sources'), 'view': 'setup_web_form_list', 'famfam': 'page_add', 'children_url_regex': [r'sources/setup']} -upload_interactive_version = {'text': _(u'upload new version'), 'view': 'upload_interactive_version', 'args': 'object.pk', 'famfam': 'page_add', 'permissions': [PERMISSION_DOCUMENT_CREATE]} +upload_version = {'text': _(u'upload new version'), 'view': 'upload_version', 'args': 'object.pk', 'famfam': 'page_add', 'permissions': [PERMISSION_DOCUMENT_CREATE]} register_links(StagingFile, [staging_file_delete]) @@ -66,7 +66,7 @@ register_links(WatchFolder, [setup_web_form_list, setup_staging_folder_list, set register_links(WatchFolder, [setup_source_transformation_list, setup_source_edit, setup_source_delete]) # Document version -register_links(Document, [upload_interactive_version]) +register_links(['document_version_list', 'upload_version', 'document_version_revert'], [upload_version], menu_name='sidebar') register_links(['setup_source_transformation_create', 'setup_source_transformation_edit', 'setup_source_transformation_delete', 'setup_source_transformation_list'], [setup_source_transformation_create], menu_name='sidebar') diff --git a/apps/sources/urls.py b/apps/sources/urls.py index cd42328138..7baf07a1a9 100644 --- a/apps/sources/urls.py +++ b/apps/sources/urls.py @@ -11,8 +11,8 @@ urlpatterns = patterns('sources.views', url(r'^upload/document/new/interactive/(?P\w+)/(?P\d+)/$', 'upload_interactive', (), 'upload_interactive'), url(r'^upload/document/new/interactive/$', 'upload_interactive', (), 'upload_interactive'), - url(r'^upload/document/(?P\d+)/version/interactive/(?P\w+)/(?P\d+)/$', 'upload_interactive', (), 'upload_interactive_version'), - url(r'^upload/document/(?P\d+)/version/interactive/$', 'upload_interactive', (), 'upload_interactive_version'), + url(r'^upload/document/(?P\d+)/version/interactive/(?P\w+)/(?P\d+)/$', 'upload_interactive', (), 'upload_version'), + url(r'^upload/document/(?P\d+)/version/interactive/$', 'upload_interactive', (), 'upload_version'), #Setup views diff --git a/apps/sources/views.py b/apps/sources/views.py index 88e1d08b72..17e8c380a6 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -37,7 +37,7 @@ def return_function(obj): def get_tab_link_for_source(source, document=None): if document: - view = u'upload_interactive_version' + view = u'upload_version' args = [document.pk, u'"%s"' % source.source_type, source.pk] else: view = u'upload_interactive' @@ -271,7 +271,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No 'subtemplates_list': subtemplates_list, 'temporary_navigation_links': { 'form_header': { - 'upload_interactive_version': { + 'upload_version': { 'links': results['tab_links'] }, 'upload_interactive': { From ba5b54e1aaddb79b4ecc6b040c3ad33da05f648d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 06:51:26 -0400 Subject: [PATCH 201/220] Add migration to add the signature state field to the Document model --- ...d_field_documentversion_signature_state.py | 156 ++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 apps/documents/migrations/0011_auto__add_field_documentversion_signature_state.py diff --git a/apps/documents/migrations/0011_auto__add_field_documentversion_signature_state.py b/apps/documents/migrations/0011_auto__add_field_documentversion_signature_state.py new file mode 100644 index 0000000000..54a039b91f --- /dev/null +++ b/apps/documents/migrations/0011_auto__add_field_documentversion_signature_state.py @@ -0,0 +1,156 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'DocumentVersion.signature_state' + db.add_column('documents_documentversion', 'signature_state', self.gf('django.db.models.fields.CharField')(max_length=16, null=True, blank=True), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'DocumentVersion.signature_state' + db.delete_column('documents_documentversion', 'signature_state') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'comments.comment': { + 'Meta': {'ordering': "('submit_date',)", 'object_name': 'Comment', 'db_table': "'django_comments'"}, + 'comment': ('django.db.models.fields.TextField', [], {'max_length': '3000'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'content_type_set_for_comment'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip_address': ('django.db.models.fields.IPAddressField', [], {'max_length': '15', 'null': 'True', 'blank': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_removed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'object_pk': ('django.db.models.fields.TextField', [], {}), + 'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sites.Site']"}), + 'submit_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comment_comments'", 'null': 'True', 'to': "orm['auth.User']"}), + 'user_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'user_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'user_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'documents.document': { + 'Meta': {'ordering': "['-date_added']", 'object_name': 'Document'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '48', 'blank': 'True'}) + }, + 'documents.documentpage': { + 'Meta': {'ordering': "['page_number']", 'object_name': 'DocumentPage'}, + 'content': ('django.db.models.fields.TextField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'document_version': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentVersion']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'page_label': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), + 'page_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}) + }, + 'documents.documentpagetransformation': { + 'Meta': {'ordering': "('order',)", 'object_name': 'DocumentPageTransformation'}, + 'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'document_page': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentPage']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'documents.documenttype': { + 'Meta': {'ordering': "['name']", 'object_name': 'DocumentType'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + 'documents.documenttypefilename': { + 'Meta': {'ordering': "['filename']", 'object_name': 'DocumentTypeFilename'}, + 'document_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.DocumentType']"}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'documents.documentversion': { + 'Meta': {'unique_together': "(('document', 'major', 'minor', 'micro', 'release_level', 'serial'),)", 'object_name': 'DocumentVersion'}, + 'checksum': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'encoding': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'filename': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'major': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'micro': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '64'}), + 'minor': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'release_level': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'serial': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'signature_state': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {}) + }, + 'documents.recentdocument': { + 'Meta': {'ordering': "('-datetime_accessed',)", 'object_name': 'RecentDocument'}, + 'datetime_accessed': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), + 'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['documents.Document']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}) + }, + 'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"}) + } + } + + complete_apps = ['documents'] From d8f487de7c77d7c1cfaa177bc8c6992260b16a05 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 06:52:03 -0400 Subject: [PATCH 202/220] Move human readable signature state literal from the view to the api module --- apps/django_gpg/api.py | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/apps/django_gpg/api.py b/apps/django_gpg/api.py index 504d9ba664..e5c6ca5f19 100644 --- a/apps/django_gpg/api.py +++ b/apps/django_gpg/api.py @@ -31,6 +31,41 @@ KEY_SECONDARY_CLASSES = ( ((KEY_CLASS_ELG), _(u'Elgamal')), ) +SIGNATURE_STATE_BAD = 'signature bad' +SIGNATURE_STATE_NONE = None +SIGNATURE_STATE_ERROR = 'signature error' +SIGNATURE_STATE_NO_PUBLIC_KEY = 'no public key' +SIGNATURE_STATE_GOOD = 'signature good' +SIGNATURE_STATE_VALID = 'signature valid' + +SIGNATURE_STATES = { + SIGNATURE_STATE_BAD: { + 'text': _(u'Bad signature.'), + 'icon': 'cross.png' + }, + SIGNATURE_STATE_NONE: { + 'text': _(u'Document not signed or invalid signature.'), + 'icon': 'cross.png' + }, + SIGNATURE_STATE_ERROR: { + 'text': _(u'Signature error.'), + 'icon': 'cross.png' + }, + SIGNATURE_STATE_NO_PUBLIC_KEY: { + 'text': _(u'Document is signed but no public key is available for verification.'), + 'icon': 'user_silhouette.png' + }, + SIGNATURE_STATE_GOOD: { + 'text': _(u'Document is signed, and signature is good.'), + 'icon': 'document_signature.png' + }, + SIGNATURE_STATE_VALID: { + 'text': _(u'Document is signed with a valid signature.'), + 'icon': 'document_signature.png' + }, +} + + class Key(object): @staticmethod def get_key_id(fingerprint): @@ -163,9 +198,9 @@ class GPG(object): if verify: return verify - elif getattr(verify, 'status', None) == 'no public key': - # Exception to the rule, to be able to query the keyservers - return verify + #elif getattr(verify, 'status', None) == 'no public key': + # # Exception to the rule, to be able to query the keyservers + # return verify else: raise GPGVerificationError() From 9271ded217a47a9f66ec12ab29c672fac1376a83 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 06:52:51 -0400 Subject: [PATCH 203/220] Move signatute state literals to the api module, inspect a document raw content only, display signature type (embedded, detached) --- apps/django_gpg/views.py | 39 +++++++++------------------------------ 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/apps/django_gpg/views.py b/apps/django_gpg/views.py index 9f23d45004..4a173cac0a 100644 --- a/apps/django_gpg/views.py +++ b/apps/django_gpg/views.py @@ -13,7 +13,7 @@ from django.template.defaultfilters import force_escape from documents.models import Document, RecentDocument from permissions.api import check_permissions -from django_gpg.api import Key +from django_gpg.api import Key, SIGNATURE_STATES from django_gpg.runtime import gpg from django_gpg.exceptions import GPGVerificationError from django_gpg import PERMISSION_DOCUMENT_VERIFY @@ -57,48 +57,27 @@ def document_verify(request, document_pk): RecentDocument.objects.add_document_for_user(request.user, document) try: - signature = gpg.verify_w_retry(document.open()) + signature = gpg.verify_w_retry(document.open(raw=True)) except GPGVerificationError: signature = None - - signature_states = { - 'signature bad': { - 'text': _(u'Bad signature.'), - 'icon': 'cross.png' - }, - None: { - 'text': _(u'Document not signed or invalid signature.'), - 'icon': 'cross.png' - }, - 'signature error': { - 'text': _(u'Signature error.'), - 'icon': 'cross.png' - }, - 'no public key': { - 'text': _(u'Document is signed but no public key is available for verification.'), - 'icon': 'user_silhouette.png' - }, - 'signature good': { - 'text': _(u'Document is signed, and signature is good.'), - 'icon': 'document_signature.png' - }, - 'signature valid': { - 'text': _(u'Document is signed with a valid signature.'), - 'icon': 'document_signature.png' - }, - } - signature_state = signature_states.get(getattr(signature, 'status', None)) + signature_state = SIGNATURE_STATES.get(getattr(signature, 'status', None)) widget = (u'' % (settings.STATIC_URL, signature_state['icon'])) paragraphs = [ _(u'Signature status: %s %s') % (mark_safe(widget), signature_state['text']), ] + if document.signature_state: + signature_type = _(u'embedded') + else: + signature_type = _(u'detached') + if signature: paragraphs.extend( [ _(u'Signature ID: %s') % signature.signature_id, + _(u'Signature type: %s') % signature_type, _(u'Key ID: %s') % signature.key_id, _(u'Timestamp: %s') % datetime.fromtimestamp(int(signature.sig_timestamp)), _(u'Signee: %s') % force_escape(getattr(signature, 'username', u'')), From 7ed3b329dc612c0131aa78cbecbd31b1ba5d04f4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 06:54:03 -0400 Subject: [PATCH 204/220] Fix document main menu highlighting --- apps/documents/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index d69858529f..26c3e9852d 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -204,8 +204,8 @@ register_top_menu( children_path_regex=[ r'^documents/[^t]', r'^metadata/[^s]', r'comments', r'tags/document', r'grouping/[^s]', r'history/list/for_object/documents' ], - children_view_regex=[r'upload'], - children_views=['document_folder_list', 'folder_add_document', 'document_index_list'], + #children_view_regex=[r'upload'], + children_views=['document_folder_list', 'folder_add_document', 'document_index_list', 'upload_version',], position=1 ) From a32b92b5fcd1d25ad9143f683b8670afde3fd445 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 06:54:41 -0400 Subject: [PATCH 205/220] Add signature state field to the Document model, update it whenever a new version is added, use it to return the raw or the decrypted content when calling the open method --- apps/documents/models.py | 46 ++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index bc08a1945a..4246da2dd5 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -21,10 +21,12 @@ from converter.api import get_page_count from converter.api import get_available_transformations_choices from converter.api import convert from converter.exceptions import UnknownFileFormat, UnkownConvertError -from mimetype.api import get_mimetype, get_icon_file_path, \ - get_error_icon_file_path +from mimetype.api import (get_mimetype, get_icon_file_path, + get_error_icon_file_path, get_encoding) from converter.literals import (DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, DEFAULT_PAGE_NUMBER) +from django_gpg.runtime import gpg +from django_gpg.exceptions import GPGVerificationError, GPGDecryptionError from documents.conf.settings import CHECKSUM_FUNCTION from documents.conf.settings import UUID_FUNCTION @@ -209,12 +211,12 @@ class Document(models.Model): return new_version # Proxy methods - def open(self): + def open(self, *args, **kwargs): ''' Return a file descriptor to a document's file irrespective of the storage backend ''' - return self.latest_version.open() + return self.latest_version.open(*args, **kwargs) def save_to_file(self, *args, **kwargs): return self.latest_version.save_to_file(*args, **kwargs) @@ -251,6 +253,10 @@ class Document(models.Model): def checksum(self): return self.latest_version.checksum + @property + def signature_state(self): + return self.latest_version.signature_state + @property def pages(self): return self.latest_version.pages @@ -309,7 +315,8 @@ class DocumentVersion(models.Model): encoding = models.CharField(max_length=64, default='', editable=False) filename = models.CharField(max_length=255, default=u'', editable=False, db_index=True) checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) - + signature_state = models.CharField(blank=True, null=True, max_length=16, verbose_name=_(u'signature state'), editable=False) + class Meta: unique_together = ('document', 'major', 'minor', 'micro', 'release_level', 'serial') verbose_name = _(u'document version') @@ -371,6 +378,7 @@ class DocumentVersion(models.Model): if new_document: #Only do this for new documents + self.update_signed_state(save=False) self.update_checksum(save=False) self.update_mimetype(save=False) self.save() @@ -443,6 +451,18 @@ class DocumentVersion(models.Model): ''' for version in self.document.versions.filter(timestamp__gt=self.timestamp): version.delete() + + def update_signed_state(self, save=True): + if self.exists(): + try: + self.signature_state = gpg.verify_w_retry(self.open()).status + # TODO: give use choice for auto public key fetch? + # OR maybe new config option + except GPGVerificationError: + self.signature_state = None + + if save: + self.save() def update_mimetype(self, save=True): ''' @@ -470,12 +490,24 @@ class DocumentVersion(models.Model): ''' return self.file.storage.exists(self.file.path) - def open(self): + def open(self, raw=False): ''' Return a file descriptor to a document version's file irrespective of the storage backend ''' - return self.file.storage.open(self.file.path) + if self.signature_state and not raw: + try: + result = gpg.decrypt_file(self.file.storage.open(self.file.path)) + # gpg return a string, turn it into a file like object + container = StringIO() + container.write(result.data) + container.seek(0) + return container + except GPGDecryptionError: + # At least return the original raw content + return self.file.storage.open(self.file.path) + else: + return self.file.storage.open(self.file.path) def save_to_file(self, filepath, buffer_size=1024 * 1024): ''' From 292d3ffc3d053bbd102f5acf9cfbeb8f267b7013 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 07:28:02 -0400 Subject: [PATCH 206/220] Dont import deprecated 'get_encoding', simplify decrypted data encapsulation --- apps/documents/models.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index 4246da2dd5..731b53d827 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -22,7 +22,7 @@ from converter.api import get_available_transformations_choices from converter.api import convert from converter.exceptions import UnknownFileFormat, UnkownConvertError from mimetype.api import (get_mimetype, get_icon_file_path, - get_error_icon_file_path, get_encoding) + get_error_icon_file_path) from converter.literals import (DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, DEFAULT_PAGE_NUMBER) from django_gpg.runtime import gpg @@ -499,10 +499,7 @@ class DocumentVersion(models.Model): try: result = gpg.decrypt_file(self.file.storage.open(self.file.path)) # gpg return a string, turn it into a file like object - container = StringIO() - container.write(result.data) - container.seek(0) - return container + return StringIO(result.data) except GPGDecryptionError: # At least return the original raw content return self.file.storage.open(self.file.path) From f5211313b7f356d54a150c7ba27024ba67697075 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 13:35:15 -0400 Subject: [PATCH 207/220] Dont fetch public keys when creating document version --- apps/documents/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index 731b53d827..d90665d333 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -455,7 +455,7 @@ class DocumentVersion(models.Model): def update_signed_state(self, save=True): if self.exists(): try: - self.signature_state = gpg.verify_w_retry(self.open()).status + self.signature_state = gpg.verify(self.open()).status # TODO: give use choice for auto public key fetch? # OR maybe new config option except GPGVerificationError: From 7e5be301cda672381f04b45f673b0d2ea2df3057 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 13:35:56 -0400 Subject: [PATCH 208/220] Add 'python-hkp' to the requirements --- requirements/development.txt | 1 + requirements/production.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/requirements/development.txt b/requirements/development.txt index ad042365ab..d314f11a82 100644 --- a/requirements/development.txt +++ b/requirements/development.txt @@ -21,3 +21,4 @@ django-compressor==1.1 djangorestframework==0.2.3 South==0.7.3 python-gnupg==0.2.8 +python-hkp==0.1.3 diff --git a/requirements/production.txt b/requirements/production.txt index 9c1b2eae70..cfac3f7573 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -18,3 +18,4 @@ django-compressor==1.1 djangorestframework==0.2.3 South==0.7.3 python-gnupg==0.2.8 +python-hkp==0.1.3 From 8b3e391e0505027ca0df3347e3ccf7585d04eb75 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 13:36:47 -0400 Subject: [PATCH 209/220] Change default keyserver --- apps/django_gpg/conf/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/django_gpg/conf/settings.py b/apps/django_gpg/conf/settings.py index ac9256396a..696447b94a 100644 --- a/apps/django_gpg/conf/settings.py +++ b/apps/django_gpg/conf/settings.py @@ -10,6 +10,6 @@ register_settings( namespace=u'django_gpg', module=u'django_gpg.conf.settings', settings=[ - {'name': u'KEYSERVERS', 'global_name': u'SIGNATURES_KEYSERVERS', 'default': ['keyserver.ubuntu.com'], 'description': _(u'List of keyservers to be queried for unknown keys.')}, + {'name': u'KEYSERVERS', 'global_name': u'SIGNATURES_KEYSERVERS', 'default': ['pool.sks-keyservers.net'], 'description': _(u'List of keyservers to be queried for unknown keys.')}, ] ) From 553d73020dae12db428d0cace7188ddf1487edb6 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 13:37:24 -0400 Subject: [PATCH 210/220] Add key management view to the setup menu, add keyserver query view, add keyserver key import, add respective icons --- apps/django_gpg/__init__.py | 29 +++- apps/django_gpg/api.py | 39 ++++- apps/django_gpg/exceptions.py | 3 + apps/django_gpg/forms.py | 13 ++ apps/django_gpg/static/images/icons/key.png | Bin 0 -> 1621 bytes .../static/images/icons/key_add.png | Bin 0 -> 2085 bytes .../static/images/icons/key_delete.png | Bin 0 -> 2072 bytes apps/django_gpg/urls.py | 3 + apps/django_gpg/views.py | 159 ++++++++++++++++-- 9 files changed, 229 insertions(+), 17 deletions(-) create mode 100644 apps/django_gpg/forms.py create mode 100644 apps/django_gpg/static/images/icons/key.png create mode 100644 apps/django_gpg/static/images/icons/key_add.png create mode 100644 apps/django_gpg/static/images/icons/key_delete.png diff --git a/apps/django_gpg/__init__.py b/apps/django_gpg/__init__.py index de9aeeba41..7fe12a221c 100644 --- a/apps/django_gpg/__init__.py +++ b/apps/django_gpg/__init__.py @@ -7,13 +7,40 @@ from navigation.api import register_links, register_top_menu, \ from main.api import register_diagnostic, register_maintenance_links from permissions.api import register_permission, set_namespace_title from project_setup.api import register_setup +from hkp import Key as KeyServerKey + +from django_gpg.api import Key PERMISSION_DOCUMENT_VERIFY = {'namespace': 'django_gpg', 'name': 'document_verify', 'label': _(u'Verify document signatures')} +PERMISSION_KEY_VIEW = {'namespace': 'django_gpg', 'name': 'key_view', 'label': _(u'View keys')} +PERMISSION_KEY_DELETE = {'namespace': 'django_gpg', 'name': 'key_delete', 'label': _(u'Delete keys')} +PERMISSION_KEYSERVER_QUERY = {'namespace': 'django_gpg', 'name': 'keyserver_query', 'label': _(u'Query keyservers')} +PERMISSION_KEY_RECEIVE = {'namespace': 'django_gpg', 'name': 'key_receive', 'label': _(u'Import key from keyservers')} # Permission setup set_namespace_title('django_gpg', _(u'Signatures')) register_permission(PERMISSION_DOCUMENT_VERIFY) +register_permission(PERMISSION_KEY_VIEW) +register_permission(PERMISSION_KEY_DELETE) +register_permission(PERMISSION_KEYSERVER_QUERY) +register_permission(PERMISSION_KEY_RECEIVE) -document_verify = {'text': _(u'Signatures'), 'view': 'document_verify', 'args': 'object.pk', 'famfam': 'text_signature', 'permissions': [PERMISSION_DOCUMENT_VERIFY]} +# Setup views +private_keys = {'text': _(u'private keys'), 'view': 'key_private_list', 'args': 'object.pk', 'famfam': 'key', 'icon': 'key.png', 'permissions': [PERMISSION_KEY_VIEW]} +public_keys = {'text': _(u'public keys'), 'view': 'key_public_list', 'args': 'object.pk', 'famfam': 'key', 'icon': 'key.png', 'permissions': [PERMISSION_KEY_VIEW]} +key_delete = {'text': _(u'delete'), 'view': 'key_delete', 'args': ['object.fingerprint', 'object.type'], 'famfam': 'key_delete', 'permissions': [PERMISSION_KEY_DELETE]} +key_query = {'text': _(u'Query keyservers'), 'view': 'key_query', 'famfam': 'zoom', 'permissions': [PERMISSION_KEYSERVER_QUERY]} +key_receive = {'text': _(u'Import'), 'view': 'key_receive', 'args': 'object.keyid', 'famfam': 'key_add', 'keep_query': True, 'permissions': [PERMISSION_KEY_RECEIVE]} + +# Document views +document_verify = {'text': _(u'signatures'), 'view': 'document_verify', 'args': 'object.pk', 'famfam': 'text_signature', 'permissions': [PERMISSION_DOCUMENT_VERIFY]} register_links(Document, [document_verify], menu_name='form_header') + +register_links(['key_delete', 'key_private_list', 'key_public_list', 'key_query'], [private_keys, public_keys, key_query], menu_name='sidebar') + +register_links(Key, [key_delete]) +register_links(KeyServerKey, [key_receive]) + +register_setup(private_keys) +register_setup(public_keys) diff --git a/apps/django_gpg/api.py b/apps/django_gpg/api.py index e5c6ca5f19..50ca3d564c 100644 --- a/apps/django_gpg/api.py +++ b/apps/django_gpg/api.py @@ -1,16 +1,20 @@ import types from StringIO import StringIO from pickle import dumps - -import gnupg +import logging from django.core.files.base import File from django.utils.translation import ugettext_lazy as _ +from django.utils.http import urlquote_plus -from django_gpg.exceptions import GPGVerificationError, GPGSigningError, \ - GPGDecryptionError, KeyDeleteError, KeyGenerationError, \ - KeyFetchingError, KeyDoesNotExist +from hkp import KeyServer +import gnupg +from django_gpg.exceptions import (GPGVerificationError, GPGSigningError, + GPGDecryptionError, KeyDeleteError, KeyGenerationError, + KeyFetchingError, KeyDoesNotExist, KeyImportError) + +logger = logging.getLogger(__name__) KEY_TYPES = { 'pub': _(u'Public'), @@ -31,6 +35,8 @@ KEY_SECONDARY_CLASSES = ( ((KEY_CLASS_ELG), _(u'Elgamal')), ) +KEYSERVER_DEFAULT_PORT = 11371 + SIGNATURE_STATE_BAD = 'signature bad' SIGNATURE_STATE_NONE = None SIGNATURE_STATE_ERROR = 'signature error' @@ -300,3 +306,26 @@ class GPG(object): return Key.get(self, import_result.fingerprints[0], secret=False) raise KeyFetchingError + + def query(self, term): + results = {} + for keyserver in self.keyservers: + url = u'http://%s' % keyserver + server = KeyServer(url) + try: + key_list = server.search(term) + for key in key_list: + results[key.keyid] = key + except: + pass + + return results.values() + + def import_key(self, key_data): + import_result = self.gpg.import_keys(key_data) + logger.debug('import_result: %s' % import_result) + + if import_result: + return Key.get(self, import_result.fingerprints[0], secret=False) + + raise KeyImportError diff --git a/apps/django_gpg/exceptions.py b/apps/django_gpg/exceptions.py index 682ad8f795..52e62315b0 100644 --- a/apps/django_gpg/exceptions.py +++ b/apps/django_gpg/exceptions.py @@ -29,3 +29,6 @@ class KeyFetchingError(GPGException): class KeyDoesNotExist(GPGException): pass + +class KeyImportError(GPGException): + pass diff --git a/apps/django_gpg/forms.py b/apps/django_gpg/forms.py new file mode 100644 index 0000000000..619035fd5d --- /dev/null +++ b/apps/django_gpg/forms.py @@ -0,0 +1,13 @@ +from django import forms +from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext +from django.core.urlresolvers import reverse +from django.utils.safestring import mark_safe +from django.conf import settings + + +class KeySearchForm(forms.Form): + term = forms.CharField( + label=_(u'Term'), + help_text=_(u'Name, e-mail, key ID or key fingerprint to look for.') + ) diff --git a/apps/django_gpg/static/images/icons/key.png b/apps/django_gpg/static/images/icons/key.png new file mode 100644 index 0000000000000000000000000000000000000000..3cf460e1126ce5c67b2fc0d4166eb4bc6f409e20 GIT binary patch literal 1621 zcmV-b2CDgqP)xa?aXJaW%DaHEUTZf}$c! zMX=xs$c1|^_g=Vgzt1`S-g7U?lr=u?=3y^;;eF3}e$Vs!J-_oFPE}Pr&Wp!mzC`wm zl({P{)+n?)Y4sj33KK}0wdCyIPXQTbo4I|8NeeS4$tksDbG#u)bD=&wa71 zaOFD49cK}9RcpjKPSq6PIT?x^gA$8Ew9kPq?{(Cl{2XnKb%$4cT>TbPVys2TeYN4a z1y-xMtZ-Q=3J&)q*MZ z@wh;;oA}L7EqVj!y$Ct%)4;*&Ac!Kot^rj4>F7Los(H(S(|5MiR=GR9Ju2j=2eRug zJiV|4Z!UiF5UU??i~&%Qb1!A*7eMj+2u{#}qaT%*!SO2YHo0)NzH9q8=kETYZPxL@ zoF`2CvnEVH)K!Ivxur-GxuvvZ7^?z0DjvNk`3O`br}1e2w+Xx;(Og6zqB*37619>u3TX@Y!o@M(*&U4WB?y>^)b%fGsB%q2K^w z;Si*>G^FX$sLrHBL6E?5EQVM#M0F5B(=`X~wfK8h?5HWG#TFV~apcU42pj~y1Nux8 z+_ig&wN)#n$Up$WU=T*xq&Y&3gjmuwr$z>%=ymtOakB$1Pq<}zPcZJlLaP=9X_`Uq5c4|7T|LR;Hd8+V2BLq;adHamJf9?JUwB%K7Wvk#XN;P29XE|!%c z&ry<=3ny8tj~vN{1uvg+*;dI3rNW_|>roz(a3dAm!9%y(cnOon` z6VHgwgb#xsEiYVSHLApXSCV;!mUFYkLd@M-A1~f@ZCR30JPF!4TJYfl;E!&YNz4@j z->rdnU)ihW++?*<2kW689)iGYMcbMLRFm?CMhpIM0Q}MQ55SF?26Qv4naoJfB<5Z> zsw%HTq!*|^tXxPIl{+QJ@@E?@@(Yr1r3$tLo7MjBj~_aKdAH<~lx?sDSNsoRuy0p3u&Dk*(;Qu34qV6;xm zgg$x(zJ_j?Y&MwE3EbI5-9#a99>u$_4>Ipg`WmSWKI=p*XC zQ2UM{rZnk}bDWlBfFnoM7!t84#N4?s%zP592j4{RwU&L4ywdaw#sr^f%>TUZ-bHr1 zbxq~+TBtYPM%>o|PBem-OuCHt;%GhVMr-pZM*JL9|7Aq3?8Kbvr(rQ0pMGjlaV}Go zsR2^1%y0b8;-3NjGf=}LIyiU(1W|-f38LwCVMPzhR8foRa7`AiK+mU*B{uXSChl1gV)qPyc7%E*ZM%c^E}wYiS5 z`YNp`fU{6WJVupAEXBueAQnp`n@Hxpk1{(RXH+CjNZNpsax$X*D#~V6Ab&)Crf;M%TA7fWYU}ILzF>#p_;&k-Ya@cnglAQiLXg zh=oHiWEo+Q3=k!W-GVy7YAl9$Bt$t7LC1w|^mmPVSH9L%O`A7JeB$&yuOe^|_-ioQ zWVo9f$ZNZvN|9iIjF_N=OF%HO1c?$GlxAc^bRq)3dkj5S`p~b0&Ofp1?6dR;H3G0c zp-#sDe*cE=*Eme%`Pyv+Zif59E*Rw;$TmBC?jg#903?Z8@C^m;x3%Gvu?uZN0%=}Z z8kDJ==Tx)y3ZtFGOA?#TZI}dSw6A|1CYuHBi@OQj21`yZfh!0H$6=t_4h{sd`^!&p z)fvRfdskyl$q!*Nm~Lk{s`^#*kDfu>&_N832X#dSl%Q3GkE1weA>R7e z77V#Pdq4gye)&yR!0%trz%dEVXt(4bJJ*R1b{!?kB?wg4^oi@5$8)sA<=p(}Ry6fA zKnb`Ip=#W@Qqz?^`w^!%{Q_$-7M47ZhQlvmsB3)5$v1FnsvO||w!X5)Zq^9Ap1{rI z`A$9N)|?#j+^zTV>iUbzQ*q?y{RS`9-B;^u?cWFAgo{|AF2jATY3gfU+G`oui{|8yel#(ulznGwY|lk!it=QdAFz;J$Kuz(*QUX@!)!BQn3bArg@q9OJ~vJu zxCD{7^oO<2Sq+o8Sz8uKu@Y+5?}Yk?wOc6N^OMQ7Uw^`3n9imMGKiBgpIw_{Of)Wj zrk=o==R06DQ^Mtt=c8V__=;^U57YSpmfUHE8I9x7USeh%gCw6kn=*h)8<1tU zNR3N3P@QLIK{@vaqTL3wH5=}sL40xOI>lXpFBCtWqJEepbaRaT;eIMR;KdUh*i9Rz zB;4`ir036nOs$%bBm!q=*x7X6rwuUM^KCFjk6`5TFl2`VvW370he&&Zz%V{<76;xb%GW0@(Dje3n+{~r8Z}BCoK5UsktX&Gdp6w%?DS(M ziG7N&u}Q*{>feE>=0lRZmTp2reiitI&k_NDwv8kCD=*HpCw&6L( zXxad#L}q8F8a`497fQd){O@c;Vr7%pl8tyZw;0tG<A7LYzQN9d|N*18bkc~OeCQXcv;d1X6_+#gBuoCVk@n;9-(RoXOZUE8%Vt&~!>E<=p9jC7ky zX`@c48$~MxN}3QxnmTF7J5FrJcASSD+xOm`@7iuaM3fpF9n0}|?stCYoZoqv({&vj z$KfVl+&`XPxzZ}(Ns-6*bzOsO5s`?e0iKU*I{*HK-ii8W4qu90^WZH2AU6GCMWbT3 zes9^@hjE*?8nCzlx|iONiUl$9*(dnoqkkfiO#W%(ug`3w1NBw`kpA_{Z}%^#TvL4K z#x3B|5u^j>p-vBhMS){tDTc|j0=neF#di;2(ARqG!QY(SM9-#g7J%^f)75`mTD@*d z`9oWw4xT_NaK><)`!5n%jdsELSS9J~pFC?Xt~!kG_yhYuXheBUPgXw4lBj6Y(Y0Epz=cZ!#Ip@oiv6HMUfPv=!|ypBF!04Lf;p8w0qzW*4? zCVsl)cI8#iym?3lPNS%_9%hkSPe+z~BVZ!($f6V>qasxrkAZFxNJzl`btuZ)XR}2*ir@m5X{V z4V+;0RqDMBo?->*6jdHYDIL3vR7%SKrtN zkW$78Oaw&7rkPqYUjTf=*2;$z6TiUjEI?v%lD-k3`y0U*ZzAu=Q%$9Gc!?7oWLGfG z898}TLW-g`&=o;%VCpDqL|?ZP@_&2cn{{r5J9yuY-$9OlfT`Go;i+s>z_YtbHnILn z0T!V8-$EuR8tG_ACMGf58$d^^e~dceS~}?YIsnM{@;aB5JGgrLi;&6t(5J7#RZ@!h z^b}HwI3%+fW|NtCCXqJd22VUmAw83zpd{dH?!{0~bgcG;vo&l5mY0N{`8s;F~W$n$M4k#Q@6pYDUK6hd)05e|+ZJ~;uwEWkf7g1&$EL+YLZHiq=WuUvzb={dF2{N-b!40 zeLte3fj@6J+ws%uRRMow2Q!XY<1Fm9LKL_?cxT`HkceoU$QgM~jwC}x-B!=tKi`GK zyGM~4>ZR{l-_KS#RRFOO(j8@xYk!Eg*Y?2|2(5XnrR%?Qae#kwM|qvos*~~EWZX)g zzhdOvURX$;2aP^nv%BSiY##Ze6^nmWR=?Sk{IH3}?GSib&a_439AgWL2z7J_$&>G) z^!^&e8sB)H4%Ug+7~g&;Gndk3i<5;}P__kT&R)+^psnZ((gFRL$4M7TooJW8HZGZ9FA<4dg@NPn0lG3y%TIvSx-FMoASGab@3o}u>~0JGC3HLTr5 zbzWdb;FI6OOkua$3lJRf{|G5+WSmFMo(nn8nemA$Cu1zFwnXEJ zDo-I@ZkCO4I|l`fYU8OoLeX)sXJAk>yJC;|$MN32le54XViHEU$h7wHoStW1$rFL- z%SBfCaFNGjOgxQ#56lq&8V{MW?DGe~o?*}C`hb)ESw!NTBW-Mx2xa^C#9aF!$?bow z_U`q%3Tmq>?#c`zx>wJl;IhuJ#i038JAC2T@kg6|Pq2vQ0I*9GwrIQGq1$ zf4s10Rc(oDt6LP7>sKHgORE=;`@?@Y+#g^iJj5z8pM~VBK(HvfNXUKIvfm*)cqX%{ zWc_36Mut&dt7\d+)/$', 'document_verify', (), 'document_verify'), + url(r'^query/$', 'key_query', (), 'key_query'), + url(r'^receive/(?P.+)/$', 'key_receive', (), 'key_receive'), + ) diff --git a/apps/django_gpg/views.py b/apps/django_gpg/views.py index 4a173cac0a..a4f43bfbcb 100644 --- a/apps/django_gpg/views.py +++ b/apps/django_gpg/views.py @@ -1,4 +1,5 @@ from datetime import datetime +import logging from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponseRedirect @@ -12,45 +13,181 @@ from django.template.defaultfilters import force_escape from documents.models import Document, RecentDocument from permissions.api import check_permissions - +from common.utils import pretty_size, parse_range, urlquote, \ + return_diff, encapsulate + from django_gpg.api import Key, SIGNATURE_STATES from django_gpg.runtime import gpg -from django_gpg.exceptions import GPGVerificationError -from django_gpg import PERMISSION_DOCUMENT_VERIFY +from django_gpg.exceptions import GPGVerificationError, KeyFetchingError +from django_gpg import (PERMISSION_DOCUMENT_VERIFY, PERMISSION_KEY_VIEW, + PERMISSION_KEY_DELETE, PERMISSION_KEYSERVER_QUERY, + PERMISSION_KEY_RECEIVE) +from django_gpg.forms import KeySearchForm +logger = logging.getLogger(__name__) + + +def key_receive(request, key_id): + check_permissions(request.user, [PERMISSION_KEY_RECEIVE]) + + post_action_redirect = None + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/'))) + + if request.method == 'POST': + try: + term = request.GET.get('term') + results = gpg.query(term) + keys_dict = dict([(key.keyid, key) for key in results]) + key = gpg.import_key(keys_dict[key_id].key) + messages.success(request, _(u'Key: %s, imported successfully.') % key) + return HttpResponseRedirect(next) + except (KeyFetchingError, KeyError, TypeError): + messages.error(request, _(u'Unable to import key id: %s') % key_id) + return HttpResponseRedirect(previous) + + return render_to_response('generic_confirm.html', { + 'title': _(u'Import key'), + 'message': _(u'Are you sure you wish to import key id: %s?') % key_id, + 'form_icon': 'key_add.png', + 'next': next, + 'previous': previous, + 'submit_method': 'GET', + + }, context_instance=RequestContext(request)) + def key_list(request, secret=True): + check_permissions(request.user, [PERMISSION_KEY_VIEW]) + if secret: object_list = Key.get_all(gpg, secret=True) - title = _(u'Private key list') + title = _(u'private keys') else: object_list = Key.get_all(gpg) - title = _(u'Public key list') + title = _(u'public keys') - return render_to_response('key_list.html', { + return render_to_response('generic_list.html', { 'object_list': object_list, 'title': title, + 'hide_object': True, + 'extra_columns': [ + { + 'name': _(u'Key ID'), + 'attribute': 'key_id', + }, + { + 'name': _(u'Owner'), + 'attribute': encapsulate(lambda x: u', '.join(x.uids)), + }, + ] }, context_instance=RequestContext(request)) def key_delete(request, fingerprint, key_type): + check_permissions(request.user, [PERMISSION_KEY_DELETE]) + + secret = key_type == 'sec' + key = Key.get(gpg, fingerprint, secret=secret) + + post_action_redirect = None + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/'))) + if request.method == 'POST': try: - secret = key_type == 'sec' - key = Key.get(gpg, fingerprint, secret=secret) gpg.delete_key(key) messages.success(request, _(u'Key: %s, deleted successfully.') % fingerprint) - return HttpResponseRedirect(reverse('home_view')) + return HttpResponseRedirect(next) except Exception, msg: messages.error(request, msg) - return HttpResponseRedirect(reverse('home_view')) + return HttpResponseRedirect(previous) return render_to_response('generic_confirm.html', { 'title': _(u'Delete key'), - 'message': _(u'Are you sure you wish to delete key:%s? If you try to delete a public key that is part of a public/private pair the private key will be deleted as well.') % Key.get(gpg, fingerprint) + 'delete_view': True, + 'message': _(u'Are you sure you wish to delete key: %s? If you try to delete a public key that is part of a public/private pair the private key will be deleted as well.') % key, + 'form_icon': 'key_delete.png', + 'next': next, + 'previous': previous, }, context_instance=RequestContext(request)) +def key_query(request): + check_permissions(request.user, [PERMISSION_KEYSERVER_QUERY]) + + subtemplates_list = [] + term = request.GET.get('term') + + form = KeySearchForm(initial={'term': term}) + subtemplates_list.append( + { + 'name': 'generic_form_subtemplate.html', + 'context': { + 'title': _(u'Query key server'), + 'form': form, + 'submit_method': 'GET', + }, + } + ) + + if term: + results = gpg.query(term) + subtemplates_list.append( + { + 'name': 'generic_list_subtemplate.html', + 'context': { + 'title': _(u'results'), + 'object_list': results, + 'hide_object': True, + 'extra_columns': [ + { + 'name': _(u'ID'), + 'attribute': 'keyid', + }, + { + 'name': _(u'type'), + 'attribute': 'algo', + }, + { + 'name': _(u'creation date'), + 'attribute': 'creation_date', + }, + { + 'name': _(u'disabled'), + 'attribute': 'disabled', + }, + { + 'name': _(u'expiration date'), + 'attribute': 'expiration_date', + }, + { + 'name': _(u'expired'), + 'attribute': 'expired', + }, + { + 'name': _(u'length'), + 'attribute': 'key_length', + }, + { + 'name': _(u'revoked'), + 'attribute': 'revoked', + }, + + { + 'name': _(u'Identifies'), + 'attribute': encapsulate(lambda x: u', '.join([identity.uid for identity in x.identities])), + }, + ] + }, + } + ) + + return render_to_response('generic_form.html', { + 'subtemplates_list': subtemplates_list, + }, context_instance=RequestContext(request)) + + def document_verify(request, document_pk): check_permissions(request.user, [PERMISSION_DOCUMENT_VERIFY]) document = get_object_or_404(Document, pk=document_pk) From 0adcf584f3df523872321f2a23ddbb8afc44bb9b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 13:40:25 -0400 Subject: [PATCH 211/220] Update text mapping to avoid ugettext from complaining --- apps/django_gpg/views.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/django_gpg/views.py b/apps/django_gpg/views.py index a4f43bfbcb..de07ade6fc 100644 --- a/apps/django_gpg/views.py +++ b/apps/django_gpg/views.py @@ -202,7 +202,10 @@ def document_verify(request, document_pk): widget = (u'' % (settings.STATIC_URL, signature_state['icon'])) paragraphs = [ - _(u'Signature status: %s %s') % (mark_safe(widget), signature_state['text']), + _(u'Signature status: %(widget)s %(text)s') % { + 'widget': mark_safe(widget), + 'text': signature_state['text'] + ), ] if document.signature_state: From 5464ee254440be4da6cfbd72bc74cc1917942906 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 13:55:04 -0400 Subject: [PATCH 212/220] Updated language script to include django_gpg app --- misc/compilemessages_all.sh | 5 +++++ misc/makemessages_all.sh | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/misc/compilemessages_all.sh b/misc/compilemessages_all.sh index 4ad10e85ae..5e3c5cf2a7 100755 --- a/misc/compilemessages_all.sh +++ b/misc/compilemessages_all.sh @@ -107,3 +107,8 @@ cd $BASE/apps/web_theme $COMPILEMESSAGES -l pt $COMPILEMESSAGES -l ru $COMPILEMESSAGES -l es + +cd $BASE/apps/django_gpg +$COMPILEMESSAGES -l pt +$COMPILEMESSAGES -l ru +$COMPILEMESSAGES -l es diff --git a/misc/makemessages_all.sh b/misc/makemessages_all.sh index 79a1354cee..d1e0fcd79e 100755 --- a/misc/makemessages_all.sh +++ b/misc/makemessages_all.sh @@ -128,3 +128,9 @@ $MAKEMESSAGES -l en $MAKEMESSAGES -l pt $MAKEMESSAGES -l ru $MAKEMESSAGES -l es + +cd $BASE/apps/django_gpg +$MAKEMESSAGES -l en +$MAKEMESSAGES -l pt +$MAKEMESSAGES -l ru +$MAKEMESSAGES -l es From 3b943af6d81eae5a95e46fda4d3988498805ff9a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 13:55:33 -0400 Subject: [PATCH 213/220] Update translation files --- apps/common/locale/es/LC_MESSAGES/django.mo | Bin 5534 -> 5431 bytes apps/common/locale/pt/LC_MESSAGES/django.mo | Bin 5385 -> 5282 bytes .../converter/locale/pt/LC_MESSAGES/django.mo | Bin 18867 -> 18828 bytes .../locale/en/LC_MESSAGES/django.po | 292 +++++++++------ .../locale/es/LC_MESSAGES/django.mo | Bin 4289 -> 1619 bytes .../locale/es/LC_MESSAGES/django.po | 353 ++++++++++-------- .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 524 bytes .../locale/pt/LC_MESSAGES/django.po | 255 +++++++++++++ .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 595 bytes .../locale/ru/LC_MESSAGES/django.po | 255 +++++++++++++ .../locale/es/LC_MESSAGES/django.mo | Bin 1838 -> 1799 bytes .../locale/pt/LC_MESSAGES/django.mo | Bin 1827 -> 1788 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 2228 -> 2189 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 4191 -> 4152 bytes .../locale/pt/LC_MESSAGES/django.mo | Bin 4192 -> 4153 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 5198 -> 5159 bytes .../documents/locale/pt/LC_MESSAGES/django.mo | Bin 18151 -> 18083 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 2221 -> 2182 bytes .../locale/pt/LC_MESSAGES/django.mo | Bin 2173 -> 2134 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 2637 -> 2598 bytes apps/folders/locale/es/LC_MESSAGES/django.mo | Bin 4356 -> 4317 bytes apps/folders/locale/pt/LC_MESSAGES/django.mo | Bin 4254 -> 4215 bytes apps/folders/locale/ru/LC_MESSAGES/django.mo | Bin 5037 -> 4998 bytes apps/history/locale/es/LC_MESSAGES/django.mo | Bin 1525 -> 1486 bytes apps/history/locale/pt/LC_MESSAGES/django.mo | Bin 1475 -> 1436 bytes apps/history/locale/ru/LC_MESSAGES/django.mo | Bin 1678 -> 1639 bytes apps/linking/locale/pt/LC_MESSAGES/django.mo | Bin 3760 -> 3013 bytes apps/main/locale/es/LC_MESSAGES/django.mo | Bin 2616 -> 2577 bytes apps/main/locale/pt/LC_MESSAGES/django.mo | Bin 2564 -> 2525 bytes apps/main/locale/ru/LC_MESSAGES/django.mo | Bin 3196 -> 3157 bytes apps/metadata/locale/es/LC_MESSAGES/django.mo | Bin 10006 -> 9967 bytes apps/metadata/locale/pt/LC_MESSAGES/django.mo | Bin 9842 -> 9803 bytes apps/metadata/locale/ru/LC_MESSAGES/django.mo | Bin 12218 -> 12179 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 717 -> 678 bytes .../locale/pt/LC_MESSAGES/django.mo | Bin 679 -> 640 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 780 -> 741 bytes apps/ocr/locale/es/LC_MESSAGES/django.mo | Bin 9303 -> 9264 bytes apps/ocr/locale/pt/LC_MESSAGES/django.mo | Bin 9087 -> 9048 bytes apps/ocr/locale/ru/LC_MESSAGES/django.mo | Bin 11891 -> 11852 bytes .../locale/pt/LC_MESSAGES/django.mo | Bin 3213 -> 2057 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 634 -> 595 bytes .../locale/pt/LC_MESSAGES/django.mo | Bin 611 -> 572 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 665 -> 626 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 576 -> 537 bytes .../locale/pt/LC_MESSAGES/django.mo | Bin 558 -> 519 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 494 -> 494 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 681 -> 642 bytes .../locale/pt/LC_MESSAGES/django.mo | Bin 659 -> 620 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 746 -> 707 bytes apps/sources/locale/pt/LC_MESSAGES/django.mo | Bin 8265 -> 8226 bytes apps/sources/locale/ru/LC_MESSAGES/django.mo | Bin 10504 -> 10465 bytes apps/tags/locale/es/LC_MESSAGES/django.mo | Bin 4239 -> 4200 bytes apps/tags/locale/pt/LC_MESSAGES/django.mo | Bin 4183 -> 4144 bytes apps/tags/locale/ru/LC_MESSAGES/django.mo | Bin 4853 -> 4814 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 4834 -> 4795 bytes .../locale/pt/LC_MESSAGES/django.mo | Bin 4722 -> 4683 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 6086 -> 6047 bytes .../web_theme/locale/es/LC_MESSAGES/django.mo | Bin 1761 -> 1722 bytes .../web_theme/locale/pt/LC_MESSAGES/django.mo | Bin 1727 -> 1688 bytes .../web_theme/locale/ru/LC_MESSAGES/django.mo | Bin 1969 -> 1930 bytes 60 files changed, 877 insertions(+), 278 deletions(-) create mode 100644 apps/django_gpg/locale/pt/LC_MESSAGES/django.mo create mode 100644 apps/django_gpg/locale/pt/LC_MESSAGES/django.po create mode 100644 apps/django_gpg/locale/ru/LC_MESSAGES/django.mo create mode 100644 apps/django_gpg/locale/ru/LC_MESSAGES/django.po diff --git a/apps/common/locale/es/LC_MESSAGES/django.mo b/apps/common/locale/es/LC_MESSAGES/django.mo index 80f426bc7a52f3e213873260684cebded649d960..00b642dc312659a9c3f6a09805787e2ee1395909 100644 GIT binary patch delta 1547 zcmX}sOGs2v9LMovIZm1HUTUS2??>01@sX*iX;2Fzu?J*rX2PT>D_U=exiN`x_z|1%2XdG?Zl>a9OveD`;%QutL#VNi;Zht&#%QK68mBQCXOIq!dqMcU ziRhw#lWZ%}kTxb8)uDp{+=8p{7V5<>Fb&_LGMd4~IExyHi(ZsSG{$2J?!kPdi8+f( z>^w%&zv<_M!(8FVi#JdWCh#&&p)x;CIw^PwOK}7><)5((zoMqxvnV{!t*8NPM_ys} z+3Ul&gzJ+S)C(_i5`)92h7V8~JVnjOJJiVEquNd5-3ViTqSpFmYl4%i&rkz;jmvNX&*68}QuL6XHrENv#{ugYY6-ug zX40Jy-Yapa>l|dP#z|oQ_2Mcj)L}D{lxabAu-|$JH3J=}0rz462T*(A57L)OO$=|& z0#riHsJ*ij_5M!OChfIe2y!w+#h`7_oD^=@Vhte6Y7Sy8cB3-5hvWDNmFXFFpl0G4 zuE&R{z3~f6@HZBr!@?`Ey-1Y_1~}2kdXU4M;zt?vVK&}DWj2X=;EVMyYDN-BM@y7~ zx}S+`4U<7Iw$OhDga)I2Ruf7@&lKwW*N$}v6(3PS=tVh1CZSPlDm5srap)66%|a!i ztk)4$go>BY_pW8tX44=wBWnqjVnR!-ja;qoU+ek5XsvSXMHyxhCHA@i>+Ly7nho}x zrJpOTVyL9g)r3#juc6u1m6mg^DBF#MrnubJYT8xw@0LfD68cO%L>-}>n>sq>%7_?^ za_@3wMK^8R;WTu#`nwJsX?HgHyILzfzGAP};qdu9UT>wZyl*h(WlW>Ly{+5d#_iV5 TzN4{wMkiw%BSxM0V^RMAV0?vE delta 1647 zcmX}sOGs2v9LMp$oDaV)@5jRayLyTS)01NOe7U4}S$5C8{Ur=-Yg-h@cGH1)5ZdthJ*CJc%8cz*RVfx?gWu4SrN+Ww;pEqb5?1N~8&Mu?>&o z3FH+vhJMDkXLR(yOXO#h9IEg=D)Vfne-rajnLof4_zG+A8>;lH7MRsy399r*P!qj~ zn!r`m`)|4PyO_x5!Xr9*;W%dDH0s75s0?OM70KX_n)yQ1eFYrer?CvEHJ{7P4cLgP z$T{Z)=Oxs8uHY`boAdEGHs37j!9u1hi%#r4SA`hJcz1j1hr@S^QgZrT;oDE4x?Ut2Q}a*lDs`Z4KU$+gPPb|)WoN-17}ft zqGMsIGZUW9H&T(Y9Z4y=L52yqR*?G@# z4QkVVM^(bl`fkTk)E;TaYCM6ed}5f6GJA?VW8pzd#V zcA_dWfLfw+?)p_^ix`FZ-!ySmxklf=2Gd#u2sLetDqf1PeRTigjtZzY5_l-iCI#uD3l*H`J)^trA{_EP_r z)m8b`Hm67)TR83}%0}+{O4EE^q%(YaWWs;cx34=MKT{VBcJ;)&`#UN-`+9@XzL*#7 z>5B$?y+JP$?1{zt!?Db^)0*i^mn^lG<8rQ7Vg=UVHVoo=976r>h4mG# z;I0%Kob?c z^xQ;rGQLT%7t)bFCL1-N7u#_!y6_R|!7ni#U!!I;kE?MJm57s3G?5sL$5d=V57Nc- zp(b_}BN*QdaKL76vGd`5REG(?iBqVVpJh6!cmoS@7*+B)EW*#IlDk(fCE9>Wpb2?| zId0FpaSi7eF{lS#;~*A?P#s55GZ;lxG=3~y zRyXRonOKEh%*XCk)L%2ZZ96`(K1G#u6!pVNd;SpvoPS5XiX%)Iv&K>IZYE3Vg+#_yd(_QIautu@aTgG-@J0 zu?~|dpVmezR$u@#@D3``XQ%{%V;r!VNp|{tzMwL8utKuXh3Z&?x_=PW{{$+L3#i2V zkj-3S$I=K7MlRw13~{yNghXi|yrXs}{-@qL9$LbraQuR&H8o%9-H^ zMMfQVX2mq_Kjf`F-4W>RI@#mh9q8>SbNdT?J};Z!@Amo1{KfqbVn<@@13jH*0-fAG U)!W||*Ag0wJL(AK#?Lr^1N<_DKmY&$ delta 1648 zcmX}sS!_&E9LMp0=?pDxEw$CwqFUAI%yh9-wW_rR(Fm!~;Fi&8=u9)6T0%@DeZh-F zJP;ufA|4Q_2Ne+!68rK@q$Lp#9z;A?67l`rxp6Y*e$Ku3++lIM-uXhY2jln>ZEUqn`We`3L!> z>@UYGZumx+@v}S*xi|@1a4yot4qyQu#hG{(OK<=u;Seh3UpN8(A~9S3NV9A#z{yyQ z8m}JxjBl%HsN)9rg4t%|S!+WLxEtFsh12mPs=wYc1N^9&72|j;MFmoann)w&VGC}< zoyaTf9{L&I9@EeRFOZ+T)n5V8t^IZ zz|W|OtQ?!}zXxY?z7Ms;r%+$R8PvG9QZy9F9VA$LgKap7O8L@pX;+{gSdYrUCR~c! zQGuSvi+BYU&R3`GgAmEAq1+9M~d8V*Zx~S`(?&`u^2f83<5Sw2{KpGOCtDWnmh3PpGNy zSVe2ASt+%egfgUHtEeHWz6J$dK`o(b<|+zIpSH$#i&Dxach|ZWgVb`WQoM+|jLKJL zg;e&a&7*48D*8`QX-wm0P0hL9x&9-xCl-6>LaBF4l;Z-g&5~OYRqLm+B#p78R_e8t zdKIm$HkL|L8aMrFR(j{6nYx@>+<)CSE5ql+c18B}zw~eMt&Jv=-L=7BM`tqH+g`CN z-W5#5dz?gPJQ3`24mq)4XHQRWq$j&&!=^w}BH|=F q)z(y>UNd^&bY9NZQR|#oN3YXCm+tlx$nt`AZ`~G+ykUsZ)KljUZU-xyI z8cq0YG+}ael5-}(>_(+oo|zr2GTVa3@m0KsD=}PcwhOmnDxOA-e~0;a1#9pRG zaEJLMo zJEmhCm*XMSO+UpkoJ3`!gKH<_+o*ZY0F5FVAD{vlM@4qQ8^4N6=|A$u=P{dp1`ip< zHK=v_P=UOUJ{&h7C``W|#>glIG& zXIUJTiSJPhenBo_*D)VgwYfD>i+X|>Did#^0v|#JFoM*zeTCZpHZH|9-me6+Fpf?= z4W;&L)SJzqQu!z9<{6vaw=YEn5XDuv7xjGrwf+byrQf0g`q>+wMP+6V6>!QHcYi;! z&aoC6is*IJ!jC;qqBcB_I`Ah{>Ti1EiDV4@dAFy#@6FzLu(i9dClUzPghE07!r?$D6baXj?hIZ^ ZZSRin@9*Bv=Xd%>)2m`rgH=s={{w~}-5vk{ delta 1899 zcmXZcTWC~A9LMp0ifIhd#CvzMx^7l&tTEY5+?ZseaT`-F;4LVkRj3=0m{yaJO@t`+ zV9-8P`_gShB&HzoL29fe?ZYC9R>T`hi&gs~7QD2A=AlBsAnNzWIWPN}nR905|NqaN zJ(A8EN@ty$p5xriGJ7!JEMR6Q%gk2bMQp^Jh}ksUjGM3>$Kefc{65a0{}Q8^#}7?g zgi~=BYTX|E82hmruc9B{M$NHe8oqL~8cbjz?nQ0fixcn+PR0uu!aq?P{EtB#TVXaG zi#;3AM?Z-Qa4*irV>kydU==>DaNHLI3*1O!IF|?OFpS-(h5Imu8P8!1(VxYjo;P3| zlbC~jn2Q5giD$k36I5cur~tDap3b8Y#EH1l>u*7Vv~N(A$zUzM!kHLZXjX!2QKj66 z1=x#ucnX#2FW8R{P?gw2+GFtt)O*ee8bvftqXM{vitM2`K7!fweH@&|gE$4NFoCO3 z^S(m`@+0PB26dFzaVkDW1^C)Cm#moQn4gC3KnZH%daTDLRB2Cn{*EE~k8m=o-sLa_ zRr+Q86ygD#g?*?BTtdD7%yZN;pK|)x-@-JMK`rXV)fm7e`fxw$@*G7!p2ul;4|PXg zpfW62&!C5$e({Km}5ZA#6mQaR(~kuTg>ZqVB)|I$Cg$h61>aTx=Ubo$Ee%qc%K;3gjND)bCL9!u4kSw^=1}kF5zcejIhwgY}MkMwc1TSv^HX zmb=tF>maIh)u`udF^nnH5gkQkcoCJ^FpkGD4Q{C?p}w9X)W*fAI~4bxZ*XYn7H>!P zwq8``f1@TmN0PBOI0NfGbMM4f)DiTcD)Buk@Bvf+8RVkdHPreaaBkTc!`T?eR&>6g zq0-*LAP%ESIexjDc@^sH*PsGu#*grj_xuEE{;#N#{)GzYKW}^#RhhySZopC0`Uzy7 zV_(uxMBkz&{_J@fwcuUUhX0~U|IQl^ucXZM7osw+MP;}Sb?Y~x<~QMoxCizAe$2%l z4C>7zG;$dDX~>`dDp+9x44iZ&k9jxhvVcBOYoWT2odRcn=vf=PUpK diff --git a/apps/django_gpg/locale/en/LC_MESSAGES/django.po b/apps/django_gpg/locale/en/LC_MESSAGES/django.po index 1192c23608..22a9e34631 100644 --- a/apps/django_gpg/locale/en/LC_MESSAGES/django.po +++ b/apps/django_gpg/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-28 05:18-0400\n" +"POT-Creation-Date: 2011-12-05 13:40-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,187 +17,237 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: api.py:18 +#: __init__.py:14 +msgid "Verify document signatures" +msgstr "" + +#: __init__.py:15 +msgid "View keys" +msgstr "" + +#: __init__.py:16 +msgid "Delete keys" +msgstr "" + +#: __init__.py:17 __init__.py:32 +msgid "Query keyservers" +msgstr "" + +#: __init__.py:18 +msgid "Import key from keyservers" +msgstr "" + +#: __init__.py:21 +msgid "Signatures" +msgstr "" + +#: __init__.py:29 views.py:65 +msgid "private keys" +msgstr "" + +#: __init__.py:30 views.py:68 +msgid "public keys" +msgstr "" + +#: __init__.py:31 +msgid "delete" +msgstr "" + +#: __init__.py:33 +msgid "Import" +msgstr "" + +#: __init__.py:36 +msgid "signatures" +msgstr "" + +#: api.py:20 msgid "Public" msgstr "" -#: api.py:19 +#: api.py:21 msgid "Secret" msgstr "" -#: api.py:27 api.py:32 +#: api.py:29 api.py:34 msgid "RSA" msgstr "" -#: api.py:28 +#: api.py:30 msgid "DSA" msgstr "" -#: api.py:33 +#: api.py:35 msgid "Elgamal" msgstr "" -#: api.py:89 +#: api.py:49 +msgid "Bad signature." +msgstr "" + +#: api.py:53 +msgid "Document not signed or invalid signature." +msgstr "" + +#: api.py:57 +msgid "Signature error." +msgstr "" + +#: api.py:61 +msgid "Document is signed but no public key is available for verification." +msgstr "" + +#: api.py:65 +msgid "Document is signed, and signature is good." +msgstr "" + +#: api.py:69 +msgid "Document is signed with a valid signature." +msgstr "" + +#: api.py:142 msgid "unknown" msgstr "" +#: forms.py:11 +msgid "Term" +msgstr "" + #: forms.py:12 -msgid "Real name" +msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "" -#: forms.py:13 -msgid "Your real name." -msgstr "" - -#: forms.py:17 -msgid "Comment" -msgstr "" - -#: forms.py:19 -msgid "A comment or a note to help identify this key." -msgstr "" - -#: forms.py:23 -msgid "Email" -msgstr "" - -#: forms.py:28 -msgid "Primary key class" -msgstr "" - -#: forms.py:29 -msgid "The key that will be used to sign uploaded content." -msgstr "" - -#: forms.py:33 -msgid "Primary key size (in bytes)" -msgstr "" - -#: forms.py:41 -msgid "Secondary key class" -msgstr "" - -#: forms.py:42 -msgid "The key that will be used to encrypt uploaded content." -msgstr "" - -#: forms.py:46 -msgid "Secondary key size (in bytes)" -msgstr "" - -#: forms.py:53 -msgid "Expiration" -msgstr "" - -#: forms.py:54 -msgid "" -"You can use 0 for a non expiring key, an ISO date in the form: -" -"- or a date difference from the current date in the forms: " -"d, m, w or y." -msgstr "" - -#: forms.py:59 -msgid "Passphrase" -msgstr "" - -#: forms.py:65 -msgid "Passphrase (verification)" -msgstr "" - -#: forms.py:72 -msgid "Both passphrase fields entries must match." -msgstr "" - -#: forms.py:80 -msgid "Key" -msgstr "" - -#: forms.py:81 -msgid "Key to be published, only the public part of the key will be sent." -msgstr "" - -#: tasks.py:27 +#: views.py:43 #, python-format -msgid "Key pair: %s, created successfully." +msgid "Key: %s, imported successfully." msgstr "" -#: tasks.py:34 +#: views.py:46 #, python-format -msgid "Key creation error; %s" +msgid "Unable to import key id: %s" msgstr "" -#: views.py:27 -msgid "Private key list" +#: views.py:50 +msgid "Import key" msgstr "" -#: views.py:30 -msgid "Public key list" +#: views.py:51 +#, python-format +msgid "Are you sure you wish to import key id: %s?" msgstr "" -#: views.py:54 -msgid "Key pair queued for creation, refresh this page to check results." +#: views.py:76 +msgid "Key ID" msgstr "" -#: views.py:64 -msgid "Create a new key" +#: views.py:80 +msgid "Owner" msgstr "" -#: views.py:65 -msgid "" -"The key creation process can take quite some time to complete, please be " -"patient." -msgstr "" - -#: views.py:75 +#: views.py:100 #, python-format msgid "Key: %s, deleted successfully." msgstr "" -#: views.py:82 +#: views.py:107 msgid "Delete key" msgstr "" -#: views.py:83 +#: views.py:109 #, python-format msgid "" -"Are you sure you wish to delete key:%s? If you try to delete a public key " +"Are you sure you wish to delete key: %s? If you try to delete a public key " "that is part of a public/private pair the private key will be deleted as " "well." msgstr "" -#: views.py:95 -#, python-format -msgid "Key publish request for key: %s, has been sent" +#: views.py:127 +msgid "Query key server" msgstr "" -#: views.py:98 -msgid "Unable to send key publish call" +#: views.py:140 +msgid "results" msgstr "" -#: views.py:105 -msgid "Publish a key to the OpenRelay network" -msgstr "" - -#: templates/key_list.html:10 +#: views.py:145 msgid "ID" msgstr "" -#: templates/key_list.html:11 -msgid "User IDs" +#: views.py:149 +msgid "type" msgstr "" -#: templates/key_list.html:12 -msgid "Fingerprint" +#: views.py:153 +msgid "creation date" msgstr "" -#: templates/key_list.html:13 -msgid "Links" +#: views.py:157 +msgid "disabled" msgstr "" -#: templates/key_list.html:22 -msgid "Delete" +#: views.py:161 +msgid "expiration date" msgstr "" -#: templates/key_list.html:26 -msgid "There are no keys available." +#: views.py:165 +msgid "expired" +msgstr "" + +#: views.py:169 +msgid "length" +msgstr "" + +#: views.py:173 +msgid "revoked" +msgstr "" + +#: views.py:178 +msgid "Identifies" +msgstr "" + +#: views.py:205 +#, python-format +msgid "Signature status: %(widget)s %(text)s" +msgstr "" + +#: views.py:212 +msgid "embedded" +msgstr "" + +#: views.py:214 +msgid "detached" +msgstr "" + +#: views.py:219 +#, python-format +msgid "Signature ID: %s" +msgstr "" + +#: views.py:220 +#, python-format +msgid "Signature type: %s" +msgstr "" + +#: views.py:221 +#, python-format +msgid "Key ID: %s" +msgstr "" + +#: views.py:222 +#, python-format +msgid "Timestamp: %s" +msgstr "" + +#: views.py:223 +#, python-format +msgid "Signee: %s" +msgstr "" + +#: views.py:228 +#, python-format +msgid "signature properties for: %s" +msgstr "" + +#: conf/settings.py:13 +msgid "List of keyservers to be queried for unknown keys." msgstr "" diff --git a/apps/django_gpg/locale/es/LC_MESSAGES/django.mo b/apps/django_gpg/locale/es/LC_MESSAGES/django.mo index 502545e74a86acadccce3447f66799e3239dca5a..578eb2056ebd7f32b40858bf2e750d814c96c4ac 100644 GIT binary patch literal 1619 zcmZvbzmFS56vrnJewiPE5GVqPCP+wkx?8V(B;wfQ2)SQyA|~O^q@Ww`KKllCXO@{+ z`y3(hCqMzTG&GcmF3m}}0?|=WAmtyRAq|x9eQW#fii|w_nVo&_``#PRyMOldHv;2j z%vUjg!@Pj``6)aw{sx!82jHXNg-3*FfS16h!DaAqa1}fcUI#CNAA^s9WAJ(K3y}T4 z0@?p-@HF@x$bR30Pl1Qvv*0fv>;3^g1KtNY-e2Go;J+a2{0Fj51LA)o$1`A)?Xb!5 z&Lau-zX-DK68I$e7RYt2gAz0#$NLgo0KWy<|8TZH0om_Y@HOyvkmLUYo&`_Anf=e< zaRz(^iFDV12HE^v9UhLG?Gt^FfXA53(#(VU7N`L z5XvNu2RiImy=H2Q*jcZfwk|H%H`d-)%D=SMajK)pnL)3N3_*@0+5;>16uQ}Tz7i@F3(;QfHSLJl~ zok5{=&Pl!vcQdHefTAv`B9VKgGJF>nHXy5Wt<0ianAJ8KjhcZ2={_Aa4TZRzo|KQv zX^|0Sg^vT2V)F4~qqEc5IzGd8v(?zJCgAUjx;W@W20DO9uC%!-(|zSUg|&~m+tKQ= z9mngFi?&Q^Gi?TmT?ZhraKt#kZ=cg4w^dnYk|3yhp5c0M;JHM znZ-q`cUZxTn{)YP*<EFGdEDGCqEfcr{+XmwU>1dA%~;) V$vy5PY)qR-We}W35kZ$${14V!ry>9V literal 4289 zcmai$O^h5z6~_y32rT5oAp!GU0qoex%y?}QFyna1+FpkhYkTcogE(-g>8_crY)^N) zs(aUCA#vn}P^1WP0O3dogV5p*d;Q0U_PwAO9j=dYed8TUodn-_Cx49JzDubd_!{^<@L%BL;Pd;Gx)=Nf z_#pTjkXPyt;Jd-s!8!0vP}cnwya)VeJO6L+eLUa8q#U&$l>HBb9|RA8i{Mf4)8JK5 z^mqY04gMPZ1b8opajOo2a$X1gF!*_JKX?iJD42kv=Qlxq>O1^B0Dc!d1pXM5^M41v z7rX_20DJ@dIQS2cpSmAoE`g7Lp94qWXTcwU;=fzqC&9mi?*Sj+@2B7aP|o{3$Sd_H z@H)Q!Gq}L>0Oel+Z-9O9t2jsOc^-TO{5~l9-2~a9eg=wtzXCS<8X})e%O!G1XsY1fZqZ& z_#(&>wFBM)Z-M;Oj|j5Je+9(7Q76$`VkmJHE=gP^Mlw2FvR-r+e+s8Q!zJTT0}86D z$G9Hl(p)mcH^Qgsc!(Q`zYK|k_~dbUV2Iykh#w@TGQ?Kl`E-b{BoCh8!iCXSgdh&F zTWpgdToAvD&%}O-MI4JdDaK=)SGw@p=)9<`t_rr9oqXcQ)v89V$IG zRkG1jXBvyu8E@qrthU>tk~+J#sLn=1T8Oht*~pAdrk2LW@qev!-c+v0)j5}stVg@N zQp;!6myy7w6A{aMZM`r2NqsQH>1fW?+SWGJL!3Qb*3sS$y%jf#n@cl_5lA*{vdODZ zXI1FUB=iy2Y4#!~)JbAP7}i-vaOCjlLu7f&QJ5?zVOq0o18)ti&2_*naXGQUne8T< zc65WEtPZfqcn zoRMVgxNRo5>sB9jxgJa^8{+Cn5m}wNP^s0(s}`b=-D$jG;uOY;85c{NU$&W<5cg`k z@SEx~aldR$rgJm4YRx7^p5Cs^?Q?gk!&`4Fwch$@8d->2NO*K&a$T8CtFP7$!i8c? zh@Jcul76M6PDcYmT!{xxiT<5RjJYzUejSKBJ8ho$Nm=Q-%nFk-huYQu-xk~`zxy6i z+HmECcq?eL1>emevpsbs7nDPZdm5cNC0b&#OkD}q>*cdSeT~{6)}o`HkK~h@LMlks zkS?;dqgk-Lc2TF2eFRm40#C<%{q)2dztDYpj3pajY9P;)Q3gEIzxWpI%vcCUd>Qj~3?6FP~r9 zHSt()e(p>|rtbQr#DL0PtB#hLarsG|Y#1MGb?VCcx$cSGb)p~9=`Q6-krL{@J~43B z?DW32VQw|6y~(=g2sZJ_%lH^h9X|>A<;|(XxqkGNK6Ydd%1LSvS+P_Xy3S*FqDvTW zw3*aoD0$uXDC&skfXe7BGg~nB)n6`!YUc)g9o4=d@uX!0YqZVW*yXIw+O<-^Xjp3w zDoXn7St4gfdAi*Bxil^l1qoN99?&1-cv+6b}W-}BRdNz9^(?=N%C8I+s?}(c0e6Z3YRA?bv`z=)>*Ny`KVT-d|ulv z6Pw#oYrLA?%yeU>?Q-2cZ7y*;H*@u+nhwj6ZsaQZ;Bxa>fH%^@s}=FLT9Q^5b%gkF zS5#l##Rj;F!^Iw%5EEn7j?R%{88>wF7UygcTTJ$&X*|oF8zbVSOWFmz!W)<=B@z}$ z?IZ&vn0Tn^l_*8KyzRW*o|#I$rCubsT*UO$T0vM{Rj2LO#~sQ~`=$<#y*A%+goZFp zX(3uj?TghAhnS8IJ2$gJ{ECXA=#&zBiNF@P*@`3V;+E#9mKPAmUULhCC7EIy^SKAhCJUtqg56xD= ztrU|Ix->kRQ9>#W4zDYhx$8oYhN*7o5pFYtNtF>cg?a!;(zk57`_`eO+Puxy3w){b z9n+>&>OxuMj!sPm@Cr2=%OcT85((gxs(i7E6Y5Y)fep0qil8*>r^?g9qxP+Q(T|UV z*vn1ci9sD&+Cl8*lGG;laYO4BZb>7zLE5-8wDGu}79Kmeidt7@Q#1gMDkzwR`X9jL+hza& diff --git a/apps/django_gpg/locale/es/LC_MESSAGES/django.po b/apps/django_gpg/locale/es/LC_MESSAGES/django.po index dcc0e1eeab..9d384e4241 100644 --- a/apps/django_gpg/locale/es/LC_MESSAGES/django.po +++ b/apps/django_gpg/locale/es/LC_MESSAGES/django.po @@ -6,212 +6,251 @@ # Roberto Rosario , 2011. msgid "" msgstr "" -"Project-Id-Version: OpenRelay\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-28 05:18-0400\n" -"PO-Revision-Date: 2011-11-28 09:25+0000\n" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-12-05 13:40-0400\n" +"PO-Revision-Date: 2011-12-05 17:52+0000\n" "Last-Translator: rosarior \n" -"Language-Team: LANGUAGE \n" +"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mayan-edms/team/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: api.py:18 +#: __init__.py:14 +msgid "Verify document signatures" +msgstr "Verificar las firmas de documentos" + +#: __init__.py:15 +msgid "View keys" +msgstr "Ver llaves" + +#: __init__.py:16 +msgid "Delete keys" +msgstr "Borrar llaves" + +#: __init__.py:17 __init__.py:32 +msgid "Query keyservers" +msgstr "Hacer búsquedas en servidores de llaves" + +#: __init__.py:18 +msgid "Import key from keyservers" +msgstr "Importar llaves de los servidores de llaves" + +#: __init__.py:21 +msgid "Signatures" +msgstr "Firmas" + +#: __init__.py:29 views.py:65 +msgid "private keys" +msgstr "llaves privadas" + +#: __init__.py:30 views.py:68 +msgid "public keys" +msgstr "llaves públicas" + +#: __init__.py:31 +msgid "delete" +msgstr "borrar" + +#: __init__.py:33 +msgid "Import" +msgstr "Importar" + +#: __init__.py:36 +msgid "signatures" +msgstr "firmas" + +#: api.py:20 msgid "Public" -msgstr "Pública" +msgstr "" -#: api.py:19 +#: api.py:21 msgid "Secret" -msgstr "Secreta" +msgstr "" -#: api.py:27 api.py:32 +#: api.py:29 api.py:34 msgid "RSA" msgstr "RSA" -#: api.py:28 +#: api.py:30 msgid "DSA" msgstr "DSA" -#: api.py:33 +#: api.py:35 msgid "Elgamal" -msgstr "Elgamal" +msgstr "" -#: api.py:89 +#: api.py:49 +msgid "Bad signature." +msgstr "" + +#: api.py:53 +msgid "Document not signed or invalid signature." +msgstr "" + +#: api.py:57 +msgid "Signature error." +msgstr "" + +#: api.py:61 +msgid "Document is signed but no public key is available for verification." +msgstr "" + +#: api.py:65 +msgid "Document is signed, and signature is good." +msgstr "" + +#: api.py:69 +msgid "Document is signed with a valid signature." +msgstr "" + +#: api.py:142 msgid "unknown" -msgstr "desconocido" +msgstr "" + +#: forms.py:11 +msgid "Term" +msgstr "Término" #: forms.py:12 -msgid "Real name" -msgstr "Nombre real" - -#: forms.py:13 -msgid "Your real name." -msgstr "Su nombre real." - -#: forms.py:17 -msgid "Comment" -msgstr "Comentario" - -#: forms.py:19 -msgid "A comment or a note to help identify this key." -msgstr "Un comentario o una nota para ayudar a identificar esta llave." - -#: forms.py:23 -msgid "Email" -msgstr "E-mail" - -#: forms.py:28 -msgid "Primary key class" -msgstr "Clase de llave primaria" - -#: forms.py:29 -msgid "The key that will be used to sign uploaded content." -msgstr "La llave que se utilizara para firmar el contenido subido." - -#: forms.py:33 -msgid "Primary key size (in bytes)" -msgstr "Tamaño de la llave principal (en bytes)" - -#: forms.py:41 -msgid "Secondary key class" -msgstr "Clase de llave secundaria" - -#: forms.py:42 -msgid "The key that will be used to encrypt uploaded content." -msgstr "La llave que se utilizara para cifrar el contenido subido." - -#: forms.py:46 -msgid "Secondary key size (in bytes)" -msgstr "Tamaño de la llave secundaria (en bytes)" - -#: forms.py:53 -msgid "Expiration" -msgstr "Expiración" - -#: forms.py:54 -msgid "" -"You can use 0 for a non expiring key, an ISO date in the form: " -"-- or a date difference from the current date in the " -"forms: d, m, w or y." +msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "" -"Usted puede utilizar 0 para llaves que no expiran, una fecha ISO en la " -"forma: -- o una diferencia de fecha con respecto a la fecha " -"actual en las formas: d, m, w o y." -#: forms.py:59 -msgid "Passphrase" -msgstr "Frase de contraseña" - -#: forms.py:65 -msgid "Passphrase (verification)" -msgstr "Contraseña (verificación)" - -#: forms.py:72 -msgid "Both passphrase fields entries must match." -msgstr "Las entradas de los campos de contraseña deben coincidir." - -#: forms.py:80 -msgid "Key" -msgstr "Llave" - -#: forms.py:81 -msgid "Key to be published, only the public part of the key will be sent." -msgstr "" -"La llave para ser publicada, sólo la parte pública de la llave será enviada." - -#: tasks.py:27 +#: views.py:43 #, python-format -msgid "Key pair: %s, created successfully." -msgstr "Par de llaves: %s, creado correctamente." +msgid "Key: %s, imported successfully." +msgstr "" -#: tasks.py:34 +#: views.py:46 #, python-format -msgid "Key creation error; %s" -msgstr "Error de creación de llave; %s" - -#: views.py:27 -msgid "Private key list" -msgstr "Lista de llaves privadas" - -#: views.py:30 -msgid "Public key list" -msgstr "Lista de llaves públicas" - -#: views.py:54 -msgid "Key pair queued for creation, refresh this page to check results." +msgid "Unable to import key id: %s" msgstr "" -"Par de llaves en lista de creación, vuelva a cargar esta página " -"periodicamente para comprobar los resultados." -#: views.py:64 -msgid "Create a new key" -msgstr "Crear una llave nueva" - -#: views.py:65 -msgid "" -"The key creation process can take quite some time to complete, please be " -"patient." +#: views.py:50 +msgid "Import key" msgstr "" -"El proceso de creación de la llaves puede tomar bastante tiempo en " -"completar, por favor, sea paciente." -#: views.py:75 +#: views.py:51 +#, python-format +msgid "Are you sure you wish to import key id: %s?" +msgstr "¿Esta seguro que desea importar la llave: %s?" + +#: views.py:76 +msgid "Key ID" +msgstr "" + +#: views.py:80 +msgid "Owner" +msgstr "Dueño" + +#: views.py:100 #, python-format msgid "Key: %s, deleted successfully." -msgstr "Llave: %s, eliminada exitosamente." +msgstr "Llave: %s, borrada exitosamente." -#: views.py:82 +#: views.py:107 msgid "Delete key" -msgstr "Eliminar la llave" +msgstr "Borrar llave" -#: views.py:83 +#: views.py:109 #, python-format msgid "" -"Are you sure you wish to delete key:%s? If you try to delete a public key " +"Are you sure you wish to delete key: %s? If you try to delete a public key " "that is part of a public/private pair the private key will be deleted as " "well." msgstr "" -"¿Está seguro que desea eliminar la llave: %s? Si intenta eliminar una llave" -" pública que forma parte de una pareja pública / privada de la llave privada" -" se eliminarán también." -#: views.py:95 -#, python-format -msgid "Key publish request for key: %s, has been sent" -msgstr "Solicitud publicación de llave: %s, ha sido enviada" +#: views.py:127 +msgid "Query key server" +msgstr "" -#: views.py:98 -msgid "Unable to send key publish call" -msgstr "No se puede enviar llave publica" +#: views.py:140 +msgid "results" +msgstr "resultados" -#: views.py:105 -msgid "Publish a key to the OpenRelay network" -msgstr "Publicar una llave a la red OpenRelay" - -#: templates/key_list.html:10 +#: views.py:145 msgid "ID" -msgstr "Identificador" +msgstr "" -#: templates/key_list.html:11 -msgid "User IDs" -msgstr "ID de usuarios" +#: views.py:149 +msgid "type" +msgstr "tipo" -#: templates/key_list.html:12 -msgid "Fingerprint" -msgstr "Huella digital" +#: views.py:153 +msgid "creation date" +msgstr "fecha de creación" -#: templates/key_list.html:13 -msgid "Links" -msgstr "Enlaces" +#: views.py:157 +msgid "disabled" +msgstr "" -#: templates/key_list.html:22 -msgid "Delete" -msgstr "Eliminar" +#: views.py:161 +msgid "expiration date" +msgstr "" -#: templates/key_list.html:26 -msgid "There are no keys available." -msgstr "No hay llaves disponibles." +#: views.py:165 +msgid "expired" +msgstr "" + +#: views.py:169 +msgid "length" +msgstr "" + +#: views.py:173 +msgid "revoked" +msgstr "" + +#: views.py:178 +msgid "Identifies" +msgstr "" + +#: views.py:205 +#, python-format +msgid "Signature status: %(widget)s %(text)s" +msgstr "" + +#: views.py:212 +msgid "embedded" +msgstr "" + +#: views.py:214 +msgid "detached" +msgstr "" + +#: views.py:219 +#, python-format +msgid "Signature ID: %s" +msgstr "" + +#: views.py:220 +#, python-format +msgid "Signature type: %s" +msgstr "" + +#: views.py:221 +#, python-format +msgid "Key ID: %s" +msgstr "" + +#: views.py:222 +#, python-format +msgid "Timestamp: %s" +msgstr "" + +#: views.py:223 +#, python-format +msgid "Signee: %s" +msgstr "" + +#: views.py:228 +#, python-format +msgid "signature properties for: %s" +msgstr "" + +#: conf/settings.py:13 +msgid "List of keyservers to be queried for unknown keys." +msgstr "" diff --git a/apps/django_gpg/locale/pt/LC_MESSAGES/django.mo b/apps/django_gpg/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7fae94e56b671cf8420121b6a06c89cdcdbb91eb GIT binary patch literal 524 zcmZut%T6OP5Cp+#j+{9dX%8Ui@k|IJ7=qA-AR#f@h@IWLlQfRej6Je@2=E{KV|)PL zLJ#3_*^)|rRabZUb!+qA8e^Tg&HTaKU>-0#445zcc*1L^`NAaldz=wm&*3kIXuVUS z&`;Wl@n!Klxy8l@f+89_ho7y9PdiF zqkx*&7A`fR61^<#L%)=Wp-u zF?C3?S$$BH%_\n" +"Language-Team: Portuguese (http://www.transifex.net/projects/p/mayan-edms/team/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: __init__.py:14 +msgid "Verify document signatures" +msgstr "" + +#: __init__.py:15 +msgid "View keys" +msgstr "" + +#: __init__.py:16 +msgid "Delete keys" +msgstr "" + +#: __init__.py:17 __init__.py:32 +msgid "Query keyservers" +msgstr "" + +#: __init__.py:18 +msgid "Import key from keyservers" +msgstr "" + +#: __init__.py:21 +msgid "Signatures" +msgstr "" + +#: __init__.py:29 views.py:65 +msgid "private keys" +msgstr "" + +#: __init__.py:30 views.py:68 +msgid "public keys" +msgstr "" + +#: __init__.py:31 +msgid "delete" +msgstr "" + +#: __init__.py:33 +msgid "Import" +msgstr "" + +#: __init__.py:36 +msgid "signatures" +msgstr "" + +#: api.py:20 +msgid "Public" +msgstr "" + +#: api.py:21 +msgid "Secret" +msgstr "" + +#: api.py:29 api.py:34 +msgid "RSA" +msgstr "" + +#: api.py:30 +msgid "DSA" +msgstr "" + +#: api.py:35 +msgid "Elgamal" +msgstr "" + +#: api.py:49 +msgid "Bad signature." +msgstr "" + +#: api.py:53 +msgid "Document not signed or invalid signature." +msgstr "" + +#: api.py:57 +msgid "Signature error." +msgstr "" + +#: api.py:61 +msgid "Document is signed but no public key is available for verification." +msgstr "" + +#: api.py:65 +msgid "Document is signed, and signature is good." +msgstr "" + +#: api.py:69 +msgid "Document is signed with a valid signature." +msgstr "" + +#: api.py:142 +msgid "unknown" +msgstr "" + +#: forms.py:11 +msgid "Term" +msgstr "" + +#: forms.py:12 +msgid "Name, e-mail, key ID or key fingerprint to look for." +msgstr "" + +#: views.py:43 +#, python-format +msgid "Key: %s, imported successfully." +msgstr "" + +#: views.py:46 +#, python-format +msgid "Unable to import key id: %s" +msgstr "" + +#: views.py:50 +msgid "Import key" +msgstr "" + +#: views.py:51 +#, python-format +msgid "Are you sure you wish to import key id: %s?" +msgstr "" + +#: views.py:76 +msgid "Key ID" +msgstr "" + +#: views.py:80 +msgid "Owner" +msgstr "" + +#: views.py:100 +#, python-format +msgid "Key: %s, deleted successfully." +msgstr "" + +#: views.py:107 +msgid "Delete key" +msgstr "" + +#: views.py:109 +#, python-format +msgid "" +"Are you sure you wish to delete key: %s? If you try to delete a public key " +"that is part of a public/private pair the private key will be deleted as " +"well." +msgstr "" + +#: views.py:127 +msgid "Query key server" +msgstr "" + +#: views.py:140 +msgid "results" +msgstr "" + +#: views.py:145 +msgid "ID" +msgstr "" + +#: views.py:149 +msgid "type" +msgstr "" + +#: views.py:153 +msgid "creation date" +msgstr "" + +#: views.py:157 +msgid "disabled" +msgstr "" + +#: views.py:161 +msgid "expiration date" +msgstr "" + +#: views.py:165 +msgid "expired" +msgstr "" + +#: views.py:169 +msgid "length" +msgstr "" + +#: views.py:173 +msgid "revoked" +msgstr "" + +#: views.py:178 +msgid "Identifies" +msgstr "" + +#: views.py:205 +#, python-format +msgid "Signature status: %(widget)s %(text)s" +msgstr "" + +#: views.py:212 +msgid "embedded" +msgstr "" + +#: views.py:214 +msgid "detached" +msgstr "" + +#: views.py:219 +#, python-format +msgid "Signature ID: %s" +msgstr "" + +#: views.py:220 +#, python-format +msgid "Signature type: %s" +msgstr "" + +#: views.py:221 +#, python-format +msgid "Key ID: %s" +msgstr "" + +#: views.py:222 +#, python-format +msgid "Timestamp: %s" +msgstr "" + +#: views.py:223 +#, python-format +msgid "Signee: %s" +msgstr "" + +#: views.py:228 +#, python-format +msgid "signature properties for: %s" +msgstr "" + +#: conf/settings.py:13 +msgid "List of keyservers to be queried for unknown keys." +msgstr "" + + diff --git a/apps/django_gpg/locale/ru/LC_MESSAGES/django.mo b/apps/django_gpg/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2541ca14bf8115e61ff6ea7c4a17ae73c7952fb8 GIT binary patch literal 595 zcmZutO-~y!5KTW$d+e=J4^yc{MBufZq-tuiv;u;J#EK~0_UOnCpg*ZW3i$9amGcYkmh+1ZNy zMjwo`3UYm|Elf}HpUE5>=OfEQX;$p0Edwi@f_03I;=D9*-7eCltGRbUd*eK>J1sXM zv>1}vMZu0e>PT(biH@jXAf#k+z{D4jLp2gijD#Q}o8w>8jemjnRgH#wf+9KBA+o}2 z8!8>0SMWF&Cf+U3N0&a_q@}Yry26_uWvxxsEqO?CTeiAHR-mpG%-awQIo*Bmv)OFY z*flqoc$Hd=yxIOv;LX+;!&M!4BsKRf?N8$3QuvQd}bE5t+!xV_yk)#>)linR^cdWet literal 0 HcmV?d00001 diff --git a/apps/django_gpg/locale/ru/LC_MESSAGES/django.po b/apps/django_gpg/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..54d387774b --- /dev/null +++ b/apps/django_gpg/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,255 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Mayan EDMS\n" +"Report-Msgid-Bugs-To: http://github.com/rosarior/mayan/issues\n" +"POT-Creation-Date: 2011-12-05 13:40-0400\n" +"PO-Revision-Date: 2011-12-05 17:43+0000\n" +"Last-Translator: rosarior \n" +"Language-Team: Russian (http://www.transifex.net/projects/p/mayan-edms/team/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#: __init__.py:14 +msgid "Verify document signatures" +msgstr "" + +#: __init__.py:15 +msgid "View keys" +msgstr "" + +#: __init__.py:16 +msgid "Delete keys" +msgstr "" + +#: __init__.py:17 __init__.py:32 +msgid "Query keyservers" +msgstr "" + +#: __init__.py:18 +msgid "Import key from keyservers" +msgstr "" + +#: __init__.py:21 +msgid "Signatures" +msgstr "" + +#: __init__.py:29 views.py:65 +msgid "private keys" +msgstr "" + +#: __init__.py:30 views.py:68 +msgid "public keys" +msgstr "" + +#: __init__.py:31 +msgid "delete" +msgstr "" + +#: __init__.py:33 +msgid "Import" +msgstr "" + +#: __init__.py:36 +msgid "signatures" +msgstr "" + +#: api.py:20 +msgid "Public" +msgstr "" + +#: api.py:21 +msgid "Secret" +msgstr "" + +#: api.py:29 api.py:34 +msgid "RSA" +msgstr "" + +#: api.py:30 +msgid "DSA" +msgstr "" + +#: api.py:35 +msgid "Elgamal" +msgstr "" + +#: api.py:49 +msgid "Bad signature." +msgstr "" + +#: api.py:53 +msgid "Document not signed or invalid signature." +msgstr "" + +#: api.py:57 +msgid "Signature error." +msgstr "" + +#: api.py:61 +msgid "Document is signed but no public key is available for verification." +msgstr "" + +#: api.py:65 +msgid "Document is signed, and signature is good." +msgstr "" + +#: api.py:69 +msgid "Document is signed with a valid signature." +msgstr "" + +#: api.py:142 +msgid "unknown" +msgstr "" + +#: forms.py:11 +msgid "Term" +msgstr "" + +#: forms.py:12 +msgid "Name, e-mail, key ID or key fingerprint to look for." +msgstr "" + +#: views.py:43 +#, python-format +msgid "Key: %s, imported successfully." +msgstr "" + +#: views.py:46 +#, python-format +msgid "Unable to import key id: %s" +msgstr "" + +#: views.py:50 +msgid "Import key" +msgstr "" + +#: views.py:51 +#, python-format +msgid "Are you sure you wish to import key id: %s?" +msgstr "" + +#: views.py:76 +msgid "Key ID" +msgstr "" + +#: views.py:80 +msgid "Owner" +msgstr "" + +#: views.py:100 +#, python-format +msgid "Key: %s, deleted successfully." +msgstr "" + +#: views.py:107 +msgid "Delete key" +msgstr "" + +#: views.py:109 +#, python-format +msgid "" +"Are you sure you wish to delete key: %s? If you try to delete a public key " +"that is part of a public/private pair the private key will be deleted as " +"well." +msgstr "" + +#: views.py:127 +msgid "Query key server" +msgstr "" + +#: views.py:140 +msgid "results" +msgstr "" + +#: views.py:145 +msgid "ID" +msgstr "" + +#: views.py:149 +msgid "type" +msgstr "" + +#: views.py:153 +msgid "creation date" +msgstr "" + +#: views.py:157 +msgid "disabled" +msgstr "" + +#: views.py:161 +msgid "expiration date" +msgstr "" + +#: views.py:165 +msgid "expired" +msgstr "" + +#: views.py:169 +msgid "length" +msgstr "" + +#: views.py:173 +msgid "revoked" +msgstr "" + +#: views.py:178 +msgid "Identifies" +msgstr "" + +#: views.py:205 +#, python-format +msgid "Signature status: %(widget)s %(text)s" +msgstr "" + +#: views.py:212 +msgid "embedded" +msgstr "" + +#: views.py:214 +msgid "detached" +msgstr "" + +#: views.py:219 +#, python-format +msgid "Signature ID: %s" +msgstr "" + +#: views.py:220 +#, python-format +msgid "Signature type: %s" +msgstr "" + +#: views.py:221 +#, python-format +msgid "Key ID: %s" +msgstr "" + +#: views.py:222 +#, python-format +msgid "Timestamp: %s" +msgstr "" + +#: views.py:223 +#, python-format +msgid "Signee: %s" +msgstr "" + +#: views.py:228 +#, python-format +msgid "signature properties for: %s" +msgstr "" + +#: conf/settings.py:13 +msgid "List of keyservers to be queried for unknown keys." +msgstr "" + + diff --git a/apps/document_comments/locale/es/LC_MESSAGES/django.mo b/apps/document_comments/locale/es/LC_MESSAGES/django.mo index 47f03d30c89fd1c18a541c97123867c0350e5b12..d2d8efb3e2a839db1e0f6f49ff3103c4ff761f9a 100644 GIT binary patch delta 234 zcmZ3-*UmR#PyH4~28J|d1_osY1_o(X1_l!#Z4ac)fOH9vRtM6nfwUr!z6_+ff%I1( zEdit%*%%l^fV32l76a1yK-vmOy8&qxAl(S0`GNE@AT0!>w*hG`Abk=@gUq?Y#vl(? z@Bk2kmdl=-+(kbkp9oMIf~JdNrfxGKSbBLC^fMpGe1w)C9x#cO2Np$&`=kM mjEocv4XupKCO>07#p9EhmtLBf4wOzUp1htVdb2pII1>PDdnLgD delta 253 zcmZqYTgNwHPyKC128J|d1_osY1_mcq1_l!#od%@Mfb?u2tq!Cw0ck}b{R>EQ18EsH z1_lWrtpTJ(fV3l!76Z~@K-vmO=K^UJAiV-e^8@L#Kw1b$-v!cKK>7oa2AT7ljX@r) zfSsLz0cbXZIFRN5(y~Arh#1t^H%Bo#GO1^jloVL$>!)XyWRxc9CFker7v&cx7G>ra z>E|X^Cg$m978jSM7EhkdEXi$PscU4ZU}#}wVlsI@^QpT_Kzb^W76sDFfHXId-UFmT=A2+-kOwQc z3KU=g3OobS>_GZ8kmdl=pV>A?F*-7-a0U2>=sFjrCYEI8=jpm6mZVxK7#SEE>H?9G lk%FP2m66%xXUsc!d=m50OB2(9(gh`x=dna@W@D9Q0sznqCHMdU delta 252 zcmeyvyO?jnp88Xa3=C<^3=C=v3=D>>3=AefIs!Bq?Lj6Yaq=7r1{wx z7$ktS43HK9(xyOK7)W~oX^{RnAguwUCj)5#AiW1jivsDhK$;s!KL*kubKbKt$b%L9 z0Sd4H1$fyR7=VaD2uN@MX({&2QH+jE>KP>^1y=g{>6s-NrAd0p`MLT<`NfGvnfXQf zxrvpDdHR{f#igmmlV>waavNCc8d)kBT3DHwOy1ADb8;(76t_=eUV3R_da9K|!REUx G@=O5Ic`Z8t diff --git a/apps/document_comments/locale/ru/LC_MESSAGES/django.mo b/apps/document_comments/locale/ru/LC_MESSAGES/django.mo index 718e22ed33a3325624031b4793f47e5524d516b3..b31ea9bdc2e3cf28f5c766ab87bfff9de0dd7c48 100644 GIT binary patch delta 233 zcmdlY*ef_;PyH=M28J|d1_nn4AZBG?2m{j1Q2G{-)&%km*%%l!fOIsF76Z~PK-vIE z&j!+}K>7@jHU!e2fHX+I3OfUX3y`h`(jff@fV4W0eg&jK`h_?kv?d3G9D_7azyT-# zL<})Nf)7Zi0%-{#U9vfn(TPcgE5JWQ*SRP)u_QA;PuC@}B-Kj6$iUE07l@3E6bucm gjLarKV_wGNlbDxYnwSohE-Ibe%@V!&Gs{6{02W>*pa1{> delta 252 zcmeAb+#)z(Pdy_O149}!1A`+2149NY149^)UInEY*%%l!f&2&{tpTK)fV3EpUJaxT zfb=0CtqP<+18GAbEy)hi?+v6~fc!;38l?X@kX8rMf*cV2mQXr?gF%i#8Yqzt6aXTI zW+1@_q_?>q$;*?6R$ABXFS9| z+{c5Ww1)S%gc;I8UP;=;3X;+>+Vd9H@fzpx8x8tpb(9e7l%*}a!)^RTJHW!Yw2nt; z3saoN2b{qHy7+-p_=Sr&>N5;3V-2I>{sg(A7LMVC&$B87T@n*`gZ3r2IEy{BjbG9J zOoq1cFHT~fB3n1d;^4|q(|;NHanh_%Er#K$F+mu{CQ2Q5P}*ypCg+W$83)aF`sUXA Ikyp$A1F@4aHUIzs delta 458 zcmXZYOG^S#6u|LgV5#{CGOQLc1W^gosHo`Fs#;}G^dKr)Ofl#z)NsZ{i*VCpue)|F z+XWUx(FdqS5G^8t`UZi0g8oA;?){y6?>UEi@163kTsxk|r$^+}Cz2BpBOo$@7nsKz z%;FDj;Y7d4CLUuN-*5_jK?WwVfI4y{XXu_caTgzO3}YdY6lO!xkRpM_#w@<#9EQUG z7g)j!>l1Vf?=glSIE)?iV;~|jgi)NtIC5uM!)e^>uFsJYX<{E>-gUeE)YI`6N{(}=Yg*BAO7;DjgKAl;Rc)hY zRcl(=I5H}lW!rVr4y>+hs0%gIaI9)YT{Ik1S5k>&QcdL5R9;Eu^mL~6<$G@3`gelM RMx|Icilmr!I~<7j{sI1!MQ{KB diff --git a/apps/document_indexing/locale/pt/LC_MESSAGES/django.mo b/apps/document_indexing/locale/pt/LC_MESSAGES/django.mo index 5c371fea1752438828c2744ad45322bb6ae2aeb3..3039293cfc66ef1337f9ce01e5dac90d65c32ab1 100644 GIT binary patch delta 398 zcmXZXze~eF7{>9Z!D!O7R-__Pgg6utshSA>h=@A46&)26qy;Gs6^9B=b`l&5`4h4T zE<#;8w7aw5-QcmAX{8zI){)jF&1a=)tl>7^;1c%n z6u(;okqgfh=7UM)0n1D2DQDt5h%QSJnDi99%Y& Mo_pLWWjBZa06t$Zi2wiq delta 457 zcmXZXze_?<6u|LgW&X;nD54~I4H6Eor&6SbWYm_RL=i|3w-9}hKGEmUT z!W&%1Aui$wSMV2|hr%I-!w5P9Z6h;_!Zp17-`^rj?g$=y44sI~k@Pv3!67<7c|)h+ zC(h$HE@6lwH%8H^Hweys7ANo+o%>?%dF;!5P_gZL+AzwdU1^=KUszS6VKr65v>HZL zU8$O3Hk++d(_hFR>3fZmvQ4X|?<>2M))KLJT#u#nL`sV%(;J)JckiHk?<)p!s#b2P MG9~rik1sR%2d@Z5OaK4? diff --git a/apps/document_indexing/locale/ru/LC_MESSAGES/django.mo b/apps/document_indexing/locale/ru/LC_MESSAGES/django.mo index bd8617e870933602702f0ca426aeb9eecc0f5278..59a1601a1a751b53a0d61bda250f98b07c96d8d4 100644 GIT binary patch delta 398 zcmXZXu}i~H5XbRfg+i0mYGVEax&W|x_yv3;R9*g)IzZ<#kLW7;hp1)-HnaW$PTlBnw>js`5CXHr#v9edK SRjRu|VZRo(jB>{|XUu;_#x$P* delta 458 zcmXZXze_?<6bJCHhNR|?%C;JeAcS~bpIE422(?*R5C#2$Ylyx;pS&M~ML0w?hy4u& zPJ&ZgLyJ%?4Qm9+2+F?vj$!8gOaO`XOM>hyh4g}SE(?{VrZlvg#Qj%9>TNi;JgvRT#P{ z4NW&hRW@WzXr^hGO#gOaS6MSk($e&rvM#MsCYp$=suE8tiF8y=Ws*y+zW1SZ=Q{{& R$XeN!WtJFr_s5s@{{zBWNZ9}Y diff --git a/apps/documents/locale/pt/LC_MESSAGES/django.mo b/apps/documents/locale/pt/LC_MESSAGES/django.mo index cdde47b0a99fd330746127abd0729e18c73cf479..4e663ecd4d79105fbf5d9d05d11733a347e85048 100644 GIT binary patch delta 4259 zcmZA23shBA9>?)N6FyLRga{}a7e(X|1{W1X9j^&!2B?HqKp2@KQEEjdh8@e)#!*M- zYNeT3nnq@*lw}Xg%*kO<``j;A zhizLO=6nTOyz^4*!}&C%FV=|aNDET8 z9Y*?KC$I;eLOp*5^?U>;J+U9E-ZUIR`!7E@o8+vPcR2-;>`lM8VBNAsD{2n zReVu`Sv1C>?x&(gKEZPlDkHm*vD(LY37*k8?OSXjDaSNa1;a1}uf{BF#!P$yC*j+u zjwSUqE5K45g3BaRw;Pp__xmw8JcX(^A&D$tA@Yb7p+j9(OF<*J6ZPT>)b&lM9=Br@ zzKLV;1d>&YXThi=S*Q-wpw_~DsHuDplkpt-u>Sxzb7N5TO&&o0)nF|bl!04O6+5V& zu1BqfEvV;qB5m7?I2%u(o*P3xr{M$~iH~3fo}96e_ioQH$w*)LaL>^X;hT+pr5BK$eTWidW+Ms1BqskKx#aQ?MD8nPaF9opC6r zfk{k|QaugzLIV!Nxu_9rLruv(WIF91=*KTm8S2Y$NQMnWbtr(!XbGyLm8j=xQ5~&E z)$1&#pzW{Q)?wYH)yO7BcNN64kNks0N!* zQ@9k_0FFIMK`%a!>?k{evDk^UVc()&>`kxKv4Q;4h$f<*ukdU@b!Z7{q-#+F+KAe& z&tN#dhM{(Fy!L-51vTJHb6>m+HNpba3jyzXF{t5Rq&PPSyal;qblk-#2rx|R0El)%=uC82T;$Ipz4`| z>R2^u@iuzbTTu0`Ku4eXAO$U|t*DW`gzOyq0M*l)G0=siwh1in@OY zwQAo*EzWOHDGa;J9bqKqa~_WqupHH~2XHwa$2^>#qeW-75>xRlhXUKc&Y%`kPkt%1 zNRlxFb8!q-<5=8?f5Z;dlqHfLl4N=}hoGL%#|-WNQVO?oVF7B9e2sVESsaJ+$=8jz4^>gZDEEFQ>i!O7huSGr#nGeP zU6P8EInP7JXiHHUc@fp|e_|inx6df3;-695C6Y8KRq@z>xmb-4V>teZv+*3N;hD@| z4X#9u{7a0-Ur^7-vT&%{5-SVA`z})qxL@bz)zj=D2UbtvD5RUVy4- zJSJiV#$Y2VgDt2LE=Sd~1vQ{|P~VIHqIS>O0Qpyg%A-;ffvO-0m65@ylolZ04lBb9 zT!8u&+lm^%e(aAOsCs_DRP27a+i*7OxrwL@HKOi2mpkr=wsS!hwxN1{#Cz~V?8^Cf z-u<6Y4Meetb=`+*cnFqb5$gRQDpR{W_oGIB2(<|Rj;g1_p)i!fe{cZyEAmE+N@*D? zBekd(=b$pS5H*r}FdR3ap5KJ}E!c%>U@z*q!>Ej&L_PO4CZY2S13fB%UF3TtWPe__I#D~%)#6!e`gfhZ!k?kS|66=YE;MB;3jO!@{i8ly+)>;W2U0g!B zn@ahn;JU~pr_H4nf}=dN#-6719Pv1DfY5Q2xF=NN1BSN~DFok0D!5*>1dpSU_wd_G=OcQAj5i6BmyA zy~0w@r?83OqaWIsN#6B3PqCHQMrB{B$y&~Yy@ zg;+}z5%s~nG072oDe1VYy(4C2bo(4%are|7QzlntkH2kJT~ounx!FZ^O|uGp{+!(0 tZ2tUyUv6%pe?;)7^aH(0>*m(qQCH9H`Axw+8P)BHnNP;HA03_C<5x4(yQu&G delta 4320 zcmYk;3s6)_ zMw(^gVob+Q%)rxFgWqC>J|AV4jBjF&na{3J8N`Li2(tu?L$ymV1k2s_5*$st4jGHJ zqXx1K>D&H@jK!|w5WI=H{~rG6{zx2(NvM9aF`MUGJ{5J;hFRE$Yw=r5!_{NV3UM#S z;bqi=0>(NWkHRq8@u<%;Q8RzUbt@_(r;xeY4IGd6jHAu-EsjbkW}`YN##pS!N!Wo& zcpT^ARn)*HMVd{+CHMgDkSyIPR7O6#*DM8ZqWXOx%4{&sMQ*Wj^wF0!QPB)GqrSKk zb^Q=(#QiuNFJb{+N3v@Z*)SSN9%=xqQG4M9)KdNxV{llsnFlAMGFOV~Z)r67*8`il zpbTt4b^JVPr2A2O;Rx!!caUe>04~StsQXIE=OTOrbMSRsh@Yb#l*=d<;~doIFXIHf z6ytL?$!#vEqX>_)*5fgd_EJ=eYf+nOFKRO#blWFU-#ddrcplj{_9raCf1n1E&3dZ8 z4qSlGp)z#EM@1tW!~*F7OHnCbiTc8N%*3ZrGdY1;nzP8V+EvWJ|DZCJ!n8<=O+^i8 z5h}BlsDU=1?rT8})VGd`I^K>t7CopXcn$Bz_fVVVQw+x2sACiq@7zBEwRa*>9Ven5 znBiK8Yy&Gp4Qv(ac^$}7`fL{!PJ|speerk53A0P6HU9>ArUfz@eK7$wu&MmfjH*!g z*SoGq4QK~yK(C@EbOg2e`Y{kM;253%OH^iZ;TzNgvL-rTEJkId6!nEg?)3`PgKLm& zV~waK>qI@c2ep)MqQ2jU{yl;k(0SBAE@B|hx4*kLe2qc0Z=yQ5?K+sVrIbgYI`W`q zl!PHzfXdu#)b|&m?yE%gQ->PZ8r0@}%Dvu&K6Si@ieC2zQJd;GYG!{xPLTZ*m4UDX zr{f4zrpBX|E*V2`7HVLnsQZ_>*XwZ*Z7&W4m_3Q#r#&-?{LiPdC&~G7_!28=&z{7( z;y%p9fXU7-pN^Tdz39dLsP9K4yT=p@Y41g4?ZX?& z1b&8k(cHpOIF1*--XD{3Brd=(ticGK{}w7r@fK{sw@}AtBKc{@G%UiySc_kyI(j(I z`FuI*^J~b7wfO1IKuT~p?Zd8AdMPb1t#MQeG$bpY80_7!RX zv4zg@OF|u+DpbcS-1a(DKbvtJzKA+aM^Tx4A2q=NWdGSU)PzPCk$H z`cX6d8>+*9p+-KK!>Sp_VlZZ*KA(;n=tB2;E$YFmunf1LzJC$b?+w>msEG&pik;mU zis~pDQ!o{y@lo{87?sj4R7PGw?c&3zjP;=g_yGpupHcT;M*Sw-K=uD`)O{hdoQ(RS zsOZKNjKTucT2{K(SE3%!j(UYY@f7tcf|KPxN@=)(xKo~^lIb?sWB%i)W$Goi5f%t&X>+KMs66D~|-9yw@b#Dlb^1b0+J?@(1dIq%`%iZ=%c$&~5Sx9`3_>kx% zRuHccDvOEV5PBV)Bvf7|l<>90ULu|N2|+3IugL4v-X``D?-DBKh>iZ5*{`vch$V7} zd4!6V+e`eM*i6)PHw>TPJ4Wq&;yZ+120AX!5(kO9OE(Q2A+7x{i6;q_WTJxjEm2S0 zPfQ`S8Q&we5beaB(oCg^c$MI^=lfrMEi~p5eT2#kB7$gC{rTdrsH{ z-yUiztBL1{0-~1qDe+@sDxodfPpJHWC?PhfL7C;?KNpX?bzTVnF9)ctaa%|53F3#u zZsHv+;sh!Q#CqaR>2NF0xc&;;hlRhmsb4qt#!pZK9i4{ZVRX5eQRo8RNn%+x^heihX_tZBuRrhY39y{cJ D?MKmS diff --git a/apps/dynamic_search/locale/es/LC_MESSAGES/django.mo b/apps/dynamic_search/locale/es/LC_MESSAGES/django.mo index 9b4fdbe23008060e28f2c8476d1fe7987677e172..7512e7945d1f4feba10f0e3ce08f7812e08e3eac 100644 GIT binary patch delta 257 zcmZ20*d{pPO8pi_1_n761_m7l28PS53=DICGy@w01CYru7f3q+>BT_W9Y{X|(wsnA zkDY-*3`ko5X(=G>59Mb8X(1rL5lD*w=_x=Oh!|D^2@W8=5lDmNcL8aT{8@GeGX@nP z;}KAR3rMpARrvsEAs`L1C>}`j1L;g44Rj+zC6ERxWvJWS$#{xMg)6{6MAx|}HL)Z! zKTp>su_V<>!N|bSP#1`dj1&wFt&Gej&to~oYnAFK4~a1OUU{I7k2h diff --git a/apps/dynamic_search/locale/pt/LC_MESSAGES/django.mo b/apps/dynamic_search/locale/pt/LC_MESSAGES/django.mo index 31bf49eb597ca51c88abea66b9eab03ac7a9a5a7..85a80a99c71658b10fdbcf576875bca63bdd8daa 100644 GIT binary patch delta 257 zcmew>a7|#smHNeu3=DEC3=A3!3=D@@85kx5>DNFSh#2bG7#M7TbSsc{1IYtv4j|3R z&cGl7q=kUA7?4&6(n3Jm4oU|CX$c@d1xN!CLoJX1>1zej0zkSCNQ2bRXJ;^DPy#YG z0R^~#^i?431*9JUX^;kOAR!E-O@K7ejSL<@8YJ$!xs&k}lL}XWe~7MgQEFmIW`3To yOJYf?m4cChp`k7i85t=U8d@2dO`gZHlgB49FTFG|9VlH;GC7Pjdh85kx5X(2WS1|XAR8IZOC(rbXU8%Q2Va{y@r zb_NC!AZ-bx#elRQkQM^csZhECNJ{|u-9Q?M7?uDDkiIoQS^!9I1=1k($JiOn7?gmF zn?M0BApHkOdjV;7plXnYARr+Oq@#f}(2WfFQ1Oz@os6fLyfaEl3as??(=$slN|W@G z^KAj0_A7bqy?a ljVu)mEv!sTCzrGAoNUV)#qE=rmtLBf4pdUGc`EBcCIF%MH(~$) diff --git a/apps/dynamic_search/locale/ru/LC_MESSAGES/django.mo b/apps/dynamic_search/locale/ru/LC_MESSAGES/django.mo index 0591c4f58f7e59b1f9b5a253620098a845014d28..00f56a26ed56225c95075b9e7fc132c773a3ff9f 100644 GIT binary patch delta 257 zcmXZWy$bQjnGSaY#Uw^zu$ivBWVx&BZZen*7Ac#-V6a$}&7Yub z2AP!6Vp2BWEA^|-?|JRH$UAv?o!)(bA^}m~I*7HbrbPhwtrX<|B1Nm1$MX4b_l0Bp=OkN^Mx diff --git a/apps/folders/locale/es/LC_MESSAGES/django.mo b/apps/folders/locale/es/LC_MESSAGES/django.mo index 782395ee7ac6daa8facb0ea76ac20c645a93841e..8d12b0b0e1e651b9085d9f3a84174bddac99d1ef 100644 GIT binary patch delta 419 zcmXZXPbkA-9LMp`9DcT+jbX~avftXpVeKctQlgv3 zG?>Cc&g(t@h4yiP^C|Y?6q@}nK?fw=ab%~>twNmpdgv)!4qFrj<+6&en3hFnZ delta 438 zcmXZXze_?<6u|Lgg!cTAmIW$7&nToJUxh~cprNIt_MjSimgpPQ@Vz%UgiFz`Lt9g8 z5cnswRBJRu)Dlf?(a_M)_mb1++;i_eKVH+PGdHfU^WqcHG?94``3QBePg9h&5 zIp**kH!u+vS-}G|@d9V@5mWesag0Yqbj)B9H&NY}F^?w^=}4NOPa=y?s0t5{iV%v4 zCIgl*!TBuu-{=x2Ip5+KKBFH$aRR?^1OqXa!x*xgq;Lx7P`zJ|vF12Ii9`VRQ585s z)v%4KK^IlQD^wd?qZ;6D;2Wy{-vfX9_d}jPQ*+(pqG42Rx8{|zht0atYC2ZSZnliN y)wUXj?Kob=>8)wW&|+a>xu7qt7IXPtS$pUeg1g~ut5Nl=YNe=GoPIaB<^Ka5{yvBR diff --git a/apps/folders/locale/pt/LC_MESSAGES/django.mo b/apps/folders/locale/pt/LC_MESSAGES/django.mo index 539af2adda3e79808bb6754850b23871627bad78..d91efb95dde59c9a822f3889f3f52d13545c19c1 100644 GIT binary patch delta 419 zcmXZXKS)AR6vy$OftoMH%A^{kC*{_&-ZO%PpeSq!4Ejejy}_hKBc4-()Yj}6)gTQG zLf}$Md(dDIG`2Q51ku{}LU6gCbI$#D?oIaBeh5O%c1ViFq-jYVOS16|xA7bIurws) z@fu6`iUmx?r6t@zbN(DB@D4}t88g`XulI41JerUk%qG;-6hWE79M*9GZ;`k4j>|Oo ziD~joQp#ZgO@4s%qB=(K3{3+U7{x2(Z)&5tuY=?Gh-QB;xi1Y9d{7AE7mi{dQy5~A zP-!#=a%k$aIEE|8&@PjC@CXO7)_oahL}sk5@{Y51TJeM9dd*q)gG$l%=3Uoec%JRL dMQ^cn8GDLv`n77qud;j+v{tRd?!EOB{sZx{Hl6?g delta 437 zcmXZXyGz4R6vy#Xq1B|;`YPH%jELB!jgJa8sFR38w}L{qR7%>R5AqNMq5TJ(iX9!C zbQ3zciU=0R?oR#%4iNN z8<@jaJi%|=MQd85fK62AA8;8za1Ot41;cSamEcZt4zqZgkdCZUT+%SHk9mAUW{_Vz zWWd;rNQ!)%6xqNss@z3pkv_)o9@PMkIEgRFzsV5QeIs1LPgL)R$#aoeia#1rOcLfX zg$tNLw&VcSf#SGd!bP%!EV<^PK6ryucsqEX2x6Nx-)~!{>D2vNP|01i8m8OwY`5NW y&4zttH_f`|1y!$iq^09qh3rnj*xtADd%cSG+{@_Yc+qY;f$dZ+qdn;AVe}s#=s*ns diff --git a/apps/folders/locale/ru/LC_MESSAGES/django.mo b/apps/folders/locale/ru/LC_MESSAGES/django.mo index 6bdb087a35efe4bc5dc11a29c0e639f95b96e9e0..17af131f95395544501b41ad993927e63603aa58 100644 GIT binary patch delta 419 zcmXZXKS)AR6vy$O4Z?ewl~I;aNf}C{_8t)=1VMj>NNfl!Yk7l6Lk8j-qCsc~-co}Q zG(}5W5J*#FlPwKxO$|XqTSIf-hr;E4?m35h?>P_2i{xWH(D(>Qh9Tu7eVI}gr+TGR zEZ`Zo(a&#$q8ehvKSP8Il%;RB$D-n_}7#LI;7#JqAFfgzJ>777Y7)b92(tJSrGLYs3(vN^N8<2hj zr9T5{9w7f0lx7EN76kG|fHXIdR)f+;KpLdq4oHgtX%8SR3#4ON8T7y!s(}LHK!IK$ z4YFV}7#LI;7#Mc3FfgzJ=?6es7)U<@(tJSr7m(%z(wsm^HXtnw zrKNy050I}2rS*WcAdqhjq`85#FO-f1(jfh*Kw1Py=L2b3Al<^spa<5l2q+*96xaf! zK^B|=(n3J`GL-)eNV5a^Z#P#m&SLb+C@Cqh($`PVEXgQM(o4?I)i25~PAtmIFVfFV ztW3<)&nzx3O)cgM@DI^-E=o--$;{8wbxABqwNfxLFf`OPu+%lOR4}x#GMQ|~e0nk; XOB9b!VqSV_VmeSoYVqcDmUKn{s;@Nq diff --git a/apps/history/locale/pt/LC_MESSAGES/django.mo b/apps/history/locale/pt/LC_MESSAGES/django.mo index c1895c3b292ed1e6cceaa56f22a099bd84c26f49..75258a208b2ef07766852d06c38ea9cae01aad7a 100644 GIT binary patch delta 248 zcmX@iJ%@Y3nfk?y3=H>}7#O4&7#NyZ7#M(vVJ?sm0@90sG#`-O3ZyxK^bsJ<2Bgmc zX;vV86-aXf>Dxe>3rIf)(t<$x6I7f9s0bu30Hi_srGc~vkX8lKvOwC3l|c`zAp$4> zvM>us1NAc00%?$jCLj&6um?zU0O`q_D;Z}oDsu(+hv+&Nr6!hS=I80UB$lLFDHs_T o8tMX(k&%L-p_S3(Sms?kK8bnhrHSc4*@BYEVl2^{>sVYF0r2r9AOHXW delta 286 zcmbQkeVBW~nfg}7#O4&7#LQvFfafS!x11M1f)*_X+9u*2S{@Q>DNG-4M=|l z(yT!G50K^t(o8@O7m(%y(tVX0v z3nv0;pqUIyfHX+MN+1oga5IqR0MffQS2E6G^vWnHDX`MlPtPpLC{5B!&d=2^$}dhV z%FHj)&rPgM%+t>-E-pzw|fc$nK4N|`dN^gYH2cYzMAT0@$zsJg;2e#k`P(U0gz{keG z07MLGKtd5n>jG(zh5kSqWMRzaO2%1?%3J~dA-c{*sfi_-`FXl7i6yC43PuKohPpsx kWTaqdXk|1xmU%gkPhwtrX<|B1wy1P6GfVX5Y!+oE05RhwMgRZ+ delta 287 zcmaFP)5kmEOg$qL1H(NaHfCU8c)-HIzyYL1SQ!{pfwU};76sDIK$;IoM*?XcAe{lE zxqx&jkQM{d4N!VIkd^}S*8ype`jb%l29$mdrN04bNuWF{8-pI$0(mwD263Q(DUb#t z245hd2&6-RG|0j-APusxd2=P>EJm-4l9B=|ef{*zl8n+Mz2y8{{i6Kh#G=gnBK_RN z%EUbV%;MtG)MBmx{}5g0qSVBa%=|oEm&B4(D+MD1LqlByOI;&N1w#uflgVbx%O}5L Xj^go2%u6p#Ob4ncD&6eNqQV3KN4qm} diff --git a/apps/linking/locale/pt/LC_MESSAGES/django.mo b/apps/linking/locale/pt/LC_MESSAGES/django.mo index 35b5bd5ea866d41121433e06598e6a4f2e93c892..b9625e54787339d3ed304b53db5515c6a3a195a0 100644 GIT binary patch delta 853 zcmXxiPe@cz6vy%NoN@k-rItF@)Eg5l)a1Q|#DKLBaU--05sN`|8q7c7xRjwkMAV|_ zmP;dAwuxq=giug!S_v(pMbIvHZCeO^f5YqW?)}{Rd~?sa_xi5*rML03EB?}m674K) z&@&sukv2NwH(tRb9KeB?SvO8$JI-PPZ{Y|o;Rkg10I$c*7}_^X;deZPzc6psuww>E zUSwGLi{bk3FYT0XwLQ_fb1gQeBC@Jw;P8h1Sr~D|D3|H2q$o{{e*( zD|E#y*RYcebU$4*g%YXC9$JB>I8W0Fso4L~8x8s+OX$(pLurm|Yy jtW+1v{(9Zbrsv$J^s>8=*=i=Tk39D$S8u+}w|oBpUQtmM delta 1594 zcmZvbO=w(I6vyx6W0EGukN8nzO?y*~P0~yzDGKRGbg)T&-P|$@?p-aIo{Qc*>nrZR!&imba=G=47 z`QJC+Z~k_4<;rl+DZ`k?9>!iT81p3jt&109z1x_1_ygPuyLyb-4#(iVunK$Oi?9e^ zg39H=Id~GDhu^`s;c1E52p)%h@C4ih zKY}X!6F2}b!u#PmRQwgFyw~#I|AB+7izF#>z8PjB#|Tu1<4^@up$a<))nOAp2#>;@ z@O^j(JfHj5A&sr~-~c zLd;3XV?O3pf?q;Od>Q@>i=6TS`~{NM_*BPP<`wu5jG?aV1eCI$!4-9MmdQ5w6TAmr zhdQVW{Z#o7R6!$9{&{HOUU)aGL+wi;k9mieBtHdF+k64F?;EJAJOichn#&m}EeNHe}x4Juvse?&OooVQ!yM64$p@t;)Fea6B75Z>B1{ZiqdK7O< zrtTiW9>XM+y3yCY1Jjto@_%Mqu@TnlRAYPVkFGsit6?o|ctK*9qA+dRS5q%KX1yp1 zqlz7mTVvhHj2C$}2yNXv><3;w3ykgIFtW+AXKQH`X@5OWwEAIpqj2Dstmfu#`QF>t zc49o9{LdL%Kga^9V4_{tWZb&Z^KvCC(bW<^3}Tb5Zl=zce&RJcrg>Dny4d?vVc&9+ zG%MxulAkQ6hh}PFqa1~?i~KMuH{3B7l>InPy?Efj^9M_NBhTraQq?71#qOG&n=8%k zF74WF=jJPqKhe5SJlA@wZ*g$J1xu-0BBa^+wXZSt4AR-a*%~FLM-qo@G?O;bPfsRx z*w*&h{x@g$uYDfc<+V?Co^$R;-+r84;05mKm(#C^oQ;o4AH2 zIFGl(`YYPxA9#k}IEFh6kK;b-Jj6%5#44^9MW%7PC_R}aIAUW0uTT%%AZN)PPT@T= zD=(-od_&#$g(m(C^It5J=PeOJsi3aUq3&Nq{`+6k4=BsP%B#XcJ4w!6$MJ)togUN= z!;TY$v5JB)aysflb)6uNQ!ma=jf%D0T57avD;sVzyEfjlV{@;xrMiBqe9x_U@!;9q GE&Ks%GcyeU diff --git a/apps/main/locale/pt/LC_MESSAGES/django.mo b/apps/main/locale/pt/LC_MESSAGES/django.mo index 602863c9f411cd313b6207fdab9415a01cda052d..f0e4a1a726677c699069ce2665e39927ee0635eb 100644 GIT binary patch delta 330 zcmW;Hze@sP9LMpGn&)+#5T!0b2)2lvcn3Ays)IvNL0i)^n6z9X=j>vw4!5-y1Wkdo zM5}XKkl@n);289Ngoo$#{P=voJkPAMK6vwU)2EztT9itXR*tlfzi9Ux4Db(6u*Kmq z8g%giD>%myK4TfHT+&hv+`%TkVjBNz$q_=lT&@<^Eu1B3P g3>Z;V55qXh-isgpnMsBdGvs!ZW{GpX_;%Wbe@`7N4FCWD delta 348 zcmXZXy-EW?5Ww*{K$Z4O^T z3>bhZkU6-Fq*7(&DIj}_*M8qPjqKhW45*k>?eLTfF z-ryomu#C?b;TtaF5tpo#W1PnhK42F&QQW_|sw-pJB5zSx!48@Q8tIkrzwrv$Ew@;~ zdo+EI=->=X_=4s^?`Y;fkt1IO)Blb9_qVo=6`2<2bYZ)nrje(VAEf>4eCHw@s5ne? z9E7nN=#d_(AW5=bl3&^z#b&#)+pe_^y}kU-p5eE>16 diff --git a/apps/main/locale/ru/LC_MESSAGES/django.mo b/apps/main/locale/ru/LC_MESSAGES/django.mo index ea406179a23fa31da12baa3911e7d4a6e3109613..4dd6882e6c0537acdc8926b030d6648cdf5306e1 100644 GIT binary patch delta 330 zcmXZWu}i~16vy#jD~TF|DAW>hXrRz8ruH%@Mi4bVDg!DwKBa;Ga-XcZV(x z#p2+qQ)g)h{{+Fo!Og*MAaLC0-g|fV-e0f?rhabpnUfA3X;soTTZp^3g$W+vC7$9f z*6=N>|6rLoza~9l1&jEB9)4y1;yrz|F4f_IV)}0GX(Yqpo5UWLHlzZcV1NzW$1eJK zhnx6_X`|;XKgR>&C05bpaymc_T|CD0-!shS&<=4?GcRvf%3kBT8J+jrcF?`)MHhC^ kPQtiuOvH-g(3m71zc>^B%Jw=#+o9SYj$3YP_U^tq|M0#n1ONa4 delta 349 zcmXZWJxjwt7{KwTl|+p}6l#g+5O4^B?X@D>W)N|3($U4qtCTcI8_5gBsoy|^3=Vz( zK^%l`g1Eao_z~PXi-P}Phr8cBFL(ERI6uy_T^g0jBD;pjtcbMOTs*)f)VPN+?&BlY z@oQRl=0rA#H}MHiu!`Sk;qv^y>v&fZ@vuSujbd?cV#!FF94ZSUYj}he?4W}~+`?P5 z@f8>G9gB}Xr}+sg;$QTzMsqR1DVlhW#k&DAhcJh%u&Oe)%6i7@rRkNgR1l`UtW&>; z`YMhR9fwh@`ubWARG1`LH_0!JRjbjiZMWTK%iqawjEDTtJhPAWAjovk_1!od-%S{#bU)-8IL4?4oHnBVJZ4iG>h#M8rcFl#wivb_wYsOqb1q zAY{RV;Kj3IW_0lnh^1TDP3a=|1EPyJ5qf`dVVKwRSEr*Zu(RB06$_smhl!w(^4CDR2)L4^b-59 zm{zDR8aoWw#z$xi9XhwM6K#BqmnArdv$%+N@f17Jy&(4_(BgN{ z68MF+xQ8`(fKh85XSS10&`|muZ>jgZZr^u3FXxxO#(!QJnSNcEpDxVg+?h9}g~ZhM ILBenR4-7L{y#N3J delta 886 zcmXZa&ubGw6u|MPZC7ojNySEOqK$2}rgpncs$f<`O@)Hkv{FSa9$d?khS;R+kD{j) z4}$a}ws;aR9=t>?To`3ipCDdHUzIn217{6BvaP2L~jdECIW*u+5`O^Nj5Y|CY2 zN}l3rtfwTBQ99cU=*BS`U1;JEUPT>Wq0t1_@gBa#lbAdrGJ;ch0X@`p4ZMTjaTxPt zu?HQ@VFh*F%l?SPbiOc<#h$bX#gIwVOmATvLp+9$Q8%pP9Dc(Bo;WIU9VR7O(@Sk-cONxs-(1hwFG8-=QYBg+2He z^#a|LLqF*Vc447q5w)VxJRQAJfSTzG)Ka~|1inGt@DuXL7L6YG2Q_|xQ?)`Fatt$FoJGpGp_QRCc}_tD^e6o-0mCgT49<4bN= diff --git a/apps/metadata/locale/pt/LC_MESSAGES/django.mo b/apps/metadata/locale/pt/LC_MESSAGES/django.mo index c4d0149b8c094f43fea97c9ef7713eb01c0c1fbc..ad93c5f0759515c93d51d4b5a42106085100269d 100644 GIT binary patch delta 825 zcmXZaKWGzS7{~FS`BU2(X{;ogG-)rUwg%hkB}L^14Fqus8lhB5rwk=XA#|vMi-%hg zio;EHaj=WHh=D>2!9^4iqu>yyIw^E;DGoa6_h||*@8`YueeRy;ec#)!eyqOAg#G77 zq*6jkOX?=2)3}f4@z^OT#QJ4?8In8}&oKX!;3*s!k!J7`Ud1K!a1$-=JC0%~(=&&b zr;IKxX5{MvgLNhxY~wiY;#mx5C7KF!DZGJAtm8TSf(87G*D+5vd%laeF+khM4;;V~ zW6~^+puJxk^Q8)d2TWKYZDjNMg%q!d!%OI(6;{Lvyn{FKAzs5zxPZrVy@U<4xBw%# zgGccV()6Cr3fuD;OfyJuUh`PN5T`CSGUxOceF&o(V_91jwp1-i&7tAZSk>ez>mFpg`;t!V>8xP>v? z#(sQ<2Z_<)xr;Pkf9Ne?mJ1)oN#uW&hnBF0R$vpYpmnr@Hqqj@FoGYDrVd>Jf1|~X zau1gH;-Od2;>#FSm>;K=>bo@*JV~SmU3a=zbX?af2Cox4v1+~9xL0p1dCtmeu$)|M JeN8?a`VWb(Tc!X2 delta 884 zcmXZa-%C?r9LMob)2%W?`{Bx5dHN+Sn`fIsI-)2QLxx&JX;5*BF( zK)MX-B8a-E&?~R%w%zm(2nEtj6cJf>tM^xhhv)U2=lO2m@AEyUn*No38>#a@Zj!oN zqQ&>fd3q_;@7~SwZTAnN> z@P0(TTo#LLIJkmGFt}ejipP5<{Npl#&m)MMNkhiDz7{Fz0 z#Lu_|zvEhBba<{I!&f^m+7b@nP8>nLM|o%oXVD6Lf>zKXT0vE`_+_lepUBWEQxx0i zzr_urCBCxZ4Yc?y2305BUT6)CHVsdf%QGq0&F0FJm786+3e#?}Q1XhoLeZV}?s$1O zS1MI9rG~N5OR@f9#w+Iv`PhJ0&ZL}VJdudS`(nvHC()bgnSao-G=DLCbz9oYXDeQo Mh?#{~;pa{N0ZAiq$^ZZW diff --git a/apps/metadata/locale/ru/LC_MESSAGES/django.mo b/apps/metadata/locale/ru/LC_MESSAGES/django.mo index ec8d146e9ccbdddeb468cd645dc18e580a6f3720..d58dc848fd64c11ba39f8b83d3474a2a83aa8590 100644 GIT binary patch delta 825 zcmXZa%}Z2K7{~FS4Y)A#jm8?y9MdMPwC;>AHTE_!mEu4OqLvGFP!x-S31{WYg<6Zm z#f4ip5-kc{C@Sj4MbxfEkklU#Zh}HELBCH5!+f4|?!D(Z&vVXdpV#;Cg3tY)B}M$w zWl4GGq)M#ER_wt^p3md1PYMR4+svOSJAVEI+Zeyae*A%*c<-WgA3bcwuUL=y<7lG6AFZ9{)?3S(5$j$3#Z z3#+6@7{crLvWnH76U;H;;2&g7g=j}LwqPlyu?eTqI9c;mXOBM@~n8EjGt*@w&3h>2=6KEe!qqXugS}S!`3WI|-9z^z}S**h~ z@6GrFIgV2s4hJ148uk|b3%QAb)Np2C TcqkftmGOFtdzZF~_s<^zX>(>N delta 885 zcmXZaPe{{Y7{KwztvpEdk2Fow`KM`r=5L$Rwq+<~W$KuL#9Ea7jIj-ItKWV*bjTlc z6Aw{C7}Uvvs8gUsNC&UpqC-c6!n*7bbt{Ozj~fg=@AK~cz3=-x&s&<^n0?#kcIsRr z1C1glL}c)&NH^ZZtLWgvI*~1`xJ9nCh(wqV9k2eM!%5=zcn9~ii_BmOM{onr;U5g) zP=|;g=P`rNJH(MO275iS>jYjVevH@fGmc_kr$`vH=-?_wv8zjD3UA?ke1m$SHnLd6 z3{K+@Jc8jKkxLlEGg#_jw8Q5E5*oS#+#WJ47b<_$}a1Om*ksG*#Hh#ll zO!SIe#}%x{3hu|>cphDBK8~YKZLowzCO)B-e*C1!L3~>C1?q?EsHOacTFTy2B0)@` z#>>dv2!3)CxHB3^cPc>J2}l9{dHlto%gUF3qeS#31T{89av1 z(7<=7nSVzYcKfOada;4{0_wgo9Kzc;pxs#W83$lhLO(Nnc`gk z-TZ=K*+QY1Dl|;TXM7i}lxb)4Ip3IRr=p&qKM?TwBfen769`8` brRBy~rIDuOz9}=8E}CgpSjDw+)8FR*zqWhB diff --git a/apps/navigation/locale/es/LC_MESSAGES/django.mo b/apps/navigation/locale/es/LC_MESSAGES/django.mo index a94ea1cd0621ef3e745a20f0057378112272595b..60911107089abd56734915f298f9673a6febe42c 100644 GIT binary patch delta 78 zcmX@hx{P&#jqDai28Q_z3=9fD9KyuFpaG;yfiydio;NYFdg5 za(=FUQGRh^QD%OTer{rAVxE3xadByCF;{?ph^}){YGO%dex9yNVo9o%f{}rtp{{|Y ku92mJp@o&n#P6pkpJ$BX@kz`}FHKAbDo8D!tiejm%g|8Q$VkD^(8_4C d9OEt?pTxZM(!}&sD}{oR$=4a9C)+b+003UX5`+K% delta 137 zcmZo*UCuheM)njV1H*g<1_p5;&SGLE1OB2(93JNBRF=YV&(Ca8a diff --git a/apps/navigation/locale/ru/LC_MESSAGES/django.mo b/apps/navigation/locale/ru/LC_MESSAGES/django.mo index 61a3328f93422aee2cd31547bd71926e0b0f879a..8dec51de246ac087c61aa9554f23ac9a09a948d4 100644 GIT binary patch delta 78 zcmeBSd&)Y&M)npX1H*g<1_nhSu3}$(WPmHYg$|xx*u+rC0&n(F(P0~xw z&($x=FHS7V%rDZvQED!3_r diff --git a/apps/ocr/locale/es/LC_MESSAGES/django.mo b/apps/ocr/locale/es/LC_MESSAGES/django.mo index d70f38f4ed94961b625c27abe1ce3e2fee4b5145..9c4c0ed1f323144ece5addd8bdeb76a5afc85810 100644 GIT binary patch delta 863 zcmXZaO-K}R7{~EnsEe9esjFF5TW-?JPB^Q*Es~l-N|C*J@-)O|(V}2#(PhvGj~#@G zx<=4DiqW1#kPc!H>?!Ew;H8U~q8B_!^?i00hW-4X|IB}$m)Va!Gd(kjBLB?>X{}oF zCB2GDC()^ux-o+m&teCD$3ArH!gvBZi5Kw{7H^Z<@iZRBDLja8u^(5k6_3?R3Cz@! zb}NgAY;43A7{@H`!7l~>;$Gs|cIgmyVG|DHehkpX1*8`JzynyeL%NDBcmp5dIgB)f z4fHqAHqR<38-g{OFOtjRLfSpQ9yyhb8zP?R~kz z{wFLZUct@y4SCMj9~PEy9k*blF|4o-nUWG{m7YPn?_m{=pq;yi`Hs;h5TGS~jCSrN z+9z5>OZ*w_+-g3ih2Jdf#U-?9oz%{qi2T|VFF)UR+36Zdd!yHfhn#M2G@Xhin_bu8 kN+x5jn@S#?zFo6ian>6e9PCtk;3RAdBi zVG`XaX**cFXQLUv;9*?HLm24x?ZaN;3pj{(upgh`0D3r#zmZy`Yrn`*OyMj}<6ZoK zSI~(04cw2>Hh08hgO9B7W#A@`Vxq@CcoQ|jGt`8ia1v`sb8_*3U)T%=h#w=v6c@v| zh*S6uGZ;GPpPz78q}W)%6ZjHoUe@s**6ML7F2YlgN7#bT@hvW)j((PL>HZ=%;Tvp2 z4|O6RaX0=#E$A<5flecH)zNoj5c_c#n%IG9)JJj&`>=%DqeosF@lXr?jGFil?!w6ifQOoR z74_a%)JL>|ns^7@=)DlOYYQ8Ow5jxtY2%nSnNv+aEH62?GH28YbR3EtC!z>yH47PPVUg31MQ|74 zCUQ|OvIt$YsHNf}i=a)rBt(LQ$Z8Sw2M7fb_I>ffz~{W@+1EdGNL3{2aX0akBoyHuV z#D{1X{2cQoo>6RvL{sWSd$E8=@D3iu8MKan1lG4mgVeo9c)Ev&aSAK(0}`f|umOKz z0srA~%}OIIY|Y6G*eVkEE{`=-^wN#|2E`SUi}=4K|OpxP*kJ z?^un0kscHxW^2$-FtCL*+9w#m&6vlncma3g6||_w(V~BecJps&4XI#DZO{pp(>Lv}Ijt-DP)H5W=B< zK#09{@X{?j6zf4RQHUKn)G<#%1c7wRq9n+^4?CyN`@HYW`#$e)W_S8<`sHww_x^~; zpHm`BBC;J3vCuv(GJ!6R4_d`5xQX;2Us0d?i&Hq*Et19p z-o!1`3m)z9M0iFfdqikX?xViAgh_mkqxcE6 z^orcVicN5YjTnJb?#D zXwpWk$FU#jN#dvtdTD>bLHz`e@EE#y5?8PvpQ1*+fg1g1)SI`msF8PL0F&5^HtK#8 zetiQqnG6Q;Hqxjk_ZYM>F^3_1h#J{4>djYCJAL7=zd>#618SpRP!Il&y73Rc{)hTW zTP`$`=|xRs2=zT1JM;=u4D=_wiyBq7ZUugZ1{PemWE(~N}10!K> APyhe` diff --git a/apps/ocr/locale/ru/LC_MESSAGES/django.mo b/apps/ocr/locale/ru/LC_MESSAGES/django.mo index 97665fd5de89df50742127613f02140c10676aac..2532ba2c7164c9eaf4f97d0b18b5aa6f07839578 100644 GIT binary patch delta 863 zcmXZaPe_w-9LMpGM3%8EvZd8#E4Q+8>GNbpqm}&uqcSr_QJc`Br9n858A8S*h0u<} z-Ruwr)uA9VJ9a5LjV>OfP9B2(93;>r>C*e#1`oWxzrWw#_xF1iQl-?ZmKENYD(O$1 z^hVN*U%G`4Hc1)$jn^<)FI~rXIEqaT(f~ff+gP(%8o@El<1${w`&*yFxKys_F@93aSShD2fJE-9?79;tgVthV~+Os=5pdb z%CDt8j$D$87{%9UH#~>!xKQc$nmN90d=YKoJzS3kv_y~57JS5G__t!5MKB0WtbU(vG!xKS&a%$W^-|!ECp>$aQ delta 882 zcmXZa-%Ha`7{~FC6&7gI%H^-EzS$4^p>CQ{8x}={pd&FNXl~JLa~q_K{RpEU1L-CR zx-j|!DwHB_xnDw94U3JE!M1& z{%w(7N?LJCSMbGFDS@75X&h%Tj^FVn4z)-re1q4}-zrVxJl;j8O}d27FpPEWmAna@ zVEhe7@svkJ?IL*Skv8KZp1}`z9KBxY0$#)jmT?5#+oYqIz(IVBw(lqI!{Byl7~`11 z5=PN+L`CT~j^V1qsFxtTLpp@_@Ek6o6>9FNBqq@sd5xXu-C4QmY245FBifBt(AGoT z%7^)?Pw)Zb&uERNche-6iv&Xi%Q%3?_DBct2EM|1Jd06IwfPcKLtoKVL$H@3(7?5= z@EvsFbL6qKh~4-F?S6q2ERcH85{DN8wSP8trt81Y|59;i*sGA00M%rvLx| diff --git a/apps/permissions/locale/pt/LC_MESSAGES/django.mo b/apps/permissions/locale/pt/LC_MESSAGES/django.mo index ef53a7d2481186c2c12639b7b0ed47d6a3796225..715b0f389ba40b09480ce6eeb9d3af97083cc62b 100644 GIT binary patch delta 752 zcmXxiKP*F06vy#fs;#!Fic;#&Vi2il6C#}~8bl(JnmSb?HX*5qMADT(f*X^CG_e>B zA~CSo41&dAMPd<~|KH#9+~oE1?tAy0d(OGtOl(BU4>9kqVRUjOxxyY}dhruA_N$DU z!UGKBtLrxgnTM*4slhllU=kD9k0BgGALcQJ1=M#7SZ_?(thx&}(94T0RKQ*I;~q9* z#eIK*wam}31usznA5aNAqc-|LB@iK~;WK2FikGk%*RU0LPzfBN57^@Fzm)bSjhSPN%b(A)EJ~h9`>)^UKBgxor1h$%X?3TMG2qRPC(I L1xv@d(1_<3K-@!D literal 3213 zcmb7`OKclO7{`ZFpcqP^EwA#L1}q$vwVf!1)FGv59*~NtRxmm6P&L^d+Z%Rw%*<>Y zSDbo42!uEwgx~-wIUsrjA@2B4!~qGx2_z1jkPzIE=#BrkUdN6SJ7SdG-|Xzn_ukL> z?a09o7)BP?gSh5zVC)na9Ka3Z?2U{)2hM_J@NMt{_$&Adc=8})7s0o{+rd9l{sU(4 zeBdU=@W&40b{BXQydTVh=fG#cdGIoL8+Z-88T<)60{#M$oWH;k@Za?PA#8#QHUeUa z9RqIxkAp|S(e(Y3;H`L`2JZzIK$7<=NcPl0(sKzU{qKS#_oMXr6OjD63f>8R1CqY) zQvLvbkC^=ol0TmwV(dKlJ19U0%3lWG178CF1j&y@7(x11L6TbsafG$NW8h`*IQSvB z2!07toUVgp=Na6{-}B%-;0kyc^g;5!nZADqglX*k^!ekIpMeyQt04LNEl6>?22vgT z2tpP68@wC54&DcjAQ+gk97y&~f)u|Qko1;8lIwva?+uXjzX>8t$(bzp5Ux9LJ%Xz{ z$ZzuDM7l5vQfyFaiB7VMY<(CP>7YTrcL(XA+9G?q<55f~P84ez6jK^xE7?sxa$GbX z>ma#5&^M=i(I9^)_Y?>EJm3-vIp^AokqG6ODe-Jh%hzLRtkh$MdrF$MW~mK*A|eZ$AAT7|>p&n2#O0>I{FAgxRv7Chgk(`PAkEV=jP%CM!##MP?r z`ZBWpFY>HBIHTP}P=p3MK3qh{d2c`O`h^&_l0+;;zqxGHm(A4GPHHL7$pZ6|kT8j0 zut2QIfQ2$#qqL`_I->GHksC(!p4?1BxR{}!_uAI0aMqjhx(Yn0cdwYfCBsNpa!V!m z&pU5-xRz8lGZyvA%37^U*E&m{vkDLJxs~{`Xo-j~%rC!?S&07d-`3-`ysN^3Rz_%F=|V_n3;1yHWoOD4Do#>N5bMlCU5QT=$H$%GX=maz zAD=2sKIIfAi$!d7kO`mE_wS>v6TCQCIyG^!h>>|-80%C}c_t86=@OSAj8>6R_(TnV z+LIgkbm?p@6n;R)ox!oF7K@s6DpG_cUWQ9?4F*b{OI>L;n|Vue{i@u|N75D=oxqqv zqvMk!z0eda1QZ&!FqT7g%qjGe2==uaaMa382nmEAO>?&{w2^k^#mb^H z)!Rq7pWd zsSQ#O^Ry#*aHkn0n|e%5=;2``mxqX+gZa7_lTL%(u|i#T#{wz~VMQP4PPTnRP`iCK z39wJyx6^#3*=}{ibG2VEhKoT~C?;N#>A`OIgpkS9b`i%e@pHPvBXpv^08zd*kJN@p z7q=9Xn{E*MI_bfXquXEEI8aIdMJwu(!>Ug4ZJ}#r(Tmm2UQB_ZW{fkt_V((WSs&72 p0}{J?6}8;APTqC*(7dZYHK||AURL&>C9&Jbx4$8V|Cmtz>_3}`n0x>L diff --git a/apps/project_setup/locale/es/LC_MESSAGES/django.mo b/apps/project_setup/locale/es/LC_MESSAGES/django.mo index e76f92294e01d80388ddab0fae7c625a6b3279d5..37f3fb805306d9580ae222ba8e96d20ffc539e48 100644 GIT binary patch delta 70 zcmeyxa+zg& XVqSV_VtT5TLTd5kJ&e(lRhYs6MaB}J delta 131 zcmcc2@{47HiRf)c28Ln=1_nML_Ge;XkOtCm6FuX-GfGMdtn~HMGfOf`lk}4FbM=ez zixZ17^NaLz6Dt$*^fQZ#OH+%v0{laCor_WvOEUBGbX^ilQmqt>3=9o*4J>tyEENnb ftW3-&o;fvnF=G^uPhwtrX<|B1MQZWnKaAl3!PO|& diff --git a/apps/project_setup/locale/pt/LC_MESSAGES/django.mo b/apps/project_setup/locale/pt/LC_MESSAGES/django.mo index 912f33b52af2f53c4672c27cf6dc7214c8292641..7c882520090ae4c5eab03716106e87e8a90b1668 100644 GIT binary patch delta 70 zcmaFNvWI1YiRfZR28Ln=1_mA=7H0xtAgwadGk)TENp3?!T_Ym}LqjVgvx%Q~^7tg? WrI#kAr&=i#luTaD7(H2-DF6T~#1aVr delta 130 zcmdnP@|b0UiRdXt28Ln=1_mA=wqs&o5C_uU6FuX-GfGMdtn~HMGfOf`lk}4FbM=ez zixZ17^NaLz6Dt$*^fQZ#OH+%v0{laCor_WvOEUBGbX^ilQmqt>3=9o*4J>tyEENnb etW3-&p4mBh5@Qs%PhwtrX<|B1MZx4(j6ncpZYRtD diff --git a/apps/project_setup/locale/ru/LC_MESSAGES/django.mo b/apps/project_setup/locale/ru/LC_MESSAGES/django.mo index 8bc36db74190e19249a29578d270163c8b697c7d..6eafab04931b1807af2a58217a4e5e52c4f25b7f 100644 GIT binary patch delta 69 zcmbQq`iW(NiRdjx28Ln=1_mJ@_G4mT5CGDN6FuW6o|oh{G}JXRQZO{MGBTU^c^QvS XVqSV_VtT5TLQ(1D8H~}Bm}UY1G|m#T delta 131 zcmeywGLv14B3i0|Pe@|7M(M6{Nxy;2)yvT$Gwvl9`{U>ylWKYNcRgU}&fd lL`FsmhK5!~W)rXPLFUl`YEXvF; z($7t-Ow7~IEG{lhEuPpT$!%b%Yh%Ar$z_aD+&+nU>7|M3sa6UFlg}|) F0s!bJANT+O diff --git a/apps/project_tools/locale/ru/LC_MESSAGES/django.mo b/apps/project_tools/locale/ru/LC_MESSAGES/django.mo index 728bb26bddad734e2300017ef9d107ecc791cb66..99daa2c0af223caa95567c215f7ce69706b7da41 100644 GIT binary patch delta 19 acmaFI{Em4-KZlW#f}x?6k=e%S;fw%8q6RVm delta 19 acmaFI{Em4-KZk*_f}xp}vBk#e;fw%8%?3FD diff --git a/apps/smart_settings/locale/es/LC_MESSAGES/django.mo b/apps/smart_settings/locale/es/LC_MESSAGES/django.mo index 0fa0826b1c3f84652fdc687cb923f9f157146f9a..71eba7fd8b3614a732e13873e1ade605bb429df0 100644 GIT binary patch delta 88 zcmZ3<+Qd4+MRf}!1H)1V1_o{*j$&e9U<1-=K$;Io=K^U~AYC&tvv4vaqa?SXp{|jU kf}x?6k=bNb##1~#iFxUziRr0U3aQ1D-!Vo{4r2-i0GrhkmjD0& delta 147 zcmZo-UCBDZMfEl#1H)1V1_o{*Ze(I$U<1;j5~RJ67$ka6Vp?z6becv-(`%R?8@W^0G!zpRR910 delta 146 zcmaFEGMROPi|Q#x28N{!3=Hf*T)@P@zyhQzfHXglt_9MpK)QEgW}$aRNlAf~zJ7XU zNk(asUUGh}eo=mLVo_#(k$!GsWn!LwW^r+8YB5)Ue~7MgQEFmIW`3ToOJYf?m4cCh pp`osUrLK{sf}w?#iRHw9J0~AujN#28N{!3=HBx+`z=Zzy_pe0BIp0Js(I50O?H=GYcm(GD>nA8tNJu kDHs}B8JSI1Wn9MNlbDxYnwXwyrBGBl`4nUHWFw{>008_HA^-pY delta 147 zcmX@i`igaeiz*`%1H)1V1_p5;UJhil0qOlfS_nuV1JVLO`sT#ULhp={k^(Dz{q)R| zjM5~%T8 zia>-4Iz<#pR?r{NZ4U)|=vJ2w(V^`UguOpFFwE;a&ph+Y_xpXGPs7iKU!PkSKW~tJ zw@6Kr9_OSG7jYb`*pHogiBRJ>ikC6K72J+B?8ZO11v^@$&Df8AKZHl{ET-@gdcB2K z#o9sehJp21#cf!_tyo7d*xV+yV}Kj*Fz&+<Rn8nk$2dA(X@1Z-gjEC?C zx&ymuhqoZ^A#epl=t|FE8ZV-^WCqy<-M}uqk4|(MeP+I*x9A)C`#N$Aw3>|PDYud5 zF7*5&Zo~*lB-S8-56cL;Rj1GiT|rlV2c5tRq&fPC6t5b(k~(_fzvv$~>|Eg%4@^q8` zWrN6{Hj!o#c^?vq<3~J(RUE*v9U_Es87FWNO3mn3q*pDGL>Ap0N z-Izs9;36jRN{26UhG2z>?HKN?FNok2<0uAnA!?#G(Zr|77Wsty?l z@fB)E)^HeGX@hp)23QHPmmWiE{ML1E~8A zijR<2RKxvP$9))zNny-k z5|75@$tAeNf)(%r^EivP{te?8Z}Ag#;!5V1(F&VDOWeR-46T>WV+n__ig}EZ#11Ut zGQ5pe=>51SJtUZCfg*KqgMUB?Z!sSU=AV&A-x;=Ic%#IlR)#%z5)b1|w9eEpkH66l z&TW#mVHr>0B(~!RkKi1^U+l*I&1}Y}ID`#6h3SNU!y9;y`CHt9r?*Jg@hbA@D?@2Nmw3Cef~pP;p@jv4%g2QanMzu`#WBwC^ww1aEN zR=r1R)Q@1@A(`z_!ROd2DwN}uBZ&SMc*r2K?swAMbrD9)mF<_+3E^RD`= v>2aje+uX9;b=xwTgzI)?vXyJiGm)O*E2HDXqZhjpW8;;WGf=(bOgaAnaS~{; delta 950 zcmXZaPe{{Y7{Ku-1q)eWy3*2gWoEACZySrY^>3sQlr-J!534nP*4TD%ll_4v(heTh zx>VR9FGU1FSP*%rLzkjkgvYGIz=PK)+|KoV*x<+S^Sm#=_j#Z9d4C&I_e1Y)wwAWF zh-`I=SVW|56}g5jdqfs6f>ZbdM{s1X$YTuSIo!mPIMgjNjZr*??~x@^#S>UV588V~ zc3=#LG1(&}aS=RXLJRnU0bE0!@7O2Oi|0`j-NIe?1huf2sEO+sMEib{<2*+37Y5Kv z65X(f?f3$<&^Ns$kqW^&6BH>keT@y~vBdq8)2Ejsu4q-a)!6uTf9( z6?J_Low%Lq_&vmn+VUXk6-TfG6G;A&+$GQiWju`^Q17aSZtOcE;=>^72`f!kP!oMe z-MES@k-tc-(oGVbKZW|;Wz;K-HC@1A853D1&`Lk!4P3_%dX6>{mQgo;i@R|RwKE&2 z|IDA&<+g{GOUZnG&TklrR6bdl8NHpEHL{tUnN4M~#;jR1(?%+nE5vi{lfh}nST=6v yQ<=15+|0-QHn-E|ayWesx6kJC`aQm-iLO^m|GFZU2{WB2mF=7 zrTPsz_yBR$$2LmC$d+t5w+{fAYr_=a}_;(SJB|~IXM1D;X4>Jjoc`TyF z^)S9ioA?W(XjmdKOopa$hG)JI@p8K z`(F^pNx}u}#%c$7Cd3Bt_Yn;aSP%YB+nWQf=#h}Q-GF~duA|k;ukr)o+0B*SP zr5nFt6Zu-dNFhehi~X)cSVuhK&d*^h@gjzB8yoQ)^_)AuPU zSd1am1qOED5*Fbu>bgDDx)aokouSrUVlO^n7kVgGL#Xpp6?u_P1{)*-c!=7GD{RMm zq&f28=6_H(2vmxcU>vJ)6zg#owIi!og%;`qcaTqx`02U})Xv<@G0>Mhqqgn^^(CLE zg}+#Xx|<#lK&|U`9Yww1JZjxCHsI#%L&3FoV#RUR6NZsWJ1e=Rp5^SCVP$R8N@p!& z&D=6GM%uP>N!vFwJsTdglBSc+X2Rp9lS~9-k!Um=iHBqHV019i7e6>HeLQe{3;szn QlggPXN|N^NlkeF32R(L8T>t<8 diff --git a/apps/tags/locale/pt/LC_MESSAGES/django.mo b/apps/tags/locale/pt/LC_MESSAGES/django.mo index b73dcaac57face1fd1866f6e6c120534dc4e3681..db86c8cc36bd83b989e2ba849e1e37d9f03ea8f9 100644 GIT binary patch delta 527 zcmXZYKS%;`6u|LkW_jLe(H}`DyG+}J?g9sgT51R)2pWQ11k0%ivX+X2nwt(9BPggz z1gDyUT7s5naA_+dYOFNUFs{DxJ4eG%M&0 z<;WQhVHLH3d(;O%u?xRZCpSrSBO|B-WUv<fo>c{4~}COn$>t7dx;Y`ifQb@0}SGsPs-BCQ%gC?KCW44Su(^>~0oc#L7ZLM`AO{n*qjGK|6I^8X~of)=ua`ocpr z@B(R$JmLVppce3ndSPD+T|+;EzC4WDkpx^E8$abJJbGC4&}Jg+9) zqQ2w~+wlptb#K^>Kd1+`wf+}qpyo}WwtV*T-d*t|Hf_5QGtEra-gMR`*Yn$EF<-KZ z*?iI5wsx(YnJtx^bjiEClnTrh)0Umh=K^udPRERJFcb;|qk(YL2+hPI(W8@w>!Wq= TYGcyMWgII*O5yUx>v;YE?6pl* diff --git a/apps/tags/locale/ru/LC_MESSAGES/django.mo b/apps/tags/locale/ru/LC_MESSAGES/django.mo index 54f236cd26eaa231315d1742cee62e0a7d7e8fb7..9caaeae59d439a2ac82272fe066fd84b2467f25b 100644 GIT binary patch delta 527 zcmXZYzb`{k6u|M*2;S=t)rL@nrdmYu#Ct)c#8eE$EKH3^Q$q*I8|D20#PTdA9mLo) z?PL{;2#FYksf)y7qqfHPBu#Ga=l(eN+#@h2{mC0_2OR2 z(w~T@H1X%FO7_y$h?^TPVqnos^wS zRyI~7WjBl2+1iSYh5S#{?f$;UIp_P%_iB6@H=h-Sib|10y@)9y^9>?P=>GeF3(Wog zKi4tJ{2YB)!a97zHhjks{J|zP8byXNf)U(8-9N?z-Ze@=h8TRa(20FyX~8IV;4HS{ z7H;D{>II|=ZU4z;Lpy~vh?Z~~`s3OyXeTkOHozaN2uNIwgKW|2{}unRY^4;|D_ zPcVq*IEgPvlTzCv!cf{!^99X&XR z`VukJf@`Q3&7c-ILyfyfK6&J)apmH3)lK!%p6edOEi09F_q?6pZZ2avxxDS9bB>j< z5ACd#&gZ>k-nY84Zq7ML+fC=PX2N!p@qzJBIBbSu=6Gx%9F0d}rx*2Cr>nkg|FWG; Od3K5r$17g@jJjVe{7-%W diff --git a/apps/user_management/locale/es/LC_MESSAGES/django.mo b/apps/user_management/locale/es/LC_MESSAGES/django.mo index 00e662ae5668438d3cc7d16e11955224dab3f66c..ff5716ae9b4fa9195cfd4faee43e10fe68457e67 100644 GIT binary patch delta 479 zcmXZXu}i~16vy#bq>Uu48l}~?f)R`gVkHqO6hRym6v010mkw>sB1jP&3K0cImn<$q zCvg$QIO*Ub2yP;7y69S*M8wJOkwD1j{odtX?mp~0`|2U#-y}pVU1UZ?UJVfklj+Dg zoF#jh#Zw%>FwT!yAiv`<{^Ag3Gf}^UE_o%kg{$OC9KpYg_%cpW=n)yiMN|uQ9K|Cv z@f_7bZgB#?u!Ol@k$GIgCLZ7p{@@{Q^+j_#u_nW8`eiKQrs+pF+oLf^;}}zThCFh? zOWpV$yYU6p`WrG+KCvIaQGKTo__q`>iBrgB#X+@i0o9yk%;EYZMV_LL>Hzzw;R!NR w+Nd^MhhA4F6}0rc;W*Q-YdKEEEeCD=DZN(RZtPYYwTe}12A;7IJ{zX?4;_U#s{jB1 delta 539 zcmXZXze_?<6u|K#m4%k2VZSUi$ZANRT7yar{g^69q9B5TSC~FXE#EU}a%h$U|A2;u zXb6I6YG@IHAX*}*rW%@}KOh?VUJ5SvbI!T<9?rcEz6URAw(_e@B;XLyMC8XQ62+0` zKi6@T{0O~R!*+c6&%dyTyuL-G7ya0URuR`L8h<)7m?4(3aWQosQTov1NVjrx(O<% z1~|n=yg@a3i$B}M#Awp*Y?4cMHc;42VG(&F zOQ;`iU=-^Z!KSJ2oBFZIUn09mh`P@MGK)N!`YY-_ADG6kaW47`|4={7@V`A+ME%t+ wM=#EWTV3Cgpb^X3N=Mmpa;awid^)nIiv+ak13&sga`_5A$o_@^g0-YG&D6jG&Z_L z&!H)brWzV*a&CxxtOk}Oe+%ugZwGhde&N6#KEvoN=isMXtW|~T-2Q8;`Edq9B|=8 zYIi4g8kdzKXBQ3*%E86^>DlFZ{XXBm{eIu?Q;MEP?;bq)H;-icq*+OShHKg{Es_hk zgx}bW)Adp>Zes#ZF^*3-jx`O^7*66G9^(|g;yiW*q!rvl6DtAb)yd(9LJx)-r6dmH z1ny%S-eVeH(0R~ol16X=htS4nEMpnZn(4)j7HI%SgRWVOkPB$xV=(Vt_)EdrV6atU zSnZ&*=^@7Px>|q74)P~D7kfkQ05NnH$s%v+1o>&YL}!89YAzwOse&ec^mA}FucOOp zjPPm46!zh2H6Il>YrnkqfiG-WRwNcPEh`yI*cZMl|IFG}CbyPZPnx?qJ7p{vZ;Y`2 EAF(<{v;=TT0pd2vNHSO0prM$oGUgkBQ?>v2<=b2OE$+&uScX63~ zkE__~73oGBd+`v*@D4}u2V*!;Co+L)T*6D7LGg*iVHVf$7&ZL$NnSd6X|EUQ!Eub@ z22SA#w&DlQ;vcGp(+$+(K8EoYU-27X@S#!U9S@pB265A0wun0U9z*!)&zCRkXfAIM zM~0RoRGXfoYWP|?uWk_ukQ-55tfLxW1=S)&q^H~1OX?Oz28KUO3=GQ{7#KFPFfcd+=?GQ^27Vwt2S{@Q=`}z)3`lPS(i}jV zmyLnJ5lD*xX<;B80i=P5AqPnC0O?{NEf1s{fV3o#Ua;|{2a^g{fPaXtb5UwyNoIbY zu1jJ`s+EF~fuW%;5E&UM7#dm`nN6-?KE>mcn3rCfm=2UqEuQSk61{mXiwP3|k#Qj( delta 194 zcmdnR`;d1+OX_V#28KUO3=GQ{7#MD_Ffcd+>3UWM27VxY7)Wyh>B~Sm3`pMv(i}kA zgpGm05lGttX<;B;52S&JVKR{50n)R8v^^!3v-OEOB6 z^pf*)^^5Y06N@tQi}Z67D--kdGmDE$Q;R1XGD~tBSn3*CDi~T=nOIH^Wj-}ohb4-~ VCowO*G%-EZN+Gp)b1RD}69D@QD_sBp diff --git a/apps/web_theme/locale/pt/LC_MESSAGES/django.mo b/apps/web_theme/locale/pt/LC_MESSAGES/django.mo index e7f0bd59d120b5b4619b975a5c50311925088703..24ff710f54bb16fac7d9360141199e778dc8f3a8 100644 GIT binary patch delta 175 zcmdnbJA-#ZOX^}q28KUO3=FFn7#J3?Ffix>X>V2r1|VXn1QHxTx*kYJ0_hGY{}GUO z2J&A6X)z$J&&I$2L=0{~f(JV!Z delta 193 zcmbQiyPtPLOX?{`28KUO3=FFn7#NPTFfix>=^|DJ1|VWs03^=UwSa9XOxr_Sn2DhXO?7?Cg~;T z=js>b7bg~F<`?PbCRQfq>1P%fm!=j^He{CMHn7w+vQ#j%urjfn9Ll_NvNTH+w@+eT RdTC;Ms+B^)=3*9ACIG2wD3|~M diff --git a/apps/web_theme/locale/ru/LC_MESSAGES/django.mo b/apps/web_theme/locale/ru/LC_MESSAGES/django.mo index bf3748bb25ca5dff4572cae9262fbb365eecef08..53af98872f39e8c61599d3881f69bc0ecb3a9247 100644 GIT binary patch delta 175 zcmdnU-^D+nCG{2~1H&IC28IO;3=G#<7#JdebOkE|0~e6K2&9F8^c^7G2BhBuX%Qe@ z#>T)91*E%yv<8rV2Bi6bG(S57gD8-e1JYVR+5}3+Z+z*&q{0>8AEN7Al$uzQnV+ZY yl30>zrC?-WXs8QBMn(#ThE_&qlWUll@%SX>rI#kA1Eq^fCo8fYZ_;>4oN{389_#LC1x{mkOx($wO~hRl-O29~-;mI{UzRwkB{Lz$ON=3t59@kz`} SFHKBOwNfZ5-JHmx$qWFGu_%E6 From 882e9353117f583fed7764667ac203f396a7e98c Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 13:55:46 -0400 Subject: [PATCH 214/220] Add the django_gpg to the list of transifex resources --- .tx/config | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.tx/config b/.tx/config index cbd85fb879..acbc95abba 100644 --- a/.tx/config +++ b/.tx/config @@ -148,3 +148,9 @@ trans.es = apps/web_theme/locale/es/LC_MESSAGES/django.po trans.pt = apps/web_theme/locale/pt/LC_MESSAGES/django.po trans.ru = apps/web_theme/locale/ru/LC_MESSAGES/django.po +[mayan-edms.apps-django_gpg] +source_file = apps/django_gpg/locale/en/LC_MESSAGES/django.po +source_lang = en +trans.es = apps/django_gpg/locale/es/LC_MESSAGES/django.po +trans.pt = apps/django_gpg/locale/pt/LC_MESSAGES/django.po +trans.ru = apps/django_gpg/locale/ru/LC_MESSAGES/django.po From 1a973723f24052a51b68161cda173da08c36f9b1 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 14:21:17 -0400 Subject: [PATCH 215/220] Fix typo --- apps/django_gpg/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/django_gpg/views.py b/apps/django_gpg/views.py index de07ade6fc..31bad2c530 100644 --- a/apps/django_gpg/views.py +++ b/apps/django_gpg/views.py @@ -205,7 +205,7 @@ def document_verify(request, document_pk): _(u'Signature status: %(widget)s %(text)s') % { 'widget': mark_safe(widget), 'text': signature_state['text'] - ), + }, ] if document.signature_state: From 42e622b8d0cdb38aed075b6b3a95b1603da89cf8 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 14:41:05 -0400 Subject: [PATCH 216/220] Update requirements to include new django-compressor version --- requirements/development.txt | 2 +- requirements/production.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/development.txt b/requirements/development.txt index d363fd07d9..251f11e5e0 100644 --- a/requirements/development.txt +++ b/requirements/development.txt @@ -16,6 +16,6 @@ pdfminer==20110227 APScheduler==2.0.2 Pillow==1.7.4 cssmin==0.1.4 -django-compressor==1.1 +django-compressor==1.1.1 -e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile djangorestframework==0.2.3 diff --git a/requirements/production.txt b/requirements/production.txt index e2654a82b1..c9b455a807 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -13,6 +13,6 @@ pdfminer==20110227 APScheduler==2.0.2 Pillow==1.7.4 cssmin==0.1.4 -django-compressor==1.1 +django-compressor==1.1.1 -e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile djangorestframework==0.2.3 From 068b24b4cc6e842f8bb37fcc0b59ff0747cb945b Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 14:41:28 -0400 Subject: [PATCH 217/220] Update documentation --- docs/changelog.rst | 9 +++++++++ docs/conf.py | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index ca07319a67..d06397f62c 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,3 +1,12 @@ +Version 0.10.1 +-------------- +* Upgraded django-compressor to version 1.1.1, run:: + + $ pip install --upgrade -r requirements/production.txt + + to upgrade + + Version 0.10 ------------ * Added a proper setup views for the document grouping functionality. diff --git a/docs/conf.py b/docs/conf.py index 45126bf88f..2b9ba3a5ff 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -48,7 +48,7 @@ copyright = u'2011, Roberto Rosario' # built documents. # # The short X.Y version. -version = '0.10' +version = '0.10.1' # The full version, including alpha/beta/rc tags. release = '0.10' From 52a8fca5d9d8ffd41813a31b032747066223905f Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 14:41:46 -0400 Subject: [PATCH 218/220] Bump version to 0.10.1 --- apps/main/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 0532245481..b1fc639174 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -21,7 +21,7 @@ admin_site = {'text': _(u'admin site'), 'view': 'admin:index', 'famfam': 'keyboa __version_info__ = { 'major': 0, 'minor': 10, - 'micro': 0, + 'micro': 1, 'releaselevel': 'final', 'serial': 0 } From d299ec86e3a1c9e008355f1d14fc9c90b69b1ac5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 5 Dec 2011 14:59:38 -0400 Subject: [PATCH 219/220] Fallback to the 'activo' theme during offline compression --- apps/web_theme/templates/web_theme_base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web_theme/templates/web_theme_base.html b/apps/web_theme/templates/web_theme_base.html index c55015fb83..56aa5294cb 100644 --- a/apps/web_theme/templates/web_theme_base.html +++ b/apps/web_theme/templates/web_theme_base.html @@ -15,7 +15,7 @@ {% compress css %} - +